
    9Cg6*                    z   d dl mZ 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dZ$ G d de%          Z& G d dej'        e(ej)        f                   Z*ddZ+ddZ, G d de*          Z-dS )    )annotationsN)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strreturndict[str, str]c                   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        D/var/www/api/venv/lib/python3.11/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-   r1   r1   =   s        Dr/   r1   c                  x   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d0d            Zed1d            Zed2d            Zed3d            Zed1d             Zed-d!            Zed-d"            Zed4d$            Zd5d'ZdS )6HTTPConnectionz
    A base class for incoming HTTP connections, that is used to provide
    any functionality that is common to both `Request` and `WebSocket`.
    Nscoper   receiveReceive | Noner   Nonec                ,    |d         dv sJ || _         d S )Ntype)http	websocketr8   )selfr8   r9   s      r-   __init__zHTTPConnection.__init__G   s#    V} 55555


r/   r+   r   
typing.Anyc                    | j         |         S Nr@   )rA   r+   s     r-   __getitem__zHTTPConnection.__getitem__K   s    z#r/   typing.Iterator[str]c                *    t          | j                  S rE   )iterr8   rA   s    r-   __iter__zHTTPConnection.__iter__N   s    DJr/   intc                *    t          | j                  S rE   )lenr8   rJ   s    r-   __len__zHTTPConnection.__len__Q   s    4:r/   c                    | j         d         S )Nappr@   rJ   s    r-   rQ   zHTTPConnection.appZ   s    z%  r/   r   c                d    t          | d          st          | j                  | _        | j        S )N_urlr@   )hasattrr   r8   rS   rJ   s    r-   urlzHTTPConnection.url^   s0    tV$$ 	.$*---DIyr/   c                ,   t          | d          s~t          | j                  }|                    d|                    dd                    }|}|                    d          s|dz  }||d<   d|d<   ||d<   t          |	          | _        | j        S )
N	_base_urlapp_root_path	root_pathr$   /pathr/   query_stringr@   )rT   dictr8   getendswithr   rW   )rA   base_url_scoperX   r[   s       r-   base_urlzHTTPConnection.base_urld   s    t[)) 	7!$*--N +..@R@RS^`b@c@cddM D==%% %)N6"-0N>**7N;' ~666DN~r/   r
   c                d    t          | d          st          | j                  | _        | j        S )N_headersr@   )rT   r
   r8   rc   rJ   s    r-   headerszHTTPConnection.headersu   s0    tZ(( 	6#$*555DM}r/   r   c                n    t          | d          st          | j        d                   | _        | j        S )N_query_paramsr\   )rT   r   r8   rf   rJ   s    r-   query_paramszHTTPConnection.query_params{   s5    t_-- 	I!,TZ-G!H!HD!!r/   dict[str, typing.Any]c                8    | j                             di           S )Npath_params)r8   r^   rJ   s    r-   rj   zHTTPConnection.path_params   s    z~~mR000r/   r   c                    t          | d          s4i }| j                            d          }|rt          |          }|| _        | j        S )N_cookiescookie)rT   rd   r^   r.   rl   )rA   r   cookie_headers      r-   r   zHTTPConnection.cookies   sR    tZ(( 	$&(G L,,X66M 7'66#DM}r/   Address | Nonec                P    | j                             d          }|	t          | S d S )Nclient)r8   r^   r   )rA   	host_ports     r-   rq   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@   rJ   s    r-   rt   zHTTPConnection.session   s+    DJ&&&(g&&&z)$$r/   c                B    d| j         v s
J d            | j         d         S )NauthzAAuthenticationMiddleware must be installed to access request.authr@   rJ   s    r-   rv   zHTTPConnection.auth   +    ###%h###z&!!r/   c                B    d| j         v s
J d            | j         d         S )NuserzAAuthenticationMiddleware must be installed to access request.userr@   rJ   s    r-   ry   zHTTPConnection.user   rw   r/   r   c                    t          | d          s:| j                            di            t          | j        d                   | _        | j        S )N_statestate)rT   r8   
setdefaultr   r{   rJ   s    r-   r|   zHTTPConnection.state   sL    tX&& 	5J!!'2...  
7 344DK{r/   namerj   c               n    | j         d         } |j        |fi |}|                    | j                  S )Nrouter)ra   )r8   url_path_formake_absolute_urlra   )rA   r~   rj   r   url_paths        r-   url_forzHTTPConnection.url_for   sA    H-&6&t;;{;;))4=)AAAr/   rE   )r8   r   r9   r:   r   r;   )r+   r   r   rC   )r   rG   )r   rL   r   rC   )r   r   )r   r
   )r   r   )r   rh   )r   r   )r   ro   )r   r   )r~   r   rj   rC   r   r   )r2   r3   r4   __doc__rB   rF   rK   rO   object__eq____hash__propertyrQ   rU   ra   rd   rg   rj   r   rq   rt   rv   ry   r|   r   r5   r/   r-   r7   r7   A   s        
                  ]FH! ! ! X!    X
    X     X
 " " " X"
 1 1 1 X1    X    X % % % X% " " " X" " " " X"    XB B B B B Br/   r7   typing.NoReturnc                 $   K   t          d          )Nz+Receive channel has not been made availableRuntimeErrorr5   r/   r-   empty_receiver      s      
D
E
EEr/   messager   c                $   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 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Zdddd*dZd+dZd,d Zd-d"Z xZS ).RequestzFormData | None_formr8   r   r9   r   sendr   c                    t                                          |           |d         dk    sJ || _        || _        d| _        d| _        d | _        d S )Nr=   r>   F)superrB   _receive_send_stream_consumed_is_disconnectedr   )rA   r8   r9   r   	__class__s       r-   rB   zRequest.__init__   sY    V}&&&&
 % %


r/   r   r   c                L    t          j        t          | j        d                   S )Nmethod)typingcastr   r8   rJ   s    r-   r   zRequest.method   s    {3
8 4555r/   c                    | j         S rE   )r   rJ   s    r-   r9   zRequest.receive   s
    }r/   "typing.AsyncGenerator[bytes, None]c                 K   t          | d          r| j        W V  dW V  d S | j        rt          d          | j        s|                                  d {V }|d         dk    r;|                    dd          }|                    dd          sd	| _        |r|W V  n!|d         d
k    rd	| _        t                      | j        dW V  d S )N_bodyr/   zStream consumedr=   zhttp.requestbody	more_bodyFThttp.disconnect)rT   r   r   r   r   r^   r   r1   )rA   r   r   s      r-   streamzRequest.stream   s     4!! 	*IIIIF  	20111' 
	) MMOO++++++Gv.00{{63//{{;66 1,0D) JJJJ$555(,%&((( ' 
	) 						r/   bytesc                   K   t          | d          sNg }|                                 2 3 d {V }|                    |           6 d                    |          | _        | j        S )Nr   r/   )rT   r   appendjoinr   )rA   chunksr*   s      r-   r   zRequest.body   s      tW%% 	*"$F#{{}} % % % % % % %ee$$$$  -&))DJzs   ArC   c                   K   t          | d          s3|                                  d {V }t          j        |          | _        | j        S )N_json)rT   r   jsonloadsr   )rA   r   s     r-   r   zRequest.json   sP      tW%% 	*$$$$$$DD))DJzr/   i  	max_files
max_fieldsr   int | floatr   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   rQ   i  )status_codedetails!   application/x-www-form-urlencoded)r   r   rd   r^   r   r   parser   r8   r   r   r   r	   )	rA   r   r   content_type_headercontent_type_multipart_parserexcform_parsers	            r-   	_get_formzRequest._get_form   sY     :$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	#AwaitableOrContextManager[FormData]c               J    t          |                     ||                    S )Nr   )r   r   )rA   r   r   s      r-   formzRequest.form  s#     0_i0j0jkkkr/   r;   c                Z   K   | j         !| j                                          d {V  d S d S rE   )r   closerJ   s    r-   r   zRequest.close  sB      :!*""$$$$$$$$$$$ "!r/   boolc                  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 )Nr=   r   T)r   anyioCancelScopecancelr   r^   )rA   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r[   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)r=   r[   rd   )r8   r^   SERVER_PUSH_HEADERS_TO_COPYrd   getlistr   encoder   )rA   r[   raw_headersr~   values        r-   send_push_promisezRequest.send_push_promise(  s      4:>>,#C#CCC57K3 Z Z!\11$77 Z ZE&&I(>(>Y@W@W'XYYYYZ**&:DU`aabbbbbbbbbbb DCr/   )r8   r   r9   r   r   r   )r   r   )r   r   )r   r   )r   r   r   )r   r   r   r   r   r	   )r   r   r   r   r   r   )r   r;   )r   r   )r[   r   r   r;   )r2   r3   r4   __annotations__r   r   rB   r   r   r9   r   r   r   r   r   r   r   r   __classcell__)r   s   @r-   r   r      sg        8ET^        6 6 6 X6    X   (       ;?Z^      : +/$l l l l l l
% % % %% % % %c c c c c c c cr/   r   )r   r   r   r   )r   r   )r   r   r   r   ).
__future__r   r   r   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   multipart.multipartr   ModuleNotFoundErrorTYPE_CHECKINGstarlette.routingr   r   r.   	Exceptionr1   Mappingr   Anyr7   r   r   r   r5   r/   r-   <module>r      sP   " " " " " "   ( ( ( ( ( (  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        
 )((((((      6	 	 	 	 	y 	 	 	sB sB sB sB sBV^CO4 sB sB sBlF F F FC C C Coc oc oc oc ocn oc oc oc oc ocs   A AA