
    F jW                       S SK Jr  S SKrS SKrS SKrS SKr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Jr  S SKJrJr  S SKrS SKJrJrJrJrJr  S SKJr  S S	KJr  S S
KJrJrJ r J!r!  S SK"J#r#J$r$J%r%J&r&J'r'  S SK(J)r)  \RT                  " S5      r+\RT                  " S5      r,SS jr-\." SS5       V s0 s H  o \-" U 5      _M     sn r/ " S S\R`                  5      r1 " S S5      r2gs  sn f )    )annotationsN)TimerHandle)deque)Callable)AnyLiteral)ASGI3ApplicationASGIReceiveEventASGISendEventHTTPRequestEvent	HTTPScope)Config)TRACE_LOG_LEVEL)CLOSE_HEADERHIGH_WATER_LIMITFlowControlservice_unavailable)get_client_addrget_local_addrget_path_with_query_stringget_remote_addris_ssl)ServerStates   [ -()<>@,;:\[\]={} 	\\"]s	   [ -
-]c                     [         R                  " U 5      R                  R                  5       nSR                  S[        U 5      R                  5       SUS/5      $ ! [         a    Sn N;f = f)N    s	   HTTP/1.1        
)http
HTTPStatusphraseencode
ValueErrorjoinstr)status_coder    s     Oc:\Py\emelo-reg\venv\Lib\site-packages\uvicorn/protocols/http/httptools_impl.py_get_status_liner'   "   sd    -44;;= 88\3{#3#:#:#<dFGTUU  s   .A A,+A,d   iX  c                  $   \ rS rSr S         SS jjr    SS jrSS jrS S jrS S jrS!S jr	S"S	 jr
S S
 jrS"S jrS#S jrS S jrS$S jrS S jrS%S jrS&S jrS S jrS'S jrS(S jrS S jrS S jrS S jrS S jrS S jrS S jrSrg))HttpToolsProtocol-   Nc                |   UR                   (       d  UR                  5         Xl        UR                  U l        U=(       d    [
        R                  " 5       U l        [        R                  " S5      U l
        [        R                  " S5      U l        U R                  R                  5       U l        [        R                  " U 5      U l         U R                   R#                  SS9  UR&                  U l        UR(                  U l        UR*                  U l        X0l        S U l        UR0                  U l        X l        UR4                  U l        UR6                  U l        S U l        S U l        S U l        S U l        S U l         [C        5       U l"        S U l#        S U l$        SU l%        S U l&        g ! [$         a     Nf = f)Nzuvicorn.errorzuvicorn.accessT)lenient_data_after_closeF)'loadedloadconfig
loaded_appappasyncioget_event_looplooplogging	getLoggerloggeraccess_loggerhasHandlers
access_log	httptoolsHttpRequestParserparserset_dangerous_lenienciesAttributeErrorws_protocol_class	root_pathlimit_concurrency	app_statetimeout_keep_alive_tasktimeout_keep_aliveserver_stateconnectionstasks	transportflowserverclientschemer   pipelinescopeheadersexpect_100_continuecycle)selfr0   rG   rD   _loops        r&   __init__HttpToolsProtocol.__init__.   sp    }}KKM$$5W335	''8$../?@,,88:11$7	KK00$0O
 "(!9!9))!'!9!9" <@$"(";"; )'33!''
 -1!%	59.27;NSg !%
26#( +/
=  		s   F. .
F;:F;c                   U R                   R                  U 5        Xl        [        U5      U l        [        U5      U l        [        U5      U l        [        U5      (       a  SOSU l
        U R                  R                  [        ::  aD  U R                  (       a  SU R                  -  OSnU R                  R                  [        SU5        g g )Nhttpsr   %s:%d -  z%sHTTP connection made)rH   addrJ   r   rK   r   rL   r   rM   r   rN   r8   levelr   log)rT   rJ   prefixs      r&   connection_made!HttpToolsProtocol.connection_maded   s     	T""	*	$Y/%i0!'	!2!2g;;/15Z$++-"FKKOOO-EvN 0r   c                   U R                   R                  U 5        U R                  R                  [        ::  aC  U R
                  (       a  SU R
                  -  OSnU R                  R                  [        SU5        U R                  (       a,  U R                  R                  (       d  SU R                  l	        U R                  b$  U R                  R                  R                  5         U R                  b  U R                  R                  5         Uc*  U R                  R                  5         U R!                  5         S U l        g )NrZ   r[   z%sHTTP connection lostT)rH   discardr8   r]   r   rM   r^   rS   response_completedisconnectedmessage_eventsetrK   resume_writingrJ   close_unset_keepalive_if_requiredr>   )rT   excr_   s      r&   connection_lost!HttpToolsProtocol.connection_losts   s      &;;/15Z$++-"FKKOOO-EvN::djj::&*DJJ#::!JJ$$((*99 II$$&;NN  "--/r   c                    g N rT   s    r&   eof_receivedHttpToolsProtocol.eof_received   s    r   c                b    U R                   b"  U R                   R                  5         S U l         g g ro   )rE   cancelrq   s    r&   rj   .HttpToolsProtocol._unset_keepalive_if_required   s-    ''3((//1+/D( 4r   c                   / nS nU R                    H_  u  p4US:X  a<  UR                  S5       Vs/ s H   oUR                  5       R                  5       PM"     nnUS:X  d  MO  UR                  5       nMa     SU;   a  U$ g s  snf )N
   connection   ,s   upgrade)rQ   splitlowerstrip)rT   
connectionupgradenamevaluetokens         r&   _get_upgradeHttpToolsProtocol._get_upgrade   s{    
<<KD}$AFTARSARkkm113AR
Sz!++-	 (
 #N Ts   'A=c                     U R                   c  gg)NFT)rA   rq   s    r&   _should_upgrade_to_ws'HttpToolsProtocol._should_upgrade_to_ws   s    !!)r   c                    U R                   R                  S5        U R                  5       (       d  SnU R                   R                  U5        g g )NzUnsupported upgrade request.zNo supported WebSocket library detected. Please use "pip install 'uvicorn[standard]'", or install 'websockets' or 'wsproto' manually.)r8   warningr   )rT   msgs     r&   _unsupported_upgrade_warning.HttpToolsProtocol._unsupported_upgrade_warning   sC    :;))++ \CKK$ ,r   c                Z    U R                  5       nUS:H  =(       a    U R                  5       $ )Ns	   websocket)r   r   )rT   r~   s     r&   _should_upgrade!HttpToolsProtocol._should_upgrade   s)    ##%,&G4+E+E+GGr   c                   U R                  5          U R                  R                  U5        g ! [        R                   a1    SnU R
                  R                  U5        U R                  U5         g [        R                   a:    U R                  5       (       a  U R                  5          g U R                  5          g f = f)NzInvalid HTTP request received.)rj   r>   	feed_datar<   HttpParserErrorr8   r   send_400_responseHttpParserUpgrader   handle_websocket_upgrader   )rT   datar   s      r&   data_receivedHttpToolsProtocol.data_received   s    ))+	4KK!!$'(( 	2CKK$""3'** 	4##%%--/113		4s   . AB?28B?,B?>B?c                   U R                   R                  [        ::  aC  U R                  (       a  SU R                  -  OSnU R                   R	                  [        SU5        U R
                  R                  U 5        U R                  S   R                  5       nUSU R                  S/nU R                  S    H  u  pEX4SUS	/-  nM     UR                  S	5        U R                  U R                  U R                  U R                  S
9nUR                  U R                   5        UR#                  SR%                  U5      5        U R                   R'                  U5        g )NrZ   r[   z%sUpgrading to WebSocketmethodr   s    HTTP/1.1
rQ      : r   )r0   rG   rD   r   )r8   r]   r   rM   r^   rH   rc   rP   r!   urlappendrA   r0   rG   rD   r`   rJ   r   r#   set_protocol)rT   r_   r   outputr   r   protocols          r&   r   *HttpToolsProtocol.handle_websocket_upgrade   s   ;;/15Z$++-"FKKOOO-GP  &H%,,.$*:;::i0KDUE733F 1g));;**nn * 

 	  0sxx/0##H-r   c           	        [         S   /nU R                  R                   H  u  p4UR                  USUS/5        M     UR                  SS[	        [        U5      5      R                  S5      -   S-   SSUR                  S5      /5        U R                  R                  SR                  U5      5        U R                  R                  5         g )	Ni  r   r   s)   content-type: text/plain; charset=utf-8
s   content-length: asciis   connection: close
r   )STATUS_LINErG   default_headersextendr$   lenr!   rJ   writer#   ri   )rT   r   contentr   r   s        r&   r   #HttpToolsProtocol.send_400_response   s    s#$,,<<KDNND%89 =>#c#c(m&:&:7&CCgM(

7#	
 	SXXg./r   c           
        SU l         SU l        / U l        SU R                  R                  SS.SU R
                  U R                  U R                  U R                  U R                  U R                  R                  5       S.	U l        g )Nr   Fr   z2.3)versionspec_version1.1)	typeasgihttp_versionrL   rM   rN   rB   rQ   state)r   rR   rQ   r0   asgi_versionrL   rM   rN   rB   rD   copyrP   rq   s    r&   on_message_begin"HttpToolsProtocol.on_message_begin   sl    #(  $ 8 8%P!kkkkkk||^^((*


r   c                .    U =R                   U-  sl         g ro   )r   )rT   r   s     r&   on_urlHttpToolsProtocol.on_url   s    Cr   c                    UR                  5       nUS:X  a  UR                  5       S:X  a  SU l        U R                  R                  X45        g )Ns   expects   100-continueT)r{   rR   rQ   r   )rT   r   r   s      r&   	on_headerHttpToolsProtocol.on_header   s>    zz|9/!A'+D$TM*r   c                   U R                   R                  5       nU R                   R                  5       nUR                  S5      U R                  S'   US:w  a  XR                  S'   U R                   R                  5       (       a  U R                  5       (       a  g [        R                  " U R                  5      nUR                  nUR                  S5      nSU;   a  [        R                  R                  U5      nU R                  U-   nU R                  R                  S5      U-   nX`R                  S'   XpR                  S'   UR                   =(       d    SU R                  S	'   U R"                  bj  [%        U R&                  5      U R"                  :  d#  [%        U R(                  5      U R"                  :  a$  [*        nS
n	U R,                  R/                  U	5        OU R0                  nU R2                  n
[5        U R                  U R6                  U R8                  U R,                  U R:                  U R<                  U R>                  R@                  [B        RD                  " 5       U RF                  US:g  U RH                  S9U l        U
b  U
RJ                  (       a  U RM                  U R2                  U5        g U R8                  RO                  5         U RP                  RS                  U R2                  U45        g )Nr   r   r   r   %pathraw_pathr   query_stringzExceeded concurrency limit.z1.0)rP   rJ   rK   r8   r9   r;   r   rf   rR   
keep_aliveon_response)*r>   get_http_version
get_methoddecoderP   should_upgrader   r<   	parse_urlr   r   urllibparseunquoterB   r!   queryrC   r   rH   rI   r   r8   r   r2   rS   RequestResponseCyclerJ   rK   r9   r;   rG   r   r3   EventrR   on_response_completerd   _start_asgi_taskpause_readingrO   
appendleft)rT   r   r   
parsed_urlr   r   	full_pathfull_raw_pathr2   messageexisting_cycles              r&   on_headers_complete%HttpToolsProtocol.on_headers_complete   s9   {{335'')%}}W5

85 )5JJ~&;;%%''D,@,@,B,B((2
??w'$;<<''-DNNT)	--g6A&

6!.

:%/%5%5%<

>" !!-  !T%;%;;s4::RVRhRh?h%C3GKK(((C)**nn;;,, --==!--/ $ 8 8#u,11

 !^%E%E!!$**c2 II##%MM$$djj#%67r   c                B   U R                   R                  (       a  [        R                  S:  a=  U R                  R                  UR                  U5      [        R                  " 5       S9nOs[        R                  " 5       R                  U R                  R
                  UR                  U5      5      nO*U R                  R                  UR                  U5      5      nUR                  U R                  R                  5        U R                  R                  U5        g )N)      )context)r0   reset_contextvarssysversion_infor5   create_taskrun_asgicontextvarsContextrunadd_done_callbackrI   rc   r\   )rT   rS   r2   tasks       r&   r   "HttpToolsProtocol._start_asgi_task*  s    ;;(( 7*yy,,U^^C-@+J]J]J_,`"**,001F1FWZH[\99(()<=Dtzz112

tr   c                   U R                   R                  5       (       a  U R                  5       (       d  U R                  R                  (       a  g U R                  =R
                  U-  sl        [        U R                  R
                  5      [        :  a  U R                  R                  5         U R                  R                  R                  5         g ro   )r>   r   r   rS   rd   bodyr   r   rK   r   rf   rg   )rT   r   s     r&   on_bodyHttpToolsProtocol.on_body8  s    KK&&((T-A-A-C-C

HdHd

4tzz"22II##%

  $$&r   c                   U R                   R                  5       (       a  U R                  5       (       d  U R                  R                  (       a  g SU R                  l        U R                  R                  R                  5         g )NF)r>   r   r   rS   rd   	more_bodyrf   rg   rq   s    r&   on_message_complete%HttpToolsProtocol.on_message_complete@  sT    KK&&((T-A-A-C-C

HdHd$



  $$&r   c                   U R                   =R                  S-  sl        U R                  R                  5       (       a  g U R	                  5         U R
                  R                  5         U R                  (       a.  U R                  R                  5       u  pU R                  X5        g U R                  R                  U R                  U R                  5      U l        g )N   )rG   total_requestsrJ   
is_closingrj   rK   resume_readingrO   popr   r5   
call_laterrF   timeout_keep_alive_handlerrE   )rT   rS   r2   s      r&   r   &HttpToolsProtocol.on_response_completeF  s    ((A-(>>$$&&))+ 			  " ==**,JE!!%-+/99+?+?'')H)H,D(r   c                    U R                   b  U R                   R                  (       a  U R                  R                  5         gSU R                   l        g)z7
Called by the server to commence a graceful shutdown.
NF)rS   rd   rJ   ri   r   rq   s    r&   shutdownHttpToolsProtocol.shutdown\  s6     ::!=!=NN  "$)DJJ!r   c                8    U R                   R                  5         g)zL
Called by the transport when the write buffer exceeds the high water mark.
N)rK   pause_writingrq   s    r&   r   HttpToolsProtocol.pause_writinge  s     			!r   c                8    U R                   R                  5         g)zO
Called by the transport when the write buffer drops below the low water mark.
N)rK   rh   rq   s    r&   rh    HttpToolsProtocol.resume_writingk  s     			  "r   c                x    U R                   R                  5       (       d  U R                   R                  5         gg)zS
Called on a keep-alive connection if no new data is received after a short
delay.
N)rJ   r   ri   rq   s    r&   r   ,HttpToolsProtocol.timeout_keep_alive_handlerq  s,    
 ~~((**NN  " +r   )r;   r9   r2   rD   rM   r0   rH   rS   rR   rK   rQ   rC   r8   r5   r>   rO   rB   rN   rP   rL   rG   rI   rF   rE   rJ   r   rA   ro   )
r0   r   rG   r   rD   zdict[str, Any]rU   z asyncio.AbstractEventLoop | NonereturnNone)rJ   asyncio.Transportr  r  )rk   zException | Noner  r  r  r  )r  zbytes | None)r  bool)r   bytesr  r  )r   r$   r  r  )r   r  r  r  )r   r  r   r  r  r  )rS   r   r2   r	   r  r  )r   r  r  r  )__name__
__module____qualname____firstlineno__rV   r`   rl   rr   rj   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rh   r   __static_attributes__rp   r   r&   r*   r*   -   s     373030 "30 "	30
 030 
30lO*O	O&0


%H4 .( 
"+18f'',*"##r   r*   c                  r    \ rS rSr                      S	S jrS
S jrSS jrSS jrSS jrSr	g)r   iz  c                    Xl         X l        X0l        X@l        XPl        X`l        Xpl        Xl        Xl        SU l	        Xl
        Xl        [        5       U l        SU l        SU l        SU l        S U l        SU l        g )NFTr   )rP   rJ   rK   r8   r9   r;   r   rf   r   re   r   waiting_for_100_continue	bytearrayr   r   response_startedrd   chunked_encodingexpected_content_length)rT   rP   rJ   rK   r8   r9   r;   r   rf   rR   r   r   s               r&   rV   RequestResponseCycle.__init__{  s~     
"	*$.*& "$(;% K	 !&!&-1'($r   c                n  #     U" U R                   U R                  U R                  5      I S h  vN nUb8  SnU R                  R	                  X25        U R
                  R                  5         OU R                  (       dG  U R                  (       d6  SnU R                  R	                  U5        U R                  5       I S h  vN   OYU R                  (       dH  U R                  (       d7  SnU R                  R	                  U5        U R
                  R                  5         S U l        g  N Ni! [         an  nSnU R                  R	                  X4S9  U R                  (       d  U R                  5       I S h  vN     S nANaU R
                  R                  5          S nANS nAff = f! S U l        f = f7f)Nz4ASGI callable should return None, but returned '%s'.z1ASGI callable returned without starting response.z3ASGI callable returned without completing response.zException in ASGI application
)exc_infoc                     g ro   rp   rp   r   r&   <lambda>/RequestResponseCycle.run_asgi.<locals>.<lambda>  s    tr   )rP   receivesendr8   errorrJ   ri   r  re   send_500_responserd   BaseExceptionr   )rT   r2   resultr   rk   s        r&   r   RequestResponseCycle.run_asgi  sC    	,

DLL$)) F !L!!#.$$&**43D3DI!!#&,,...++D4E4EK!!#&$$&+D1$ /  	'3CKKc0((,,...$$&&	'*  ,Ds{   F5+D- D)D- BF( D+AF(  	F5)D- +F( -
F%7?F 6E97F <F( F F(  F%%F( (
F22F5c                   #    U R                  SS/ SQS.5      I S h  vN   U R                  SSSS.5      I S h  vN   g  N" N7f)	Nhttp.response.starti  ))s   content-types   text/plain; charset=utf-8)   content-lengths   21)rx      close)r   statusrQ   http.response.bodys   Internal Server ErrorFr   r   r   )r  rq   s    r&   r  &RequestResponseCycle.send_500_response  sT     ii-

 
	
 
	
 ii!5?Wfklmmm
	
 	ns   AA AAAAc                ^	  #    U R                   R                  (       a3  U R                  (       d"  U R                   R                  5       I S h  vN   U R                  (       a  g U R                  (       Gds  US   S:w  a  [        SUS    S35      eSU l        SU l        US   nU R                  [        UR                  S/ 5      5      -   n[        U R                  S   ;   a  [        U;  a
  U[        /-   nU R                  (       a`  U R                  R                  S	[        U R                  5      U R                  S
   [!        U R                  5      U R                  S   U5        ["        U   /nU H  u  pV[$        R'                  U5      (       a  [        S5      e[(        R'                  U5      (       a  [        S5      eUR+                  5       nUS:X  a3  U R,                  c&  [/        UR1                  5       5      U l        SU l        OJUS:X  a#  UR+                  5       S:X  a  SU l        SU l        O!US:X  a  UR+                  5       S:X  a  SU l        UR7                  USUS/5        M     U R,                  c1  U R                  S
   S:w  a  US;  a  SU l        UR9                  S5        UR9                  S5        U R:                  R=                  SR?                  U5      5        g U R@                  (       Gd  US   S:w  a  [        SUS    S35      eUR                  SS5      nUR                  SS5      nU R                  S
   S:X  a  SU l        OU R,                  (       a^  U(       a  S[C        U5      -  US/nO/ nU(       d  UR9                  S5        U R:                  R=                  SR?                  U5      5        OU[C        U5      n	XR2                  :  a  [        S 5      eU =R2                  U	-  sl        U R:                  R=                  U5        U(       dx  U R2                  S:w  a  [        S!5      eSU l         U RD                  RG                  5         U R4                  (       d  U R:                  RI                  5         U RK                  5         g g [        S"US    S#35      e GN^7f)$Nr   r#  z6Expected ASGI message 'http.response.start', but got 'z'.TFr&  rQ   z%s - "%s %s HTTP/%s" %dr   r   zInvalid HTTP header name.zInvalid HTTP header value.r$  s   transfer-encodings   chunkedr   rx   r%  r   r   HEAD)   i0  s   transfer-encoding: chunked
r   r'  z5Expected ASGI message 'http.response.body', but got 'r   r   s   %x
s   0

z+Response content longer than Content-Lengthz,Response content shorter than Content-LengthzUnexpected ASGI message 'z)' sent, after response already completed.)&rK   write_pausedre   drainr  RuntimeErrorr  r   listgetr   rP   r;   r9   infor   r   r   	HEADER_REsearchHEADER_VALUE_REr{   r  intr   r  r   r   r   rJ   r   r#   rd   r   rf   rg   ri   r   )
rT   r   r%   rQ   r   r   r   r   r   	num_bytess
             r&   r  RequestResponseCycle.send  s    99!!$*;*;))//###$$$v"77"%[\cdj\k[lln#opp$(D!,1D)!(+K**T'++i2L-MMGtzz)44W9T!\N2""''-#DJJ/JJx(.tzz:JJ~. #;/0G&##D))&'BCC"))%00&'CDDzz|,,1F1F1N36u||~3FD0,1D)11ekkmz6Q34D0,0D)]*u{{}/H&+DOeUG<=  '" $$,H1E1OT_gqTq(,%@ANN7#NN  '!23'''v"66"%Z[bci[jZkkm#noo;;vs+DK7I zz(#v-/0,&&(3t94dGDG G NN<0$$SXXg%67I	;;;&'TUU00I=0$$T* //14&'UVV)-&""&&(NN((*  "  !:76?:KKtuvvA $s   A
R-R*QR-c                V  #    U R                   (       aA  U R                  R                  5       (       d"  U R                  R                  S5        SU l         U R                  (       dg  U R
                  (       dV  U R                  R                  5         U R                  R                  5       I S h  vN   U R                  R                  5         U R                  (       d  U R
                  (       a  SS0$ S[        U R                  5      U R                  S.n[        5       U l        U$  Nx7f)Ns   HTTP/1.1 100 Continue

Fr   zhttp.disconnectzhttp.requestr(  )r  rJ   r   r   re   rd   rK   r   rf   waitclearr  r   r   r  )rT   r   s     r&   r  RequestResponseCycle.receive2  s     ((1J1J1L1LNN  !AB,1D)  )?)?II$$&$$))+++$$& 6 6-..-;U499EUdhdrdr$sK	 ,s   B,D).D'/A9D))r;   r9   r   r  r   re   r  rK   r   r8   rf   r   r   rd   r  rP   rJ   r  N)rP   r   rJ   r  rK   r   r8   logging.Loggerr9   r=  r;   r  r   zlist[tuple[bytes, bytes]]rf   zasyncio.EventrR   r  r   r  r   zCallable[..., None])r2   r	   r  r  r  )r   r   r  r  )r  r
   )
r	  r
  r  r  rV   r   r  r  r  r  rp   r   r&   r   r   z  s    %)%) %%) 	%)
 %) &%) %) 3%) %%) "%) %) )%)P,8nbwHr   r   )r%   r6  r  r  )3
__future__r   r3   r   r   r6   rer   r   asyncio.eventsr   collectionsr   collections.abcr   typingr   r   r<   uvicorn._typesr	   r
   r   r   r   uvicorn.configr   uvicorn.loggingr   #uvicorn.protocols.http.flow_controlr   r   r   r   uvicorn.protocols.utilsr   r   r   r   r   uvicorn.serverr   compiler3  r5  r'   ranger   Protocolr*   r   )r%   s   0r&   <module>rM     s    "     	 
  &  $    " + p p x x &JJBC	**89V NSSVX[_]_k,[99_]J#(( J#Z
F Fa
 ^s   /C$