o
    Vhfk                     @   s   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 dZdS )    N)QueueEmpty)ThreadPoolExecutor)Logger)Lock)DictUnionAnyOptionalListCallable)SlackApiError)IntervalRunner)WebSocketMessageListenerSocketModeRequestListener)SocketModeRequest)SocketModeResponse)	WebClientc                   @   sP  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dZdefddZd+ddZd+ddZd,defddZd+ddZdeddfddZde	eeef ef ddfd d!Zdefd"d#Zd$d% Z ded&eddfd'd(Z!d+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              
   C   s   z| j j| jd}|d W S  tyN } z5|jd dkr?t|jjdd}| j	d| d t
| |  W  Y d }~S | jd	|  |d }~w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delay r1   a/var/www/html/status_management/venv/lib/python3.10/site-packages/slack_sdk/socket_mode/client.pyr-   .   s   

z&BaseSocketModeClient.issue_new_wss_urlc                 C   s   dS )NFr1   r.   r1   r1   r2   is_connected?   s   z!BaseSocketModeClient.is_connectedc                 C      t  NNotImplementedErrorr3   r1   r1   r2   connectB      zBaseSocketModeClient.connectc                 C   r5   r6   r7   r3   r1   r1   r2   
disconnectE   r:   zBaseSocketModeClient.disconnectFforcec                 C   st   z3| j jddd |s|  s,| jd |  | _|   | jd W | j   d S W | j   d S | j   w )NT   )blockingtimeoutzConnecting to a new endpoint...zConnected to a new endpoint...)	r   acquirer4   r   r*   r-   r   r9   release)r.   r<   r1   r1   r2   connect_to_new_endpointH   s   
z,BaseSocketModeClient.connect_to_new_endpointc                 C   s   d| _ |   d S )NT)r   r;   r3   r1   r1   r2   closeS   s   zBaseSocketModeClient.closemessagec                 C   r5   r6   r7   r.   rD   r1   r1   r2   send_messageW   r:   z!BaseSocketModeClient.send_messager&   c                 C   s6   t |tr| t|  d S | t| d S r6   )
isinstancer   rF   jsondumpsto_dict)r.   r&   r1   r1   r2   send_socket_mode_responseZ   s   
z.BaseSocketModeClient.send_socket_mode_responsec                 C   s<   | j | | jjtjkr| jd| j   d d S d S )Nz,A new message enqueued (current queue size: ))r   putr   levelloggingDEBUGdebugqsizerE   r1   r1   r2   enqueue_message`   s   z$BaseSocketModeClient.enqueue_messagec                    s   zOj jddjjtjkrjdj   d d urMi  dr,t	
  ddkr<jdd	 W d S  fd
d}j| W d S W d S  tyY   Y d S w )N   )r?   z(A message dequeued (current queue size: rL   {typer;   Tr<   c                      s      d S r6   )run_message_listenersr1   rD   raw_messager.   r1   r2   _run_message_listenerss   s   zDBaseSocketModeClient.process_message.<locals>._run_message_listeners)r   r)   r   rN   rO   rP   rQ   rR   
startswithrH   loadsrB   r   submitr   )r.   r[   r1   rY   r2   process_messagee   s    

z$BaseSocketModeClient.process_messagerZ   c                 C   s  | d| d}}| jjtjkr| jd| d| d zz| ddkrH| jdd W W | jjtjkrF| jd	| d| d d S d S | jD ]%}z|| || W qK typ } z| j	d
|  W Y d }~qKd }~ww t
| jdkrt|}|d ur| jD ]$}z|| | W q ty } z| j	d|  W Y d }~qd }~ww W n ty } z| j	d|  W Y d }~nd }~ww 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 )NrV   envelope_idz"Message processing started (type: z, envelope_id: rL   r;   TrW   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   rN   rO   rP   rQ   rB   r   	Exception	exceptionlenr   r   	from_dict)r.   rD   rZ   rV   r`   listenerr/   requestr1   r1   r2   rX   z   sL   


z*BaseSocketModeClient.run_message_listenersc              
   C   sX   | j s*z|   W n ty$ } z| jd|  W Y d }~nd }~ww | j rd S d S )NzFailed to process a message: )r   r_   ra   r   rb   )r.   r/   r1   r1   r2   process_messages   s   z%BaseSocketModeClient.process_messages)r    N)F)#__name__
__module____qualname__r   __annotations__r   strr   r   r   r   r   dictr
   r   r   r   r   boolr   r-   r4   r9   r;   rB   rC   rF   r   r	   r   rK   rS   r_   rX   rg   r1   r1   r1   r2   r      sH   
 


"r   ) rH   rO   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   r1   r1   r1   r2   <module>   s     