
    }Oi&                        d dl Z d dlZd dlmZ d dlmZ d dl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          Z&dej'        fdZ(dedej'        fdZ) G d de&          Z*dS )    N)Mapping)cookies)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        m/var/www/html/web/mlink/mlink_AI_Server/mlink-backend/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)   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!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r4   )selfr4   r5   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>   )iterr4   r;   s    r)   __iter__zHTTPConnection.__iter__L   s    DJr+   c                 *    t          | j                  S r>   )lenr4   rB   s    r)   __len__zHTTPConnection.__len__O   s    4:r+   c                     | j         d         S )Nappr:   rB   s    r)   rH   zHTTPConnection.appX   s    z%  r+   c                 d    t          | d          st          | j                  | _        | j        S )N_urlr:   )hasattrr   r4   rJ   rB   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:   )rK   dictr4   getr   rN   )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:   )rK   r   r4   rY   rB   s    r)   headerszHTTPConnection.headersn   s0    tZ(( 	6#$*555DM}r+   c                 n    t          | d          st          | j        d                   | _        | j        S )N_query_paramsrQ   )rK   r	   r4   r\   rB   s    r)   query_paramszHTTPConnection.query_paramst   s5    t_-- 	I!,TZ-G!H!HD!!r+   c                 8    | j                             di           S )Npath_params)r4   rU   rB   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)rK   rZ   rU   r*   ra   )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)r4   rU   r   )r;   	host_ports     r)   re   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:   rB   s    r)   rh   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:   rB   s    r)   rj   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:   rB   s    r)   rm   zHTTPConnection.user   rk   r+   c                     t          | d          s:| j                            di            t          | j        d                   | _        | j        S )N_statestate)rK   r4   
setdefaultr
   ro   rB   s    r)   rp   zHTTPConnection.state   sL    tX&& 	5J!!'2...  
7 344DK{r+   namer_   c                 n    | j         d         } |j        |fi |}|                    | j                  S )Nrouter)rW   )r4   url_path_formake_absolute_urlrW   )r;   rr   r_   rt   url_paths        r)   url_forzHTTPConnection.url_for   sA    H-&6&t;;{;;))4=)AAAr+   r>   )(r.   r/   r0   __doc__r   typingOptionalr   r<   strAnyr?   IteratorrC   intrF   object__eq____hash__propertyrH   r   rL   rW   r   rZ   r	   r]   Dictr_   r   r   re   rT   rh   rj   rm   r
   rp   rx   r1   r+   r)   r3   r3   ?   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 % % % % X% "fj " " " X" "fj " " " X" u    XBC B
 Bs B B B B B Br+   r3   c                  $   K   t          d          )Nz+Receive channel has not been made availableRuntimeErrorr1   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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efdZddZdefdZde
ddfdZ xZS )Requestr4   r5   sendc                     t                                          |           |d         dk    sJ || _        || _        d| _        d| _        d S )Nr7   r8   F)superr<   _receive_send_stream_consumed_is_disconnected)r;   r4   r5   r   	__class__s       r)   r<   zRequest.__init__   sV     	V}&&&&
 % %r+   r   c                     | j         d         S )Nmethodr:   rB   s    r)   r   zRequest.method   s    z(##r+   c                     | j         S r>   )r   rB   s    r)   r5   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 consumedTr7   zhttp.requestbody	more_bodyFhttp.disconnect)rK   r   r   r   r   rU   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+   )rK   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)rK   r   jsonloadsr   )r;   r   s     r)   r   zRequest.json   sP      tW%% 	*$$$$$$DD))DJzr+   c                 r  K   t          | d          s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 )	N_formzEThe `python-multipart` library must be installed to use form parsing.zContent-Types   multipart/form-datarH   i  )status_codedetails!   application/x-www-form-urlencoded)rK   r   rZ   rU   r   r   parser   r   r4   r   r   r   r   )r;   content_type_headercontent_typeoptionsmultipart_parserexcform_parsers          r)   formzRequest.form   sQ     tW%% 	($00V 100"&,"2"2>"B"B$89L$M$M!L'555'6t|T[[]]'S'S$'7'='='?'?!?!?!?!?!?!?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                 l   K   t          | d          r!| j                                         d {V  d S d S )Nr   )rK   r   closerB   s    r)   r   zRequest.close  sN      4!! 	%*""$$$$$$$$$$$	% 	%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 )Nr7   r   T)r   anyioCancelScopecancelr   rU   )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rP   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)r7   rP   rZ   )r4   rU   SERVER_PUSH_HEADERS_TO_COPYrZ   getlistr   encoder   )r;   rP   raw_headersrr   values        r)   send_push_promisezRequest.send_push_promise  s      4:>>,#C#CCCK3  !\11$77  E&&Y//i1H1HI    **-tTT           DCr+   )r   N)r.   r/   r0   r   r   r   r   r   r<   r   r|   r   r5   rz   AsyncGeneratorbytesr   r   r}   r   r   r   r   boolr   r   __classcell__)r   s   @r)   r   r      sx       /<:& &&%,&DH& & & & & & $ $ $ $ X$     Xf3E4K@    .E    FJ    H    ,% % % %%t % % % %
C 
D 
 
 
 
 
 
 
 
r+   r   )+r   rz   collections.abcr   r8   r   r#   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-   r3   NoReturnr   r   r   r1   r+   r)   <module>r      sV     # # # # # # ( ( ( ( ( (  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W tB tB tBnFV_ F F F FCg C&/ C C C Cj j j j jn j j j j js   A AA