
    df*                        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 ej<                  rd d	lm Z  h d
Z!de"dejF                  e"e"f   fdZ$ G d de%      Z& G d dejN                  e"ejP                  f         Z)dejT                  fdZ+dedejT                  fdZ, G d de)      Z-y# e$ r dZY w xY w)    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 }| j                  d      D ]]  }d|v r|j                  dd      \  }}nd|}}|j                         |j                         }}|s|sFt        j                  |      ||<   _ |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        K/home/api-vastappli/venv/lib/python3.12/site-packages/starlette/requests.pycookie_parserr+       s     *,K$$S) 
:%<{{3*HC 5C99;		S#+44S9K
:     c                       e Zd Zy)ClientDisconnectN)__name__
__module____qualname__ r,   r*   r.   r.   ;   s    r,   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j8                  e	ej                  f   fd       Zedej8                  e	e	f   fd       Zedej                  e   fd       Z edej8                  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&y)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 || _         y )Ntype)http	websocketr5   )selfr5   r6   s      r*   __init__zHTTPConnection.__init__E   s    V} 555
r,   r(   c                      | j                   |   S Nr;   )r<   r(   s     r*   __getitem__zHTTPConnection.__getitem__I   s    zz#r,   c                 ,    t        | j                        S r?   )iterr5   r<   s    r*   __iter__zHTTPConnection.__iter__L   s    DJJ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    zz%  r,   c                 h    t        | d      st        | j                        | _        | j                  S )N_urlr;   )hasattrr   r5   rK   rC   s    r*   urlzHTTPConnection.url\   s&    tV$$**-DIyyr,   c                     t        | d      sUt        | j                        }d|d<   d|d<   |j                  d|j                  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   sm    t[)!$**-N%(N6"-0N>**8*<*<!3!3K!D+N;' !~6DN~~r,   c                 h    t        | d      st        | j                        | _        | j                  S )N_headersr;   )rL   r	   r5   rZ   rC   s    r*   headerszHTTPConnection.headersn   s&    tZ(#$**5DM}}r,   c                 l    t        | d      st        | j                  d         | _        | j                  S )N_query_paramsrR   )rL   r
   r5   r]   rC   s    r*   query_paramszHTTPConnection.query_paramst   s.    t_-!,TZZ-G!HD!!!r,   c                 :    | j                   j                  di       S )Npath_params)r5   rV   rC   s    r*   r`   zHTTPConnection.path_paramsz   s    zz~~mR00r,   c                     t        | d      s1i }| j                  j                  d      }|rt        |      }|| _        | j                  S )N_cookiescookie)rL   r[   rV   r+   rb   )r<   r   cookie_headers      r*   r   zHTTPConnection.cookies~   sC    tZ(-/G LL,,X6M'6#DM}}r,   c                 N    | j                   j                  d      }|t        | S y )Nclient)r5   rV   r   )r<   	host_ports     r*   rf   zHTTPConnection.client   s*     JJNN8,	 I&&r,   c                 J    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   s0     #	KJ	K zz)$$r,   c                 J    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   0     djj 	ON	O zz&!!r,   c                 J    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      s9| j                  j                  di        t        | j                  d         | _        | j                  S )N_statestate)rL   r5   
setdefaultr   rp   rC   s    r*   rq   zHTTPConnection.state   sA    tX&JJ!!'2.  

7 34DK{{r,   _HTTPConnection__namer`   c                 ~    | j                   d   } |j                  |fi |}|j                  | j                        S )Nrouter)rX   )r5   url_path_formake_absolute_urlrX   )r<   rs   r`   ru   url_paths        r*   url_forzHTTPConnection.url_for   s?    H-&6&&v==))4==)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 foog.F RV s vzz  &//#.    ]]FH!VZZ ! ! S  
 	# 	 	   
 "k " "
 1V[[fjj9 1 1 S#X.   0   %S&**_5 % % "fjj " " "fjj " " u  Bc B&** B Br,   r4   c                      K   t        d      w)Nz+Receive channel has not been made availableRuntimeErrorr2   r,   r*   empty_receiver      s     
D
EE   messagec                     K   t        d      w)Nz(Send channel has not been made availabler   )r   s    r*   
empty_sendr      s     
A
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 | _        y )Nr8   r9   F)superr=   _receive_send_stream_consumed_is_disconnectedr   )r<   r5   r6   r   	__class__s       r*   r=   zRequest.__init__   sF     	V}&&
 % %
r,   r   c                      | j                   d   S )Nmethodr;   rC   s    r*   r   zRequest.method   s    zz(##r,   c                     | j                   S r?   )r   rC   s    r*   r6   zRequest.receive   s    }}r,   Nc                f  K   t        | d      r| j                   d y | j                  rt        d      d| _        	 | j	                          d {   }|d   dk(  r,|j                  dd      }|r| |j                  dd	      sn|d   d
k(  rd| _        t               fd y 7 Xw)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!**I  011 $ MMO+Gv.0{{63/J{{;6$55(,%&((  	 ,s   AB1B/AB1c                    K   t        | d      s-g }| j                         2 3 d {   }|j                  |       | j                  S 7 "6 dj                  |      | _        &w)Nr   r,   )rL   r   appendjoinr   )r<   chunksr'   s      r*   r   zRequest.body   sX     tW%+-F#{{} % %ee$zz%}&)DJs%   A"A
AA
A"A

A"c                    K   t        | d      s2| j                          d {   }t        j                  |      | _        | j                  S 7 *w)N_json)rL   r   jsonloadsr   )r<   r   s     r*   r   zRequest.json   s=     tW%$DD)DJzz %s    AA+Ai  	max_files
max_fieldsr   r   c                  K   | j                   t        J d       | j                  j                  d      }t        |      \  }}|dk(  rQ	 t	        | j                  | j                         ||      }|j                          d {   | _         | j                   S |dk(  rMt        | j                  | j                               }|j                          d {   | _         | j                   S t               | _         | j                   S 7 # t        $ r,}d| j                  v rt        d|j                        |d }~ww xY w7 jw)	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WVW #',,"2"2>"B23FGOL!55'6"+#-	($ (8'='='?!?DJ zz !EE(t{{}E#.#4#4#66
 zz &Z
zz "@) 

*+CKKPPI 7sI   AE:D
 D	D
 AEE0ED
 
	D?'D::D??Ec                :    t        | j                  ||            S )Nr   )r   r   )r<   r   r   s      r*   formzRequest.form  s!     0NNY:NF
 	
r,   c                 n   K   | j                   #| j                   j                          d {    y y 7 wr?   )r   closerC   s    r*   r   zRequest.close"  s.     ::!**""$$$ "$s   *535c                   K   | j                   sbi }t        j                         5 }|j                          | j	                          d {   }d d d        |j                  d      dk(  rd| _         | j                   S 7 3# 1 sw Y   2xY ww)Nr8   r   T)r   anyioCancelScopecancelr   rV   )r<   r   css      r*   is_disconnectedzRequest.is_disconnected&  s}     $$!G ""$ 0		 $/0 {{6"&77(,%$$$ 00 0s.   #B$A?	A=
A?/B=A??BBrQ   c                 D  K   d| j                   j                  di       v r|g }t        D ]S  }| j                  j	                  |      D ]3  }|j                  |j                  d      |j                  d      f       5 U | j                  d||d       d {    y y 7 w)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CEGK3 !\\11$7 E&&Y/i1HI
 **-tT   Ds   BB BB )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      sW   ??8$$ 0=:		%,	DH	 $ $ $   f33E4K@ *E FJJ  /3/3	 <<U
+ LLe,	
 
H /3/3	
 <<U
+
 LL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   ModuleNotFoundErrorTYPE_CHECKINGstarlette.routingr   r   r}   r   r+   	Exceptionr.   Mappingr~   r4   NoReturnr   r   r   r2   r,   r*   <module>r      s      (  X X X . Q Q 9 9 8
 
(  S#X)> 6	y 	tBV^^CO4 tBnFV__ FCg C&// C@n @_    s   C C"!C"