
    "d)                        d dl Z d dlZd dlmZ d dlZd dlmZmZ d dl	m
Z
mZmZmZmZmZ d dlmZ d dlmZmZmZ d dlmZmZmZmZ 	 d dlmZ n# e$ r dZY nw xY wej        rd d	lm Z  h d
Z!de"dej#        e"e"f         fdZ$ G d de%          Z& G d dej'        e"ej(        f                   Z)dej*        fdZ+dedej*        fdZ, G d de)          Z-dS )    N)cookies)AwaitableOrContextManager AwaitableOrContextManagerWrapper)URLAddressFormDataHeadersQueryParamsState)HTTPException)
FormParserMultiPartExceptionMultiPartParser)MessageReceiveScopeSend)parse_options_header)Router>   
user-agentcache-controlaccept-encodingaccept-languageacceptcookie_stringreturnc                    i }|                      d          D ]g}d|v r|                     dd          \  }}nd|}}|                                |                                }}|s|rt          j        |          ||<   h|S )a   
    This function parses a ``Cookie`` HTTP header into a dict of key/value pairs.

    It attempts to mimic browser cookie parsing behavior: browsers and web servers
    frequently disregard the spec (RFC 6265) when setting and reading cookies,
    so we attempt to suit the common scenarios here.

    This function has been adapted from Django 3.1.0.
    Note: we are explicitly _NOT_ using `SimpleCookie.load` because it is based
    on an outdated spec and will fail on lots of input we want to support
    ;=    )splitstriphttp_cookies_unquote)r   cookie_dictchunkkeyvals        6D:\api_v1\venv\Lib\site-packages\starlette/requests.pycookie_parserr+       s     *,K$$S)) 
: 
:%<<{{3**HC 5C99;;		S 	:# 	:+4S99K    c                       e Zd ZdS )ClientDisconnectN)__name__
__module____qualname__ r,   r*   r.   r.   ;   s        Dr,   r.   c                      e Zd ZdZddedej        e         ddfdZde	dej
        fdZdej        e	         fd	Zdefd
Zej        Zej        Zedej
        fd            Zedefd            Zedefd            Zedefd            Zedefd            Zedej        e	ej
        f         fd            Zedej        e	e	f         fd            Zedej        e         fd            Z edej        e	ej
        f         fd            Z!edej
        fd            Z"edej
        fd            Z#ede$fd            Z%de	dej
        defdZ&dS )HTTPConnectionz
    A base class for incoming HTTP connections, that is used to provide
    any functionality that is common to both `Request` and `WebSocket`.
    Nscopereceiver   c                 ,    |d         dv sJ || _         d S )Ntype)http	websocketr5   )selfr5   r6   s      r*   __init__zHTTPConnection.__init__E   s#    V} 55555


r,   r(   c                     | j         |         S Nr;   )r<   r(   s     r*   __getitem__zHTTPConnection.__getitem__I   s    z#r,   c                 *    t          | j                  S r?   )iterr5   r<   s    r*   __iter__zHTTPConnection.__iter__L   s    DJr,   c                 *    t          | j                  S r?   )lenr5   rC   s    r*   __len__zHTTPConnection.__len__O   s    4:r,   c                     | j         d         S )Nappr;   rC   s    r*   rI   zHTTPConnection.appX   s    z%  r,   c                 d    t          | d          st          | j                  | _        | j        S )N_urlr;   )hasattrr   r5   rK   rC   s    r*   urlzHTTPConnection.url\   s0    tV$$ 	.$*---DIyr,   c                     t          | d          s`t          | j                  }d|d<   d|d<   |                    d|                    dd                    |d<   t	          |	          | _        | j        S )
N	_base_url/pathr,   query_stringapp_root_path	root_pathr!   r;   )rL   dictr5   getr   rO   )r<   base_url_scopes     r*   base_urlzHTTPConnection.base_urlb   s    t[)) 	7!$*--N%(N6"-0N>**8*<*<!3!3K!D!D+ +N;' !~666DN~r,   c                 d    t          | d          st          | j                  | _        | j        S )N_headersr;   )rL   r	   r5   rZ   rC   s    r*   headerszHTTPConnection.headersn   s0    tZ(( 	6#$*555DM}r,   c                 n    t          | d          st          | j        d                   | _        | j        S )N_query_paramsrR   )rL   r
   r5   r]   rC   s    r*   query_paramszHTTPConnection.query_paramst   s5    t_-- 	I!,TZ-G!H!HD!!r,   c                 8    | j                             di           S )Npath_params)r5   rV   rC   s    r*   r`   zHTTPConnection.path_paramsz   s    z~~mR000r,   c                     t          | d          s4i }| j                            d          }|rt          |          }|| _        | j        S )N_cookiescookie)rL   r[   rV   r+   rb   )r<   r   cookie_headers      r*   r   zHTTPConnection.cookies~   sR    tZ(( 	$-/G L,,X66M 7'66#DM}r,   c                 P    | j                             d          }|	t          | S d S )Nclient)r5   rV   r   )r<   	host_ports     r*   rf   zHTTPConnection.client   s-     JNN8,,	 I&&tr,   c                 B    d| j         v s
J d            | j         d         S )Nsessionz=SessionMiddleware must be installed to access request.sessionr;   rC   s    r*   ri   zHTTPConnection.session   s/     ###J $##z)$$r,   c                 B    d| j         v s
J d            | j         d         S )NauthzAAuthenticationMiddleware must be installed to access request.authr;   rC   s    r*   rk   zHTTPConnection.auth   /     dj   N !  z&!!r,   c                 B    d| j         v s
J d            | j         d         S )NuserzAAuthenticationMiddleware must be installed to access request.userr;   rC   s    r*   rn   zHTTPConnection.user   rl   r,   c                     t          | d          s:| j                            di            t          | j        d                   | _        | j        S )N_statestate)rL   r5   
setdefaultr   rp   rC   s    r*   rq   zHTTPConnection.state   sL    tX&& 	5J!!'2...  
7 344DK{r,   _HTTPConnection__namer`   c                 n    | j         d         } |j        |fi |}|                    | j                  S )Nrouter)rX   )r5   url_path_formake_absolute_urlrX   )r<   rs   r`   ru   url_paths        r*   url_forzHTTPConnection.url_for   sA    H-&6&v====))4=)AAAr,   r?   )'r/   r0   r1   __doc__r   typingOptionalr   r=   strAnyr@   IteratorrD   intrG   object__eq____hash__propertyrI   r   rM   rX   r	   r[   r
   r^   Dictr`   r   r   rf   ri   rk   rn   r   rq   ry   r2   r,   r*   r4   r4   ?   s        
 e fog.F RV    s vz     &/#.             ]FH!VZ ! ! ! X! S    X
 	# 	 	 	 X	     X
 "k " " " X"
 1V[fj9 1 1 1 X1 S#X.    X 0    X %S&*_5 % % % X% "fj " " " X" "fj " " " X" u    XBc B&* B B B B B B Br,   r4   c                  $   K   t          d          )Nz+Receive channel has not been made availableRuntimeErrorr2   r,   r*   empty_receiver      s      
D
E
EEr,   messagec                 $   K   t          d          )Nz(Send channel has not been made availabler   )r   s    r*   
empty_sendr      s      
A
B
BBr,   c                       e Zd ZU ej        e         ed<   eefde	de
def fdZedefd            Zede
fd            Zdej        ed	f         fd
ZdefdZdej        fdZddddej        eef         dej        eef         defdZddddej        eef         dej        eef         dee         fdZddZdefdZdedd	fdZ  xZ!S )Request_formr5   r6   sendc                     t                                          |           |d         dk    sJ || _        || _        d| _        d| _        d | _        d S )Nr8   r9   F)superr=   _receive_send_stream_consumed_is_disconnectedr   )r<   r5   r6   r   	__class__s       r*   r=   zRequest.__init__   s[     	V}&&&&
 % %


r,   r   c                     | j         d         S )Nmethodr;   rC   s    r*   r   zRequest.method   s    z(##r,   c                     | j         S r?   )r   rC   s    r*   r6   zRequest.receive   s
    }r,   Nc                  K   t          | d          r| j        W V  dW V  d S | j        rt          d          d| _        	 |                                  d {V }|d         dk    r5|                    dd          }|r|W V  |                    dd	          sn#n!|d         d
k    rd| _        t                      }dW V  d S )N_bodyr,   zStream consumedTr8   zhttp.requestbody	more_bodyFhttp.disconnect)rL   r   r   r   r   rV   r   r.   )r<   r   r   s      r*   streamzRequest.stream   s     4!! 	*IIIIF  	20111 $
	) MMOO++++++Gv.00{{63// JJJJ{{;66 $555(,%&(((
	) 						r,   c                    K   t          | d          sNg }|                                 2 3 d {V }|                    |           6 d                    |          | _        | j        S )Nr   r,   )rL   r   appendjoinr   )r<   chunksr'   s      r*   r   zRequest.body   s      tW%% 	*+-F#{{}} % % % % % % %ee$$$$  -&))DJzs   Ac                    K   t          | d          s3|                                  d {V }t          j        |          | _        | j        S )N_json)rL   r   jsonloadsr   )r<   r   s     r*   r   zRequest.json   sP      tW%% 	*$$$$$$DD))DJzr,   i  	max_files
max_fieldsr   r   c                f  K   | j         !t          
J d            | j                            d          }t          |          \  }}|dk    r~	 t	          | j        |                                 ||          }|                                 d {V | _         n# t          $ r&}d| j        v rt          d|j
                  |d }~ww xY w|dk    rGt          | j        |                                           }|                                 d {V | _         nt                      | _         | j         S )	NzEThe `python-multipart` library must be installed to use form parsing.zContent-Types   multipart/form-datar   rI   i  )status_codedetails!   application/x-www-form-urlencoded)r   r   r[   rV   r   r   parser   r5   r   r   r   r   )	r<   r   r   content_type_headercontent_type_multipart_parserexcform_parsers	            r*   	_get_formzRequest._get_form   s[      :$00V 100"&,"2"2>"B"B23FGGOL!555'6"+#-	( ( ($ (8'='='?'?!?!?!?!?!?!?DJJ)   
**+CKPPPPI !EEE(t{{}}EE#.#4#4#6#6666666

%ZZ
zs   A	B 
C	#!CC	c                J    t          |                     ||                    S )Nr   )r   r   )r<   r   r   s      r*   formzRequest.form  s)     0NNY:NFF
 
 	
r,   c                 Z   K   | j         !| j                                          d {V  d S d S r?   )r   closerC   s    r*   r   zRequest.close"  sB      :!*""$$$$$$$$$$$ "!r,   c                   K   | j         s{i }t          j                    5 }|                                 |                                  d {V }d d d            n# 1 swxY w Y   |                    d          dk    rd| _         | j         S )Nr8   r   T)r   anyioCancelScopecancelr   rV   )r<   r   css      r*   is_disconnectedzRequest.is_disconnected&  s      $ 		-!G "$$ 0		 $//////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 {{6""&777(,%$$s   /AA!ArQ   c                 R  K   d| j                             di           v rg }t          D ]\}| j                            |          D ]?}|                    |                    d          |                    d          f           @]|                     d||d           d {V  d S d S )Nzhttp.response.push
extensionszlatin-1)r8   rQ   r[   )r5   rV   SERVER_PUSH_HEADERS_TO_COPYr[   getlistr   encoder   )r<   rQ   raw_headersnamevalues        r*   send_push_promisezRequest.send_push_promise4  s      4:>>,#C#CCCEGK3  !\11$77  E&&Y//i1H1HI    **-tTT           DCr,   )r   N)"r/   r0   r1   r{   r|   r   __annotations__r   r   r   r   r   r=   r   r}   r   r6   AsyncGeneratorbytesr   r   r~   r   Unionr   floatr   r   r   r   boolr   r   __classcell__)r   s   @r*   r   r      s.        ?8$$$$ 0=:	 		%,	DH	 	 	 	 	 	 $ $ $ $ X$     Xf3E4K@    *E    FJ     /3/3	   <U
+ Le,	
 
   H /3/3	
 
 
 <U
+
 Le,	

 
#8	,
 
 
 
% % % %%t % % % %
C 
D 
 
 
 
 
 
 
 
r,   r   ).r   r{   r9   r   r$   r   starlette._utilsr   r   starlette.datastructuresr   r   r   r	   r
   r   starlette.exceptionsr   starlette.formparsersr   r   r   starlette.typesr   r   r   r   multipart.multipartr   ImportErrorTYPE_CHECKINGstarlette.routingr   r   r}   r   r+   	Exceptionr.   Mappingr~   r4   NoReturnr   r   r   r2   r,   r*   <module>r      si     ( ( ( ( ( (  X X X X X X X X X X X X X X X X X X X X X X X X . . . . . . Q Q Q Q Q Q Q Q Q Q 9 9 9 9 9 9 9 9 9 9 9 9 8888888        
 )((((((    S#X)>    6	 	 	 	 	y 	 	 	tB tB tB tB tBV^CO4 tB tB tBnFV_ F F F FCg C&/ C C C C@ @ @ @ @n @ @ @ @ @s   A AA