
    3CfJ                        U d dl Z d dlZd dl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m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mZmZ ddlmZmZmZmZmZmZmZm Z 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+ ddl,m-Z-m.Z. ddl/m0Z0 ddl1m2Z2 ejf                  dk\  rd dl Z4nd dl4Z4dZ5dZ6ee7   e8d<    ejr                  ddd       G d d             Z: G d de2      Z;y)    N)AnyFinalIterableOptionalTuplecast)CIMultiDict   )hdrs)AbstractStreamWriter)
call_laterset_exception
set_result)WS_CLOSED_MESSAGEWS_CLOSING_MESSAGEWS_KEYWebSocketErrorWebSocketReaderWebSocketWriterWSCloseCode	WSMessage	WSMsgType
ws_ext_genws_ext_parse)	ws_logger)	EofStreamFlowControlDataQueue)JSONDecoderJSONEncoder)HTTPBadRequestHTTPException)BaseRequest)StreamResponse)      )WebSocketResponseWebSocketReadyr      THRESHOLD_CONNLOST_ACCESST)auto_attribsfrozenslotsc                   4    e Zd ZU eed<   ee   ed<   defdZy)r'   okprotocolreturnc                     | j                   S N)r.   selfs    N/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/aiohttp/web_ws.py__bool__zWebSocketReady.__bool__6   s    ww    N)__name__
__module____qualname__bool__annotations__r   strr6    r7   r5   r'   r'   1   s    Hsm$ r7   r'   c                   F    e Zd ZdZdddddddddded	ee   d
ededee   dee   dede	ddf fdZ
dEdZdEdZdEdZdEdZdedef fdZdededeeef   fdZdedeeef   fdZdedededdfdZdedefd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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e   ddfd,Z%dFd+e"dee   ddfd-Z&	 dFe'jP                  d.d+edee   d/e)ddfd0Z*dEd1Z+e,jZ                  d'dd2d3e	d(e"d4edefd5Z.d3e,ddfd6Z/d3e,ddfd7Z0dEd8Z1dFdee   de2fd9Z3dd:dee   defd;Z4dd:dee   de"fd<Z5e'jl                  dd=d>e7dee   defd?Z8d+e"ddfd@Z9dHdAZ:de2fdBZ;dCe ddfdDZ< xZ=S )Ir&   Fg      $@NTr>   i  @ )timeoutreceive_timeout	autocloseautoping	heartbeat	protocolscompressmax_msg_sizer@   rA   rB   rC   rD   rE   rF   rG   r0   c                V   t         	|   d       || _        d | _        d | _        d | _        d| _        d| _        d| _        d | _	        d | _
        d | _        d | _        || _        || _        || _        || _        || _        d | _        |
|dz  | _        d | _        || _        || _        y )Ne   )statusFr   g       @)super__init__
_protocols_ws_protocol_writer_reader_closed_closing
_conn_lost_close_code_loop_waiting
_exception_timeout_receive_timeout
_autoclose	_autoping
_heartbeat_heartbeat_cb_pong_heartbeat_pong_response_cb	_compress_max_msg_size)
r4   r@   rA   rB   rC   rD   rE   rF   rG   	__class__s
            r5   rL   zWebSocketResponse.__init__>   s     	$#+/26BF*.:>
8<37 /#!#<@ #,s?D @D!)r7   c                     | j                   !| j                   j                          d | _         | j                  "| j                  j                          d | _        y y r2   )r_   cancelr]   r3   s    r5   _cancel_heartbeatz#WebSocketResponse._cancel_heartbeatb   sS    !!-""))+%)D")%%'!%D *r7   c                    | j                          | j                  m| j                  J t        | j                  | j                  | j                  | j
                   | j
                  j                  j                  nd      | _        y y Nr(   )timeout_ceil_threshold)	re   r\   rU   r   _send_heartbeat_req	_protocol_timeout_ceil_thresholdr]   r3   s    r5   _reset_heartbeatz"WebSocketResponse._reset_heartbeatk   ss     ??&::)))!+$$

99( (,yy':':'R'R"D 'r7   c                    | j                   | j                  s| j                  J | j                  j                  | j                  j                                | j                  | j                  j                          t        | j                  | j                  | j                  | j                   | j                  j                  j                  nd      | _        y y y rg   )r\   rQ   rU   create_taskrO   pingr_   rd   r   _pong_not_receivedr^   rj   rk   rl   r3   s    r5   ri   z!WebSocketResponse._send_heartbeaty   s    ??&t||::))) JJ""4<<#4#4#67%%1&&--/%/''$$

99( (,yy':':'R'R&D" 0<&r7   c                     | j                   W| j                   j                  @d| _        | j                  t        j
                         t        j                         | _        y y y NT)	rj   	transportrQ   _set_code_close_transportr   ABNORMAL_CLOSUREasyncioTimeoutErrorrW   r3   s    r5   rq   z$WebSocketResponse._pong_not_received   sO    99 TYY%8%8%DDL**;+G+GH%224DO &E r7   requestc                    K   | j                   | j                   S | j                  |      \  }}t        |   |       d {   }|J | j	                  |||       |j                          d {    |S 7 57 wr2   )_payload_writer
_pre_startrK   prepare_post_startdrain)r4   ry   r/   writerpayload_writerrb   s        r5   r}   zWebSocketResponse.prepare   s     +'''??73&$ww77)))(F3""$$$	 8 	%s#   ?A<A8.A<1A:2A<:A<zCIMultiDict[str]c                    |j                   }d|j                  t        j                  d      j	                         j                         k7  r8t        dj                  |j                  t        j                                    d|j                  t        j                  d      j	                         vr8t        dj                  |j                  t        j                                    d }t        j                  |v r|t        j                     j                  d      D cg c]  }t        |j                                }}|D ]  }|| j                  v s|} n" t        j                  d|| j                         |j                  t        j                  d      }|d	vrt        d
|       |j                  t        j                         }	 |r!t#        t%        j&                  |            dk7  rt        d|      	 t%        j,                  t/        j0                  |j3                         t4        z         j7                               j9                         }t;        t        j                  dt        j                  dt        j<                  |i      }	d}
d}| j>                  rR|j                  t        j@                        }tC        |d      \  }}
|r!tE        |d|
      }||	t        j@                  <   |r||	t        j                  <   |	|||
fS c c}w # t(        j*                  $ r t        d|      d w xY w)N	websocket z@No WebSocket UPGRADE hdr: {}
 Can "Upgrade" only to "WebSocket".)textupgradezNo CONNECTION upgrade hdr: {},u8   Client protocols %r don’t overlap server-known ones %r)1387zUnsupported version:    zHandshake error: Fr   T)isserver)rF   r   server_notakeover)#headersgetr   UPGRADElowerstripr    format
CONNECTIONSEC_WEBSOCKET_PROTOCOLsplitr=   rM   r   warningSEC_WEBSOCKET_VERSIONSEC_WEBSOCKET_KEYlenbase64	b64decodebinasciiError	b64encodehashlibsha1encoder   digestdecoder	   SEC_WEBSOCKET_ACCEPTr`   SEC_WEBSOCKET_EXTENSIONSr   r   )r4   ry   r   r/   protoreq_protocolsversionkey
accept_valresponse_headers
notakeoverrF   
extensions
enabledexts                 r5   
_handshakezWebSocketResponse._handshake   s    //'++dllB7==?EEGG 5&T\\23	  GKK<BBDD 4;;KK0  &&'1 %T%@%@AGGL EKKM"M 
 ' 
DOO+$H
 !!N!OO ++d88"=** (=gY&GHH kk$001	M#f..s34:$,=cW*EFF ;
 %%LL./668

&( 	 'k)):
 
>> T%B%BCJ $0
T#J Hj'%

 CM !>!>?<DT889	
 	
q6 ~~ 	M (9#&ABL	Ms   $ L2L $M c                 D   |j                   | _         | j                  |      \  }}}}| j                  d       | j                  j	                  |       | j                          || _        |j                  j                  }|J t        |j                  |||      }||fS )NrI   )rF   r   )
rU   r   
set_statusr   updateforce_closer`   rk   rt   r   )r4   ry   r   r/   rF   r   rt   r   s           r5   r|   zWebSocketResponse._pre_start   s    ]]
26//'2J/8ZG$!%%//	$$$ y8

 r7   r/   r   c                 Z   || _         || _        | j                          | j                  }|J t	        |j
                  d|      | _        |j                  j                  t        | j                  | j                  | j                               |j                  j                  d       y )Ni   )looprF   F)rN   rO   rm   rU   r   rk   rP   r/   
set_parserr   ra   r`   
keep_alive)r4   ry   r/   r   r   s        r5   r~   zWebSocketResponse._post_start  s     %zz+G,=,=u4P##DLL$*<*<t~~V	
 	##E*r7   c                     | j                   t        d      	 | j                  |      \  }}}}t        d|      S # t        $ r t        dd       cY S w xY w)NzAlready startedTF)rO   RuntimeErrorr   r'   r!   )r4   ry   _r/   s       r5   can_preparezWebSocketResponse.can_prepare  sa    <<#011	2 $ 8AxA "$11  	/!%..	/s   ; AAc                     | j                   S r2   )rQ   r3   s    r5   closedzWebSocketResponse.closed  s    ||r7   c                     | j                   S r2   )rT   r3   s    r5   
close_codezWebSocketResponse.close_code#  s    r7   c                     | j                   S r2   )rN   r3   s    r5   ws_protocolzWebSocketResponse.ws_protocol'  s       r7   c                     | j                   S r2   )r`   r3   s    r5   rF   zWebSocketResponse.compress+  s    ~~r7   namedefaultc                 f    | j                   }||S |j                  }||S |j                  ||      S )z}Get optional transport information.

        If no value associated with ``name`` is found, ``default`` is returned.
        )rO   rt   get_extra_info)r4   r   r   r   rt   s        r5   r   z WebSocketResponse.get_extra_info/  s@    
 >N$$	N''g66r7   c                     | j                   S r2   )rW   r3   s    r5   	exceptionzWebSocketResponse.exception<  s    r7   r7   messagec                    K   | j                   t        d      | j                   j                  |       d {    y 7 wNCall .prepare() first)rO   r   rp   r4   r   s     r5   rp   zWebSocketResponse.ping?  s4     <<677ll(((   6A >A c                    K   | j                   t        d      | j                   j                  |       d {    y 7 wr   )rO   r   pongr   s     r5   r   zWebSocketResponse.pongD  s4     <<677ll(((r   datac                    K   | j                   t        d      t        |t              st	        dt        |      z        | j                   j                  |d|       d {    y 7 w)Nr   zdata argument must be str (%r)FbinaryrF   )rO   r   
isinstancer=   	TypeErrortypesendr4   r   rF   s      r5   send_strzWebSocketResponse.send_strJ  sZ     <<677$$<tDzIJJllUXFFFs   A A*"A(#A*c                    K   | j                   t        d      t        |t        t        t
        f      st        dt        |      z        | j                   j                  |d|       d {    y 7 w)Nr   z#data argument must be byte-ish (%r)Tr   )	rO   r   r   bytes	bytearray
memoryviewr   r   r   r   s      r5   
send_byteszWebSocketResponse.send_bytesQ  sa     <<677$	: >?ADJNOOllTHEEEs   A+A5-A3.A5)dumpsr   c                R   K   | j                   ||      |       d {    y 7 w)Nr   )r   )r4   r   rF   r   s       r5   	send_jsonzWebSocketResponse.send_jsonX  s"      mmE$K(m;;;s   '%'c                    K   | j                   ry | j                  t        d      | j                          d {    d| _         y 7 w)NzResponse has not been startedT)	_eof_sentr{   r   closer3   s    r5   	write_eofzWebSocketResponse.write_eofa  sC     >>'>??jjl 	s   8A	AA	)coder   r   r   r   c                  K   | j                   t        d      | j                          | j                  }|J | j                  6| j
                  s*|j                  t        d       | j                   d{    | j
                  ryd| _        	 | j                   j                  ||       d{    | j                  }|J |r|j                          d{    | j&                  r| j)                          y| j                  }|J 	 t+        j,                  | j.                        4 d{    |j1                          d{   }ddd      d{    j2                  t4        j6                  k(  r| j                  |j8                         y| j                  t        j                          t        j                         | _        y7 X7 "7 # t        j                  t        j                  f$ r! | j                  t        j                           t"        $ r0}|| _        | j                  t        j                          Y d}~yd}~ww xY w7 %7 7 # 1 d{  7  sw Y   xY w# t        j                  $ r! | j                  t        j                           t"        $ r0}|| _        | j                  t        j                          Y d}~yd}~ww xY ww)zClose websocket connection.Nr   r   FT)rO   r   re   rP   rV   rQ   	feed_datar   r   r{   r   rw   CancelledErrorrx   ru   r   rv   	ExceptionrW   rR   _close_transportasync_timeoutr@   rX   readr   r   CLOSEr   )r4   r   r   r   readerr   excmsgs           r5   r   zWebSocketResponse.closej  s]     <<677 !!! ==$T\\/3--<<	,,$$T7333))F%%%lln$$ ==!!#!!!		$,,T]]; * *"KKM)* * 88y&**3884&&{'C'CD!..0W   4 %&&(<(<= 	**;+G+GH 	!DO**;+G+GH	*)* * * *%% 	**;+G+GH 	!DO**;+G+GH	s   A5K"7G8K"G 0G1)G GG -K"#I4 0I1I4 4II	II4 II4 A3K"G G AI"&IK"IK"I4 II4 I1$I'%I1,I4 4;K/&KK"KK"c                      d| _         || _        y)z6Set the close code and mark the connection as closing.TN)rR   rT   r4   r   s     r5   _set_closingzWebSocketResponse._set_closing  s    r7   c                 2    || _         | j                          y)z+Set the close code and close the transport.N)rT   r   r   s     r5   ru   z+WebSocketResponse._set_code_close_transport  s    r7   c                     | j                   <| j                   j                  %| j                   j                  j                          yyy)zClose the transport.N)rj   rt   r   r3   s    r5   r   z"WebSocketResponse._close_transport  s:    99 TYY%8%8%DII%%' &E r7   c                   K   | j                   t        d      | j                  }|J 	 | j                  t        d      | j                  r9| xj
                  dz  c_        | j
                  t        k\  rt        d      t        S | j                  rt        S 	 |j                         | _        	 t        j                  |xs | j                        4 d {    | j                   j                          d {   }d d d       d {    | j                          | j                  }t!        |d       d | _        	 jD                  t2        jF                  k(  rO| jA                  |jH                         | j                  s&| jJ                  r| j/                  d       d {    |S |jD                  t2        jL                  k(  r!| jA                  t(        j*                         |S |jD                  t2        jN                  k(  r1| jP                  r%| jS                  |jH                         d {    |jD                  t2        jT                  k(  r| jP                  r7|S 7 7 m7 `# 1 d {  7  sw Y   qxY w# | j                  }t!        |d       d | _        w xY w# t"        j$                  $ r  t&        $ rL t(        j*                  | _        | j/                          d {  7   t1        t2        j4                  d d       cY S t6        $ r[}|j8                  | _        | j/                  |j8                         d {  7   t1        t2        j:                  |d       cY d }~S d }~wt<        $ rd}|| _        | jA                  t(        jB                         | j/                          d {  7   t1        t2        j:                  |d       cY d }~S d }~ww xY w7 ;7 w)	Nr   Tz+Concurrent call to receive() is not allowedr
   zWebSocket connection is closed.)r   F)r   )+rP   r   rU   rV   rQ   rS   r)   r   rR   r   create_futurer   r@   rY   r   rm   r   rw   rx   r   r   OKrT   r   r   r   CLOSEDr   r   ERRORr   rW   r   rv   r   r   r   rZ   CLOSINGPINGr[   r   PONG)r4   r@   r   r   waiterr   s         r5   receivezWebSocketResponse.receive  s    <<677zz}}("#PQQ||1$??&??&'HII(())= $ 2 2 4),44W5U@U@UV 8 8$(LL$5$5$778 8))+!]]Fvt,$(DM" xx9??*!!#((+||
 **5*111 J Y...!!+..1 J Y^^+ii)))Y^^+JQ878 8 8 8 "]]Fvt,$(DM''  ?#.>> jjl"" !1!14>>! =#&88 jjchhj/// #t<< ="%!!+">">?jjl"" #t<<	= 2 *s  BO$J& 0'J I#J I,9I&:I,>J 	I)
J J& =A&O$#O$BO$/O!03O$#J &I,)J ,I?2I53I?:J !J##J& &AO*K-+ OO$O0M+MM+%O&O$+O79O0N31OOO$OO$!O$r@   c                  K   | j                  |       d {   }|j                  t        j                  k7  r/t	        dj                  |j                  |j                              t        t        |j                        S 7 jw)Nz.Received message {}:{!r} is not WSMsgType.TEXT)	r  r   r   TEXTr   r   r   r   r=   r4   r@   r   s      r5   receive_strzWebSocketResponse.receive_str  sg     LL))88y~~%@GGHHchh 
 C"" *s   BBA+Bc                   K   | j                  |       d {   }|j                  t        j                  k7  r&t	        d|j                   d|j
                  d      t        t        |j
                        S 7 aw)NzReceived message :z is not bytes)r  r   r   BINARYr   r   r   r   r  s      r5   receive_byteszWebSocketResponse.receive_bytes  sb     LL))88y'''/z388,mTUUE388$$ *s   A;A9A"A;)loadsr@   r  c                R   K   | j                  |       d {   } ||      S 7 w)Nr  )r  )r4   r  r@   r   s       r5   receive_jsonzWebSocketResponse.receive_json  s-      %%g%66T{ 7s   '%'c                     K   t        d      w)Nz"Cannot call .write() for websocket)r   )r4   r   s     r5   writezWebSocketResponse.write
  s     ?@@s   c                     | S r2   r>   r3   s    r5   	__aiter__zWebSocketResponse.__aiter__  s    r7   c                    K   | j                          d {   }|j                  t        j                  t        j                  t        j
                  fv rt        |S 7 Gwr2   )r  r   r   r   r   r   StopAsyncIteration)r4   r   s     r5   	__anext__zWebSocketResponse.__anext__  sG     LLN"88	):):I<L<LMM$$
 #s   A AAA r   c                 X    d| _         | j                  t        | j                  |       y y rs   )rR   rP   r   )r4   r   s     r5   _cancelzWebSocketResponse._cancel  s(     <<#$,,, $r7   )r0   Nr2   )r7   )r0   r&   )>r8   r9   r:   _length_checkfloatr   r;   r   r=   intrL   re   rm   ri   rq   r"   r   r}   r   r   r   r|   r~   r'   r   propertyr   r   r   rF   r   r   BaseExceptionr   r   rp   r   r   r   jsonr   r   r   r   r   r   r   r   ru   r   r   r  r  r  r  r   r  r  r  r  r  __classcell__)rb   s   @r5   r&   r&   :   s   M
 +/%)#%+"* "* "%	"*
 "* "* E?"* C="* "* "* 
"*H&&5
[ 
5I 
S
"S
	!3d2	3S
j +  %_8L2M  "+"+.1+;J+	+"2; 2> 2     HSM     !Xc] ! ! $  73 7 7 78M2 )% )$ )
)% )$ )G3 G(4. GD GFU Fhtn FPT F $(<
 "ZZ<< 4.<
 < 
< )^^cQU::6;:JN:	:x     
 k  d  
(
=Xe_ =	 =~ ?C #HUO #s # AE %huo % % '+jjT#;CE?	A A$ A -= -T -r7   r&   )<rw   r   r   r   r  systypingr   r   r   r   r   r   attr	multidictr	   r   r   abcr   helpersr   r   r   httpr   r   r   r   r   r   r   r   r   r   r   logr   streamsr   r   typedefsr   r   web_exceptionsr    r!   web_requestr"   web_responser#   version_infor   __all__r)   r  r<   sr'   r&   r>   r7   r5   <module>r0     s         
 > >  !  % : :     4 . 9 $ (w# )* 5: ) T$d3  4a- a-r7   