
    f jjO                    R   d dl mZ d dlZd dlZd dlZd dlmZmZmZm	Z	 d dl
mZ d dlZd dlmZ d dlmZmZmZmZmZmZmZ d dlmZ d dlmZ d d	lmZmZmZmZ d d
l m!Z!m"Z"m#Z#m$Z$m%Z% d dl&m'Z' ddZ(d  e)dd          D             Z* G d dej+                  Z, G d d          Z-dS )    )annotationsN)AnyCallableLiteralcast)unquote)!DEFAULT_MAX_INCOMPLETE_EVENT_SIZE)ASGI3ApplicationASGIReceiveEventASGISendEventHTTPRequestEventHTTPResponseBodyEventHTTPResponseStartEvent	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)ServerStatestatus_codeintreturnbytesc                |    	 t          j        |           j                                        S # t          $ r Y dS w xY w)N    )http
HTTPStatusphraseencode
ValueError)r   s    sC:\Users\Terasoftware\OneDrive\Desktop\faahhh\fyndo\fyndo\venv\Lib\site-packages\uvicorn/protocols/http/h11_impl.py_get_status_phraser)      sH    {++299;;;   sss   *- 
;;c                .    i | ]}|t          |          S  )r)   ).0r   s     r(   
<dictcomp>r-   #   s#    bbb;+1+>>bbbr"   d   iX  c                      e Zd Z	 d(d)dZd*dZd+dZd,dZd,dZd-dZd.dZ	d/dZ
d,dZd0dZd1d"Zd,d#Zd,d$Zd,d%Zd,d&Zd,d'ZdS )2H11ProtocolNconfigr   server_stater   	app_statedict[str, Any]_loop asyncio.AbstractEventLoop | Noner   Nonec                   |j         s|                                 || _        |j        | _        |pt          j                    | _        t          j	        d          | _
        t          j	        d          | _        | j                                        | _        t          j        t          j        |j        |j        nt$                    | _        |j        | _        |j        | _        |j        | _        || _        d | _        |j        | _        || _        |j        | _        |j        | _        d | _        d | _        d | _        d | _         d | _!        d | _"        d | _#        d | _$        d S )Nzuvicorn.errorzuvicorn.access)%loadedloadr1   
loaded_appappasyncioget_event_looplooplogging	getLoggerloggeraccess_loggerhasHandlers
access_logh11
ConnectionSERVERh11_max_incomplete_event_sizer	   connws_protocol_class	root_pathlimit_concurrencyr3   timeout_keep_alive_tasktimeout_keep_aliver2   connectionstasks	transportflowserverclientschemescopeheaderscycle)selfr1   r2   r3   r5   s        r(   __init__zH11Protocol.__init__'   sJ    } 	KKMMM$5W355	'88$./?@@,88::NJ33F002	
 
	 "(!9)!'!9" DH$"("; )'3!'
 -1!%	.2.27; !%
26+/


r"   rR   asyncio.Transportc                   | j                             |            || _        t          |          | _        t          |          | _        t          |          | _        t          |          rdnd| _
        | j        j        t          k    r6| j        r
d| j        z  nd}| j                            t          d|           d S d S )Nhttpsr#   %s:%d -  z%sHTTP connection made)rP   addrR   r   rS   r   rT   r   rU   r   rV   rB   levelr   log)rZ   rR   prefixs      r(   connection_madezH11Protocol.connection_madeX   s     	T""""	**	$Y//%i00!'	!2!2>gg;/ 	O15DZ$+--"FKOOO-EvNNNNN	O 	Or"   excException | Nonec                   | j                             |            | j        j        t          k    r4| j        r
d| j        z  nd}| j                            t          d|           | j        r| j        j        sd| j        _	        | j
        j        t          j        k    rDt          j                    }	 | j
                            |           n# t          j        $ r Y nw xY w| j        | j        j                                         | j        | j                                         |/| j                                         |                                  d S d S )Nr_   r`   z%sHTTP connection lostT)rP   discardrB   rb   r   rU   rc   rY   response_completedisconnectedrJ   	our_staterF   ERRORConnectionClosedsendLocalProtocolErrormessage_eventsetrS   resume_writingrR   close_unset_keepalive_if_required)rZ   rf   rd   events       r(   connection_lostzH11Protocol.connection_lostg   s]     &&&;/ 	O15DZ$+--"FKOOO-EvNNN: 	+dj: 	+&*DJ#9#)+ 	(**E	u%%%%)    : 	+J$((***9 	'I$$&&& 	0N  """--/////	0 	0s   1C CCc                    d S Nr+   rZ   s    r(   eof_receivedzH11Protocol.eof_received   s    r"   c                X    | j         "| j                                          d | _         d S d S ry   )rN   cancelrz   s    r(   ru   z(H11Protocol._unset_keepalive_if_required   s:    ' 	0(//111+/D(((	0 	0r"   bytes | Nonec                    g }d }| j         D ]D\  }}|dk    rd |                    d          D             }|dk    r|                                }Ed|v r|S d S )N
   connectionc                Z    g | ](}|                                                                 )S r+   )lowerstrip)r,   tokens     r(   
<listcomp>z,H11Protocol._get_upgrade.<locals>.<listcomp>   s,    SSSekkmm1133SSSr"      ,s   upgrade)rX   splitr   )rZ   
connectionupgradenamevalues        r(   _get_upgradezH11Protocol._get_upgrade   s    
< 	( 	(KD%}$ TSSTARARSSS
z! (++--# 	Ntr"   boolc                    | j         J| j        j        dk    r8d}| j                            |           d}| j                            |           dS dS )NautozUnsupported upgrade request.zNo supported WebSocket library detected. Please use "pip install 'uvicorn[standard]'", or install 'websockets' or 'wsproto' manually.FT)rK   r1   wsrB   warning)rZ   msgs     r(   _should_upgrade_to_wsz!H11Protocol._should_upgrade_to_ws   sa    ! 	{~' )4##C((( `##C(((5tr"   datar    c                    |                                   | j                            |           |                                  d S ry   )ru   rJ   receive_datahandle_events)rZ   r   s     r(   data_receivedzH11Protocol.data_received   sB    ))+++	t$$$r"   c                	   	 	 | j                                         }nG# t          j        $ r5 d}| j                            |           |                     |           Y d S w xY w|t          j        u rd S |t          j        u r| j	        
                                 d S t          |t          j                  rd |j        D             | _        |j                            d          \  }}}t!          |                    d                    }| j        |z   }| j                            d          |z   }d| j        j        dd|j                            d          | j        | j        | j        |j                            d          | j        |||| j        | j                                        d	| _        |                                 }	|	d
k    r+|                                 r|                      |           d S | j!        ^tE          | j#                  | j!        k    stE          | j$                  | j!        k    r$tJ          }
d}| j                            |           n| j&        }
| '                                 tQ          | j        | j         | j)        | j	        | j        | j*        | j+        | j,        j-        t]          j/                    | j0        
  
        | _1        | j2        3                    | j1        4                    |
                    }|5                    | j$        j6                   | j$        7                    |           n8t          |t          j8                  r| j         j9        t          j:        u r}| j1        xj;        |j<        z  c_;        tE          | j1        j;                  tz          k    r| j	        
                                 | j1        j>        ?                                 nt          |t          j@                  rv| j         j9        t          j:        u r4| j)        A                                 | j         B                                 Wd| j1        _C        | j1        j>        ?                                 )NTzInvalid HTTP request received.c                @    g | ]\  }}|                                 |fS r+   )r   )r,   keyr   s      r(   r   z-H11Protocol.handle_events.<locals>.<listcomp>   s)    UUUee 4UUUr"      ?asciir#   z2.4)versionspec_version)typeasgihttp_versionrT   rU   rV   methodrL   pathraw_pathquery_stringrX   states	   websocketzExceeded concurrency limit.)
rW   rJ   rR   rS   rB   rC   rE   default_headersrq   on_responseF)DrJ   
next_eventrF   RemoteProtocolErrorrB   r   send_400_response	NEED_DATAPAUSEDrS   pause_reading
isinstanceRequestrX   target	partitionr   decoderL   r&   r1   asgi_versionr   rT   rU   rV   r   r3   copyrW   r   r   handle_websocket_upgraderM   lenrP   rQ   r   r<   ru   RequestResponseCyclerR   rC   rE   r2   r   r=   Eventon_response_completerY   r?   create_taskrun_asgiadd_done_callbackri   ra   Datarl   DONEbodyr   r   rq   rr   EndOfMessageresume_readingstart_next_cycle	more_body)rZ   rv   r   r   _r   r   	full_pathfull_raw_pathr   r<   messagetasks                r(   r   zH11Protocol.handle_events   s:   b	/	,,..*   6##C(((&&s+++	 % Y/#*$ V/
 	'')))E3;// N/UUu}UUU,1L,B,B4,H,H)!\xw7788 NT1	 $ 5 5g > > I"#';#;(-  %*$6$=$=g$F$F"k"k"k#l11'::!%% -$0#|!^0022! 
& ++--l* t/I/I/K/K 11%888F ) #())T-CC#GJ4:Z^ZpGp# .C;GK''0000(C 113331*"n;"&"4#$($5$E")-// $ 9  
 y,,TZ-@-@-E-EFF&&tz'9:::
t$$$$E38,, /9&#(2 
5:-tz''*:: .I++---
(,,....E3#344 /9&#(2 N11333I..000',
$
(,,...Eb	/s    A A! A!rv   h11.Requestc                H   | j         j        t          k    r4| j        r
d| j        z  nd}| j                             t          d|           | j                            |            |j        d|j        dg}| j	        D ]\  }}||d|dgz  }|
                    d           |                     | j        | j        | j                  }|                    | j                   |                    d	                    |                     | j                            |           d S )
Nr_   r`   z%sUpgrading to WebSocket    s    HTTP/1.1
s   : s   
)r1   r2   r3   r"   )rB   rb   r   rU   rc   rP   ri   r   r   rX   appendrK   r1   r2   r3   re   rR   r   joinset_protocol)rZ   rv   rd   outputr   r   protocols          r(   r   z$H11Protocol.handle_websocket_upgrade	  s*   ;/ 	Q15DZ$+--"FKOOO-GPPP  &&&,el4DE< 	4 	4KD%tUE733FFg));*n * 
 

 	  000sxx//000##H-----r"   r   strc                2   t           d         }ddg}t          j        d||          }| j                            |          }| j                            |           | j                            t          j        |                    d                              }| j                            |           | j                            t          j	                              }| j                            |           | j        
                                 d S )Ni  s   content-types   text/plain; charset=utf-8r   s   closer   rX   reasonr   r   rv   )STATUS_PHRASESrF   ResponserJ   ro   rR   writer   r&   r   rt   )rZ   r   r   rX   rv   r   s         r(   r   zH11Protocol.send_400_response  s    $;%.
 gfMMM&&V$$$chCJJw4G4G&H&H&HIIV$$$c&6&8&899V$$$r"   c                   | j         xj        dz  c_        | j                                        rd S |                                  | j                            | j        | j                  | _	        | j
                                         | j        j        t          j        u rG| j        j        t          j        u r1| j                                         |                                  d S d S d S )N   )r2   total_requestsrR   
is_closingru   r?   
call_laterrO   timeout_keep_alive_handlerrN   rS   r   rJ   rl   rF   r   their_stater   r   rz   s    r(   r   z H11Protocol.on_response_complete.  s    ((A-((>$$&& 	F 	))+++'+y';';D<SUYUt'u'u$ 		  """ 9#(* 	!ty/D/P 	!I&&(((     	! 	! 	! 	!r"   c                    | j         | j         j        rHt          j                    }| j                            |           | j                                         dS d| j         _        dS )zG
        Called by the server to commence a graceful shutdown.
        NF)	rY   rj   rF   rn   rJ   ro   rR   rt   
keep_aliverZ   rv   s     r(   shutdownzH11Protocol.shutdownA  sf     : 	*!= 	*(**EINN5!!!N  """""$)DJ!!!r"   c                8    | j                                          dS )z\
        Called by the transport when the write buffer exceeds the high water mark.
        N)rS   pause_writingrz   s    r(   r   zH11Protocol.pause_writingL  s     		!!!!!r"   c                8    | j                                          dS )z_
        Called by the transport when the write buffer drops below the low water mark.
        N)rS   rs   rz   s    r(   rs   zH11Protocol.resume_writingR  s     		  """""r"   c                    | j                                         sHt          j                    }| j                            |           | j                                          dS dS )zk
        Called on a keep-alive connection if no new data is received after a short
        delay.
        N)rR   r   rF   rn   rJ   ro   rt   r   s     r(   r   z&H11Protocol.timeout_keep_alive_handlerX  s`    
 ~((** 	#(**EINN5!!!N  """""	# 	#r"   ry   )
r1   r   r2   r   r3   r4   r5   r6   r   r7   )rR   r\   r   r7   )rf   rg   r   r7   r   r7   )r   r~   )r   r   )r   r    r   r7   )rv   r   r   r7   )r   r   r   r7   )__name__
__module____qualname__r[   re   rw   r{   ru   r   r   r   r   r   r   r   r   r   rs   r   r+   r"   r(   r0   r0   &   sh        37.0 .0 .0 .0 .0bO O O O0 0 0 02   0 0 0 0

 
 
 
      c/ c/ c/ c/J. . . .&   $! ! ! !&	* 	* 	* 	*" " " "# # # ## # # # # #r"   r0   c                  6    e Zd Zd!dZd"dZd#dZd$dZd%dZd S )&r   rW   r   rJ   h11.ConnectionrR   r\   rS   r   rB   logging.LoggerrC   rE   r   r   list[tuple[bytes, bytes]]rq   asyncio.Eventr   Callable[..., None]r   r7   c                    || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        d| _
        d| _        |j        | _        d| _        d| _        d| _        d| _        d S )NFTr"   )rW   rJ   rR   rS   rB   rC   rE   r   rq   r   rk   r   !they_are_waiting_for_100_continuewaiting_for_100_continuer   r   response_startedrj   )rZ   rW   rJ   rR   rS   rB   rC   rE   r   rq   r   s              r(   r[   zRequestResponseCycle.__init__d  s     
	"	*$.*& "(,(N% 	 !&!&r"   r<   r
   c                  K   	  || j         | j        | j                   d {V }|7d}| j                            ||           | j                                         n| j        s>| j        s7d}| j                            |           | 	                                 d {V  n| j
        s<| j        s5d}| j                            |           | j                                         np# t          $ rc}d}| j                            ||           | j        s| 	                                 d {V  n| j                                         Y d }~nd }~ww xY wd | _        d S # d | _        w xY w)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                     d S ry   r+   r+   r"   r(   <lambda>z/RequestResponseCycle.run_asgi.<locals>.<lambda>  s    t r"   )rW   receivero   rB   errorrR   rt   r   rk   send_500_responserj   BaseExceptionr   )rZ   r<   resultr   rf   s        r(   r   zRequestResponseCycle.run_asgi  s     	,3
DL$)       F  'L!!#v...$$&&&&* '43D 'I!!#&&&,,..........+ 'D4E 'K!!#&&&$$&&&'  	' 	' 	'3CKcC000( ',,..........$$&&&	'*  ,|D||D++++s0   "C( CE" (
E2AEE" EE" "
E,c                   K   ddddgd}|                      |           d {V  dddd	}|                      |           d {V  d S )
Nhttp.response.starti  r   r   )r   statusrX   http.response.bodys   Internal Server ErrorFr   r   r   )ro   )rZ   response_start_eventresponse_body_events      r(   r  z&RequestResponseCycle.send_500_response  s      )?)8
 8
 ii,---------(,6
 6

 ii+,,,,,,,,,,,r"   r   r   c                  K   |d         }| j         j        r&| j        s| j                                          d {V  | j        rd S | j        sN|dk    rd}t          ||z            t          d|          }d| _        d| _        |d         }| j        t          |
                    dg                     z   }t          | j        d         v rt          |vr|t          gz   }| j        rY| j                            d	t!          | j                  | j        d
         t#          | j                  | j        d         |           t$          |         }t'          j        |||          }| j                            |          }| j                            |           n8| j        s|dk    rd}t          ||z            t          d|          }|
                    dd          }	|
                    dd          }
| j        d
         dk    rdn|	}| j                            t'          j        |                    }| j                            |           |
sfd| _        | j                                         | j                            t'          j                              }| j                            |           nd}t          ||z            | j        rz| j        j        t&          j        u s| j         sE| j                            t'          j!                               | j        "                                 | #                                 d S d S )Nr   r  z:Expected ASGI message 'http.response.start', but got '%s'.r   TFr  rX   z%s - "%s %s HTTP/%s" %dr   r   r   r   r  z9Expected ASGI message 'http.response.body', but got '%s'.r   r   r"   r   HEADr   zDUnexpected ASGI message '%s' sent, after response already completed.)$rS   write_pausedrk   drainr   RuntimeErrorr   r   r   listgetr   rW   rE   rC   infor   r   r   rF   r   rJ   ro   rR   r   rj   r   rq   rr   r   rl   
MUST_CLOSEr   rn   rt   r   )rZ   r   message_typer   r  rX   r   responser   r   r   r   s               r(   ro   zRequestResponseCycle.send  s]     v9! 	$$*; 	$)//######### 	F$ 9	344 7R"3#56663W==G$(D!,1D)X&F*T'++i2L2L-M-MMGtz)44 3W9T 3!\N2 "''-#DJ//Jx(.tz::J~.   $F+F|PVWWWHY^^(^33FN  ((((' 	333 7Q"3#56662G<<G;;vs++DK77I *X.&8B33dDY^^#(*=*=*=^>>FN  (((  -)-&"&&(((c.>.@.@AA$$V,,, YCs\1222! 	y"cn4 'DO '	S%9%;%;<<<$$&&&		 	r"   r   c                  K   | j         rn| j                                        sUg }t          j        d|d          }| j                            |          }| j                            |           d| _         | j        sX| j	        sQ| j
                                         | j                                         d {V  | j                                         | j        s| j	        rddiS d| j        | j        d	}d
| _        |S )Nr.   Continuer   r   Fr   zhttp.disconnectzhttp.requestr  r"   )r   rR   r   rF   InformationalResponserJ   ro   r   rk   rj   rS   r   rq   waitclearr   r   )rZ   rX   rv   r   r   s        r(   r   zRequestResponseCycle.receive  s%     ( 	21J1J1L1L 	2-/G-#wWabbbEY^^%^00FN  (((,1D)  	')? 	'I$$&&&$))+++++++++$$&&& 	/ 6 	/-.. #I%
 %

 	r"   N)rW   r   rJ   r   rR   r\   rS   r   rB   r   rC   r   rE   r   r   r   rq   r   r   r   r   r7   )r<   r
   r   r7   r   )r   r   r   r7   )r   r   )r   r   r   r[   r   r  ro   r   r+   r"   r(   r   r   c  s~        #' #' #' #'L, , , ,8- - - -$H H H HT     r"   r   )r   r   r   r    ).
__future__r   r=   r#   r@   typingr   r   r   r   urllib.parser   rF   h11._connectionr	   uvicorn._typesr
   r   r   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   r)   ranger   Protocolr0   r   r+   r"   r(   <module>r'     s   " " " " " "    / / / / / / / / / / / /             



 = = = = = =                  " ! ! ! ! ! + + + + + + p p p p p p p p p p p p x x x x x x x x x x x x x x & & & & & &    cbRWRWX[]`RaRabbbz# z# z# z# z#'" z# z# z#z	u u u u u u u u u ur"   