
    8Cfe#                        d dl mZ d dlZd dlmZmZ d dlmZ d dlm	Z	m
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mZmZ d d
lmZ d dlmZ d dlmZ d dlmZ erd dlm Z   G d d      Z! G d d      Z"y)    )annotationsN)TYPE_CHECKINGOptional)Header)
BadRequestServerError)Default)Stage)error_loggerlogger)ASGIReceive	ASGIScopeASGISendMockTransport)Request)BaseHTTPResponse)ConnInfo)WebSocketConnection)Sanicc                  <    e Zd Z	 	 	 	 	 	 	 	 ddZddZddZddZy)Lifespanc                *   || _         || _        || _        || _        d| j                   j                  j
                  v rt        j                  dddi       d| j                   j                  j
                  v rt        j                  dddi       y y )Nzserver.init.beforezYou have set a listener for "before_server_start" in ASGI mode. It will be executed as early as possible, but not before the ASGI server is started.	verbosity   )extrazserver.shutdown.afterzYou have set a listener for "after_server_stop" in ASGI mode. It will be executed as late as possible, but not after the ASGI server is stopped.)	sanic_appscopereceivesendsignal_router
name_indexr   debug)selfr   r   r   r   s        J/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/sanic/asgi.py__init__zLifespan.__init__   s     #
	4>>#?#?#J#JJLL. #A& #dnn&B&B&M&MMLL. #A& N    c                t  K   | j                   j                          d{    | j                   j                  dd       d{    | j                   j                  dd       d{    t        | j                   j                  j
                  t              st        j                  d       yy7 7 o7 Mw)ay  
        Gather the listeners to fire on server start.
        Because we are using a third-party server and not Sanic server, we do
        not have access to fire anything BEFORE the server starts.
        Therefore, we fire before_server_start and after_server_start
        in sequence since the ASGI lifespan protocol only supports a single
        startup event.
        NinitbeforeafterzYou have set the USE_UVLOOP configuration option, but Sanic cannot control the event loop when running in ASGI mode.This option will be ignored.)	r   _startup_server_event
isinstanceconfig
USE_UVLOOPr	   warningswarnr#   s    r$   startupzLifespan.startup1   s      nn%%'''nn**68<<<nn**67;;;$..//::GDMM/ E	 	(<;s4   B8B2#B8B4#B8(B6)A
B84B86B8c                   K   | j                   j                  dd       d{    | j                   j                  dd       d{    y7 )7 w)au  
        Gather the listeners to fire on server stop.
        Because we are using a third-party server and not Sanic server, we do
        not have access to fire anything AFTER the server stops.
        Therefore, we fire before_server_stop and after_server_stop
        in sequence since the ASGI lifespan protocol only supports a single
        shutdown event.
        shutdownr)   Nr*   )r   r,   r2   s    r$   r5   zLifespan.shutdownE   sF      nn**:x@@@nn**:w??? 	A?s!    AA#AAAAc                  K   	 | j                          d {   }|d   dk(  r5	 | j                          d {    | j                  ddi       d {    n=|d   dk(  r5	 | j                          d {    | j                  ddi       d {    y 7 7 `7 G# t        $ rE}t	        j
                  |       | j                  dt        |      d       d {  7   Y d }~Pd }~ww xY w7 x7 _# t        $ rE}t	        j
                  |       | j                  dt        |      d       d {  7   Y d }~y d }~ww xY ww)	Ntypezlifespan.startupzlifespan.startup.completezlifespan.startup.failed)r7   messagezlifespan.shutdownzlifespan.shutdown.completezlifespan.shutdown.failed)r   r3   r   	Exceptionr   	exceptionstrr5   )r#   r8   es      r$   __call__zLifespan.__call__Q   s;     LLN*Gv"44K,,.(( ))V-H$IJJJ$77L--/)) ))V-I$JKKK- * ) K !  **1-))!:s1vN   * L !  **1-))!;AO  
 s   EBEB BB EBE"C2 5C.6C2 :EC0EB E	C+&5C&CC&!E&C++E.C2 0E2	E ;5D;0D31D;6E;E  EN)r   r   r   r   r   r   returnNoner>   r?   )__name__
__module____qualname__r%   r3   r5   r=    r&   r$   r   r      s7     )4?GO	2(
@r&   r   c                      e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   ded<   ded<   e	 	 	 	 	 	 	 	 	 	 dd       ZddZd ZddZd Z	dZ
ddZy)ASGIAppr   r   r   requestr   	transportr   lifespanzOptional[WebSocketConnection]wsr
   stagezOptional[BaseHTTPResponse]responsec           
       K    |        }d |_         ||_        t        |||      |_        |j                  |j                  _        t
        j                  |_        d |_        d|j                  j                  _
        t        |j                  d|j                  j                         	 t        |j                  dg       D cg c](  \  }}|j                  d      |j                  d      f* c}}      }|d   d	k(  r|d
   }	|d   }
n9|d   dk(  r&d}	d}
|j                  j%                  ||      |_         nt'        d      |d   |d   }}|r|j)                  dd      d   }d||fz  }|j*                  xs t,        } ||||	|
|j                  |      |_        |j0                  j3                  |j.                         ||j.                  _        d|_        t9        |j                        |j.                  _        |j                  j=                  ddd|j.                  id       d {    |S c c}}w # t         $ r t#        d      w xY w7 $w)NTadd_taskheadersASCIIsurrogateescape)errorsz1Header names can only contain US-ASCII charactersr7   httphttp_versionmethod	websocketz1.1GETzReceived unknown ASGI scoperaw_pathquery_string   ?r   r   s   %b?%bzhttp.lifecycle.requestrG   F)inlinecontextfail_not_found)rJ   r   r   rH   loopr
   IDLErK   rL   state
is_startedsetattrcreate_taskr   getdecodeUnicodeDecodeErrorr   create_websocket_connectionr   splitrequest_classr   rG   _currentsetstreamrequest_bodyr   	conn_infodispatch)clsr   r   r   r   instancekeyvaluerO   versionrU   	url_bytesqueryri   s                 r$   createzASGIApp.createt   sc     5&*5'4@"+.. .2  +""J	0J0JK	 ',ii	2&>
 #U 

7+,=>G =F"N+G8_F6]k)GF",,HHgHK ;<< ,eN.C5	!a03I Iu#55I!//:7(
 	""8#3#34"* $%-h.@.@%A"  ))$ 0 01 	 * 
 	
 	
 m " 	C 	N	
s=   B%I(H7 -H1
/H7 7D3I*I+I1H7 7IIc                  K   | j                   t        j                  u rt        j                  | _         | j                  j                          d{   }|j                  dd      }|j                  dd      s
d| _        |sy|S 7 4w)zS
        Read and stream the body in chunks from an incoming ASGI message.
        Nbodyr&   	more_bodyF)rK   r
   r_   REQUESTrH   r   rd   rm   )r#   r8   ry   s      r$   readzASGIApp.read   sn      ::#DJ..00{{63'{{;. %D 1s   ABB5Bc                  K   | j                   r-| j                          d {   }|r| | j                   r,y y 7 w)N)rm   r|   )r#   datas     r$   	__aiter__zASGIApp.__aiter__   s3     $D
 $s    ?=??c                    | j                   t        j                  ur t        j                  | _         t	        d      | j
                  d | j
                  _        | |c|_        | _        |S )NzResponse already started)rK   r
   HANDLERFAILEDRuntimeErrorrL   rl   )r#   rL   s     r$   respondzASGIApp.respond   sT    ::U]]*DJ9::==$#'DMM )-x&r&   c                  K   |rt         j                  nt         j                  | _        | j                  rg| j                  d c}| _        | j
                  j                  d|j                  |j                  d       d {    t        |dd       }|r	|r||z   n|}| j
                  j                  dt        |d      r|j                         n|| d       d {    y 7 a7 w)Nzhttp.response.start)r7   statusrO   ry   zhttp.response.bodyencode)r7   ry   rz   )r
   r_   RESPONSErK   rL   rH   r   r   processed_headersgetattrhasattrr   )r#   r~   
end_streamrL   response_bodys        r$   r   zASGIApp.send   s     #-UZZ5>>
==&*mmT#Hdm..%%1&oo'99   $Hfd;M/3}t+nn!!,)0x)@d!+^
 	
 	
	
s%   A>C& C"AC&C$C&$C&Tc                  K   	 t         j                  | _        | j                  j	                  | j
                         d{    y7 # t        $ r}	 | j                  j                  | j
                  |       d{  7   nK# t        $ r:}| j                  j                  | j
                  |d       d{  7   Y d}~nd}~ww xY wY d}~yY d}~yd}~ww xY ww)z.
        Handle the incoming request.
        NF)r
   r   rK   r   handle_requestrG   r9   handle_exception)r#   r<   excs      r$   r=   zASGIApp.__call__   s     	PDJ..//=== 	PPnn55dllAFFF Pnn55dllCOOOPO G	Ps|   C=A	 AA	 CA	 		C)B<A?=BC	C*C6B97C<CCC	
CCCN)
r   r   r   r   r   r   r   r   r>   rF   )r>   zOptional[bytes])rL   r   r@   )rA   rB   rC   __annotations__classmethodrw   r|   r   r   r   _asgi_single_callabler=   rD   r&   r$   rF   rF   k   s    %%L((II I 	I
 I 
I IV
, !Pr&   rF   )#
__future__r   r0   typingr   r   sanic.compatr   sanic.exceptionsr   r   sanic.helpersr	   
sanic.httpr
   	sanic.logr   r   sanic.models.asgir   r   r   r   sanic.requestr   sanic.responser   sanic.serverr   "sanic.server.websockets.connectionr   sanicr   r   rF   rD   r&   r$   <module>r      sR    "  *  4 !  * M M ! + ! B Q QhUP UPr&   