
    "d/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     <D:\api_v1\venv\Lib\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    @@@@@@!P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GG!#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.schemeE       %%r   c                     | j         j        S rA   )r    netlocr?   s    r   rD   z
URL.netlocI   rB   r   c                     | j         j        S rA   )r    r'   r?   s    r   r'   zURL.pathM       ##r   c                     | j         j        S rA   )r    queryr?   s    r   rH   z	URL.queryQ   s    $$r   c                     | j         j        S rA   )r    fragmentr?   s    r   rJ   zURL.fragmentU       ''r   c                     | j         j        S rA   )r    usernamer?   s    r   rM   zURL.usernameY   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.hostnamea   rK   r   c                     | j         j        S rA   )r    r   r?   s    r   r   zURL.porte   rF   r   c                     | j         dv S )N)r,   r.   )r#   r?   s    r   	is_securezURL.is_securei   s    {...r   kwargsc                 B   d|v sd|v sd|v sd|v r|                     dd           }|                     d| j                  }|                     d| j                  }|                     d| j                  }|H| j        }|                    d          \  }}}|d         dk    r|                    dd	          d
         }|}||d| z  }||}||d| z  }| d| }||d<    | j        j        di |}	| 	                    |	
                                          S )NrM   rO   rQ   r   @]r/      r   rD   r   )popr   rM   rO   rD   
rpartitionrsplitr    _replace	__class__r4   )
r6   rU   rQ   r   rM   rO   rD   _userpassr    s
             r   r3   zURL.replacem   s^   &  V##V##zz*d33H::fdi00Dzz*dm<<Hzz*dm<<H!'!2!23!7!71hB<3&&'sA66q9H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   rf   rg   s      r   
<listcomp>z,URL.replace_query_params.<locals>.<listcomp>   s-    SSSjc5CHHc%jj1SSSr   rj   )r   rm   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 )NTrc   rj   )	
isinstancer   rk   r   rH   r[   r   rn   r3   )r6   ru   ro   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   rf   r6   ry   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   r_   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   rp   rt   r   rx   r|   r~   r   r   r   r   r   r      s8        (,& && 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 3B)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                 >   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          |||          S )	Nr,   r$   )TFr.   r-   )r$   r   /)r#   rD   r'   )
rw   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&d;;;;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     <&,sCx*@ <S < < < < < <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('**********')r_   r   )r6   
class_names     r   r   zSecret.__repr__   s    ^,
,,,,r   c                     | j         S rA   r   r?   s    r   r~   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   r~   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rh   items     r   rs   z2CommaSeparatedStrings.__init__.<locals>.<listcomp>   s     ===D4::<<===r   )rw   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   rs   z2CommaSeparatedStrings.__repr__.<locals>.<listcomp>   s    '''$'''r   r   r   r   r6   r   rm   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   r~   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   r~   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   rn   rm   c                     i | ]\  }}||	S r   r   rh   kvs      r   ri   z/ImmutableMultiDict.__init__.<locals>.<dictcomp>#  s    ...tq!a...r   )r   r   rn   r>   r   castr   r   r   Mappingrm   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   )rh   item_key
item_valuer8   s      r   rs   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   ru   r?   s    r   ru   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   rm   r?   s    r   rm   zImmutableMultiDict.items/  s    z!!!r   c                 *    t          | j                  S rA   r   r   r?   s    r   rn   zImmutableMultiDict.multi_items2  s    DJr   c                     | j         |         S rA   r   r   s     r   r   zImmutableMultiDict.__getitem__5  s    z#r   c                     || j         v S rA   r   r   s     r   __contains__zImmutableMultiDict.__contains__8  s    dj  r   c                 D    t          |                                           S rA   r   ru   r?   s    r   r   zImmutableMultiDict.__iter__;      DIIKK   r   c                 *    t          | j                  S rA   )r   r   r?   s    r   r   zImmutableMultiDict.__len__>      4:r   ry   c                     t          || j                  sdS t          | j                  t          |j                  k    S NF)rw   r_   sortedr   r{   s     r   r|   zImmutableMultiDict.__eq__A  s:    %00 	5dj!!VEK%8%888r   c                 R    | j         j        }|                                 }| d|dS Nr   r   )r_   r   rn   r   s      r   r   zImmutableMultiDict.__repr__F  s4    ^,
  ""))u))))r   )!r   r   r   r   Dictr   r   r   r   r   Iterabler   r   r;   r   r   KeysViewru   
ValuesViewr   	ItemsViewrm   rn   r   r   r   r   r   r   r   r|   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 )rk   r8   r9   r!   Nc                 4    |                      ||g           d S rA   )setlistr6   r8   r9   s      r   __setitem__zMultiDict.__setitem__M  s    S5'"""""r   c                 H    fd| j         D             | _         | j        = d S )Nc                 *    g | ]\  }}|k    ||fS r   r   rh   r   r   r8   s      r   rs   z)MultiDict.__delitem__.<locals>.<listcomp>Q  &    @@@AqCxxq!fxxxr   )r   r   r   s    `r   __delitem__zMultiDict.__delitem__P  s-    @@@@@@@
JsOOOr   defaultc                 j    fd| j         D             | _         | j                            |          S )Nc                 *    g | ]\  }}|k    ||fS r   r   r   s      r   rs   z!MultiDict.pop.<locals>.<listcomp>U  r   r   )r   r   r[   r6   r8   r   s    ` r   r[   zMultiDict.popT  s6    @@@@@@@
z~~c7+++r   c                 t    | j                                         \  }fd| j        D             | _        |fS )Nc                 *    g | ]\  }}|k    ||fS r   r   r   s      r   rs   z%MultiDict.popitem.<locals>.<listcomp>Z  r   r   )r   popitemr   )r6   r9   r8   s     @r   r  zMultiDict.popitemX  sA    Z''))
U@@@@@@@
Ezr   c                 X    fd| j         D             }|                                |S )Nc                 &    g | ]\  }}|k    |S r   r   r   s      r   rs   z%MultiDict.poplist.<locals>.<listcomp>^  s"    7771a3hh!hhhr   )r   r[   )r6   r8   r   s    ` r   poplistzMultiDict.poplist]  s2    7777
777r   c                 j    | j                                          | j                                         d S rA   )r   clearr   r?   s    r   r
  zMultiDict.clearb  s0    

r   c                 f    || vr&|| j         |<   | j                            ||f           | |         S rA   )r   r   appendr  s      r   
setdefaultzMultiDict.setdefaultf  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   rs   z%MultiDict.setlist.<locals>.<listcomp>q  s&    JJJ!Qcq!fr   c                     g | ]}|fS r   r   )rh   r9   r8   s     r   rs   z%MultiDict.setlist.<locals>.<listcomp>r  s    *L*L*LEC<*L*L*Lr   rX   )r[   r   r   )r6   r8   r   existing_itemss    `  r   r   zMultiDict.setlistm  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.appendu  s+    
3,'''
3r   r   rU   c                     t          |i |fd| j        D             }|                                z   | _        | j                                       d S )Nc                 J    g | ]\  }}|                                 v||f S r   )ru   )rh   r   r   r9   s      r   rs   z$MultiDict.update.<locals>.<listcomp>  s3    SSSVaQejjll=R=R1a&=R=R=Rr   )rk   r   rn   r   rl   )r6   r   rU   r  r9   s       @r   rl   zMultiDict.updatey  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   r[   r   r  r   r  r
  r  r   r  r   r   rl   r   r   r   rk   rk   L  s       #vz #&* # # # # #vz d    , ,vz ,FJ ,&* , , , ,    
6: &+    
    fj 6:     )6: )v{ )t ) ) ) ) &*  VZ  D        !|NKVZ%;<=?
! *! 
! ! ! ! ! !r   rk   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   Trc   r*   c                 P    g | ]#\  }}t          |          t          |          f$S r   rf   r   s      r   rs   z(QueryParams.__init__.<locals>.<listcomp>  s-    >>>41as1vvs1vv&>>>r   c                 N    i | ]"\  }}t          |          t          |          #S r   rf   r   s      r   ri   z(QueryParams.__init__.<locals>.<dictcomp>  s*    DDDAc!ffc!ffDDDr   )r   rw   r   superr;   r   bytesr2   r   r   rm   )r6   r   rU   r9   r_   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   r~   zQueryParams.__str__  s    $$$r   c                 H    | j         j        }t          |           }| d|dS r   )r_   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;   r~   r   __classcell__r_   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dZdddddej        dej        e         dej        e         ddd	df
d
Z	e
d	ej        e         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.
    N)sizefilenamer)   filer#  r$  r)   ztyping.Optional[Headers]r!   c                Z    || _         || _        || _        |pt                      | _        d S rA   )r$  r%  r#  Headersr)   )r6   r%  r#  r$  r)   s        r   r;   zUploadFile.__init__  s-     !		+'))r   c                 8    | j                             dd           S )Nzcontent-type)r)   r1   r?   s    r   content_typezUploadFile.content_type  s    |555r   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         | xj         t          |          z  c_         | j        r| j                            |           d S t          | j        j        |           d {V  d S rA   )r#  r   r.  r%  writer	   )r6   r/  s     r   r1  zUploadFile.write  st      9 IIT"II? 	;IOOD!!!!!#DIOT:::::::::::r   rX   c                    K   | j         r| j                            |          S t          | j        j        |           d {V S rA   )r.  r%  readr	   )r6   r#  s     r   r3  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   r4  s     r   r6  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   r8  zUploadFile.close  sR      ? 	5IOO#DIO44444444444r   )rX   r  )r   r   r   r   r   BinaryIOr   r   r   r;   r   r)  r   r.  r  r1  r3  r6  r8  r   r   r   r"  r"    s[         &*)-.2, , ,o, oc"	,
 /#&, ,, 
, , , , 6foc2 6 6 6 X6 "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   r_   s      r   r;   zFormData.__init__  s'     	$)&)))))r   c                    K   |                                  D ]4\  }}t          |t                    r|                                 d {V  5d S rA   )rn   rw   r"  r8  r   s      r   r8  zFormData.close  sb      **,, 	$ 	$JC%,, $kkmm#######	$ 	$r   r  )r   r   r   r   r   r   r   r   r"  r   r   r;   r8  r  r   s   @r   r;  r;    s         	*|N3S*_ ==>KS&,sJ*G%GHIK
	* ,sJ/	* 
	* 	* 	* 	* 	* 	*$ $ $ $ $ $ $ $r   r;  c            
       d   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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 |!t          |d                   x| _         |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encoderg   s      r   rs   z$Headers.__init__.<locals>.<listcomp>  sS       C ##I..Y0G0GH  r   z"Cannot set both "raw" and "scope".r)   )r   rm   r   )r6   r)   r?  r   s       r   r;   zHeaders.__init__  s     ?A
;; F;;;=="J=== ")--//  DJJJ _=="F===DJJJ -1y1A,B,BBDJy))) 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 rB  r2   rg   s      r   rs   z Headers.keys.<locals>.<listcomp>  s(    CCC*#u

9%%CCCr   r   r?   s    r   ru   zHeaders.keys  s    CC
CCCCr   c                 $    d | j         D             S )Nc                 >    g | ]\  }}|                     d           S rB  rH  rg   s      r   rs   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 rB  rH  rg   s      r   rs   z!Headers.items.<locals>.<listcomp>#  sI     
 
 
U ZZ	""ELL$;$;<
 
 
r   r   r?   s    r   rm   zHeaders.items"  s%    
 
"j
 
 
 	
r   r8   c                 x    |                                                     d          fd| j        D             S )Nr*   c                 L    g | ] \  }}|k    |                     d           !S rB  rH  )rh   r   r   get_header_keys      r   rs   z#Headers.getlist.<locals>.<listcomp>*  s@     
 
 
$*>)) i(()))r   rC  rD  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.mutablecopy0  s    $*QQQ-0000r   c                     |                                                     d          }| j        D ]"\  }}||k    r|                    d          c S #t	          |          )Nr*   )rC  rD  r   r2   KeyErrorr6   r8   rO  
header_keyheader_values        r   r   zHeaders.__getitem__3  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  rV  s        r   r   zHeaders.__contains__:  sO    ++I66(,
 	 	$J^++tt ,ur   c                 D    t          |                                           S rA   r   r?   s    r   r   zHeaders.__iter__A  r   r   c                 *    t          | j                  S rA   )r   r   r?   s    r   r   zHeaders.__len__D  r   r   ry   c                     t          |t                    sdS t          | j                  t          |j                  k    S r   )rw   r'  r   r   r{   s     r   r|   zHeaders.__eq__G  s8    %)) 	5dj!!VEK%8%888r   c                     | j         j        }t          |                                           }t	          |          t	          |           k    r| d|dS | d| j        dS )Nr   r   z(raw=)r_   r   dictrm   r   r?  )r6   r   as_dicts      r   r   zHeaders.__repr__L  sh    ^,
tzz||$$w<<3t99$$ //7////00480000r   )NNN)r!   rQ  )r   r   r   r   r   r   r   r   r   r   r  MutableMappingr   r;   r   r?  ru   r   rm   r   rS  r   r   r   r   r   r   r   r|   r   r   r   r   r'  r'    sg         >BHLIM	C CS!9:C _V[eUl)CDEC v4S&*_EF	C
 
C C C C,  V[eUl!;<       X Dfk#& D D D DFC( F F F F
v{6<S#9: 
 
 
 

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                   4   e Zd ZdededdfdZdeddfdZdej        eef         dd fdZdej        eef         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        eef         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*   rZ   Nr   rC  rD  	enumerater   r  reversed)	r6   r8   r9   set_key	set_valuefound_indexesidxr   r   s	            r   r   zMutableHeaders.__setitem__U  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*   Nrc  )r6   r8   del_keypop_indexesri  r   r   s          r   r   zMutableHeaders.__delitem__k  s     ))++$$Y//*,+4TZ+@+@ 	( 	('C'(J7""""3'''K(( 	  	 C
3	  	 r   ry   c                     t          |t          j                  st          d|j        j                   |                     |           | S NzExpected a mapping but got )rw   r   r   	TypeErrorr_   r   rl   r{   s     r   __ior__zMutableHeaders.__ior__y  sJ    %00 	VT%/:RTTUUUEr   c                     t          |t          j                  st          d|j        j                   |                                 }|                    |           |S rn  )rw   r   r   ro  r_   r   rS  rl   )r6   ry   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*   )rC  rD  rd  r   r2   r  )r6   r8   r9   rf  rg  ri  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   )rm   )r6   ry   r8   vals       r   rl   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)rC  rD  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 )Nr{  r   )r1   r   )r6   r{  existings      r   add_vary_headerzMutableHeaders.add_vary_header  s<    88F##99h-..DVr   )r   r   r   r   r   r   r   r   rp  rs  r   r   r   r  r?  r  rl   r  r~  r   r   r   rQ  rQ  T  s       4s 43 44 4 4 4 4, s  t        V^CH5 :J    FN384 9I     V[eUl!;<    Xc # #    FN384     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  r_   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  rU  AttributeErrorformatr_   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   collections.abcr   r   urllib.parser   r   r   r   starlette.concurrencyr	   starlette.typesr
   
NamedTupler   TypeVarr   r   r   r   r   r   r   r   r   r   rk   r  r"  r   r;  r'  rQ  r  r   r   r   <module>r     s<    $ $ $ $ $ $       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 W9 W9 W9 W9 W9 W9 W9 W9t< < < < <c < < <<! ! ! ! ! ! ! !(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45 45 45 45 45 45 45 45n$ $ $ $ $!#v|JO'D"DE $ $ $,T1 T1 T1 T1 T1fnS#X& T1 T1 T1nT T T T TW T T Tn         r   