
    }OiY              	          d dl Z d dlZd dlmZ d dlmZ d dlmZmZmZm	Z	 d dl
mZ d dlmZ  G d dej                  Z ej        d	          Z ej        d
d          Z G d d          Z G d de          Z G d d          Z G d de          Z G d dej        eef                   Z G d deej        ej        f                   Z G d deeef                   Z G d d          Z G d deeej        eef         f                   Z G d d ej        eef                   Z  G d! d"e           Z! G d# d$          Z"dS )%    N)Sequence)shlex)SplitResult	parse_qsl	urlencodeurlsplit)run_in_threadpool)Scopec                   $    e Zd ZU eed<   eed<   dS )AddresshostportN)__name__
__module____qualname__str__annotations__int     s/var/www/html/web/mlink/mlink_AI_Server/mlink-backend/venv/lib/python3.11/site-packages/starlette/datastructures.pyr   r      s"         
III
IIIIIr   r   _KeyType_CovariantValueTypeT)	covariantc            	          e Zd Z	 	 ddedej        e         dej        dd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fd            Ze	defd            Ze	dej        def         fd            Ze	dej        def         fd            Ze	dej        def         fd            Ze	dej        e         fd            Ze	defd            Zdej        dd fdZdej        dd fdZdej        dd fdZdej        eej        e         f         dd fdZdej        defdZdefdZdefdZ dS )URL Nurlscope
componentsreturnc                    ||r
J d            |r
J d            |                     dd          }|                     dd           }|                     dd          |d         z   }|                     d	d
          }d }|d         D ]"\  }	}
|	dk    r|
                    d          } n#|
| d| | }n3||}n.|\  }}ddddd|         }||k    r
| d| | }n| d| d| | }|r|d|                                z   z  }n?|r=|r
J d             t          d          j        di |j                                        }|| _        d S )Nz"Cannot set both "url" and "scope".z+Cannot set both "scope" and "**components".schemehttpserver	root_pathr   pathquery_stringr   headerss   hostlatin-1z://P   i  )r$   httpswswss:?z)Cannot set both "url" and "**components".r   )getdecoder   replacer    geturl_url)selfr   r   r    r#   r%   r'   r(   host_headerkeyvaluer   r   default_ports                 r   __init__zURL.__init__   s    @@@@@7!PP#PPP>YYx00FYYx..F99["--f=D 99^S99LK#I.  
U'>>"',,y"9"9KE " &77K777#
d(*S3OOPVW<''#444d44CC#;;;;t;T;;C 3s\002222 	DGGGGG7!#b''///J//:AACCC			r   c                 b    t          | d          st          | j                  | _        | j        S )N_components)hasattrr   r5   r=   r6   s    r   r    zURL.components@   s/    t]++ 	3'	22Dr   c                     | j         j        S N)r    r#   r?   s    r   r#   z
URL.schemeF       %%r   c                     | j         j        S rA   )r    netlocr?   s    r   rD   z
URL.netlocJ   rB   r   c                     | j         j        S rA   )r    r'   r?   s    r   r'   zURL.pathN       ##r   c                     | j         j        S rA   )r    queryr?   s    r   rH   z	URL.queryR   s    $$r   c                     | j         j        S rA   )r    fragmentr?   s    r   rJ   zURL.fragmentV       ''r   c                     | j         j        S rA   )r    usernamer?   s    r   rM   zURL.usernameZ   rK   r   c                     | j         j        S rA   )r    passwordr?   s    r   rO   zURL.password^   rK   r   c                     | j         j        S rA   )r    hostnamer?   s    r   rQ   zURL.hostnameb   rK   r   c                     | j         j        S rA   )r    r   r?   s    r   r   zURL.portf   rF   r   c                     | j         dv S )N)r,   r.   )r#   r?   s    r   	is_securezURL.is_securej   s    {...r   kwargsc                    d|v sd|v sd|v sd|v r|                     d| j                  }|                     d| j                  }|                     d| j                  }|                     d| j                  }|}||d| z  }||}||d| z  }| d| }||d<    | j        j        di |}|                     |                                          S )	NrM   rO   rQ   r   r/   @rD   r   )	poprQ   r   rM   rO   r    _replace	__class__r4   )	r6   rU   rQ   r   rM   rO   rD   userpassr    s	            r   r3   zURL.replacen   s   &  V##V##zz*dm<<H::fdi00Dzz*dm<<Hzz*dm<<HF*d**$##'H.H$//v//%F8-T_-7777
~~j//11222r   c                    t          t          | j        d                    }|                    d |                                D                        t          |                                          }|                     |          S )NTkeep_blank_valuesc                 N    i | ]"\  }}t          |          t          |          #S r   r   .0r8   r9   s      r   
<dictcomp>z,URL.include_query_params.<locals>.<dictcomp>   s*    MMM
Us3xxUMMMr   rH   )	MultiDictr   rH   updateitemsr   multi_itemsr3   )r6   rU   paramsrH   s       r   include_query_paramszURL.include_query_params   st    9TZ4HHHIIMMfllnnMMMNNN&,,..//||%|(((r   c                     t          d |                                D                       }|                     |          S )Nc                 P    g | ]#\  }}t          |          t          |          f$S r   r`   ra   s      r   
<listcomp>z,URL.replace_query_params.<locals>.<listcomp>   s-    SSSjc5CHHc%jj1SSSr   rd   )r   rg   r3   )r6   rU   rH   s      r   replace_query_paramszURL.replace_query_params   s:    SSFLLNNSSSTT||%|(((r   keysc                    t          |t                    r|g}t          t          | j        d                    }|D ]}|                    |d            t          |                                          }|                     |          S )NTr]   rd   )	
isinstancer   re   r   rH   rX   r   rh   r3   )r6   ro   ri   r8   rH   s        r   remove_query_paramszURL.remove_query_params   s     dC   	6D9TZ4HHHII 	" 	"CJJsD!!!!&,,..//||%|(((r   otherc                 B    t          |           t          |          k    S rA   r`   r6   rs   s     r   __eq__z
URL.__eq__   s    4yyCJJ&&r   c                     | j         S rA   )r5   r?   s    r   __str__zURL.__str__   s
    yr   c                     t          |           }| j        r#t          |                     d                    }| j        j         dt          |           dS )Nz********)rO   ())r   rO   r3   rZ   r   repr)r6   r   s     r   __repr__zURL.__repr__   sT    $ii= 	9dllJl7788C.)88DII8888r   )r   N)!r   r   r   r   typingOptionalr
   Anyr;   propertyr   r    r#   rD   r'   rH   rJ   UnionrM   rO   rQ   r   r   boolrT   r3   rj   rn   r   rr   rv   rx   r}   r   r   r   r   r      s7        (,& && u%& j	&
 
& & & &P  K       X 
 & & & & X& & & & & X& $c $ $ $ X$ %s % % % X% (# ( ( ( X( (&,tSy1 ( ( ( X( (&,tSy1 ( ( ( X( (&,tSy1 ( ( ( X( $foc* $ $ $ X$ /4 / / / X/3
 3u 3 3 3 34)VZ )E ) ) ) ))VZ )E ) ) ) )	)Lfoc&:!:;	)		) 	) 	) 	)'FJ '4 ' ' ' '    9# 9 9 9 9 9 9r   r   c            	       p    e Zd ZdZddedededd fdZddedededdfd	Zd
ej        ee	f         defdZ
dS )URLPathz
    A URL path string that may also hold an associated protocol and/or host.
    Used by the routing to return `url_path_for` matches.
    r   r'   protocolr   r!   c                 D    |dv sJ t                               | |          S )N)r$   	websocketr   )r   __new__)clsr'   r   r   s       r   r   zURLPath.__new__   s(    44444{{3%%%r   Nc                 "    || _         || _        d S rA   )r   r   )r6   r'   r   r   s       r   r;   zURLPath.__init__   s     			r   base_urlc                 X   t          |t                    rt          |          }| j        r"ddddddd| j                 |j                 }n|j        }| j        p|j        }|j        	                    d          t          |           z   }t          t          |||                    S )	Nr,   r$   )TFr.   r-   )r$   r   /)r#   rD   r'   )
rq   r   r   r   rT   r#   r   rD   r'   rstrip)r6   r   r#   rD   r'   s        r   make_absolute_urlzURLPath.make_absolute_url   s    h$$ 	%8}}H= 	%&v66$)$77  m &/1FF
 _F-ho}##C((3t9943fV$???@@@r   )r   r   )r   r   r   __doc__r   r   r;   r~   r   r   r   r   r   r   r   r      s         
& &3 &# &# &y & & & & S C C     A&,sCx*@ AS A A A A A Ar   r   c                   B    e Zd ZdZdefdZdefdZdefdZdefdZ	dS )	Secretz
    Holds a string value that should not be revealed in tracebacks etc.
    You should cast the value to `str` at the point it is required.
    r9   c                     || _         d S rA   _value)r6   r9   s     r   r;   zSecret.__init__   s    r   r!   c                 $    | j         j        }| dS )Nz('**********')rZ   r   )r6   
class_names     r   r}   zSecret.__repr__   s    ^,
,,,,r   c                     | j         S rA   r   r?   s    r   rx   zSecret.__str__   s
    {r   c                 *    t          | j                  S rA   )r   r   r?   s    r   __bool__zSecret.__bool__       DK   r   N)
r   r   r   r   r   r;   r}   rx   r   r   r   r   r   r   r      s         
c    -# - - - -    !$ ! ! ! ! ! !r   r   c                       e Zd Zdej        eej        e         f         fdZdefdZ	dej        ee
f         dej        fdZdej        e         fdZdefdZdefd	Zd
S )CommaSeparatedStringsr9   c                     t          |t                    r2t          |d          }d|_        d|_        d |D             | _        d S t          |          | _        d S )NT)posix,c                 6    g | ]}|                                 S r   )striprb   items     r   rm   z2CommaSeparatedStrings.__init__.<locals>.<listcomp>   s     ===D4::<<===r   )rq   r   r   
whitespacewhitespace_split_itemslist)r6   r9   splitters      r   r;   zCommaSeparatedStrings.__init__   s`    eS!! 	&U$///H"%H(,H%==H===DKKKu++DKKKr   r!   c                 *    t          | j                  S rA   )lenr   r?   s    r   __len__zCommaSeparatedStrings.__len__   s    4;r   indexc                     | j         |         S rA   )r   )r6   r   s     r   __getitem__z!CommaSeparatedStrings.__getitem__   s    {5!!r   c                 *    t          | j                  S rA   )iterr   r?   s    r   __iter__zCommaSeparatedStrings.__iter__   r   r   c                 B    | j         j        }d | D             }| d|dS )Nc                     g | ]}|S r   r   r   s     r   rm   z2CommaSeparatedStrings.__repr__.<locals>.<listcomp>   s    '''$'''r   rz   r{   r   r6   r   rg   s      r   r}   zCommaSeparatedStrings.__repr__   s6    ^,
''$'''))u))))r   c                 @    d                     d | D                       S )N, c              3   4   K   | ]}t          |          V  d S rA   )r|   r   s     r   	<genexpr>z0CommaSeparatedStrings.__str__.<locals>.<genexpr>   s(      55d555555r   )joinr?   s    r   rx   zCommaSeparatedStrings.__str__   s#    yy55555555r   N)r   r   r   r~   r   r   r   r;   r   r   slicer   r   Iteratorr   r}   rx   r   r   r   r   r      s        &fl30D+DE & & & &         "c5j!9 "fj " " " "!&/#. ! ! ! !*# * * * *
6 6 6 6 6 6 6r   r   c                      e Zd ZU ej        eef         ed<   dej        dej	        eef         ej
        ej        eef                  f         dej        ddfdZdej        dej        e         fd	Zdej        e         fd
Zdej        e         fdZdej        eef         fdZdej        ej        eef                  fdZdedefdZdej        defdZdej        e         fdZdefdZdej        defdZdefdZ dS )ImmutableMultiDict_dictargsz1ImmutableMultiDict[_KeyType, _CovariantValueType]rU   r!   Nc                 T   t          |          dk     s
J d            |r|d         ng }|rCt          |                                          t          |                                          z   }|sg }nt          |d          rNt	          j        t          t          t          f         |          }t          |                                          }nt          |d          rSt	          j        t          j	        t          t          f         |          }t          |
                                          }nZt	          j        t          j        t          j        t          j        t          j        f                  |          }t          |          }d |D             | _        || _        d S )N   Too many arguments.r   rh   rg   c                     i | ]\  }}||	S r   r   rb   kvs      r   rc   z/ImmutableMultiDict.__init__.<locals>.<dictcomp>  s    ...tq!a...r   )r   r   rh   r>   r~   castr   r   r   Mappingrg   ListTupler   r   _list)r6   r   rU   r9   r   s        r   r;   zImmutableMultiDict.__init__   sr    4yy1}}}3}}}'+3DGG 	"5))5577$V,,88::; 
  	!HJFFUM** 	!K"8-@#@A5 E %++--..FFUG$$ 	!Kx9L/L MuUUE%++--((FFKFLVZ)?@A5 E %[[F..v...



r   r8   c                 *    fd| j         D             S )Nc                 &    g | ]\  }}|k    |S r   r   )rb   item_key
item_valuer8   s      r   rm   z.ImmutableMultiDict.getlist.<locals>.<listcomp>!  s$    UUU3xXQT__
___r   r   r6   r8   s    `r   getlistzImmutableMultiDict.getlist   s    UUUUtzUUUUr   c                 4    | j                                         S rA   )r   ro   r?   s    r   ro   zImmutableMultiDict.keys#  s    z   r   c                 4    | j                                         S rA   )r   valuesr?   s    r   r   zImmutableMultiDict.values&  s    z  """r   c                 4    | j                                         S rA   )r   rg   r?   s    r   rg   zImmutableMultiDict.items)  s    z!!!r   c                 *    t          | j                  S rA   r   r   r?   s    r   rh   zImmutableMultiDict.multi_items,  s    DJr   c                     | j         |         S rA   r   r   s     r   r   zImmutableMultiDict.__getitem__/  s    z#r   c                     || j         v S rA   r   r   s     r   __contains__zImmutableMultiDict.__contains__2  s    dj  r   c                 D    t          |                                           S rA   r   ro   r?   s    r   r   zImmutableMultiDict.__iter__5      DIIKK   r   c                 *    t          | j                  S rA   )r   r   r?   s    r   r   zImmutableMultiDict.__len__8      4:r   rs   c                     t          || j                  sdS t          | j                  t          |j                  k    S NF)rq   rZ   sortedr   ru   s     r   rv   zImmutableMultiDict.__eq__;  s:    %00 	5dj!!VEK%8%888r   c                 R    | j         j        }|                                 }| d|dS Nrz   r{   )rZ   r   rh   r   s      r   r}   zImmutableMultiDict.__repr__@  s4    ^,
  ""))u))))r   )!r   r   r   r~   Dictr   r   r   r   r   Iterabler   r   r;   r   r   KeysViewro   
ValuesViewr   	ItemsViewrg   rh   r   r   r   r   r   r   r   rv   r   r}   r   r   r   r   r      s,        ;x!445555#|?N8%889OFL3F)FGHJ
# *# 
# # # #JV6: V&+6I*J V V V V!foh/ ! ! ! !#)*=> # # # #"v'2E(EF " " " " V[h@S6S)TU        x ,?    !
 !t ! ! ! !!&/(3 ! ! ! !    9FJ 94 9 9 9 9
*# * * * * * *r   r   c                      e Zd Zdej        dej        ddfdZdej        ddfdZddej        dej        dej        fdZdej        fd	Z	dej        dej
        fd
ZddZddej        dej        dej        fdZdej        dej
        ddfdZdej        dej        ddfdZdej        d ej        ej
        ej        ej        ej        f                  f         dej        ddfdZdS )re   r8   r9   r!   Nc                 4    |                      ||g           d S rA   )setlistr6   r8   r9   s      r   __setitem__zMultiDict.__setitem__G  s    S5'"""""r   c                 H    fd| j         D             | _         | j        = d S )Nc                 *    g | ]\  }}|k    ||fS r   r   rb   r   r   r8   s      r   rm   z)MultiDict.__delitem__.<locals>.<listcomp>K  &    @@@AqCxxq!fxxxr   )r   r   r   s    `r   __delitem__zMultiDict.__delitem__J  s-    @@@@@@@
JsOOOr   defaultc                 j    fd| j         D             | _         | j                            |          S )Nc                 *    g | ]\  }}|k    ||fS r   r   r   s      r   rm   z!MultiDict.pop.<locals>.<listcomp>O  r   r   )r   r   rX   r6   r8   r   s    ` r   rX   zMultiDict.popN  s6    @@@@@@@
z~~c7+++r   c                 t    | j                                         \  }fd| j        D             | _        |fS )Nc                 *    g | ]\  }}|k    ||fS r   r   r   s      r   rm   z%MultiDict.popitem.<locals>.<listcomp>T  r   r   )r   popitemr   )r6   r9   r8   s     @r   r   zMultiDict.popitemR  sA    Z''))
U@@@@@@@
Ezr   c                 X    fd| j         D             }|                                |S )Nc                 &    g | ]\  }}|k    |S r   r   r   s      r   rm   z%MultiDict.poplist.<locals>.<listcomp>X  s"    7771a3hh!hhhr   )r   rX   )r6   r8   r   s    ` r   poplistzMultiDict.poplistW  s2    7777
777r   c                 j    | j                                          | j                                         d S rA   )r   clearr   r?   s    r   r  zMultiDict.clear\  s0    

r   c                 f    || vr&|| j         |<   | j                            ||f           | |         S rA   )r   r   appendr   s      r   
setdefaultzMultiDict.setdefault`  s:    d??%DJsOJsGn---Cyr   r   c                     |s|                      d            d S fd| j        D             }|fd|D             z   | _        |d         | j        <   d S )Nc                 *    g | ]\  }}|k    ||fS r   r   r   s      r   rm   z%MultiDict.setlist.<locals>.<listcomp>k  s&    JJJ!Qcq!fr   c                     g | ]}|fS r   r   )rb   r9   r8   s     r   rm   z%MultiDict.setlist.<locals>.<listcomp>l  s    *L*L*LEC<*L*L*Lr   )rX   r   r   )r6   r8   r   existing_itemss    `  r   r   zMultiDict.setlistg  st     	)HHS$JJJJ4:JJJN'*L*L*L*LV*L*L*LLDJ$RjDJsOOOr   c                 R    | j                             ||f           || j        |<   d S rA   )r   r  r   r   s      r   r  zMultiDict.appendo  s+    
3,'''
3r   r   rU   c                     t          |i |fd| j        D             }|                                z   | _        | j                                       d S )Nc                 J    g | ]\  }}|                                 v||f S r   )ro   )rb   r   r   r9   s      r   rm   z$MultiDict.update.<locals>.<listcomp>}  s3    SSSVaQejjll=R=R1a&=R=R=Rr   )re   r   rh   r   rf   )r6   r   rU   r  r9   s       @r   rf   zMultiDict.updates  sf     4*6**SSSStzSSS#e&7&7&9&99

%     r   rA   r!   N)r   r   r   r~   r   r   r   rX   r   r   r   r  r  r  r   r  r   r   rf   r   r   r   re   re   F  s       #vz #&* # # # # #vz d    , ,vz ,FJ ,&* , , , ,    
6: &+    
    fj 6:     )6: )v{ )t ) ) ) ) &*  VZ  D        !|NKVZ%;<=?
! *! 
! ! ! ! ! !r   re   c                        e Zd ZdZdej        dej        ej        ej        ej	        ej	        f                  e
ef         dej	        ddf fdZde
fdZde
fd	Z xZS )
QueryParamsz!
    An immutable multidict.
    r   r   rU   r!   Nc                 *   t          |          dk     s
J d            |r|d         ng }t          |t                    r* t                      j        t          |d          fi | nkt          |t                    r= t                      j        t          |                    d          d          fi | n t                      j        |i | d | j        D             | _        d | j	        
                                D             | _	        d S )	Nr   r   r   Tr]   r*   c                 P    g | ]#\  }}t          |          t          |          f$S r   r`   r   s      r   rm   z(QueryParams.__init__.<locals>.<listcomp>  s-    >>>41as1vvs1vv&>>>r   c                 N    i | ]"\  }}t          |          t          |          #S r   r`   r   s      r   rc   z(QueryParams.__init__.<locals>.<dictcomp>  s*    DDDAc!ffc!ffDDDr   )r   rq   r   superr;   r   bytesr2   r   r   rg   )r6   r   rU   r9   rZ   s       r   r;   zQueryParams.__init__  s)    4yy1}}}3}}}'QReS!! 	.EGGYuEEEPPPPPPu%% 	.EGG%,,y11TJJJ NT    EGGd-f--->>4:>>>
DD1A1A1C1CDDD


r   c                 *    t          | j                  S rA   )r   r   r?   s    r   rx   zQueryParams.__str__  s    $$$r   c                 H    | j         j        }t          |           }| d|dS r   )rZ   r   r   )r6   r   r(   s      r   r}   zQueryParams.__repr__  s.    ^,
4yy00|0000r   )r   r   r   r   r~   r   r   r   r   r   r   r  r;   rx   r}   __classcell__rZ   s   @r   r  r    s         E| NKVZ%;<=	
E *E 
E E E E E E4% % % % %1# 1 1 1 1 1 1 1 1r   r  c                       e Zd ZU dZdZej        ed<   ded<   	 	 dddd	edej	        ej                 d
eddddf
dZ
edefd            ZdeddfdZddedefdZdeddfdZddZdS )
UploadFilez@
    An uploaded file included as part of the request data.
    i   fileHeadersr)   Nr   )r)   filenamecontent_typeztyping.Optional[Headers]r!   c                    || _         || _        | t          j        | j                  | _        n|| _        |pt                      | _        d S )N)max_size)r   r!  tempfileSpooledTemporaryFilespool_max_sizer  r  r)   )r6   r   r  r!  r)   s        r   r;   zUploadFile.__init__  sM     !(< 5t?RSSSDIIDI+'))r   c                 4    t          | j        dd          }| S )N_rolledT)getattrr  )r6   rolled_to_disks     r   
_in_memoryzUploadFile._in_memory  s     It<<!!!r   datac                    K   | j         r| j                            |           d S t          | j        j        |           d {V  d S rA   )r+  r  writer	   )r6   r,  s     r   r.  zUploadFile.write  sV      ? 	;IOOD!!!!!#DIOT:::::::::::r   r  sizec                    K   | j         r| j                            |          S t          | j        j        |           d {V S rA   )r+  r  readr	   )r6   r/  s     r   r1  zUploadFile.read  sJ      ? 	(9>>$'''&ty~t<<<<<<<<<r   offsetc                    K   | j         r| j                            |           d S t          | j        j        |           d {V  d S rA   )r+  r  seekr	   )r6   r2  s     r   r4  zUploadFile.seek  sV      ? 	<INN6"""""#DINF;;;;;;;;;;;r   c                    K   | j         r| j                                         d S t          | j        j                   d {V  d S rA   )r+  r  closer	   r?   s    r   r6  zUploadFile.close  sR      ? 	5IOO#DIO44444444444r   )Nr   )r  r  )r   r   r   r   r&  r~   BinaryIOr   r   r   r;   r   r   r+  r  r.  r   r1  r4  r6  r   r   r   r  r    sP          !N
/
 26	, /3, , ,, ofo., 	, ,, 
, , , ,  "D " " " X"; ;$ ; ; ; ;= =s =E = = = =
< < < < < <5 5 5 5 5 5r   r  c            
            e Zd ZdZdej        d ej        eej        eef         f         ej	        ej
        eej        eef         f                  f         dej        eef         ddf fdZddZ xZS )	FormDatazN
    An immutable multidict, containing both file uploads and text input.
    r   rU   r!   Nc                 :     t                      j        |i | d S rA   )r  r;   )r6   r   rU   rZ   s      r   r;   zFormData.__init__  s'     	$)&)))))r   c                    K   |                                  D ]4\  }}t          |t                    r|                                 d {V  5d S rA   )rh   rq   r  r6  r   s      r   r6  zFormData.close  sb      **,, 	$ 	$JC%,, $kkmm#######	$ 	$r   r  )r   r   r   r   r~   r   r   r   r  r   r   r;   r6  r  r  s   @r   r9  r9    s         	*|N3S*_ ==>KS&,sJ*G%GHIK
	* ,sJ/	* 
	* 	* 	* 	* 	* 	*$ $ $ $ $ $ $ $r   r9  c            
          e Zd ZdZ	 	 	 ddej        ej        eef                  dej        ej        ej	        e
e
f                           dej        ej        eej        f                  ddfdZedej        ej	        e
e
f                  fd            Zdej        e         fd	Zdej        e         fd
Zdej        ej	        eef                  fdZddedej        dej        fdZdedej        e         fdZddZdedefdZdej        defdZdej        ej                 fdZdefdZdej        defdZdefdZdS )r  z3
    An immutable, case-insensitive multidict.
    Nr)   rawr   r!   c                     g | _         |=|
J d            |
J d            d |                                D             | _         d S ||
J d            || _         d S ||d         | _         d S d S )Nz$Cannot set both "headers" and "raw".z&Cannot set both "headers" and "scope".c                     g | ]A\  }}|                                                     d           |                    d           fBS r*   )lowerencodera   s      r   rm   z$Headers.__init__.<locals>.<listcomp>  sS       C ##I..Y0G0GH  r   z"Cannot set both "raw" and "scope".r)   )r   rg   )r6   r)   r=  r   s       r   r;   zHeaders.__init__  s     ?A
;; F;;;=="J=== ")--//  DJJJ _=="F===DJJJy)DJJJ r   c                 *    t          | j                  S rA   r   r?   s    r   r=  zHeaders.raw  s    DJr   c                 $    d | j         D             S )Nc                 >    g | ]\  }}|                     d           S r@  r2   ra   s      r   rm   z Headers.keys.<locals>.<listcomp>  s(    CCC*#u

9%%CCCr   r   r?   s    r   ro   zHeaders.keys  s    CC
CCCCr   c                 $    d | j         D             S )Nc                 >    g | ]\  }}|                     d           S r@  rF  ra   s      r   rm   z"Headers.values.<locals>.<listcomp>  s(    EEEJCY''EEEr   r   r?   s    r   r   zHeaders.values  s    EE$*EEEEr   c                 $    d | j         D             S )Nc                 h    g | ]/\  }}|                     d           |                     d           f0S r@  rF  ra   s      r   rm   z!Headers.items.<locals>.<listcomp>  sI     
 
 
U ZZ	""ELL$;$;<
 
 
r   r   r?   s    r   rg   zHeaders.items  s%    
 
"j
 
 
 	
r   r8   r   c                 8    	 | |         S # t           $ r |cY S w xY wrA   )KeyErrorr   s      r   r1   zHeaders.get  s5    	9 	 	 	NNN	s   
 c                 x    |                                                     d          fd| j        D             S )Nr*   c                 L    g | ] \  }}|k    |                     d           !S r@  rF  )rb   r   r   get_header_keys      r   rm   z#Headers.getlist.<locals>.<listcomp>'  s@     
 
 
$*>)) i(()))r   rA  rB  r   )r6   r8   rO  s     @r   r   zHeaders.getlist%  sK    ++I66
 
 
 
(,

 
 
 	
r   MutableHeadersc                 <    t          | j        d d                    S )N)r=  )rQ  r   r?   s    r   mutablecopyzHeaders.mutablecopy-  s    $*QQQ-0000r   c                     |                                                     d          }| j        D ]"\  }}||k    r|                    d          c S #t	          |          )Nr*   )rA  rB  r   r2   rL  r6   r8   rO  
header_keyheader_values        r   r   zHeaders.__getitem__0  si    ++I66(,
 	6 	6$J^++#**955555 ,smmr   c                     |                                                     d          }| j        D ]\  }}||k    r dS dS )Nr*   TFrP  rU  s        r   r   zHeaders.__contains__7  sO    ++I66(,
 	 	$J^++tt ,ur   c                 D    t          |                                           S rA   r   r?   s    r   r   zHeaders.__iter__>  r   r   c                 *    t          | j                  S rA   )r   r   r?   s    r   r   zHeaders.__len__A  r   r   rs   c                     t          |t                    sdS t          | j                  t          |j                  k    S r   )rq   r  r   r   ru   s     r   rv   zHeaders.__eq__D  s8    %)) 	5dj!!VEK%8%888r   c                     | j         j        }t          |                                           }t	          |          t	          |           k    r| d|dS | d| j        dS )Nrz   r{   z(raw=)rZ   r   dictrg   r   r=  )r6   r   as_dicts      r   r}   zHeaders.__repr__I  sh    ^,
tzz||$$w<<3t99$$ //7////00480000r   )NNNrA   )r!   rQ  )r   r   r   r   r~   r   r   r   r   r   r  r   r;   r   r=  ro   r   rg   r1   r   rS  r   r   r   r   r   r   r   rv   r}   r   r   r   r  r    s         >BHLBF	* *S!9:* _V[eUl)CDE* v~c6:o>?	*
 
* * * *(  V[eUl!;<       X Dfk#& D D D DFC( F F F F
v{6<S#9: 
 
 
 
 s VZ 6:    
3 
6;s#3 
 
 
 
1 1 1 1s s    
 t    !&/&*5 ! ! ! !    9FJ 94 9 9 9 9
1# 1 1 1 1 1 1r   r  c                      e Zd ZdededdfdZdeddfdZdej        dd fdZdej        dd fd	Z	e
dej        ej        eef                  fd
            ZdededefdZdej        ddfdZdededdfdZdeddfdZdS )rQ  r8   r9   r!   Nc                    |                                                     d          }|                    d          }g }t          | j                  D ]#\  }\  }}||k    r|                    |           $t          |dd                   D ]
}| j        |= |r|d         }||f| j        |<   dS | j                            ||f           dS )zs
        Set the header `key` to `value`, removing any duplicate entries.
        Retains insertion order.
        r*      Nr   rA  rB  	enumerater   r  reversed)	r6   r8   r9   set_key	set_valuefound_indexesidxr   r   s	            r   r   zMutableHeaders.__setitem__R  s    
 ))++$$Y//LL++	+4TZ+@+@ 	* 	*'C'(J7""$$S)))M!""-.. 	  	 C
3 	4"C&	2DJsOOOJw	233333r   c                     |                                                     d          }g }t          | j                  D ]#\  }\  }}||k    r|                    |           $t          |          D ]
}| j        |= dS )z*
        Remove the header `key`.
        r*   Nrb  )r6   r8   del_keypop_indexesrh  r   r   s          r   r   zMutableHeaders.__delitem__h  s     ))++$$Y//+4TZ+@+@ 	( 	('C'(J7""""3'''K(( 	  	 C
3	  	 r   rs   c                     t          |t          j                  st          d|j        j                   |                     |           | S NzExpected a mapping but got )rq   r~   r   	TypeErrorrZ   r   rf   ru   s     r   __ior__zMutableHeaders.__ior__v  sJ    %00 	VT%/:RTTUUUEr   c                     t          |t          j                  st          d|j        j                   |                                 }|                    |           |S rm  )rq   r~   r   rn  rZ   r   rS  rf   )r6   rs   news      r   __or__zMutableHeaders.__or__|  s[    %00 	VT%/:RTTUUU  

5
r   c                     | j         S rA   r   r?   s    r   r=  zMutableHeaders.raw  s
    zr   c                 *   |                                                     d          }|                    d          }t          | j                  D ]%\  }\  }}||k    r|                    d          c S &| j                            ||f           |S )zo
        If the header `key` does not exist, then set it to `value`.
        Returns the header value.
        r*   )rA  rB  rc  r   r2   r  )r6   r8   r9   re  rf  rh  r   r   s           r   r  zMutableHeaders.setdefault  s    
 ))++$$Y//LL++	+4TZ+@+@ 	4 	4'C'(J7""!((33333 #
7I.///r   c                 D    |                                 D ]
\  }}|| |<   d S rA   )rg   )r6   rs   r8   vals       r   rf   zMutableHeaders.update  s2     	 	HCDII	 	r   c                     |                                                     d          }|                    d          }| j                            ||f           dS )zD
        Append a header, preserving any duplicate entries.
        r*   N)rA  rB  r   r  )r6   r8   r9   
append_keyappend_values        r   r  zMutableHeaders.append  sQ     YY[[''	22
||I..
:|455555r   varyc                 l    |                      d          }|d                    ||g          }|| d<   d S )Nrz  r   )r1   r   )r6   rz  existings      r   add_vary_headerzMutableHeaders.add_vary_header  s<    88F##99h-..DVr   )r   r   r   r   r   r   r~   r   ro  rr  r   r   r   r  r=  r  rf   r  r}  r   r   r   rQ  rQ  Q  sz       4s 43 44 4 4 4 4, s  t        V^ 0@    FN /?     V[eUl!;<    Xc # #    FN t    6# 6c 6d 6 6 6 6C D      r   rQ  c                        e Zd ZU dZej        eej        f         ed<   ddej	        ej        eej        f                  f fdZ
dej        dej        ddfd	Zdej        dej        fd
Zdej        ddfdZ xZS )Statezm
    An object that can be used to store arbitrary state.

    Used for `request.state` and `app.state`.
    _stateNstatec                 T    |i }t                                          d|           d S )Nr  )r  __setattr__)r6   r  rZ   s     r   r;   zState.__init__  s-    =EHe,,,,,r   r8   r9   r!   c                     || j         |<   d S rA   r  r   s      r   r  zState.__setattr__  s     Cr   c                     	 | j         |         S # t          $ r0 d}t          |                    | j        j        |                    w xY w)Nz!'{}' object has no attribute '{}')r  rL  AttributeErrorformatrZ   r   )r6   r8   messages      r   __getattr__zState.__getattr__  sZ    	O;s## 	O 	O 	O9G 0G!M!MNNN	Os	    :A	c                     | j         |= d S rA   r  r   s     r   __delattr__zState.__delattr__  s    Kr   rA   )r   r   r   r   r~   r   r   r   r   r   r;   r  r  r  r  r  s   @r   r  r    s          KVZ((((- -fofk#vz/.JK - - - - - -
!vz !&* ! ! ! ! !Ovz Ofj O O O Ovz d        r   r  )#r$  r~   collections.abcr   r   urllib.parser   r   r   r   starlette.concurrencyr	   starlette.typesr
   
NamedTupler   TypeVarr   r   r   r   r   r   r   r   r   r   re   r  r  r   r9  r  rQ  r  r   r   r   <module>r     sM     $ $ $ $ $ $       D D D D D D D D D D D D 3 3 3 3 3 3 ! ! ! ! ! !    f   
 6>*%% %fn%:dKKK P9 P9 P9 P9 P9 P9 P9 P9fA A A A Ac A A A<! ! ! ! ! ! ! !(6 6 6 6 6H 6 6 68K* K* K* K* K*2E(EF K* K* K*\9! 9! 9! 9! 9!"6:vz#9: 9! 9! 9!x%1 %1 %1 %1 %1$S#X. %1 %1 %1P35 35 35 35 35 35 35 35l$ $ $ $ $!#v|JO'D"DE $ $ $,X1 X1 X1 X1 X1fnS#X& X1 X1 X1vT T T T TW T T Tn         r   