
    vh-                       d dl mZ d dlZd dlmZmZmZ d dlmZ	 d dl
mZmZmZ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$ erd dl%m&Z& d dl'm(Z( d dl)m*Z* n	 	 d dl%m&Z& h dZ-ddZ. G d de/      Z0 G d dee1ef         Z2ddZ3ddZ4 G d de2      Z5y# e+$ r	 d dl,m&Z& Y Dw xY w# e+$ r dZ&Y Qw xY w)    )annotationsN)AsyncGeneratorIteratorMapping)cookies)TYPE_CHECKINGAnyNoReturncast)AwaitableOrContextManager AwaitableOrContextManagerWrapper)URLAddressFormDataHeadersQueryParamsState)HTTPException)
FormParserMultiPartExceptionMultiPartParser)MessageReceiveScopeSend)parse_options_header)	Starlette)Router>   
user-agentcache-controlaccept-encodingaccept-languageacceptc                    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)cookie_stringcookie_dictchunkkeyvals        J/var/www/html/luna/venv/lib/python3.12/site-packages/starlette/requests.pycookie_parserr3   (   s     #%K$$S) 
:%<{{3*HC 5C99;		S#+44S9K
:     c                      e Zd Zy)ClientDisconnectN)__name__
__module____qualname__ r4   r2   r6   r6   C   s    r4   r6   c                  B   e Zd ZdZdddZddZddZddZej                  Z	ej                  Z
edd       Zedd       Zedd	       Zedd
       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zed d       Zd!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`.
    Nc                $    |d   dv sJ || _         y )Ntype)http	websocketscope)selfrB   receives      r2   __init__zHTTPConnection.__init__M   s    V} 5555
r4   c                     | j                   |   S NrA   )rC   r0   s     r2   __getitem__zHTTPConnection.__getitem__Q   s    zz#r4   c                ,    t        | j                        S rG   )iterrB   rC   s    r2   __iter__zHTTPConnection.__iter__T   s    DJJr4   c                ,    t        | j                        S rG   )lenrB   rK   s    r2   __len__zHTTPConnection.__len__W   s    4::r4   c                     | j                   d   S )NapprA   rK   s    r2   rQ   zHTTPConnection.app`   s    zz%  r4   c                h    t        | d      st        | j                        | _        | j                  S )N_urlrA   )hasattrr   rB   rS   rK   s    r2   urlzHTTPConnection.urld   s&    tV$$**-DIyyr4   c                   t        | d      sot        | j                        }|j                  d|j                  dd            }|}|j	                  d      s|dz  }||d<   d|d<   ||d<   t        |	      | _        | j                  S )
N	_base_urlapp_root_path	root_pathr(   /pathr4   query_stringrA   )rT   dictrB   getendswithr   rW   )rC   base_url_scoperX   r[   s       r2   base_urlzHTTPConnection.base_urlj   s    t[)!$**-N +..@R@RS^`b@cdM D==%%)N6"-0N>**7N;' ~6DN~~r4   c                h    t        | d      st        | j                        | _        | j                  S )N_headersrA   )rT   r   rB   rc   rK   s    r2   headerszHTTPConnection.headers{   s&    tZ(#$**5DM}}r4   c                l    t        | d      st        | j                  d         | _        | j                  S )N_query_paramsr\   )rT   r   rB   rf   rK   s    r2   query_paramszHTTPConnection.query_params   s.    t_-!,TZZ-G!HD!!!r4   c                :    | j                   j                  di       S )Npath_params)rB   r^   rK   s    r2   ri   zHTTPConnection.path_params   s    zz~~mR00r4   c                    t        | d      s1i }| j                  j                  d      }|rt        |      }|| _        | j                  S )N_cookiescookie)rT   rd   r^   r3   rk   )rC   r   cookie_headers      r2   r   zHTTPConnection.cookies   sC    tZ(&(G LL,,X6M'6#DM}}r4   c                N    | j                   j                  d      }|t        | S y )Nclient)rB   r^   r   )rC   	host_ports     r2   ro   zHTTPConnection.client   s*     JJNN8,	 I&&r4   c                J    d| j                   v sJ d       | j                   d   S )Nsessionz=SessionMiddleware must be installed to access request.sessionrA   rK   s    r2   rr   zHTTPConnection.session   s)    DJJ&g(gg&zz)$$r4   c                J    d| j                   v sJ d       | j                   d   S )NauthzAAuthenticationMiddleware must be installed to access request.authrA   rK   s    r2   rt   zHTTPConnection.auth   )    #h%hh#zz&!!r4   c                J    d| j                   v sJ d       | j                   d   S )NuserzAAuthenticationMiddleware must be installed to access request.userrA   rK   s    r2   rw   zHTTPConnection.user   ru   r4   c                    t        | d      s9| j                  j                  di        t        | j                  d         | _        | j                  S )N_statestate)rT   rB   
setdefaultr   ry   rK   s    r2   rz   zHTTPConnection.state   sA    tX&JJ!!'2.  

7 34DK{{r4   c                   | j                   j                  d      xs | j                   j                  d      }|t        d       |j                  |fi |}|j	                  | j
                        S )NrouterrQ   zVThe `url_for` method can only be used inside a Starlette application or with a router.)ra   )rB   r^   RuntimeErrorurl_path_formake_absolute_urlra   )rC   nameri   url_path_providerurl_paths        r2   url_forzHTTPConnection.url_for   so    7;zz~~h7O7hSWS]S]SaSabgSh$wxx1$11$F+F))4==)AAr4   rG   )rB   r   rD   zReceive | NonereturnNone)r0   strr   r	   )r   zIterator[str])r   intr   r	   )r   r   )r   r   )r   r   )r   zdict[str, Any])r   dict[str, str])r   zAddress | None)r   r   )r   r   ri   r	   r   r   )r7   r8   r9   __doc__rE   rH   rL   rO   object__eq____hash__propertyrQ   rU   ra   rd   rg   ri   r   ro   rr   rt   rw   rz   r   r:   r4   r2   r<   r<   G   s#   
  ]]FH! !  
     
 " "
 1 1     % % " " " "  Br4   r<   c                     K   t        d      w)Nz+Receive channel has not been made availabler~   r:   r4   r2   empty_receiver      s     
D
EE   c                    K   t        d      w)Nz(Send channel has not been made availabler   )messages    r2   
empty_sendr      s     
A
BBr   c                       e Zd ZU ded<   eefd fdZedd       Zedd       Z	ddZ
ddZddZd	d	d
d	 	 	 	 	 	 	 ddZd	d	d
d	 	 	 	 	 	 	 ddZddZddZddZ xZS )RequestzFormData | None_formc                ~    t         |   |       |d   dk(  sJ || _        || _        d| _        d| _        d | _        y )Nr>   r?   F)superrE   _receive_send_stream_consumed_is_disconnectedr   )rC   rB   rD   send	__class__s       r2   rE   zRequest.__init__   sG    V}&&&
 % %
r4   c                <    t        t        | j                  d         S )Nmethod)r   r   rB   rK   s    r2   r   zRequest.method   s    CH-..r4   c                    | j                   S rG   )r   rK   s    r2   rD   zRequest.receive   s    }}r4   c                 K   t        | d      r| j                   d y | j                  rt        d      | j                  sy| j	                          d {   }|d   dk(  r3|j                  dd      }|j                  dd      sd	| _        |r| n|d   d
k(  rd	| _        t               | j                  syd y 7 kw)N_bodyr4   zStream consumedr>   zhttp.requestbody	more_bodyFThttp.disconnect)rT   r   r   r~   r   r^   r   r6   )rC   r   r   s      r2   streamzRequest.stream   s     4!**I  011'' MMO+Gv.0{{63/{{;6,0D)J$55(,%&(( '' 	 ,s   ACCA$C Cc                   K   t        | d      s-g }| j                         2 3 d {   }|j                  |       | j                  S 7 "6 dj                  |      | _        &w)Nr   r4   )rT   r   appendjoinr   )rC   chunksr/   s      r2   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)rT   r   jsonloadsr   )rC   r   s     r2   r   zRequest.json   s=     tW%$DD)DJzz %s    AA+Ai  i   	max_files
max_fieldsmax_part_sizec                 K   | j                   t        J d       | j                  j                  d      }t        |      \  }}|dk(  rR	 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   rQ   i  )status_codedetails!   application/x-www-form-urlencoded)r   r   rd   r^   r   r   parser   rB   r   r   r   r   )
rC   r   r   r   content_type_headercontent_type_multipart_parserexcform_parsers
             r2   	_get_formzRequest._get_form   s3     ::'3 W3 #',,"2"2>"B23FGOL!55'6"+#-&3($ (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 	E 'D;;E  Ec               <    t        | j                  |||            S )Nr   )r   r   )rC   r   r   r   s       r2   formzRequest.form   s$     0NNY:UbNc
 	
r4   c                n   K   | j                   #| j                   j                          d {    y y 7 wrG   )r   closerK   s    r2   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)Nr>   r   T)r   anyioCancelScopecancelr   r^   )rC   r   css      r2   is_disconnectedzRequest.is_disconnected/  s}     $$!G ""$ 0		 $/0 {{6"&77(,%$$$ 00 0s.   #B$A?	A=
A?/B=A??BB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)r>   r[   rd   )rB   r^   SERVER_PUSH_HEADERS_TO_COPYrd   getlistr   encoder   )rC   r[   raw_headersr   values        r2   send_push_promisezRequest.send_push_promise=  s     4::>>,#CC57K3 Z!\\11$7 ZE&&I(>Y@W'XYZZ **&:DU`abbb D
 cs   BB BB )rB   r   rD   r   r   r   )r   r   )r   r   )r   zAsyncGenerator[bytes, None])r   bytesr   )r   int | floatr   r   r   r   r   r   )r   r   r   r   r   r   r   z#AwaitableOrContextManager[FormData])r   r   )r   bool)r[   r   r   r   )r7   r8   r9   __annotations__r   r   rE   r   r   rD   r   r   r   r   r   r   r   r   __classcell__)r   s   @r2   r   r      s    8ET^  / /  ( "&"&(! !  	!
 ! 
!L "&"&(	
 	
  		

 	
 
-	
%%cr4   r   )r-   r   r   r   )r   r
   )r   r   r   r
   )6
__future__r   r   collections.abcr   r   r   r?   r   r+   typingr   r	   r
   r   r   starlette._utilsr   r   starlette.datastructuresr   r   r   r   r   r   starlette.exceptionsr   starlette.formparsersr   r   r   starlette.typesr   r   r   r   python_multipart.multipartr   starlette.applicationsr   starlette.routingr   ModuleNotFoundErrormultipart.multipartr   r3   	Exceptionr6   r   r<   r   r   r   r:   r4   r2   <module>r      s    "  = = ( 5 5  X X X . Q Q 9 9?0($	AG 6	y 	uBWS#X& uBpFC|cn |c] # 	A@	A $#$s*   6B3 3C>C  CC CC