
    *GjL                        d Z ddlZddl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ZddlmZ ddlmZmZmZ dd	lmZ dd
lmZmZ ddlmZmZmZmZmZm Z m!Z!m"Z" ddl#m$Z$m%Z% ddl&m'Z' ddl(m)Z)m*Z*m+Z+m,Z,m-Z- ej.        dk    rddlm/Z/ nddl0m/Z/ ej.        dk    rddlZ1ddlm2Z2 n
ddl1Z1ddl0m2Z2  e/de3de
d                   Z4 ej5        dd           G d d                      Z6 e6dd          Z7 G d de	e4                   Z8dS )zWebSocket client for asyncio.    N)Callable)TracebackType)AnyGenericLiteralOptionalcastoverload   )WebSocketDataQueue)ClientErrorServerTimeoutErrorWSMessageTypeError)ClientResponse)calculate_timeout_when
set_result)WS_CLOSED_MESSAGEWS_CLOSING_MESSAGEWebSocketErrorWSCloseCode	WSMessageWSMessageDecodeTextWSMessageNoDecodeText	WSMsgType)_INTERNAL_RECEIVE_TYPESWebSocketWriter)	EofStream)DEFAULT_JSON_DECODERDEFAULT_JSON_ENCODERJSONBytesEncoderJSONDecoderJSONEncoder)      )TypeVar)r#      )Self_DecodeTextT)bound	covariantdefault)frozenslotsc                   n    e Zd Z ej        ee         d          Z ej        ee         d          ZdS )ClientWSTimeoutN)typer+   )	__name__
__module____qualname__attribr   float
ws_receivews_close     Y/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/aiohttp/client_ws.pyr/   r/   4   sB        huot<<<JtwHUOT:::HHHr:   r/   g      $@)r7   r8   c                      e Zd Zdddddedededz  ded	ed
edede	j
        dedz  dededdfdZdXdZdXdZdXdZdXdZdXdZdXdZdYdZdXdZdeddfdZdXdZdXdZedefd             Zededz  fd!            Zededz  fd"            Zedefd#            Zedefd$            ZdZd%ed&e de fd'Z!dedz  fd(Z"d[d*e#ddfd+Z$d[d*e#ddfd,Z%	 dZd*e#d-e&dedz  ddfd.Z'dZd/ededz  ddfd0Z(dZd/e#dedz  ddfd1Z)	 dZe*d2d/e dedz  d3e+ddfd4Z,	 dZd/e dedz  d3e-ddfd5Z.e/j0        d)d6d7ed*e#defd8Z1e2	 dZd9d:d	edz  de3fd;            Z4e2	 dZd9d<d	edz  de5fd=            Z4e2	 dZd9d>d	edz  de3e5z  fd?            Z4	 dZd	edz  de3e5z  fd@Z4e2ddAd9d:d	edz  defdB            Z6e2ddAd9d<d	edz  de#fdC            Z6e2ddAd9d>d	edz  dee#z  fdD            Z6ddAd	edz  dee#z  fdEZ6ddAd	edz  de#fdFZ7e2dGddHd9d:dIe8d	edz  de fdJ            Z9e2dGddHd9d<dIe:e#ge f         d	edz  de fdK            Z9e2dGddHd9d>dIe8e:e#ge f         z  d	edz  de fdL            Z9e;ddHdIe8e:e#ge f         z  d	edz  de fdMZ9de<fdNZ=e2d9d:de3fdO            Z>e2d9d<de5fdP            Z>e2d9d>de3e5z  fdQ            Z>de3e5z  fdRZ>de<fdSZ?dTe@e         dz  dUedz  dVeAdz  ddfdWZBdS )\ClientWebSocketResponseNr   F)	heartbeatcompressclient_notakeoverreaderwriterprotocolresponsetimeout	autocloseautopingloopr>   r?   r@   returnc	                   || _         |j        | _        || _        || _        || _        d| _        d| _        d | _        || _	        || _
        || _        |	| _        d | _        d| _        |	
|	dz  | _        d | _        || _        d| _        d | _        d | _        |
| _        || _        d | _        d| _        d | _        |                                  d S )NFg        g       @)	_response
connection_conn_writer_reader	_protocol_closed_closing_close_code_timeout
_autoclose	_autoping
_heartbeat_heartbeat_cb_heartbeat_when_pong_heartbeat_pong_response_cb_loop_waiting_close_wait
_exception	_compress_client_notakeover
_ping_task_need_heartbeat_reset_heartbeat_reset_handle_reset_heartbeat)selfrA   rB   rC   rD   rE   rF   rG   rH   r>   r?   r@   s               r;   __init__z ClientWebSocketResponse.__init__>   s     "(
!'+#!#9=&) #,s?D =A
#8<04!"359%*">B$r:   c                 *   |                                   | j         | j                                         d | _        d| _        | j         | j                                         d | _        | j        "| j                                         d | _        d S d S NF)_cancel_pong_response_cbrd   cancelrc   rX   rb   rf   s    r;   _cancel_heartbeatz)ClientWebSocketResponse._cancel_heartbeatk   s    %%''''3(//111+/D(%*")%%'''!%D?&O""$$$"DOOO '&r:   c                 X    | j         "| j                                          d | _         d S d S N)r[   rk   rl   s    r;   rj   z0ClientWebSocketResponse._cancel_pong_response_cbx   s6    !-"))+++%)D""" .-r:   c                     | j         | j        rd S | j        }|J d| _        |                    | j                  | _        d S )NT)rW   rc   r\   	call_soon_flush_heartbeat_resetrd   )rf   rH   s     r;   _on_data_receivedz)ClientWebSocketResponse._on_data_received}   sQ    ?"d&@"Fz &*"'+~~d6Q'R'R$$$r:   c                 \    d | _         | j        sd S |                                  d| _        d S ri   )rd   rc   re   rl   s    r;   rr   z.ClientWebSocketResponse._flush_heartbeat_reset   s:    '+$) 	F%*"""r:   c                 8   | j         d S |                                  | j        }|J | j        }||j        j        nd}|                                }t          || j         |          }|| _        | j	        "|
                    || j                  | _	        d S d S )N   )rW   rj   r\   rM   
_connector_timeout_ceil_thresholdtimer   rY   rX   call_at_send_heartbeat)rf   rH   conntimeout_ceil_thresholdnowwhens         r;   re   z(ClientWebSocketResponse._reset_heartbeat   s    ?"F%%'''zz7;7GDO33Q 	 iikk%c4?<RSS#% "&dD4H!I!ID &%r:   c                    d | _         | j        rd S | j        }|                                }|| j        k     r'|                    | j        | j                  | _         d S | j        }||j        j	        nd}t          || j        |          }|                                  |                    || j                  | _        | j                            dt"          j                  }t&          j        dk    rt+          j        ||d          }n|                    |          }|                                s#|| _        |                    | j                   d S |                     |           d S )Nrv   r:   )r#      T)rH   eager_start)rX   rc   r\   ry   rY   rz   r{   rM   rw   rx   r   rZ   rj   _pong_not_receivedr[   rN   
send_framer   PINGsysversion_infoasyncioTaskcreate_taskdonerb   add_done_callback_ping_task_done)rf   rH   r~   r|   r}   r   coro	ping_tasks           r;   r{   z'ClientWebSocketResponse._send_heartbeat   sj   ! % 	Fziikk%%%!%$d&:" "D Fz7;7GDO33Q 	 &c4+?AWXX%%'''!%dD4K!L!L|&&sIN;;w&&  T$GGGII((..I~~ 	,'DO''(<=====  +++++r:   taskasyncio.Task[None]c                     |                                 s+|                                x}r|                     |           d| _        dS )z*Callback for when the ping task completes.N)	cancelled	exception_handle_ping_pong_exceptionrb   )rf   r   excs      r;   r   z'ClientWebSocketResponse._ping_task_done   sI    ~~ 	2DNN,<,<%<S 	2,,S111r:   c                 \    |                      t          d| j         d                     d S )NzNo PONG received after z seconds)r   r   rZ   rl   s    r;   r   z*ClientWebSocketResponse._pong_not_received   s>    ((W9MWWWXX	
 	
 	
 	
 	
r:   r   c                 .   | j         rdS |                                  t          j        | _        || _        | j                                         | j        r=| j	        s8| j
                            t          t          j        |d          d           dS dS dS )z5Handle exceptions raised during ping/pong processing.Nr   )rQ   _set_closedr   ABNORMAL_CLOSURErS   r_   rK   closer]   rR   rO   	feed_datar   r   ERROR)rf   r   s     r;   r   z3ClientWebSocketResponse._handle_ping_pong_exception   s    < 	F&7= 	M 	ML""9Y_c4#H#H!LLLLL	M 	M 	M 	Mr:   c                 <    d| _         |                                  dS )zdSet the connection to closed.

        Cancel any heartbeat timers and set the closed flag.
        TN)rQ   rm   rl   s    r;   r   z#ClientWebSocketResponse._set_closed   s#    
      r:   c                 <    d| _         |                                  dS )zfSet the connection to closing.

        Cancel any heartbeat timers and set the closing flag.
        TN)rR   rm   rl   s    r;   _set_closingz$ClientWebSocketResponse._set_closing   s#    
      r:   c                     | j         S ro   )rQ   rl   s    r;   closedzClientWebSocketResponse.closed   s
    |r:   c                     | j         S ro   )rS   rl   s    r;   
close_codez"ClientWebSocketResponse.close_code   s    r:   c                     | j         S ro   )rP   rl   s    r;   rC   z ClientWebSocketResponse.protocol   
    ~r:   c                     | j         S ro   )r`   rl   s    r;   r?   z ClientWebSocketResponse.compress   r   r:   c                     | j         S ro   )ra   rl   s    r;   r@   z)ClientWebSocketResponse.client_notakeover  s    &&r:   namer+   c                 d    | j         j        }||S |j        }||S |                    ||          S )z$extra info from connection transport)rK   rL   	transportget_extra_info)rf   r   r+   r|   r   s        r;   r   z&ClientWebSocketResponse.get_extra_info  s>    ~(<NN	N''g666r:   c                     | j         S ro   )r_   rl   s    r;   r   z!ClientWebSocketResponse.exception  s
    r:   r:   messagec                 `   K   | j                             |t          j                   d {V  d S ro   )rN   r   r   r   rf   r   s     r;   pingzClientWebSocketResponse.ping  8      l%%gy~>>>>>>>>>>>r:   c                 `   K   | j                             |t          j                   d {V  d S ro   )rN   r   r   PONGr   s     r;   pongzClientWebSocketResponse.pong  r   r:   opcodec                 N   K   | j                             |||           d{V  dS )z Send a frame over the websocket.N)rN   r   )rf   r   r   r?   s       r;   r   z"ClientWebSocketResponse.send_frame  s:       l%%gvx@@@@@@@@@@@r:   datac                    K   t          |t                    st          dt          |          z            | j                            |                    d          t          j        |           d {V  d S )Nzdata argument must be str (%r)zutf-8r?   )	
isinstancestr	TypeErrorr0   rN   r   encoder   TEXTrf   r   r?   s      r;   send_strz ClientWebSocketResponse.send_str  s      $$$ 	K<tDzzIJJJl%%KK  ).8 & 
 
 	
 	
 	
 	
 	
 	
 	
 	
 	
r:   c                    K   t          |t          t          t          f          st	          dt          |          z            | j                            |t          j	        |           d {V  d S )Nz#data argument must be byte-ish (%r)r   )
r   bytes	bytearray
memoryviewr   r0   rN   r   r   BINARYr   s      r;   
send_bytesz"ClientWebSocketResponse.send_bytes%  sr      $	: >?? 	PADJJNOOOl%%dI,<x%PPPPPPPPPPPr:   )dumpsr   c                V   K   |                       ||          |           d {V  d S )Nr   )r   rf   r   r?   r   s       r;   	send_jsonz!ClientWebSocketResponse.send_json*  s>       mmEE$KK(m;;;;;;;;;;;r:   c                V   K   |                       ||          |           d{V  dS )zSend JSON data using a bytes-returning encoder as a binary frame.

        Use this when your JSON encoder (like orjson) returns bytes
        instead of str, avoiding the encode/decode overhead.
        r   N)r   r   s       r;   send_json_bytesz'ClientWebSocketResponse.send_json_bytes3  s>       ooeeDkkHo===========r:   )coder   r   c                
  K   | j         ro| j        sh| j        J | j                                        | _        |                                  | j                            t          d           | j         d {V  | j	        rdS | 
                                 	 | j                            ||           d {V  n# t          j        $ r, t          j        | _        | j                                          t&          $ r<}t          j        | _        || _        | j                                         Y d }~dS d }~ww xY w| j        r| j                                         dS 	 	 t+          j        | j        j                  4 d {V  | j                                         d {V }d d d           d {V  n# 1 d {V swxY w Y   n# t          j        $ r, t          j        | _        | j                                          t&          $ r<}t          j        | _        || _        | j                                         Y d }~dS d }~ww xY w|j        t6          j        u r'|j        | _        | j                                         dS ')Nr   FT)r]   rR   r\   create_futurer^   r   rO   r   r   rQ   r   rN   r   r   CancelledErrorr   r   rS   rK   	Exceptionr_   async_timeoutrE   rT   r8   readr0   r   CLOSEr   )rf   r   r   r   msgs        r;   r   zClientWebSocketResponse.closeA  s>      = 	# 	#:)))#z7799DL""#5q999""""""""< 	5
	,$$T73333333333% 	 	 	*;DN  """ 	 	 	*;D!DON  """44444		  	N  """4	(01GHH 4 4 4 4 4 4 4 4 $ 1 1 3 3333333C4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4)   #.#? $$&&&   #.#? "%$$&&&ttttt	 x9?**#&8 $$&&&t#	sV   !B9 9AD8<1D33D8$G  F5#G 5
F??G F?G AI
1IIrf   z&ClientWebSocketResponse[Literal[True]]c                 
   K   d S ro   r9   rf   rE   s     r;   receivezClientWebSocketResponse.receiver         "cr:   z'ClientWebSocketResponse[Literal[False]]c                 
   K   d S ro   r9   r   s     r;   r   zClientWebSocketResponse.receivew         !$r:   z$ClientWebSocketResponse[_DecodeText]c                 
   K   d S ro   r9   r   s     r;   r   zClientWebSocketResponse.receive|         7:cr:   c                 R  K   |p| j         j        }	 | j        rt          d          | j        rt
          S | j        r!|                                  d {V  t
          S 	 d| _        	 |r^t          j	        |          4 d {V  | j
                                         d {V }d d d           d {V  n# 1 d {V swxY w Y   n| j
                                         d {V }d| _        | j        rt          | j        d            n)# d| _        | j        rt          | j        d            w w xY wn# t          j        t          j        f$ r t"          j        | _         t(          $ rI t"          j        | _        |                                  d {V  t-          t.          j        d d           cY S t2          $ r/ |                                  t"          j        | _        t
          cY S t6          $ rR}|j        | _        |                     |j                   d {V  t-          t.          j        |d           cY d }~S d }~wt<          $ rk}|| _        |                                   t"          j        | _        |                                  d {V  t-          t.          j        |d           cY d }~S d }~ww xY w|j!        tD          vr|S |j!        t.          j#        u rI|                                   |j$        | _        | j        s!| j%        r|                                  d {V  n|j!        t.          j&        u r|                                   nX|j!        t.          j'        u r)| j(        r"| )                    |j$                   d {V  z|j!        t.          j*        u r	| j(        r|S )NTz+Concurrent call to receive() is not allowedF)r   )+rT   r7   r]   RuntimeErrorrQ   r   rR   r   r   rE   rO   r   r^   r   r   r   TimeoutErrorr   r   rS   r   OKr   r   CLOSEDr   r   r   r   r   r   r_   r   r0   r   r   r   rU   CLOSINGr   rV   r   r   )rf   rE   receive_timeoutr   r   s        r;   r   zClientWebSocketResponse.receive  s      "=T]%=C	} R"#PQQQ| )(( )jjll"""""""((%= $;& 8
 $1#8#I#I < < < < < < < <(,(9(9(;(;";";";";";";C< < < < < < < < < < < < < < < < < < < < < < < < < < < %)L$5$5$7$7777777$)DM' ;"4#3T::: %*DM' ;"4#3T::::;*G,@A   #.#?  ? ? ?#.> jjll""""""" !14>>>>> ) ) )  """#.#? ((((! = = =#&8 jjchj///////// #t<<<<<<<< = = ="%!!####.#? jjll""""""" #t<<<<<<<<= x666 
x9?**!!####&8 | ' '**,,&&&&&&&Y...!!####Y^+++ii)))))))))Y^+++Js{   D5 'D
  B5#D
 5
B??D
 B?#D
 &$D5 
&D00D5 5A<J835J8*	J83AI :J8 J8A J3-J83J8rE   c                
   K   d S ro   r9   r   s     r;   receive_strz#ClientWebSocketResponse.receive_str  s       cr:   c                
   K   d S ro   r9   r   s     r;   r   z#ClientWebSocketResponse.receive_str  s       r:   c                
   K   d S ro   r9   r   s     r;   r   z#ClientWebSocketResponse.receive_str  s       cr:   c                   K   |                      |           d{V }|j        t          j        ur t	          d|j         d|j        d          t          t          |j                  S )zrReceive TEXT message.

        Returns str when decode_text=True (default), bytes when decode_text=False.
        NReceived message :z is not WSMsgType.TEXT)r   r0   r   r   r   r   r	   r   rf   rE   r   s      r;   r   z#ClientWebSocketResponse.receive_str  sz      
 LL))))))))89>))$QCHQQsxQQQ   C"""r:   c                   K   |                      |           d {V }|j        t          j        ur t	          d|j         d|j        d          t          t          |j                  S )Nr   r   z is not WSMsgType.BINARY)r   r0   r   r   r   r   r	   r   r   s      r;   receive_bytesz%ClientWebSocketResponse.receive_bytes  sy      LL))))))))89+++$SCHSSsxSSS   E38$$$r:   .)loadsrE   r   c                
   K   d S ro   r9   rf   r   rE   s      r;   receive_jsonz$ClientWebSocketResponse.receive_json         cr:   c                
   K   d S ro   r9   r   s      r;   r   z$ClientWebSocketResponse.receive_json  r   r:   c                
   K   d S ro   r9   r   s      r;   r   z$ClientWebSocketResponse.receive_json  r   r:   c                T   K   |                      |           d {V } ||          S )Nr   )r   )rf   r   rE   r   s       r;   r   z$ClientWebSocketResponse.receive_json  s>       %%g%66666666uT{{r:   c                     | S ro   r9   rl   s    r;   	__aiter__z!ClientWebSocketResponse.__aiter__  s    r:   c                 
   K   d S ro   r9   rl   s    r;   	__anext__z!ClientWebSocketResponse.__anext__  r   r:   c                 
   K   d S ro   r9   rl   s    r;   r   z!ClientWebSocketResponse.__anext__  r   r:   c                 
   K   d S ro   r9   rl   s    r;   r   z!ClientWebSocketResponse.__anext__  r   r:   c                    K   |                                   d {V }|j        t          j        t          j        t          j        fv rt          |S ro   )r   r0   r   r   r   r   StopAsyncIteration)rf   r   s     r;   r   z!ClientWebSocketResponse.__anext__!  sL      LLNN""""""8	):I<LMMM$$
r:   c                 
   K   | S ro   r9   rl   s    r;   
__aenter__z"ClientWebSocketResponse.__aenter__'  s      r:   exc_typeexc_valexc_tbc                 >   K   |                                   d {V  d S ro   )r   )rf   r  r  r  s       r;   	__aexit__z!ClientWebSocketResponse.__aexit__*  s.       jjllr:   )rI   N)r   r   rI   Nro   )r:   )Cr1   r2   r3   r   r   r   r   r/   boolr   AbstractEventLoopr6   intrg   rm   rj   rs   rr   re   r{   r   r   BaseExceptionr   r   r   propertyr   r   rC   r?   r@   r   r   r   r   r   r   r   r   r   r   r   r"   r   r    r   r   r   r   r
   r   r   r   r   r   r!   r   r   r   r'   r   r   r  r0   r   r  r9   r:   r;   r=   r=   =   s	        #'"'+  +  + "+   +  *	+ 
 !+  !+  +  +  '+  4<+  +   +  
+  +  +  + Z# # # #* * * *
S S S S+ + + +J J J J*&, &, &, &,P   
 
 
 

	M} 	M 	M 	M 	M 	M! ! ! !! ! ! !     X  C$J       X  #*    X #    X '4 ' ' ' X'7 73 7 7 7 7 7 7=4/    ? ?% ?$ ? ? ? ?? ?% ?$ ? ? ? ? IMA AA&/A;>:A	A A A A
 
3 
#* 
 
 
 
 
Q QU QcDj QD Q Q Q Q  $<
 2< < << *<
 < 
< < < <  $> >> *>
  > 
> > > > *5# / / /3 /% /RV / / / /b PT" "6"AF"	" " " X" QU$ $7$BG$,$	$ $ $ X$ NR: :4:?Dt|:	4	4: : : X:
 '+H Ht|H	4	4H H H HT SW  6DIDL	   X TX  7EJT\	   X QU  4BG$,	u   X <@ 
# 
# 
#EDL 
#C%K 
# 
# 
# 
# >B % % %edl %e % % % %  ! $	  6  	
 
   X  ), $	  7 % 	
 
   X  7: $	  4 Xugsl33 	
 
   X 7K $	   Xugsl33 	
 
   4     "6"	" " " X" $7$	$ $ $ X$ :4:	4	4: : : X:!47L!L    $    }%, % $	
 
     r:   r=   )9__doc__r   r   collections.abcr   typesr   typingr   r   r   r   r	   r
   r4   _websocket.readerr   client_exceptionsr   r   r   client_reqrepr   helpersr   r   httpr   r   r   r   r   r   r   r   http_websocketr   r   streamsr   typedefsr   r   r    r!   r"   r   r%   typing_extensionsr   r'   r  r(   sr/   DEFAULT_WS_CLIENT_TIMEOUTr=   r9   r:   r;   <module>r     s   # #  



 $ $ $ $ $ $       B B B B B B B B B B B B B B B B  1 1 1 1 1 1 R R R R R R R R R R ) ) ) ) ) ) 7 7 7 7 7 7 7 7	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 E D D D D D D D                    w))))))w####&&&&&& gm44QUWWW t4   ; ; ; ; ; ; ; ! ;
 ,OtdKKK s s s s sgk2 s s s s sr:   