
    g:                     n   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jN                  dk\  rddlZ(nddl(Z( e
jR                  dd       G d d             Z* e*dd      Z+ G d d      Z,y)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                   h    e Zd Z ej                  ee   d      Z ej                  ee   d      Zy)ClientWSTimeoutN)typedefault)	__name__
__module____qualname__attribr   float
ws_receivews_close     F/var/www/openai/venv/lib/python3.12/site-packages/aiohttp/client_ws.pyr"   r"   %   s.    huot<JtwwHUOT:Hr.   r"   g      $@)r+   r,   c                      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dBdZdBdZdBdZdBdZdCdZdBdZdeddfdZdBdZdBd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dDd!ed"edefd#Z dee   fd$Z!dEd&e"ddfd'Z#dEd&e"ddfd(Z$	 dDd&e"d)e%dee   ddfd*Z&dDd+edee   ddfd,Z'dDd+e"dee   ddfd-Z(	 dDe)d.d+edee   d/e*ddfd0Z+e,jZ                  d%d1d2ed&e"de	fd3Z.dDd	ee   de/fd4Z0dd5d	ee   defd6Z1dd5d	ee   de"fd7Z2e3dd8d9e4d	ee   defd:Z5dFd;Z6de/fd<Z7dFd=Z8d>ee9e      d?ee   d@ee:   ddfdAZ;y)G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 | _        | j1                          y )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                  !| j                  j                          d | _        | j                  "| j                  j                          d | _        y y N)_cancel_pong_response_cbrL   cancelrV   rX   s    r/   _cancel_heartbeatz)ClientWebSocketResponse._cancel_heartbeatZ   sZ    %%')%%'!%D??&OO""$"DO 'r.   c                 `    | j                   "| j                   j                          d | _         y y r[   )rO   r]   r^   s    r/   r\   z0ClientWebSocketResponse._cancel_pong_response_cbc   s-    !!-""))+%)D" .r.   c                 b   | j                   y | j                          | j                  }|J | j                  }||j                  j
                  nd}|j                         }t        || j                   |      }|| _        | j                  "|j                  || j                        | _	        y y )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    ??"%%'zzzz7;7GDOO33Q 	 iik%c4??<RS#% "&dD4H4H!ID &r.   c                    d | _         | j                  }|j                         }|| j                  k  r,|j	                  | j                  | j
                        | _         y | j                  }||j                  j                  nd}t        || j                  |      }| j                          |j	                  || j                        | _        | j                  j                  dt         j"                        }t$        j&                  dk\  rt)        j*                  ||d      }n|j-                  |      }|j/                         s#|| _        |j3                  | j4                         y | j5                  |       y )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}   s0   !zziik%%%!%$$d&:&:"D zz7;7GDOO33Q 	 &c4+?+?AWX%%'!%dD4K4K!L||&&sINN;w&  T$GI((.I~~'DO''(<(<=  +r.   c                 x    |j                         s#|j                         x}r| j                  |       d| _        y)z*Callback for when the ping task completes.N)	cancelled	exception_handle_ping_pong_exceptionrV   )rX   taskexcs      r/   ry   z'ClientWebSocketResponse._ping_task_done   s2    ~~DNN,<%<S%<,,S1r.   c                 6    | j                  t                      y r[   )r   r   r^   s    r/   ro   z*ClientWebSocketResponse._pong_not_received   s    (();)=>r.   r   c                 H   | j                   ry| j                          t        j                  | _        || _        | j                  j                          | j                  rC| j                  s6| j                  j                  t        t        j                  |d      d       yyy)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   sr    <<&77==LL""9Y__c4#H!L "/=r.   c                 2    d| _         | j                          y)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                 2    d| _         | j                          y)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                 z    | j                   j                  }||S |j                  }||S |j                  ||      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   sB    ~~((<NNN	N''g66r.   c                     | j                   S r[   )rS   r^   s    r/   r~   z!ClientWebSocketResponse.exception   s    r.   r.   messagec                 t   K   | j                   j                  |t        j                         d {    y 7 wr[   )rB   rp   r   rq   rX   r   s     r/   pingzClientWebSocketResponse.ping   $     ll%%gy~~>>>   .868c                 t   K   | j                   j                  |t        j                         d {    y 7 wr[   )rB   rp   r   PONGr   s     r/   pongzClientWebSocketResponse.pong   r   r   opcodec                 Z   K   | j                   j                  |||       d{    y7 w)z Send a frame over the websocket.N)rB   rp   )rX   r   r   r3   s       r/   rp   z"ClientWebSocketResponse.send_frame   s$      ll%%gvx@@@s   !+)+datac                    K   t        |t              st        dt        |      z        | j                  j                  |j                  d      t        j                  |       d {    y 7 w)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   sZ     $$<tDzIJJll%%KK )..8 & 
 	
 	
s   A&A0(A.)A0c                    K   t        |t        t        t        f      st	        dt        |      z        | j                  j                  |t        j                  |       d {    y 7 w)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   sQ     $	: >?ADJNOOll%%dI,<,<x%PPPs   A"A,$A*%A,)dumpsr   c                R   K   | j                   ||      |       d {    y 7 w)Nr   )r   )rX   r   r3   r   s       r/   	send_jsonz!ClientWebSocketResponse.send_json   s"      mmE$K(m;;;s   '%')coder   r   c                  K   | j                   r}| j                  sq| j                  J | j                  j                         | _        | j                          | j                  j                  t        d       | j                   d {    | j                  ry| j                          	 | j                  j                  ||       d {    | j"                  r| j$                  j                          y	 	 t+        j,                  | j.                  j0                        4 d {    | j                  j3                          d {   }d d d       d {    j4                  t6        j8                  u r,|j:                  | _        | j$                  j                          y7 7 # t        j                  $ r1 t        j                   | _        | j$                  j                           t&        $ r@}t        j                   | _        || _        | j$                  j                          Y d }~yd }~ww xY w7 7 7 # 1 d {  7  sw Y   xY w# t        j                  $ r1 t        j                   | _        | j$                  j                           t&        $ r@}t        j                   | _        || _        | j$                  j                          Y d }~yd }~ww xY ww)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'     ==::)))#zz779DLL""#5q9""""<<
	,,$$T7333 NN  "(001G1GHH $ 1 1 33C IH xx9??*#&88 $$&# - # 4%% 	*;;DNN  " 	*;;D!DONN  "		 I3 IHHH)) #.#?#? $$& #.#?#? "%$$&	s   BK!F$!K!*F) 	F'
F) (K!7-I $H7%I (H>H:H>I H<I A
K!'F) )AH446H/*K!/H44K!7I :H><I >IIII AK6KK!KK!c                   K   |xs | j                   j                  }	 | j                  rt        d      | j                  rt
        S | j                  r| j                          d {    t
        S 	 d| _        	 |rQt        j                  |      4 d {    | j                  j                          d {   }d d d       d {    n"| j                  j                          d {   }| j                          d| _        | j                  rt        | j                  d        	 jD                  tF        vr|S |jD                  t0        jH                  u rS| jC                          |jJ                  | _        | j                  s$| jL                  r| j                          d {    |S |jD                  t0        jN                  u r| jC                          |S |jD                  t0        jP                  u r1| jR                  r%| jU                  |jJ                         d {    
|jD                  t0        jV                  u r| jR                  r4|S 7 7 7 7 # 1 d {  7  sw Y   xY w7 # d| _        | j                  rt        | j                  d        w w xY w# t        j                   t        j"                  f$ r t$        j&                  | _         t*        $ rL t$        j,                  | _        | j                          d {  7   t/        t0        j2                  d d       cY S t4        $ r. | j7                          t$        j&                  | _        t
        cY S t8        $ r[}|j:                  | _        | j                  |j:                         d {  7   t/        t0        j<                  |d       cY d }~S d }~wt>        $ rj}|| _         | jC                          t$        j&                  | _        | j                          d {  7   t/        t0        j<                  |d       cY d }~S d }~ww xY w7 7 "w)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.receive6  s3    !=T]]%=%=}}"#PQQ||((jjl""((&= $;&
 $1#8#8#I#I(,(9(9(;";C $J#I#I %)LL$5$5$77))+$)DM''"4#3#3T:0 xx66 
xx9??*!!##&88 ||**,&& J Y...!!# J Y^^+ii)))Y^^+J{ # $J"; $J#I#I#I 8 %*DM''"4#3#3T: (**G,@,@A #.#?#?  ?#.>> jjl"" !1!14>> )  "#.#?#? ((! =#&88 jjchhj/// #t<< ="%!!##.#?#? jjl"" #t<<=  ' *s5  A$Q&I'
Q2J' :I8 II8 I7I8I<I8 I"I8 *I5+I8 ?*J' )A<Q%P?&A:Q Q!3QI8 II8 I2%I(&I2-	I8 8,J$$J' 'A)P<L P<1Q33P<&Q(P<00O N#!O P<QP<?P7PP71P<2Q7P<<QQr9   c                   K   | j                  |       d {   }|j                  t        j                  ur&t	        d|j                   d|j
                  d      t        t        |j
                        S 7 `w)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  sg     LL))889>>)$#CHH:Qsxxl:PQ  C"" *   A:A8A!A:c                   K   | j                  |       d {   }|j                  t        j                  ur&t	        d|j                   d|j
                  d      t        t        |j
                        S 7 `w)Nr   r   z is not WSMsgType.BINARY)r   r#   r   r   r   r   r   r   r   s      r/   receive_bytesz%ClientWebSocketResponse.receive_bytes  si     LL))889+++$#CHH:Qsxxl:RS  E388$$ *r   )loadsr9   r   c                R   K   | j                  |       d {   } ||      S 7 w)Nr   )r   )rX   r   r9   r   s       r/   receive_jsonz$ClientWebSocketResponse.receive_json  s-      %%g%66T{ 7s   '%'c                     | S r[   r-   r^   s    r/   	__aiter__z!ClientWebSocketResponse.__aiter__  s    r.   c                    K   | j                          d {   }|j                  t        j                  t        j                  t        j
                  fv rt        |S 7 Gwr[   )r   r#   r   r   r   r   StopAsyncIteration)rX   r   s     r/   	__anext__z!ClientWebSocketResponse.__anext__  sG     LLN"88	):):I<L<LMM$$
 #s   A AAA c                    K   | S wr[   r-   r^   s    r/   
__aenter__z"ClientWebSocketResponse.__aenter__  s     s   exc_typeexc_valexc_tbc                 @   K   | j                          d {    y 7 wr[   )r   )rX   r   r   r   s       r/   	__aexit__z!ClientWebSocketResponse.__aexit__  s      jjls   )r=   N)r   zasyncio.Task[None]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   .   sk    &*"') ")   )  3-	) 
 !)  !)  )  )  '')  E?)  )   )  
) V#*
J* ,D?	M} 	M 	M!!     HSM     (3-   #   '4 ' '73 7 7 78M2 ?% ?$ ??% ?$ ? LPAA&/A;CC=A	A
3 
(3- 
4 
QU Qhsm Qt Q #'<
 2<< 3-<
 < 
< *5# /3 /% /RV /bGXe_ 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      s    #  
  , ,  1 R R ) 7  E   w# t4 ; ; !;
 ,tdK | |r.   