o
    5@Hht                     @   sh   d dl Z d dl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 eeZG dd dZdS )	    N)	CERT_NONE)Thread)sleep)WebSocketApp)WebDriverExceptionc                   @   sl   e Zd ZdZdZdZdd Zdd Zdd	 Zd
d Z	e	Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )WebSocketConnection   g?i'  c                    sB   i  _ d  _| _d _i  _d _     fdd d S )Nr   Fc                      s    j S N_started selfr   n/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/selenium/webdriver/remote/websocket_connection.py<lambda>.   s    z.WebSocketConnection.__init__.<locals>.<lambda>)	callbacks
session_idurl_id	_messagesr   	_start_ws_wait_until)r   r   r   r   r   __init__$   s   zWebSocketConnection.__init__c                 C   s*   | j j| jd | j  d| _d | _d S )N)timeoutF)
_ws_threadjoin_response_wait_timeout_wscloser   r   r   r   r   r   0   s   

zWebSocketConnection.closec                    s    j d7  _ |}j |d< jrj|d< t|}td| d j  j	| j  
 fdd j }d|v ra|d }d|v r]| d	|d  }t|t||d
 }||S )N   id	sessionIdz-> c                      s
    j v S r	   )r   r   
current_idr   r   r   r   B   s   
 z-WebSocketConnection.execute.<locals>.<lambda>errormessagez: result)r   _serialize_commandr   jsondumpsloggerdebug_max_log_message_sizer   sendr   r   popr   _deserialize_result)r   commandpayloaddataresponser$   	error_msgr&   r   r"   r   execute6   s&   



zWebSocketConnection.executec                    s@   j }|| jvrg | j|<  fdd}| j| | t|S )Nc                    s     |  d S r	   )	from_json)paramscallbackeventr   r   	_callbackU   s   z3WebSocketConnection.add_callback.<locals>._callback)event_classr   appendr    )r   r:   r9   
event_namer;   r   r8   r   add_callbackP   s   

z WebSocketConnection.add_callbackc                 C   sJ   |j }|| jv r!| j| D ]}t||kr | j| |  d S qd S d S r	   )r<   r   r    remove)r   r:   callback_idr>   r9   r   r   r   remove_callback]   s   
z#WebSocketConnection.remove_callbackc                 C   s   t |S r	   )next)r   r0   r   r   r   r'   e   s   z&WebSocketConnection._serialize_commandc              
   C   s>   z	| |}td ty } z	|jW  Y d }~S d }~ww )Nz<The command's generator function did not exit when expected!)r-   r   StopIterationvalue)r   r&   r0   _exitr   r   r   r/   h   s   
z'WebSocketConnection._deserialize_resultc                    sZ    fdd} fdd}dd } fdd}t  j|||d	 _t|d
 _ j  d S )Nc                    s
   d _ d S )NTr
   )wsr   r   r   on_openp   s   
z.WebSocketConnection._start_ws.<locals>.on_openc                    s     | d S r	   )_process_message)rH   r%   r   r   r   
on_messages   s   z1WebSocketConnection._start_ws.<locals>.on_messagec                 S   s   t d|  |   d S )Nzerror: )r*   r+   r   )rH   r$   r   r   r   on_errorv   s   z/WebSocketConnection._start_ws.<locals>.on_errorc                      s6    j dr jjdtidd d S  jjdd d S )Nzwss://	cert_reqsT)ssloptsuppress_origin)rO   )r   
startswithr   run_foreverr   r   r   r   r   
run_socketz   s   z1WebSocketConnection._start_ws.<locals>.run_socket)rI   rK   rL   )target)r   r   r   r   r   start)r   rI   rK   rL   rR   r   r   r   r   o   s   zWebSocketConnection._start_wsc                 C   s|   t |}td| d | j  d|v r|| j|d < d|v r:|d }| j|d g D ]}t||fd	  q.d S d S )Nz<- r    methodr7   )rS   args)
r(   loadsr*   r+   r,   r   r   getr   rT   )r   r%   r7   r9   r   r   r   rJ      s   
z$WebSocketConnection._process_messagec                 C   sB   | j }| j}|dkr| }|r|S ||8 }t| |dks
d S d S )Nr   )r   _response_wait_intervalr   )r   	conditionr   intervalr&   r   r   r   r      s   zWebSocketConnection._wait_untilN)__name__
__module____qualname__r   rY   r,   r   r   r5   r?   onrB   r'   r/   r   rJ   r   r   r   r   r   r      s    r   )r(   loggingsslr   	threadingr   timer   	websocketr   selenium.commonr   	getLoggerr\   r*   r   r   r   r   r   <module>   s   
