
    tf,                     H   d Z ddlZddlZddlZddlmZmZmZmZm	Z	 ddl
mZ ddlZddlmZ ddlmZ e	rddlmZ  ej&                  e      Z ej&                  edz         Z ej&                  ed	z         Z G d
 de      Z G d de      ZdedededefdZdededefdZy)z%Connection/Session management module.    N)	AwaitableCallableDictUnionTYPE_CHECKING)EventEmitter)connect)NetworkError)Optionalz.Connectionz.CDPSessionc            	            e Zd ZdZ	 ddedej                  deddf fdZe	defd       Z
dd	Zd
ededdfdZddededefdZd
eddfdZd
eddfdZdeg df   ddfdZdeddfdZddZddZdeddfdZ xZS )
ConnectionzConnection management class.urlloopdelayreturnNc                 j   t         |           || _        d| _        t	               | _        |dz  | _        || _        t	               | _        |  d| _	        t        | j                  d| j                  dd      | _        | j                  j                  | j                               | _        d| _        y)zMake connection.

        :arg str url: WebSocket url to connect devtool.
        :arg int delay: delay to wait before processing received messages.
        r   i  FN)max_sizer   ping_intervalping_timeout)super__init___url_lastIddict
_callbacks_delay_loop	_sessions
_connected
ws_connect_wscreate_task
_recv_loop	_recv_fut_closeCallback)selfr   r   r   	__class__s       ^/var/www/html/software/conda/envs/higlass/lib/python3.12/site-packages/pyppeteer/connection.pyr   zConnection.__init__   s     		59Vdl
04dii$TZZW[jno//0AB<@    c                     | j                   S )zGet connected WebSocket url.)r   r&   s    r(   r   zConnection.url0   s     yyr)   c                 l  K   | j                   4 d {   }d| _        || _        | j                  rh	 | j                  j                          d {   }|r| j	                  |       d {    t        j                  d       d {    | j                  rhd d d       d {    | j                  r*| j                  j                  | j                                y y 7 7 7 y# t
        j                  t        f$ r t        j                  d       Y }w xY w7 7 w# 1 d {  7  sw Y   xY ww)NTzconnection closedr   )r!   r   
connectionrecv_on_message
websocketsConnectionClosedConnectionResetErrorloggerinfoasynciosleepr   r"   dispose)r&   r-   resps      r(   r#   zConnection._recv_loop5   s    88 	' 	'z"DO(DO//!%!5!5!77D"..t444 mmA&&& //	' 	' ??JJ""4<<>2 	'
 84"335IJ KK 34 '	' 	' 	' 	's   D4C!D4DC'C#C'+C%,C'0DD	DD4%D&<D4#C'%C''.DDDDD4D1%D(&D1-D4msgcallback_idc                   K   | j                   s4t        j                  | j                         d {    | j                   s4	 | j                  j                  |       d {    y 7 67 # t        j                  $ rt t        j                  d       | j                  j                  |d       }|r>|j                         s,|j                  d        | j                          d {  7   Y y Y y Y y w xY ww)Nzconnection unexpectedly closed)r   r5   r6   r   r-   sendr0   r1   r3   errorr   getdone
set_resultr7   )r&   r9   r:   callbacks       r(   _async_sendzConnection._async_sendE   s     //--,,, //	%//&&s+++ -+** 	%LL9:**;=H##D)lln$$ !0x	%sR   /C6A(C6A, "A*#A, 'C6*A, ,A:C3&C)'C3,C62C33C6methodparamsc                    | j                   r| j                  st        d      |
t               }| xj                   dz  c_         | j                   }t	        j
                  t        |||            }t        j                  d|        | j                  j                  | j                  ||             | j                  j                         }|| j                  |<   t               |_        ||_        |S )z Send message via the connection.zConnection is closed   idrC   rD   SEND: )r   r   ConnectionErrorr   jsondumpslogger_connectiondebugr   r"   rB   create_futurer   r
   r=   rC   )r&   rC   rD   _idr9   rA   s         r(   r<   zConnection.sendQ   s     <<!"899>VFlljj
 
 	&/

t//S9:::++-'$0N%r)   c                    | j                   j                  |j                  dd            }|j                  d      r1|j                  t	        |j
                  |j                  |             y |j                  |j                  d             y )NrH   r=   result)r   popr>   set_exception_createProtocolErrorr=   rC   r@   )r&   r9   rA   s      r(   _on_responsezConnection._on_responseg   sm    ??&&swwtR'89777""$NNOO  12r)   c                    |j                  di       }|j                  dd      }|j                  d      }|dk(  r?| j                  j                  |      }|r!|j                  |j                  d             y y |dk(  r<| j                  j                  |      }|r|j                          | j                  |= y y | j	                  ||       y )NrD   rC    	sessionId Target.receivedMessageFromTargetmessagezTarget.detachedFromTarget)r>   r   r/   
_on_closedemit)r&   r9   rD   rC   rZ   sessions         r(   	_on_queryzConnection._on_queryt   s    2&2&JJ{+	77nn((3G##FJJy$9: 22nn((3G""$NN9-  IIff%r)   rA   c                     || _         y)zSet closed callback.N)r%   )r&   rA   s     r(   setClosedCallbackzConnection.setClosedCallback   s
    &r)   r\   c                 8  K   t        j                  | j                         d {    t        j	                  d|        t        j                  |      }|j                  d      | j                  v r| j                  |       y | j                  |       y 7 rw)NRECV: rH   )r5   r6   r   rM   rN   rK   loadsr>   r   rW   r`   )r&   r\   r9   s      r(   r/   zConnection._on_message   sr     mmDKK(((&	 23jj!774=DOO+c"NN3 	)s   #BBA3Bc           	        K   | j                   r| j                          d | _         | j                  j                         D ]5  }|j                  t	        |j
                  d|j                   d             7 | j                  j                          | j                  j                         D ]  }|j                           | j                  j                          t        | d      r"| j                  j                          d {    | j                  j                         s| j                  j                          y y 7 :w)NProtocol error : Target closed.r-   )r%   r   valuesrU   _rewriteErrorr=   rC   clearr   r]   hasattrr-   closer$   r?   cancel)r&   cbr_   s      r(   	_on_closezConnection._on_close   s    !"&D//((* 	B]!")),<= 	
 	~~,,. 	!G 	! 4&//'')))~~""$NN!!# % *s   DED?;Ec                 N   K   d| _         | j                          d{    y7 w)zClose all connection.FN)r   rp   r+   s    r(   r7   zConnection.dispose   s     nns   %#%
targetInfo
CDPSessionc                    K   | j                  dd|d   i       d{   }|j                  d      }t        | |d   || j                        }|| j                  |<   |S 7 Aw)zCreate new session.zTarget.attachToTargettargetIdNrZ   type)r<   r>   rs   r   r   )r&   rr   r8   rZ   r_   s        r(   createSessionzConnection.createSession   sj     YY#J/0
 
 HH[)	T:f#5y$**M$+y!
s   A!AAA!)r   r   NN)__name__
__module____qualname____doc__strr5   AbstractEventLoopintr   propertyr   r#   rB   r   r   r<   rW   r`   r   rb   r/   rp   r7   r   rw   __classcell__r'   s   @r(   r   r      s    &  AC Aw'@'@ AA$(A( S  3 
%S 
%s 
%t 
%3  	 ,3 3 3&T &d & '(2t8*< ' '     $,
	d 	| 	r)   r   c            
            e Zd ZdZdeed f   dededej                  ddf
 fdZ	dd	ed
e
defdZdeddfdZddZddZdededd fdZ xZS )rs   a|  Chrome Devtools Protocol Session.

    The :class:`CDPSession` instances are used to talk raw Chrome Devtools
    Protocol:

    * protocol methods can be called with :meth:`send` method.
    * protocol events can be subscribed to with :meth:`on` method.

    Documentation on DevTools Protocol can be found
    `here <https://chromedevtools.github.io/devtools-protocol/>`__.
    r-   
targetTyperZ   r   r   Nc                     t         |           d| _        i | _        || _        || _        || _        t               | _        || _	        y)zMake new session.r   N)
r   r   r   r   _connection_targetType
_sessionIdr   r   r   )r&   r-   r   rZ   r   r'   s        r(   r   zCDPSession.__init__   sE     	571;%#04
r)   rC   rD   c                    | j                   st        d| d| j                   d      | xj                  dz  c_        | j                  }t	        j
                  t        |||            }t        j                  d|        | j                  j                         }|| j                  |<   t               |_        ||_        	 | j                   j                  d| j                  |d       |S # t         $ rg}|| j                  v rN| j                  |   }| j                  |= |j#                  t%        |j                  |j&                  d	                Y d
}~|S d
}~ww xY w)zSend message to the connected session.

        :arg str method: Protocol method name.
        :arg dict params: Optional method parameters.
        zProtocol Error (z#): Session closed. Most likely the z has been closed.rF   rG   rI   zTarget.sendMessageToTarget)rZ   r\   r   N)r   r
   r   r   rK   rL   r   logger_sessionrN   r   rO   r   r=   rC   r<   r   	ExceptionrU   rj   args)r&   rC   rD   rP   r9   rA   e	_callbacks           r(   r<   zCDPSession.send   sF    "6(*M##$$57  	lljjVFCDvcU^,::++-'$0N%	!!">!__A    	doo% OOC0	OOC(''OOFF1I)  	s   )C. .	E7AEEr9   c                    t         j                  d|        t        j                  |      }|j	                  d      }|r| j
                  j	                  |      }|r| j
                  |= |j	                  d      r1|j                  t        |j                  |j                  |             y |j	                  d      }|r#|j                         s|j                  |       y y y y |j	                  di       }|j	                  d      dk(  rM| j                  j	                  |j	                  d            }|r|j                  |j	                  d	             n_|j	                  d      d
k(  rK|j	                  d      }| j                  j	                  |      }|r|j                          | j                  |= | j                  |j	                  d      |j	                  d             y )Nrd   rH   r=   rS   rD   rC   r[   rZ   r\   Target.detachFromTarget)r   rN   rK   re   r>   r   rU   rV   r=   rC   r?   r@   r   r/   r]   r^   )	r&   r9   objrP   rA   rS   rD   r_   rZ   s	            r(   r/   zCDPSession._on_message   s   vcU^,jjoggdm**3/HOOC(777#**+?  ,  !WWX.F ++F3 )8x  WWXr*Fwwx $FF..,,VZZ-DE''

9(=>"&??"JJ{3	..,,Y7&&(y1IIcggh'):;r)   c                    K   | j                   st        d      | j                   j                  dd| j                  i       d{    y7 w)zDetach session from target.

        Once detached, session won't emit any events and can't be used to send
        messages.
        zConnection already closed.r   rZ   N)r   r
   r<   r   r+   s    r(   detachzCDPSession.detach  sM      ;<<##$=%0$//$BD 	D 	Ds   AAAAc           	          | j                   j                         D ]5  }|j                  t        |j                  d|j
                   d             7 | j                   j                          d | _        y )Nrg   rh   )r   ri   rU   rj   r=   rC   rk   r   )r&   ro   s     r(   r]   zCDPSession._on_closed!  se    //((* 	B]!")),<= 	
 	r)   c                 T    t        | ||| j                        }|| j                  |<   |S ry   )rs   r   r   )r&   r   rZ   r_   s       r(   _createSessionzCDPSession._createSession*  s)    T:y$**E$+y!r)   ry   rx   )rz   r{   r|   r}   r   r   r~   r5   r   r   r   r   r<   r/   r   r]   r   r   r   s   @r(   rs   rs      s    
5\)A#B  -00059"3 " "	 "H<s <t <@	D    r)   rs   r=   rC   r   r   c                 `    d| d|d   d    }d|d   v r|d|d   d    z  }t        | |      S )NzProtocol error (z): r=   r\   data )rj   )r=   rC   r   r\   s       r(   rV   rV   0  sR     CL,C+DEGWQs7|F+,--((r)   r\   c                     |f| _         | S ry   )r   )r=   r\   s     r(   rj   rj   8  s    EJLr)   )r}   r5   rK   loggingtypingr   r   r   r   r   pyeer   r0   websockets.legacy.clientr	   r    pyppeteer.errorsr
   r   	getLoggerrz   r3   rM   r   r   rs   r   r~   rV   rj    r)   r(   <module>r      s    ,    B B   : )			8	$%G%%h&>? """8m#;<\ \~u up)	 )3 )T )') S Y r)   