a
    RIht                     @   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   h/var/www/html/venv_bot_3.9/lib/python3.9/site-packages/selenium/webdriver/remote/websocket_connection.py<lambda>.       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r2j|d< t|}td| d j  j	| j  
 fdd j }d|v r|d }d|v r| d	|d  }t|qt|n|d
 }||S d S )N   idZ	sessionIdz-> c                      s
    j v S r	   )r   r   Z
current_idr   r   r   r   B   r   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   r9   r8   
event_namer:   r   r7   r   add_callbackP   s    

z WebSocketConnection.add_callbackc                 C   sF   |j }|| jv rB| j| D ]&}t||kr| j| |  d S qd S r	   )r;   r   r!   remove)r   r9   Zcallback_idr=   r8   r   r   r   remove_callback]   s    
z#WebSocketConnection.remove_callbackc                 C   s   t |S r	   )next)r   r/   r   r   r   r&   e   s    z&WebSocketConnection._serialize_commandc              
   C   sF   z| |}tdW n* ty@ } z|jW  Y d }~S d }~0 0 d S )Nz<The command's generator function did not exit when expected!)r,   r   StopIterationvalue)r   r%   r/   _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)rF   r$   r   r   r   
on_messages   s    z1WebSocketConnection._start_ws.<locals>.on_messagec                 S   s   t d|  |   d S )Nzerror: )r)   r*   r   )rF   r#   r   r   r   on_errorv   s    z/WebSocketConnection._start_ws.<locals>.on_errorc                      s4    j dr" jjdtidd n jjdd d S )Nzwss://	cert_reqsT)Zssloptsuppress_origin)rL   )r   
startswithr   run_foreverr   r   r   r   r   
run_socketz   s    z1WebSocketConnection._start_ws.<locals>.run_socket)rG   rI   rJ   )target)r   r   r   r   r   start)r   rG   rI   rJ   rO   r   r   r   r   o   s    zWebSocketConnection._start_wsc                 C   sx   t |}td| d | j  d|v r:|| j|d < d|v rt|d }| j|d g D ]}t||fd	  q\d S )Nz<- r!   methodr6   )rP   args)
r'   loadsr)   r*   r+   r   r   getr   rQ   )r   r$   r6   r8   r   r   r   rH      s    
z$WebSocketConnection._process_messagec                 C   s8   | j }| j}|dkr4| }|r"|S ||8 }t| qd S )Nr   )r   _response_wait_intervalr   )r   	conditionr   intervalr%   r   r   r   r      s    zWebSocketConnection._wait_untilN)__name__
__module____qualname__r   rV   r+   r   r   r4   r>   onr@   r&   r.   r   rH   r   r   r   r   r   r      s   r   )r'   loggingsslr   	threadingr   timer   Z	websocketr   Zselenium.commonr   	getLoggerrY   r)   r   r   r   r   r   <module>   s   
