o
    N,h                     @   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                   @   sd   e 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 )WebSocketConnectioni'  c                    s   t |ttfr|dk rtdt |ttfr|dk rtd| _| _| _i  _d  _d _	i  _
d _     fdd d S )Nr   z!timeout must be a positive numberz"interval must be a positive numberFc                      s    j S N_started selfr   z/var/www/www-root/data/www/bot.pdev.uz/venv/lib/python3.10/site-packages/selenium/webdriver/remote/websocket_connection.py<lambda>3   s    z.WebSocketConnection.__init__.<locals>.<lambda>)
isinstanceintfloatr   urlresponse_wait_timeoutresponse_wait_interval	callbacks
session_id_id	_messagesr
   	_start_ws_wait_until)r   r   timeoutintervalr   r   r   __init__"   s   zWebSocketConnection.__init__c                 C   s*   | j j| jd | j  d| _d | _d S )N)r   F)
_ws_threadjoinr   _wscloser
   r   r   r   r   r"   5   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   G   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   execute;   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   	_callbackZ   s   z3WebSocketConnection.add_callback.<locals>._callback)event_classr   appendr$   )r   r>   r=   
event_namer?   r   r<   r   add_callbackU   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_idrB   r=   r   r   r   remove_callbackb   s   
z#WebSocketConnection.remove_callbackc                 C   s   t |S r   )next)r   r4   r   r   r   r+   j   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!)r1   r   StopIterationvalue)r   r*   r4   _exitr   r   r   r3   m   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_openu   s   
z.WebSocketConnection._start_ws.<locals>.on_openc                    s     | d S r   )_process_message)rL   r)   r   r   r   
on_messagex   s   z1WebSocketConnection._start_ws.<locals>.on_messagec                 S   s   t d|  |   d S )Nzerror: )r.   r/   r"   )rL   r(   r   r   r   on_error{   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)rS   )r   
startswithr!   run_foreverr   r   r   r   r   
run_socket   s   z1WebSocketConnection._start_ws.<locals>.run_socket)rM   rO   rP   )target)r   r   r!   r   r   start)r   rM   rO   rP   rV   r   r   r   r   t   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$   methodr;   )rW   args)
r,   loadsr.   r/   r0   r   r   getr   rX   )r   r)   r;   r=   r   r   r   rN      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   r   r   )r   	conditionr   r   r*   r   r   r   r      s   zWebSocketConnection._wait_untilN)__name__
__module____qualname__r0   r   r"   r9   rC   onrF   r+   r3   r   rN   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   
