
    i                         d dl Z d dlZd dlZd dl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mZmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZ d dlmZ d dlmZ  G d d          ZdS )    N)QueueEmpty)ThreadPoolExecutor)Logger)Lock)DictUnionAnyOptionalListCallable)SlackApiError)IntervalRunner)WebSocketMessageListenerSocketModeRequestListener)SocketModeRequest)SocketModeResponse)	WebClientc                      e Zd ZU eed<   eed<   eed<   eed<   eed<   ee	e
ed eee         gdf         f                  ed<   ee	eed egdf         f                  ed<   eed	<   eed
<   eed<   eed<   defdZdefdZddZddZd defdZddZdeddfdZde	eeef         ef         ddfdZdefdZd Z dededdfdZ!ddZ"dS )!BaseSocketModeClientlogger
web_client	app_tokenwss_urimessage_queueNmessage_listenerssocket_mode_request_listenersmessage_processormessage_workersclosedconnect_operation_lockreturnc                    	 | j                             | j                  }|d         S # t          $ r}|j        d         dk    rxt          |j        j                            dd                    }| j        	                    d| d           t          j        |           |                                 cY d }~S | j                            d	|            |d }~ww xY w)
N)r   urlerrorratelimitedzRetry-After30zRate limited. Retrying in z seconds...zFailed to retrieve WSS URL: )r   apps_connections_openr   r   responseintheadersgetr   infotimesleepissue_new_wss_urlr%   )selfr)   edelays       W/root/projects/butler/venv/lib/python3.11/site-packages/slack_sdk/socket_mode/client.pyr0   z&BaseSocketModeClient.issue_new_wss_url.   s    	<<t~<VVHE?" 	 	 	z'"m33AJ.22=$GGHH  !Pe!P!P!PQQQ
5!!!--//////// !!"D"D"DEEE	s!   '* 
C!BC7C!=CC!c                     dS )NF r1   s    r4   is_connectedz!BaseSocketModeClient.is_connected?   s    u    c                     t                      NNotImplementedErrorr7   s    r4   connectzBaseSocketModeClient.connectB       !###r9   c                     t                      r;   r<   r7   s    r4   
disconnectzBaseSocketModeClient.disconnectE   r?   r9   Fforcec                    	 | j                             dd           |s|                                 sa| j                            d           |                                 | _        |                                  | j                            d           | j                                          d S # | j                                          w xY w)NT   )blockingtimeoutzConnecting to a new endpoint...zConnected to a new endpoint...)	r!   acquirer8   r   r-   r0   r   r>   release)r1   rB   s     r4   connect_to_new_endpointz,BaseSocketModeClient.connect_to_new_endpointH   s    	2'//q/III CD--// C  !BCCC#5577  !ABBB'//11111D'//1111s   BB0 0Cc                 <    d| _         |                                  d S )NT)r    rA   r7   s    r4   closezBaseSocketModeClient.closeS   s    r9   messagec                     t                      r;   r<   r1   rL   s     r4   send_messagez!BaseSocketModeClient.send_messageW   r?   r9   r)   c                     t          |t                    r;|                     t          j        |                                                     d S |                     t          j        |                     d S r;   )
isinstancer   rO   jsondumpsto_dict)r1   r)   s     r4   send_socket_mode_responsez.BaseSocketModeClient.send_socket_mode_responseZ   si    h 233 	4dj)9)9););<<=====dj2233333r9   c                     | j                             |           | j        j        t          j        k    r7| j                            d| j                                          d           d S d S )Nz,A new message enqueued (current queue size: ))r   putr   levelloggingDEBUGdebugqsizerN   s     r4   enqueue_messagez$BaseSocketModeClient.enqueue_message`   sj    w''';--KjTM_MeMeMgMgjjjkkkkk .-r9   c                     	  j                             d           j        j        t          j        k    r5 j                            d j                                          d           i                     d          rt          j
                                      d          dk    r                     d	           d S  fd
} j                            |           d S d S # t          $ r Y d S w xY w)N   )rF   z(A message dequeued (current queue size: rW   {typerA   TrB   c                  4                                     d S r;   )run_message_listeners)rL   raw_messager1   s   r4   _run_message_listenerszDBaseSocketModeClient.process_message.<locals>._run_message_listenerss   s    227KHHHHHr9   )r   r,   r   rY   rZ   r[   r\   r]   
startswithrR   loadsrI   r   submitr   )r1   rg   rL   rf   s   ` @@r4   process_messagez$BaseSocketModeClient.process_messagee   s@   	,000;;K{ GM11!!"jTM_MeMeMgMg"j"j"jkkk& "))#.. 6"j55G;;v&&,6600t0<<<<<I I I I I I I (//0FGGGGG '&  	 	 	DD	s   CC2 !C2 2
D ?D rf   c           	         |                     d          |                     d          }}| j        j        t          j        k    r!| j                            d| d| d           	 |                     d          dk    rV|                     d           	 | j        j        t          j        k    r#| j                            d	| d| d           d S d S | j        D ]D}	  || ||           # t          $ r'}| j        	                    d
|            Y d }~=d }~ww xY wt          | j                  dk    rat          j        |          }|K| j        D ]C}	  || |           # t          $ r'}| j        	                    d|            Y d }~<d }~ww xY wn4# t          $ r'}| j        	                    d|            Y d }~nd }~ww xY w| j        j        t          j        k    r#| j                            d	| d| d           d S d S # | j        j        t          j        k    r"| j                            d	| d| d           w w xY w)Nrb   envelope_idz"Message processing started (type: z, envelope_id: rW   rA   Trc   z$Message processing completed (type: z"Failed to run a message listener: r   z"Failed to run a request listener: z!Failed to run message listeners: )r,   r   rY   rZ   r[   r\   rI   r   	Exception	exceptionlenr   r   	from_dict)r1   rL   rf   rb   rm   listenerr2   requests           r4   re   z*BaseSocketModeClient.run_message_listenersz   s   #KK//]1K1Kk;--Kf4ffXcfffggg	n{{6""l22,,4,888& { GM11!!"l"l"l^i"l"l"lmmmmm 21# !2 T TTHT7K8888  T T TK))*Rq*R*RSSSSSSSST 4566::+5g>>&$($F \ \\$HT73333( \ \ \ K112ZWX2Z2Z[[[[[[[[\ 	K 	K 	KK!!"Ia"I"IJJJJJJJJ	K { GM11!!"l"l"l^i"l"l"lmmmmm 21t{ GM11!!"l"l"l^i"l"l"lmmmm 2s   '/F 	F  C.-F .
D8DF D:F E'&F '
F1FF FF H 
G&GH GH >Ic                     | j         sS	 |                                  n4# t          $ r'}| j                            d|            Y d }~nd }~ww xY w| j         Qd S d S )NzFailed to process a message: )r    rk   rn   r   ro   )r1   r2   s     r4   process_messagesz%BaseSocketModeClient.process_messages   s    + 	KK$$&&&& K K K%%&Ia&I&IJJJJJJJJK + 	K 	K 	K 	K 	Ks    
AA

A)r"   N)F)#__name__
__module____qualname__r   __annotations__r   strr   r   r	   r   r   dictr   r   r   r   r   boolr   r0   r8   r>   rA   rI   rK   rO   r   r
   r   rU   r^   rk   re   ru   r6   r9   r4   r   r      sZ        NNNNNNLLL$,dHSMBDHIK	
    $(%,.?@$FGI	
$    &%%%''''LLL    3    "d    $ $ $ $$ $ $ $	2 	2T 	2 	2 	2 	2   $C $D $ $ $ $4%S#XHZ8Z2[ 4`d 4 4 4 4ls l l l l
  *nT n n n n n n<K K K K K Kr9   r   ) rR   rZ   r.   queuer   r   concurrent.futures.threadr   r   	threadingr   typingr   r	   r
   r   r   r   slack_sdk.errorsr   %slack_sdk.socket_mode.interval_runnerr   slack_sdk.socket_mode.listenersr   r   slack_sdk.socket_mode.requestr   slack_sdk.socket_mode.responser   slack_sdk.webr   r   r6   r9   r4   <module>r      sh              8 8 8 8 8 8             = = = = = = = = = = = = = = = = * * * * * * @ @ @ @ @ @        < ; ; ; ; ; = = = = = = # # # # # #HK HK HK HK HK HK HK HK HK HKr9   