
    h;                     |   d Z ddlZddlZddlmZ ddl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 ddlmZmZ ddl m!Z! ddl"m#Z#m$Z$m%Z%m&Z& ej'        dk    rddlZ(nddl(Z( e
j)        dd           G d d                      Z* e*dd          Z+ G d d          Z,dS )zWebSocket client for asyncio.    N)TracebackType)AnyOptionalTypecast   )WebSocketDataQueue)ClientErrorServerTimeoutErrorWSMessageTypeError)ClientResponse)calculate_timeout_when
set_result)WS_CLOSED_MESSAGEWS_CLOSING_MESSAGEWebSocketErrorWSCloseCode	WSMessage	WSMsgType)_INTERNAL_RECEIVE_TYPESWebSocketWriter)	EofStream)DEFAULT_JSON_DECODERDEFAULT_JSON_ENCODERJSONDecoderJSONEncoder)      T)frozenslotsc                   n    e Zd Z ej        ee         d          Z ej        ee         d          ZdS )ClientWSTimeoutN)typedefault)	__name__
__module____qualname__attribr   float
ws_receivews_close     S/var/www/html/prod/cognitive/venv/lib/python3.11/site-packages/aiohttp/client_ws.pyr"   r"   %   sB        huot<<<JtwHUOT:::HHHr.   r"   g      $@)r+   r,   c                   f   e Zd Zdddddededee         ded	ed
e	de	de
j        dee         dede	ddfdZdDdZdDdZdDdZdDdZdEdZdDdZdeddfdZdDdZdDdZede	fd            Zedee         fd            Zedee         fd             Zedefd!            Zede	fd"            ZdFd#ed$edefd%Z dee         fd&Z!dGd(e"ddfd)Z#dGd(e"ddfd*Z$	 dFd(e"d+e%dee         ddfd,Z&dFd-edee         ddfd.Z'dFd-e"dee         ddfd/Z(	 dFe)d0d-edee         d1e*ddfd2Z+e,j-        d'd3d4ed(e"de	fd5Z.dFd	ee         de/fd6Z0dd7d	ee         defd8Z1dd7d	ee         de"fd9Z2e3dd:d;e4d	ee         defd<Z5dHd=Z6de/fd>Z7dHd?Z8d@ee9e                  dAee         dBee:         ddfdCZ;dS )IClientWebSocketResponseNr   F)	heartbeatcompressclient_notakeoverreaderwriterprotocolresponsetimeout	autocloseautopingloopr2   r3   r4   returnc	                   || _         |j        | _        || _        || _        || _        d| _        d| _        d | _        || _	        || _
        || _        |	| _        d | _        d| _        |	
|	dz  | _        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_reset_heartbeat)selfr5   r6   r7   r8   r9   r:   r;   r<   r2   r3   r4   s               r/   __init__z ClientWebSocketResponse.__init__/   s     "(
!*.#!#<@&) #,s?D @D
#;?37!"38<r.   c                     |                                   | j         | j                                         d | _        | j        "| j                                         d | _        d S d S N)_cancel_pong_response_cbrL   cancelrV   rX   s    r/   _cancel_heartbeatz)ClientWebSocketResponse._cancel_heartbeatZ   si    %%''')%%'''!%D?&O""$$$"DOOO '&r.   c                 X    | j         "| j                                          d | _         d S d S r[   )rO   r]   r^   s    r/   r\   z0ClientWebSocketResponse._cancel_pong_response_cbc   s6    !-"))+++%)D""" .-r.   c                 8   | j         d S |                                  | j        }|J | j        }||j        j        nd}|                                }t          || j         |          }|| _        | j	        "|
                    || j                  | _	        d S d S )N   )rK   r\   rP   rA   
_connector_timeout_ceil_thresholdtimer   rM   rL   call_at_send_heartbeat)rX   r<   conntimeout_ceil_thresholdnowwhens         r/   rW   z(ClientWebSocketResponse._reset_heartbeath   s    ?"F%%'''zz7;7GDO33Q 	 iikk%c4?<RSS#% "&dD4H!I!ID &%r.   c                    d | _         | 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 )Nrb   r.   )r      T)r<   eager_start)rL   rP   re   rM   rf   rg   rA   rc   rd   r   rN   r\   _pong_not_receivedrO   rB   
send_framer   PINGsysversion_infoasyncioTaskcreate_taskdonerV   add_done_callback_ping_task_done)rX   r<   rj   rh   ri   rk   coro	ping_tasks           r/   rg   z'ClientWebSocketResponse._send_heartbeat}   sX   !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_exceptionrV   )rX   r|   excs      r/   ry   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   rN   r^   s    r/   ro   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   )rE   _set_closedr   ABNORMAL_CLOSURErG   rS   r?   closerQ   rF   rC   	feed_datar   r   ERROR)rX   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)rE   r_   r^   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)rF   r_   r^   s    r/   _set_closingz$ClientWebSocketResponse._set_closing   s#    
      r.   c                     | j         S r[   )rE   r^   s    r/   closedzClientWebSocketResponse.closed   s
    |r.   c                     | j         S r[   )rG   r^   s    r/   
close_codez"ClientWebSocketResponse.close_code   s    r.   c                     | j         S r[   )rD   r^   s    r/   r7   z ClientWebSocketResponse.protocol   
    ~r.   c                     | j         S r[   )rT   r^   s    r/   r3   z ClientWebSocketResponse.compress   r   r.   c                     | j         S r[   )rU   r^   s    r/   r4   z)ClientWebSocketResponse.client_notakeover   s    &&r.   namer$   c                 d    | j         j        }||S |j        }||S |                    ||          S )z$extra info from connection transport)r?   r@   	transportget_extra_info)rX   r   r$   rh   r   s        r/   r   z&ClientWebSocketResponse.get_extra_info   s>    ~(<NN	N''g666r.   c                     | j         S r[   )rS   r^   s    r/   r   z!ClientWebSocketResponse.exception   s
    r.   r.   messagec                 `   K   | j                             |t          j                   d {V  d S r[   )rB   rp   r   rq   rX   r   s     r/   pingzClientWebSocketResponse.ping   8      l%%gy~>>>>>>>>>>>r.   c                 `   K   | j                             |t          j                   d {V  d S r[   )rB   rp   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)rB   rp   )rX   r   r   r3   s       r/   rp   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r3   )	
isinstancestr	TypeErrorr#   rB   rp   encoder   TEXTrX   r   r3   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   r#   rB   rp   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   )rX   r   r3   r   s       r/   	send_jsonz!ClientWebSocketResponse.send_json   s>       mmEE$KK(m;;;;;;;;;;;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)rQ   rF   rP   create_futurerR   r   rC   r   r   rE   r   rB   r   rt   CancelledErrorr   r   rG   r?   	ExceptionrS   async_timeoutr9   rH   r,   readr#   r   CLOSEr   )rX   r   r   r   msgs        r/   r   zClientWebSocketResponse.close  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c                 z  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/          t0          j        d d           cY S t4          $ r/ |                                  t$          j        | _        t
          cY S t8          $ rR}|j        | _        |                     |j                   d {V  t/          t0          j        |d           cY d }~S d }~wt>          $ rk}|| _         | !                                 t$          j        | _        |                                  d {V  t/          t0          j        |d           cY d }~S d }~ww xY w|j"        tF          vr|S |j"        t0          j$        u rI| !                                 |j%        | _        | j        s!| j&        r|                                  d {V  n|j"        t0          j'        u r| !                                 nX|j"        t0          j(        u r)| j)        r"| *                    |j%                   d {V  |j"        t0          j+        u r	| j)        r|S )NTz+Concurrent call to receive() is not allowedF)r   ),rH   r+   rQ   RuntimeErrorrE   r   rF   r   r   r9   rC   r   rW   rR   r   rt   r   TimeoutErrorr   r   rG   r   OKr   r   CLOSEDr
   r   r   r   r   r   rS   r   r#   r   r   r   rI   CLOSINGrq   rJ   r   r   )rX   r9   receive_timeoutr   r   s        r/   receivezClientWebSocketResponse.receive8  s     !=T]%=D	} 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{   E	 'D  B5#D 5
B??D B?7D :$E	 &EE	 	A<K5K>	KAIKK!A KKKr9   c                   K   |                      |           d {V }|j        t          j        ur t	          d|j         d|j        d          t          t          |j                  S )NReceived message :z is not WSMsgType.TEXT)r   r#   r   r   r   r   r   r   rX   r9   r   s      r/   receive_strz#ClientWebSocketResponse.receive_str  sx      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   r#   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.   )loadsr9   r   c                T   K   |                      |           d {V } ||          S )Nr   )r   )rX   r   r9   r   s       r/   receive_jsonz$ClientWebSocketResponse.receive_json  s>       %%g%66666666uT{{r.   c                     | S r[   r-   r^   s    r/   	__aiter__z!ClientWebSocketResponse.__aiter__  s    r.   c                    K   |                                   d {V }|j        t          j        t          j        t          j        fv rt          |S r[   )r   r#   r   r   r   r   StopAsyncIteration)rX   r   s     r/   	__anext__z!ClientWebSocketResponse.__anext__  sL      LLNN""""""8	):I<LMMM$$
r.   c                 
   K   | S r[   r-   r^   s    r/   
__aenter__z"ClientWebSocketResponse.__aenter__  s      r.   exc_typeexc_valexc_tbc                 >   K   |                                   d {V  d S r[   )r   )rX   r   r   r   s       r/   	__aexit__z!ClientWebSocketResponse.__aexit__  s.       jjllr.   )r=   N)r|   r}   r=   Nr[   )r.   )r=   r1   )<r%   r&   r'   r	   r   r   r   r   r"   boolrt   AbstractEventLoopr*   intrY   r_   r\   rW   rg   ry   ro   BaseExceptionr   r   r   propertyr   r   r7   r3   r4   r   r   r   r   r   r   r   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r-   r.   r/   r1   r1   .   s        &*"')  )  ) ")   )  3-	) 
 !)  !)  )  )  ')  E?)  )   )  
)  )  )  ) V# # # #* * * *
J J J J* ,  ,  ,  ,D   
 
 
 

	M} 	M 	M 	M 	M 	M! ! ! !! ! ! !     X  HSM       X  (3-    X #    X '4 ' ' ' X'7 73 7 7 7 7 7 78M2    ? ?% ?$ ? ? ? ?? ?% ?$ ? ? ? ? LPA AA&/A;CC=A	A A A A
 
3 
(3- 
4 
 
 
 
Q QU Qhsm Qt Q Q Q Q #'<
 2< < << 3-<
 < 
< < < < *5# / / /3 /% /RV / / / /bG GXe_ G	 G G G GR ?C # # #HUO #s # # # # AE % % %huo % % % % % 2#'	    %	
 
             4./ -( '	
 
     r.   r1   )-__doc__rt   rr   typesr   typingr   r   r   r   r(   _websocket.readerr	   client_exceptionsr
   r   r   client_reqrepr   helpersr   r   httpr   r   r   r   r   r   http_websocketr   r   streamsr   typedefsr   r   r   r   rs   r   sr"   DEFAULT_WS_CLIENT_TIMEOUTr1   r-   r.   r/   <module>r      s3   # #  



       , , , , , , , , , , , ,  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##### t4   ; ; ; ; ; ; ; ! ;
 ,OtdKKK ~ ~ ~ ~ ~ ~ ~ ~ ~ ~r.   