
    YjO*                       d dl mZ d dlZd dlZd dlZd dlm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 ddlmZmZ dd	lmZ d
dlmZmZ eeej4                  f   Zeeej4                  f   Zej:                  g ej<                  e   f   Zej:                  egej@                  d   f   Z!ej:                  eee!gej@                  d   f   Z" G d de#      Z$ G d de$      Z% G d de$      Z& G d d      Z' G d de      Z(y)    )annotationsN)TracebackType)StapledObjectStream)CloseReason   )RequestResponse)ASGITransport_ASGIApp)AsyncByteStream   )WebSocketDisconnectWebSocketUpgradeErrorNNNc                      e Zd Zy)ASGIWebSocketTransportErrorN)__name__
__module____qualname__     [/var/www/html/vmm-quimica/venv/lib/python3.12/site-packages/httpx2/websockets/_transport.pyr   r      s    r   r   c                      e Zd ZddZy)UnhandledASGIMessageTypec                    || _         y N)messageselfr   s     r   __init__z!UnhandledASGIMessageType.__init__   s	    r   Nr   MessagereturnNoner   r   r   r    r   r   r   r   r      s    r   r   c                      e Zd ZddZy)UnhandledWebSocketEventc                    || _         y r   )event)r   r)   s     r   r    z UnhandledWebSocketEvent.__init__#   s	    
r   N)r)   zwsproto.events.Eventr#   r$   r%   r   r   r   r'   r'   "   s    r   r'   c                      e Zd Z	 d	 	 	 	 	 	 	 	 	 ddZ	 	 ddZ	 	 	 	 	 	 	 	 ddZdddZdddZddZddZ	ddd	Z
dd
ZddZy)ASGIWebSocketAsyncNetworkStreamc                   || _         || _        t        t        j                  t
           t        j                         | _        t        t        j                  t
           t        j                         | _	        || _
        || _        t        j                  t        j                  j                        | _        | j                   j#                  |d   |d          d| _        y )N)max_buffer_sizeheaderspathF)appscoper   anyiocreate_memory_object_streamr"   mathinf_receive_queue_send_queue_task_group_initial_receive_timeoutwsprotoWSConnectionConnectionTypeSERVER
connectioninitiate_upgrade_connection	_aentered)r   r0   r1   
task_groupinitial_receive_timeouts        r   r    z(ASGIWebSocketAsyncNetworkStream.__init__(   s     
153T3TU\3]nrnvnv3wx.0Q0QRY0Zkoksks0tu%(?%!..w/E/E/L/LM33E)4DeFmTr   c           
     F  K   | j                   rt        d      d| _         | j                  j                  | j                         t        j                         4 d {   }|j                  | j                         | j                  ddi       d {    	 | j                  | j                         d {   }|d   dk(  r6|j                          d {    t        |d   |j                  d            |d   d	k(  r|d
   }|d   }g }	 | j                          d {   }|d   dk(  sJ |j                  |d          |j                  dd      snJ|j                          d {    t!        t#        ||dj%                  |                  |d   dk(  sJ | | j'                  |      f}|j)                         | _        d d d       d {    |S 7 ~7 K7 *# t        $ r}t        d      |d }~ww xY w7 *7 7 7 3# 1 d {  7  sw Y   S xY ww)NzECannot use ASGIWebSocketAsyncNetworkStream in a context manager twiceTtypezwebsocket.connectzPWebSocket didn't accept the connection in time. Did you forget to call accept()?websocket.closecodereasonzwebsocket.http.response.startstatusr.   zwebsocket.http.response.bodybody	more_bodyFr   )r.   contentzwebsocket.accept)r@   RuntimeErrorr8   
start_soon_run
contextlibAsyncExitStackpush_async_callbackaclosesendreceiver9   TimeoutErrorr   getappendr   r	   join_build_accept_responsepop_all_exit_stack)r   stackr   estatus_coder.   rI   retvals           r   
__aenter__z*ASGIWebSocketAsyncNetworkStream.__aenter__9   s      >>fgg##DII.,,. !	/ !	/%%%dkk2))V%89::: $T-J-J KK v"33lln$$)'&/7;;x;PQQ v"AA#*8#45<Y5G$&$(LLN2G"6?.LLLLKK0";;{E:  lln$$+H['[^[c[cdh[i,jkk6?&8888466w??F$}}DC!	/ !	/D E!	/: L "f % 3 %9!	/ !	/ !	/ !	/D s   AH!GH!"2HGHG%8G"9G%=HHA
H#H$A	H-H.AH
H!H	H!H"G%%	G?.G::G??HHH	H!HHHH!c                X   K   | j                   j                  |||       d {   S 7 wr   )r[   	__aexit__)r   exc_typeexc_valexc_tbs       r   rb   z)ASGIWebSocketAsyncNetworkStream.__aexit__d   s)      %%//'6JJJJs   !*(*Nc                  K   | j                  |       d {   }|d   }|dvrt        |      |dk(  re|j                  d      }|t        j                  j                  |      }|j                  d      }|Kt        j                  j                  |      }n+|dk(  r&t        j                  j                  |d   |d	         }| j                  j                        S 7 ȭw)
N)timeoutrD   >   websocket.sendrE   rh   textbytesrE   rF   rG   )
rT   r   rV   r:   eventsTextMessageBytesMessageCloseConnectionr>   rS   )r   	max_bytesrg   r   rD   data_strr)   
data_bytess           r   readz$ASGIWebSocketAsyncNetworkStream.readl   s     !%g!>>v<<*733 ###*;;v#6H#228<'.{{7';J%33J?&&NN2276?GHDUVE##E**# ?s   C#C!C	C#c                  K   | j                   j                  |       | j                   j                         D ]  }t        |t        j                  j
                        r)t        |t        j                  j                        r2| j                  d|j                  |j                  d       d {    t        |t        j                  j                        r'| j                  d|j                  d       d {    t        |t        j                  j                        r(| j                  d|j                  d       d {    t        |       y 7 7 `7 w)Nwebsocket.disconnectrD   rF   rG   zwebsocket.receive)rD   ri   )rD   rj   )r>   receive_datark   
isinstancer:   r   rn   rS   rF   rG   rl   datarm   r'   )r   bufferrg   r)   s       r   writez%ASGIWebSocketAsyncNetworkStream.write   s    $$V,__++- 	5E%!7!78E7>>#A#ABii 6 %

"',,   E7>>#=#=>ii)<ejj QRRRE7>>#>#>?ii)<uzz RSSS-e44!	5 SSs8   B/E!1E2A
E!<E=A
E!EE!E!E!c                F  K   t        j                  t        j                        5  | j	                  ddi       d {    d d d        | j
                  j                          d {    | j                  j                          d {    y 7 Q# 1 sw Y   PxY w7 57 w)NrD   rt   )rO   suppressr2   ClosedResourceErrorrS   r6   rR   r7   )r   s    r   rR   z&ASGIWebSocketAsyncNetworkStream.aclose   s       !:!:; 	>))V%;<===	>!!((***%%''' >	> 	>*'sJ   $B!BBB%B!'B(!B!	B
B!BBB!B!c                V   K   | j                   j                  |       d {    y 7 wr   )r6   rS   r   s     r   rS   z$ASGIWebSocketAsyncNetworkStream.send   s      !!&&w///s   )')c                   K   |t         j                  }t        j                  |      5  | j                  j                          d {   cd d d        S 7 # 1 sw Y   y xY wwr   )r4   r5   r2   
fail_afterr7   rT   )r   rg   s     r   rT   z'ASGIWebSocketAsyncNetworkStream.receive   sT     ?hhGg& 	4))1133	4 	43	4 	4s.   (A$AA	A
A$AA!A$c                  K   | j                   }| j                  j                  }| j                  j                  }	 | j                  |||       d{    y7 # t        $ rv}dt        j                  t        |      d}t        j                  t        j                        5   ||       d{  7   ddd       n# 1 sw Y   nxY wY d}~yY d}~yd}~ww xY ww)zE
        The sub-thread in which the websocket session runs.
        NrE   ru   )r1   r6   rT   r7   rS   r0   	Exceptionr   INTERNAL_ERRORstrrO   r|   r2   r}   )r   r1   rT   rS   r]   r   s         r   rN   z$ASGIWebSocketAsyncNetworkStream._run   s      

%%--$$		$((5'4000 	$)#22a&G
 $$U%>%>? $7m##$ $ $ $ $	$se   9CA AA CA 	C#A C#B>/B20B>5	C>C	C

CCCc                    |j                  dd       }|j                  dg       }| j                  j                  t        j                  j                  ||            S )Nsubprotocolr.   )r   extra_headers)rV   r>   rS   r:   rk   AcceptConnection)r   r   r   r.   s       r   rY   z6ASGIWebSocketAsyncNetworkStream._build_accept_response   sV    kk-6++i,##NN++'% , 
 	
r   )      ?)
r0   ASGIAppr1   ScoperA   zanyio.abc.TaskGrouprB   floatr#   r$   )r#   z-tuple[ASGIWebSocketAsyncNetworkStream, bytes])rc   type[BaseException] | Nonerd   BaseException | Nonere   TracebackType | Noner#   zbool | Noner   )ro   intrg   float | Noner#   rj   )ry   rj   rg   r   r#   r$   )r#   r$   r!   )rg   r   r#   r"   )r   r"   r#   rj   )r   r   r   r    r`   rb   rr   rz   rR   rS   rT   rN   rY   r   r   r   r+   r+   '   s     *-  (	
 "' 
")	6)VK,K &K %	K
 
K+(5((04$$
r   r+   c                       e Zd Z	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 d fdZd	dZ	 	 	 d
	 	 	 	 	 	 	 d fdZd fdZ	 	 	 	 ddZ	 	 	 	 	 	 ddZ xZ	S )ASGIWebSocketTransportc                F    t         |   ||||       d | _        || _        y r   )superr    r[   r9   )r   r0   raise_app_exceptions	root_pathclientrB   	__class__s         r   r    zASGIWebSocketTransport.__init__   s)     	2IvF=A(?%r   c                *  K   t        j                         4 d {   }|j                  t        j                                d {   | _        |j                         | _        d d d       d {    | S 7 [7 27 
# 1 d {  7  sw Y   | S xY wwr   )rO   rP   enter_async_contextr2   create_task_groupr8   rZ   r[   )r   r\   s     r   r`   z!ASGIWebSocketTransport.__aenter__   s     ,,. 	/ 	/%%*%>%>u?V?V?X%YYD$}}D	/ 	/ 		/Y	/ 	/ 	/ 	/ sV   BA7B'A=A9A=%B0A;1B9A=;B=BBBBc                   K   t         |   |||       d {    | j                  J | j                  j                  |||       d {    y 7 87 wr   )r   rb   r[   )r   rc   rd   re   r   s       r   rb   z ASGIWebSocketTransport.__aexit__   sY      g'6:::+++((7FCCC 	;Cs!   AA2AAAAc                  K   |j                   j                  }|j                  }|dv s|j                  d      dk(  rg }|j                  d      x}|j	                  d      }d|j                   j
                  |j                   j                  | j                  ||j                   j                  |j                  j                  D cg c]  \  }}|j                         |f c}}| j                  |j                   j                  |j                   j                  f|d
}| j                  ||       d {   S t        	| A  |       d {   S c c}}w 7 !7 w)N>   wswssupgrade	websocketzsec-websocket-protocol,)
rD   r/   raw_pathr   schemequery_stringr.   r   serversubprotocols)urlr   r.   rV   splitr/   r   r   queryrawlowerr   hostport_handle_ws_requestr   handle_async_request)
r   requestr   r.   r   subprotocols_headerkvr1   r   s
            r   r   z+ASGIWebSocketTransport.handle_async_request   s&    ##//]"gkk)&<&K&(L'.{{3K'LL#Y288= $((#KK00!^^  ' 1 19@9L9LMv1QWWYNM++";;++W[[-=-=> ,E 00%@@@W1'::: N
 A:s1   CE	E%AE7E8EEEEc                  K   t        | j                  | j                  | j                  | j                        }| j
                  J | j
                  j                  |       d {   }|j                  |       y 7 wr   )r+   r0   r1   r8   r9   r[   r   started)r   task_statusstreamresults       r   +_create_asgi_websocket_async_network_streamzBASGIWebSocketTransport._create_asgi_websocket_async_network_stream   ss     
 1HHJJ))	
 +++'';;FCCF# Ds   A#A>%A<&A>c           
       K   t        |j                  t              sJ || _        | j                  j                  | j                         d {   \  }}|j                  d      j                         }|dd  D cg c]L  }|j                         dk7  r7t        j                  t        t        t        f   |j                  dd            N }}t        d|d|i      S 7 c c}w w)Nzutf-8r    z: e   network_stream)r^   r.   
extensions)rw   r   r   r1   r8   startr   decode
splitlinesstriptypingcasttupler   r   r	   )r   r   r1   r   accept_responseaccept_response_linesliner.   s           r   r   z)ASGIWebSocketTransport._handle_ws_request  s     
 '../:::
(,(8(8(>(>t?o?o(p"p / 6 6w ? J J L .ab1
zz|r! KKc3hD!)<=
 
 (&1
 	
 #q
s%   AC&C-C&<AC!C&!C&)Tr   )z	127.0.0.1{   r   )r0   r   r   boolr   r   r   ztuple[str, int]rB   r   r#   r$   )r#   r   r   )rc   r   rd   r   re   r   r#   r$   )r   r   r#   r	   )r   zCanyio.abc.TaskStatus[tuple[ASGIWebSocketAsyncNetworkStream, bytes]]r#   r$   )r   r   r1   r   r#   r	   )
r   r   r   r    r`   rb   r   r   r   __classcell__)r   s   @r   r   r      s     &*"4),
@
@ #
@ 	
@
  
@ "'
@ 

@ 04(,'+	D,D &D %	D
 
D;2$ Y$ 
	$

 
 
	
r   r   ))
__future__r   rO   r4   r   typesr   r2   r:   anyio.streams.stapledr   wsproto.frame_protocolr   _modelsr   r	   _transports.asgir
   r   _typesr   _exceptionsr   r   dictr   Anyr   r"   Callable	AwaitableReceive	CoroutineSendr   r   r   r   r'   r+   r   r   r   r   <module>r      s    "       5 . ' 6 $ CS&**_
sFJJ

//"f..w77
8w 0 01A BBC
//5'40&2B2BCS2TT
U	) 	: 
9 
V
 V
rZ
] Z
r   