
    i/                     (   d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
mZmZmZ d dlmZ d dlmZmZmZmZmZ d dlmZ d dlmZ d d	lmZ d
dlmZmZmZm Z  d
dl!m"Z" d dl#m$Z$ d dl%m&Z& d dl'm(Z) d dl*m+Z, d dl-m.Z. ddl/m0Z0  G d d          Z1dS )    N)HTTPResponse)
SSLContext)DictUnionSequenceOptionalListAny)	HTTPError)RequesturlopenOpenerDirectorProxyHandlerHTTPSHandler)SlackRequestError)
Attachment)Block   )_build_body_build_request_headers_debug_log_responseget_user_agent)WebhookResponse)default_retry_handlers)RetryHandler)HttpRequest)HttpResponse)
RetryState   )load_http_proxy_from_envc                      e Zd ZU eed<   eed<   ee         ed<   ee         ed<   eeef         ed<   e	j
        ed<   ee         ed<   	 	 	 	 	 	 	 	 ddededee         dee         deeeef                  d
ee         dee         dee	j
                 deee                  fdZd	d	d	d	d	d	d	d	d	d	d
dee         deeeeeef         ef                           deeeeeef         ef                           dee         dee         dee         dee         dee         deeeef                  deeeef                  defdZd deeef         deeeef                  defdZdeeef         deeef         defdZdedefdZd	S )!WebhookClienturltimeoutsslproxydefault_headersloggerretry_handlers   Nuser_agent_prefixuser_agent_suffixc
                    || _         || _        || _        || _        |r|ni | _        t          ||          | j        d<   ||nt          j        t                    | _	        |	|	nt                      | _        | j        *t          | j                                                  dk    r!t          | j	                  }
|
	|
| _        dS dS dS )a  API client for Incoming Webhooks and `response_url`

        https://docs.slack.dev/messaging/sending-messages-using-incoming-webhooks/

        Args:
            url: Complete URL to send data (e.g., `https://hooks.slack.com/XXX`)
            timeout: Request timeout (in seconds)
            ssl: `ssl.SSLContext` to use for requests
            proxy: Proxy URL (e.g., `localhost:9000`, `http://localhost:9000`)
            default_headers: Request headers to add to all requests
            user_agent_prefix: Prefix for User-Agent header value
            user_agent_suffix: Suffix for User-Agent header value
            logger: Custom logger
            retry_handlers: Retry handlers
        z
User-AgentNr   )r#   r$   r%   r&   r'   r   logging	getLogger__name__r(   r   r)   lenstripr    )selfr#   r$   r%   r&   r'   r+   r,   r(   r)   env_variables              S/root/projects/butler/venv/lib/python3.11/site-packages/slack_sdk/webhook/client.py__init__zWebhookClient.__init__%   s    6 
2AIr-;<MO`-a-a\* & 2ff8I(8S8S0>0JnnPfPhPh:TZ%5%5%7%7!8!8A!=!=3DK@@L')


 (' ">!=    )
textattachmentsblocksresponse_typereplace_originaldelete_originalunfurl_linksunfurl_mediametadataheadersr8   r9   r:   r;   r<   r=   r>   r?   r@   rA   returnc       
         D    |                      |||||||||	d	|
          S )a  Performs a Slack API request and returns the result.

        Args:
            text: The text message
                (even when having blocks, setting this as well is recommended as it works as fallback)
            attachments: A collection of attachments
            blocks: A collection of Block Kit UI components
            response_type: The type of message (either 'in_channel' or 'ephemeral')
            replace_original: True if you use this option for response_url requests
            delete_original: True if you use this option for response_url requests
            unfurl_links: Option to indicate whether text url should unfurl
            unfurl_media: Option to indicate whether media url should unfurl
            metadata: Metadata attached to the message
            headers: Request headers to append only for this request

        Returns:
            Webhook response
        )	r8   r9   r:   r;   r<   r=   r>   r?   r@   bodyrA   )	send_dict)r3   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   s              r5   sendzWebhookClient.sendN   sL    @ ~~ * !.$4#2 , ,$
 
   
 
 	
r7   rE   c                 p    |                      t          |          t          | j        |                    S )aY  Performs a Slack API request and returns the result.

        Args:
            body: JSON data structure (it's still a dict at this point),
                if you give this argument, body_params and files will be skipped
            headers: Request headers to append only for this request
        Returns:
            Webhook response
        rD   )_perform_http_requestr   r   r'   )r3   rE   rA   s      r5   rF   zWebhookClient.send_dict   s<     ))T""*4+?II * 
 
 	
r7   c                   t          j        |          }d|d<   | j        j        t          j        k    r(| j                            d| j         d| d|            | j        }t          d||	                    d          |          }d }t          d	          }t                      }d
}	|	dk     rU|	dz  }	d|_        	 |                     ||          }|S # t          $ r}
|
j                                        pd}|
                                                    |          }t'          |
j                                                  }t+          ||
j        ||          }|
j        dk    rNd|j        vrd|j        v r|j        d         |j        d<   d|j        vrd|j        v r|j        d         |j        d<   t/          | j        |           t1          j        |          }t5          |
j        d |
j                                        D             ||	                    d          nd           }| j        D ]}|                    ||||
          rw| j        j        t          j        k    rB| j                            dt=          |          j         d|j          d|j!         d|
            |"                    ||||
            n|j        du r|cY d }
~
S Y d }
~
nd }
~
wt          $ r}|}| j        #                    d|            t1          j        |          }| j        D ]}|                    ||d |          r| j        j        t          j        k    rB| j                            dt=          |          j         d|j          d|j!         d|            |"                    ||d |           | j                            d|j          d|j!                     n|j        du r|Y d }~nd }~ww xY w|	dk     U||S |)Nzapplication/json;charset=utf-8zContent-TypezSending a request - url: z, body: z, headers: POSTutf-8)methodr#   datarA   zundefined internal errorr   d   r   Fr#   status_coderE   rA   i  zretry-afterzRetry-Afterc                     i | ]	\  }}||g
S  rS   ).0kvs      r5   
<dictcomp>z7WebhookClient._perform_http_request.<locals>.<dictcomp>   s     BBB1QBBBr7   )rQ   rA   rN   )staterequestresponseerrorzA retry handler found: z for  z - z.Failed to send a request to Slack API server: z!Going to retry the same request: )$jsondumpsr(   levelr.   DEBUGdebugr#   r   encode	Exceptionr   next_attempt_requested_perform_http_request_internalr   rA   get_content_charsetreaddecodedictitemsr   coder   RetryHttpRequestfrom_urllib_http_requestRetryHttpResponser)   	can_retryinfotyper0   rM   full_urlprepare_for_next_attemptr[   )r3   rE   rA   raw_bodyr#   reqresp
last_errorretry_statecounter_for_safetyecharsetresponse_bodyresponse_headersretry_requestretry_responsehandlererrs                     r5   rI   z#WebhookClient._perform_http_request   s   :d##"B;--Kj$(jjHjjahjjkkkh V8??73K3KU\]]]9::
 ll 3&&!#16K.Q::3DD /  /  / )7799DW%&VVXX__W%=%=#'	(9(9#:#: & !&,	   6S==$DL88]dl=Z=Z6:l=6Q]3$DL88]dl=Z=Z6:l=6Q]3#DK666 !1 I# N N!2 !BB	0A0ABBB:G:S--g666Y]" " "
  $2  G(() -!/	 )     ;,== K,, x$w--:P x xWZWa x xdgdp x xuv x x    88"-$1%3"#	 9    !$ 5>>KKKKKK ?>>>>     
!!"XSV"X"XYYY !1 I# N N#2  G(() -!%!	 )     ;,== K,, z$w--:P z zWZWa z zdgdp z zux z z    88"-$1%)"%	 9    (()hSZ)h)hZ]Zf)h)hiii#& 5>>I ?>>>>5w !3&&p Ks,   >C O<!G5K"O<"O<0DO77O<ru   c                    d }|                                                     d          r| j        t          | j        t                    rNt
          j                            t          | j        | j        d          t          | j
                            }n+t          d| j         d          nt          d|           d }|r|                    || j                  }nt          || j
        | j                  }|j                                        pd	}|                                                    |          }t'          ||j        ||j        
          }t+          | j        |           |S )Nhttp)r   https)contextzInvalid proxy detected: z must be a str valuezInvalid URL detected: )r$   )r   r$   rL   rP   )lower
startswithr&   
isinstancestrurllibrY   build_openerr   r   r%   r   openr$   r   rA   rf   rg   rh   r   statusr   r(   )r3   r#   ru   opener	http_respr{   r|   rv   s           r5   re   z,WebhookClient._perform_http_request_internal   ss   +/99;;!!&)) 
	Dz%dj#.. i#^88$dj4:%N%NOO$TX666 FF
 ,,gtz,g,g,ghhh & $$BS$B$BCCC,0	 	MC>>IITXt|LLLI (<<>>I'&^^--44W==!(%	
 
 
 	DK...r7   )r*   NNNNNNN)N)r0   
__module____qualname__r   __annotations__intr   r   r   r.   Loggerr	   r   r6   r   r   r
   r   r   boolr   rG   rF   rI   r   re   rS   r7   r5   r"   r"      s        	HHHLLL	*	C=#s(^###N&&&&
 $(#48+/+/+/7;'* '*'* '* j!	'*
 }'* "$sCx.1'* $C='* $C='* ('* !l!34'* '* '* '*X #MQCG'++/*.'+'+-1,0/
 /
 /
 sm/
 huT#s(^Z-G'HIJ	/

 %S#X(=">?@/
  }/
 #4./
 "$/
 tn/
 tn/
 4S>*/
 $sCx.)/
 
/
 /
 /
 /
b
 
d38n 
xS#X7O 
[j 
 
 
 
jT#s(^ jd3PS8n jYh j j j jX# G      r7   r"   )2r]   r.   r   http.clientr   r%   r   typingr   r   r   r   r	   r
   urllib.errorr   urllib.requestr   r   r   r   r   slack_sdk.errorsr   slack_sdk.models.attachmentsr   slack_sdk.models.blocksr   internal_utilsr   r   r   r   webhook_responser   slack_sdk.http_retryr   slack_sdk.http_retry.handlerr   slack_sdk.http_retry.requestr   rl   slack_sdk.http_retry.responser   rn   slack_sdk.http_retry.stater   proxy_env_variable_loaderr    r"   rS   r7   r5   <module>r      s      $ $ $ $ $ $       = = = = = = = = = = = = = = = = " " " " " " W W W W W W W W W W W W W W . . . . . . 3 3 3 3 3 3 ) ) ) ) ) )            . - - - - - 7 7 7 7 7 7 5 5 5 5 5 5 H H H H H H K K K K K K 1 1 1 1 1 1 @ @ @ @ @ @{ { { { { { { { { {r7   