
    i                     x    S SK r S SKrS SKrS SKJr  SSKJr  S SKrS SK	rS r
S rS r " S S	5      rS
\\\S.rg)    N)urlsplit   )
exceptionsc                 T   ^   " U 4S jS[         R                  R                  5      nU$ )Nc                      >^  \ rS rSrU U4S jrU U4S jrU4S jrU4S jrU4S jrS r	S r
S	 rU 4S
 jrS rSrU =r$ )$get_tornado_handler.<locals>.Handler   c                   > [         TU ]  " U0 UD6  [        TR                  [        5      (       a+  TR                  S:X  a  S U l        O$TR                  /U l        OTR                  U l        [        R                  " 5       U l        g )N*)	super__init__
isinstancecors_allowed_originsstrallowed_originsasyncioQueuereceive_queue)selfargskwargs	__class__engineio_servers      [/home/admin/cozy_coffee/venv/lib/python3.13/site-packages/engineio/async_drivers/tornado.pyr   -get_tornado_handler.<locals>.Handler.__init__   sq    Gd-f-/>>DD"773>+/D( (<<,>D( (7'K'K$!(D    c                 &  >#    U R                   R                  R                  SS5      R                  5       S:X  a7  [        TU ]  " U0 UD6n[
        R                  " U5      (       a  UI S h  vN   g g TR                  U 5      I S h  vN   g  N  N7f)NUpgrade 	websocket)requestheadersgetlowerr   inspectiscoroutinehandle_request)r   r   r   retr   r   s       r   r#   (get_tornado_handler.<locals>.Handler.get   s|     ||##''	26<<>+Mgk4262&&s++II , &44T::: :s$   A)B,B-BBBBc                 X   >#    [         R                  " TR                  U 5      5        g 7fN)r   ensure_futurer'   r   r   r   r   s      r   open)get_tornado_handler.<locals>.Handler.open!   s     !!/"@"@"FGs   '*c                 D   >#    TR                  U 5      I S h  vN   g  N7fr+   r'   r-   s      r   post)get_tornado_handler.<locals>.Handler.post%        !00666     c                 D   >#    TR                  U 5      I S h  vN   g  N7fr+   r1   r-   s      r   options,get_tornado_handler.<locals>.Handler.options(   r4   r5   c                 V   #    U R                   R                  U5      I S h  vN   g  N7fr+   )r   putr   messages     r   
on_message/get_tornado_handler.<locals>.Handler.on_message+   s     $$((111s   )')c                 R   #    U R                   R                  5       I S h  vN $  N7fr+   )r   r#   r   s    r   get_next_message5get_tornado_handler.<locals>.Handler.get_next_message.   s      ++//1111s   '%'c                 :    U R                   R                  S 5        g r+   )r   
put_nowaitr@   s    r   on_close-get_tornado_handler.<locals>.Handler.on_close1   s    ))$/r   c                 \   > U R                   b  XR                   ;   a  g[        TU ]	  U5      $ )NT)r   r   check_origin)r   originr   s     r   rH   1get_tornado_handler.<locals>.Handler.check_origin4   s-    ##+v9M9M/M7'//r   c                     0 $ r+    r@   s    r   get_compression_options<get_tornado_handler.<locals>.Handler.get_compression_options9   s    Ir   )r   r   )__name__
__module____qualname____firstlineno__r   r#   r.   r2   r7   r=   rA   rE   rH   rM   __static_attributes____classcell__)r   r   s   @r   Handlerr      s;    
	1	;	H	7	7	2	2	0	0
	 	r   rU   )tornador    WebSocketHandler)r   rU   s   ` r   get_tornado_handlerrX      s#    /'##44 /b Nr   c                 p    " S S5      nU R                   R                  n[        U R                   R                  5      nU R                   R                  nU R                   R                  (       a  USU R                   R                  -   -  n0 SU" U5      _S[
        R                  _SS_SS	_S
S_SS_SS_SS_SU R                   R                  _SU R                   R                  =(       d    S_SU_SSU R                   R                  -  _SS_SS_SS_SS_SU _nU R                   R                  R                  5        HF  u  pgUR                  5       nUS:X  a  XuS'   M!  US:X  a  XuS '   M-  S!UR                  S"S#5      -  nXuU'   MH     UR                  S$S%5      US&'   UR                  n	XS''   SUS('   U$ ))zThis function takes the arguments passed to the request handler and
uses them to generate a WSGI compatible environ dictionary.
c                   $    \ rS rSrS rSS jrSrg)+translate_request.<locals>.AwaitablePayloadD   c                 $    U=(       d    SU l         g Nr   payload)r   r`   s     r   r   4translate_request.<locals>.AwaitablePayload.__init__E   s    ">cDLr   Nc                    #    Uc  U R                   nSU l         U$ U R                   S U nU R                   US  U l         U$ 7fr^   r_   )r   lengthrs      r   read0translate_request.<locals>.AwaitablePayload.readH   sJ     ~LL" H LL&)#||FG4Hs   >A r_   r+   )rO   rP   rQ   rR   r   re   rS   rL   r   r   AwaitablePayloadr[   D   s    	*	r   rg   ?z
wsgi.inputzwsgi.errorszwsgi.version)   r   z
wsgi.asyncTzwsgi.multithreadFzwsgi.multiprocesszwsgi.run_onceSERVER_SOFTWAREaiohttpREQUEST_METHODQUERY_STRINGr   RAW_URISERVER_PROTOCOLzHTTP/%sREMOTE_ADDRz	127.0.0.1REMOTE_PORT0SERVER_NAMESERVER_PORTtornado.handlerzCONTENT-TYPECONTENT_TYPEzCONTENT-LENGTHCONTENT_LENGTHzHTTP_%s-_HTTP_X_FORWARDED_PROTOhttpzwsgi.url_scheme	PATH_INFOSCRIPT_NAME)r!   bodyr   pathquerysysstderrmethodversionr"   itemsupperreplacer#   )
handlerrg   r`   	uri_partsfull_urienvironhdr_name	hdr_valuekey	path_infos
             r   translate_requestr   @   s     oo""G--.I##HC'//////&w/szz 	 	d	
 	E 	U 	 	9 	'//00 	--3 	8 	9w'>'>> 	{ 	s 	y  	s!" 	7#G(  '66<<>>>#~%&/N#))(1$%(**344   ? ")-Ev!NGI$KGMNr   c                     US   n UR                  [        U R                  5       S   5      5        U H  u  pVUR	                  XV5        M     UR                  U5        UR                  5         g! [         a     gf = f)zLThis function generates an appropriate response object for this async
mode.
ru   r   N)
set_statusintsplitRuntimeError
set_headerwritefinish)statusr"   r`   r   tornado_handlerheadervalues          r   make_responser      s~     /0O""3v||~a'8#9:
 !""61 !'"   	s   +A0 0
A=<A=c                   6    \ rS rSrSrS rS rS rS rS r	Sr
g	)
	WebSocket   zw
This wrapper class provides a tornado WebSocket interface that is
somewhat compatible with eventlet's implementation.
c                     Xl         S U l        g r+   )r   r   )r   r   servers      r   r   WebSocket.__init__   s    #r   c                 b   #    US   U l         Xl        U R                  U 5      I S h  vN   g  N7f)Nru   )r   r   r   )r   r   s     r   __call__WebSocket.__call__   s*     &'89ll4   s   %/-/c                 @   #    U R                   R                  5         g 7fr+   )r   closer@   s    r   r   WebSocket.close   s     ""$s   c                    #     U R                   R                  U[        U[        5      S9  g ! [        R
                  R                   a    [        R                  " 5       ef = f7f)N)binary)	r   write_messager   bytesrV   r    WebSocketClosedErrorr   EngineIOErrorr;   s     r   sendWebSocket.send   sX     	-  ..
7E : / <  55 	-**,,	-s   A$(- A$4A!!A$c                    #    U R                   R                  5       I S h  vN n[        U[        5      (       d  [        U[        5      (       d
  [        5       eU$  N:7fr+   )r   rA   r   r   r   OSError)r   msgs     r   waitWebSocket.wait   sG     ((99;;#u%%sC(()O
	 <s   AA;A)r   r   r   N)rO   rP   rQ   rR   __doc__r   r   r   r   r   rS   rL   r   r   r   r      s     $!
%-r   r   T)r   r   r   r    )r   r%   r   urllib.parser   r   r   tornado.webrV   tornado.websocketrX   r   r   r   _asyncrL   r   r   <module>r      sK      
 !   2j>B" B *"	
r   