
    g>W              	      ~   S SK Jr  S SKrS SKJr  S SKJrJrJrJr  S SK	J
r
  S SKJr   " S S\R                  5      r\R                  " S	5      r\R                  " S
SS9r " S S5      r " S S\5      r " S S5      r " S S\R,                  \   5      r " S S\R0                  \\4   5      r " S S\\R4                  \R4                  4   5      r " S S\\\4   5      r " S S5      r " S S\\\R<                  \\4   4   5      r " S S \R0                  \\4   5      r  " S! S"\ 5      r! " S# S$5      r"g)%    )annotationsN)shlex)SplitResult	parse_qsl	urlencodeurlsplit)run_in_threadpool)Scopec                  *    \ rS rSr% S\S'   S\S'   Srg)Address   strhostintport N)__name__
__module____qualname____firstlineno____annotations____static_attributes__r       Q/home/matz/Project1/venv/lib/python3.13/site-packages/starlette/datastructures.pyr   r      s    
I
Ir   r   _KeyType_CovariantValueTypeT)	covariantc                  V   \ rS rSr  S       SS jjr\SS j5       r\SS j5       r\SS j5       r\SS j5       r	\SS j5       r
\SS	 j5       r\SS
 j5       r\SS j5       r\SS j5       r\SS j5       r\SS j5       rSS jrSS jrSS jrSS jrS S jrSS jrSS jrSrg)!URL   Nc                Z   Ub  U(       a   S5       eU(       a   S5       eUR                  SS5      nUR                  SS 5      nUS   nUR                  SS5      nS nUS	    H  u  pU	S
:X  d  M  U
R                  S5      n  O   Ub
  U SU U 3nO/Uc  UnO)Uu  pSSSSS.U   nX:X  a
  U SU U 3nOU SU SU U 3nU(       a  USUR                  5       -   -  nOHU(       aA  U(       a   S5       e[        S5      R                  " S0 UD6R                  R                  5       nXl        g )Nz"Cannot set both "url" and "scope".z+Cannot set both "scope" and "**components".schemehttpserverpathquery_stringr   headerss   hostlatin-1z://P   i  )r#   httpswswss:?z)Cannot set both "url" and "**components". r   )getdecoder   replace
componentsgeturl_url)selfurlscoper3   r"   r$   r%   r&   host_headerkeyvaluer   r   default_ports                 r   __init__URL.__init__   sX    @@@7!P#PP>YYx0FYYx.F=D 99^S9LK#I.
'>"',,y"9K /
 &K=7#
(*S3OPVW'#HCvdV4C#HCvQtfTF;Cs\00222GGG7b'///J/::AACC	r   c                p    [        U S5      (       d  [        U R                  5      U l        U R                  $ )N_components)hasattrr   r5   r@   r6   s    r   r3   URL.components@   s,    t]++'		2Dr   c                .    U R                   R                  $ N)r3   r"   rB   s    r   r"   
URL.schemeF       %%%r   c                .    U R                   R                  $ rE   )r3   netlocrB   s    r   rI   
URL.netlocJ   rG   r   c                .    U R                   R                  $ rE   )r3   r%   rB   s    r   r%   URL.pathN       ###r   c                .    U R                   R                  $ rE   )r3   queryrB   s    r   rO   	URL.queryR   s    $$$r   c                .    U R                   R                  $ rE   )r3   fragmentrB   s    r   rR   URL.fragmentV       '''r   c                .    U R                   R                  $ rE   )r3   usernamerB   s    r   rV   URL.usernameZ   rT   r   c                .    U R                   R                  $ rE   )r3   passwordrB   s    r   rY   URL.password^   rT   r   c                .    U R                   R                  $ rE   )r3   hostnamerB   s    r   r\   URL.hostnameb   rT   r   c                .    U R                   R                  $ rE   )r3   r   rB   s    r   r   URL.portf   rM   r   c                     U R                   S;   $ )N)r*   r,   )r"   rB   s    r   	is_secureURL.is_securej   s    {{...r   c                F   SU;   d  SU;   d  SU;   d  SU;   a  UR                  SS 5      nUR                  SU R                  5      nUR                  SU R                  5      nUR                  SU R                  5      nUc>  U R                  nUR                  S5      u    prUS   S:w  a  UR                  SS	5      S
   nUnUb  USU 3-  nUb  UnUb  USU 3-  nU SU 3nXaS'   U R                  R                  " S0 UD6n	U R                  U	R                  5       5      $ )NrV   rY   r\   r   @]r-      r   rI   r   )popr   rV   rY   rI   
rpartitionrsplitr3   _replace	__class__r4   )
r6   kwargsr\   r   rV   rY   rI   _userpassr3   s
             r   r2   URL.replacen   s4   :#7:;OSY]cSczz*d3H::fdii0Dzz*dmm<Hzz*dmm<H!'!2!23!71B<3&'sA6q9HFAdV*$##'!H:.H$:Qvh/%8__--77
~~j//122r   c           
     &   [        [        U R                  SS95      nUR                  UR	                  5        VVs0 s H  u  p4[        U5      [        U5      _M     snn5        [        UR                  5       5      nU R                  US9$ s  snnf NTkeep_blank_valuesrO   )		MultiDictr   rO   updateitemsr   r   multi_itemsr2   )r6   rm   paramsr:   r;   rO   s         r   include_query_paramsURL.include_query_params   sq    9TZZ4HIfllnMn
s3xU+nMN&,,./||%|(( Ns   !B
c           
         [        UR                  5        VVs/ s H  u  p#[        U5      [        U5      4PM     snn5      nU R                  US9$ s  snnf )Nru   )r   rx   r   r2   )r6   rm   r:   r;   rO   s        r   replace_query_paramsURL.replace_query_params   sG    FLLNSNjcCHc%j1NST||%|(( Ts   "A
c                    [        U[        5      (       a  U/n[        [        U R                  SS95      nU H  nUR                  US 5        M     [        UR                  5       5      nU R                  US9$ rr   )	
isinstancer   rv   r   rO   rh   r   ry   r2   )r6   keysrz   r:   rO   s        r   remove_query_paramsURL.remove_query_params   sg    dC  6D9TZZ4HICJJsD! &,,./||%|((r   c                0    [        U 5      [        U5      :H  $ rE   )r   r6   others     r   __eq__
URL.__eq__   s    4yCJ&&r   c                    U R                   $ rE   )r5   rB   s    r   __str__URL.__str__   s    yyr   c                    [        U 5      nU R                  (       a  [        U R                  SS95      nU R                  R                   S[        U5       S3$ )Nz********)rY   ())r   rY   r2   rl   r   repr)r6   r7   s     r   __repr__URL.__repr__   sI    $i==dllJl78C..))*!DI;a88r   )r@   r5   )r/   N)r7   r   r8   zScope | Noner3   
typing.AnyreturnNone)r   r   r   r   )r   z
None | str)r   
int | Noner   bool)rm   r   r   r   )r   str | typing.Sequence[str]r   r   r   r   r   r   )r   r   r   r   r=   propertyr3   r"   rI   r%   rO   rR   rV   rY   r\   r   ra   r2   r{   r~   r   r   r   r   r   r   r   r   r   r      s5    "&& & !	&
 
&P    
 & & & & $ $ % % ( ( ( ( ( ( ( ( $ $ / /38)))'9r   r   c                  >    \ rS rSrSrSS	S jjrSS
S jjrSS jrSrg)URLPath   z
A URL path string that may also hold an associated protocol and/or host.
Used by the routing to return `url_path_for` matches.
c                <    US;   d   e[         R                  X5      $ )N)r#   	websocketr/   )r   __new__)clsr%   protocolr   s       r   r   URLPath.__new__   s     4444{{3%%r   c                    X l         X0l        g rE   )r   r   )r6   r%   r   r   s       r   r=   URLPath.__init__   s     	r   c                h   [        U[        5      (       a  [        U5      nU R                  (       a&  SSS.SSS.S.U R                     UR                     nOUR
                  nU R                  =(       d    UR                  nUR                  R                  S5      [        U 5      -   n[        X#US9$ )	Nr*   r#   )TFr,   r+   )r#   r   /)r"   rI   r%   )
r   r   r   r   ra   r"   r   rI   r%   rstrip)r6   base_urlr"   rI   r%   s        r   make_absolute_urlURLPath.make_absolute_url   s    h$$8}H==&v6$)$7 mm &//1F
 __F-hoo}}##C(3t94&d;;r   )r   r   N)r/   r/   )r%   r   r   r   r   r   r   r   )r%   r   r   r   r   r   r   r   )r   z	str | URLr   r   )	r   r   r   r   __doc__r   r=   r   r   r   r   r   r   r      s    
&<r   r   c                  @    \ rS rSrSrS	S jrS
S jrS
S jrSS jrSr	g)Secret   z
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.
c                    Xl         g rE   _value)r6   r;   s     r   r=   Secret.__init__   s    r   c                8    U R                   R                  nU S3$ )Nz('**********')rl   r   )r6   
class_names     r   r   Secret.__repr__   s    ^^,,
^,,r   c                    U R                   $ rE   r   rB   s    r   r   Secret.__str__   s    {{r   c                ,    [        U R                  5      $ rE   )r   r   rB   s    r   __bool__Secret.__bool__       DKK  r   r   N)r;   r   r   r   )
r   r   r   r   r   r=   r   r   r   r   r   r   r   r   r      s    
-!r   r   c                  P    \ rS rSrS
S jrSS jrSS jrSS jrSS jrSS jr	Sr
g	)CommaSeparatedStrings   c                    [        U[        5      (       a>  [        USS9nSUl        SUl        U Vs/ s H  o3R                  5       PM     snU l        g [        U5      U l        g s  snf )NT)posix,)r   r   r   
whitespacewhitespace_splitstrip_itemslist)r6   r;   splitteritems       r   r=   CommaSeparatedStrings.__init__   sU    eS!!U$/H"%H(,H%4<=HD::<H=DKu+DK >s   A%c                ,    [        U R                  5      $ rE   )lenr   rB   s    r   __len__CommaSeparatedStrings.__len__   s    4;;r   c                     U R                   U   $ rE   r   )r6   indexs     r   __getitem__!CommaSeparatedStrings.__getitem__   s    {{5!!r   c                ,    [        U R                  5      $ rE   )iterr   rB   s    r   __iter__CommaSeparatedStrings.__iter__   r   r   c                l    U R                   R                  nU  Vs/ s H  o"PM     nnU SU< S3$ s  snf Nr   r   r   )r6   r   r   rx   s       r   r   CommaSeparatedStrings.__repr__   s=    ^^,,
"&'$$$'Quiq)) (s   1c                2    SR                  S U  5       5      $ )N, c              3  8   #    U  H  n[        U5      v   M     g 7frE   )r   ).0r   s     r   	<genexpr>0CommaSeparatedStrings.__str__.<locals>.<genexpr>   s     5ds   )joinrB   s    r   r   CommaSeparatedStrings.__str__   s    yy5555r   r   N)r;   r   r   r   )r   zint | slicer   r   )r   ztyping.Iterator[str]r   )r   r   r   r   r=   r   r   r   r   r   r   r   r   r   r   r      s     & "!*
6r   r   c                      \ rS rSr% S\S'         SS jrSS jrSS jrSS jrSS jr	SS	 jr
SS
 jrSS jrSS jrSS jrSS jrSS jrSrg)ImmutableMultiDict   z#dict[_KeyType, _CovariantValueType]_dictc                   [        U5      S:  d   S5       eU(       a  US   O/ nU(       a3  [        U5      R                  5       [        U5      R                  5       -   nU(       d  / nO[        US5      (       aB  [        R
                  " [        [        [        4   U5      n[        UR                  5       5      nO[        US5      (       aL  [        R
                  " [        R                  [        [        4   U5      n[        UR                  5       5      nO"[        R
                  " SU5      n[        U5      nU VVs0 s H  u  pVXV_M	     snnU l        X@l        g s  snnf )N   Too many arguments.r   ry   rx   z#list[tuple[typing.Any, typing.Any]])r   r   ry   rA   typingcastr   r   r   Mappingrx   r   _list)r6   argsrm   r;   r   kvs          r   r=   ImmutableMultiDict.__init__   s    4y1}333}'+DG&u-99;>PQW>X>d>d>ffE:<FUM**KK 28=P3P QSXYE%++-.FUG$$KKx9L/L MuUE%++-(FKK EuME%[F'-.vtqadv.

 /s    Ec                ^    U R                    VVs/ s H  u  p#X!:X  d  M  UPM     snn$ s  snnf rE   r   )r6   r:   item_key
item_values       r   getlistImmutableMultiDict.getlist  s%    7;zzUz3xX_
zUUUs   ))c                6    U R                   R                  5       $ rE   )r   r   rB   s    r   r   ImmutableMultiDict.keys  s    zz  r   c                6    U R                   R                  5       $ rE   )r   valuesrB   s    r   r   ImmutableMultiDict.values  s    zz  ""r   c                6    U R                   R                  5       $ rE   )r   rx   rB   s    r   rx   ImmutableMultiDict.items   s    zz!!r   c                ,    [        U R                  5      $ rE   r   r   rB   s    r   ry   ImmutableMultiDict.multi_items#  s    DJJr   c                     U R                   U   $ rE   r   r6   r:   s     r   r   ImmutableMultiDict.__getitem__&  s    zz#r   c                    XR                   ;   $ rE   r  r  s     r   __contains__ImmutableMultiDict.__contains__)  s    jj  r   c                4    [        U R                  5       5      $ rE   r   r   rB   s    r   r   ImmutableMultiDict.__iter__,      DIIK  r   c                ,    [        U R                  5      $ rE   )r   r   rB   s    r   r   ImmutableMultiDict.__len__/      4::r   c                    [        XR                  5      (       d  g[        U R                  5      [        UR                  5      :H  $ NF)r   rl   sortedr   r   s     r   r   ImmutableMultiDict.__eq__2  s1    %00djj!VEKK%888r   c                `    U R                   R                  nU R                  5       nU SU< S3$ r   )rl   r   ry   )r6   r   rx   s      r   r   ImmutableMultiDict.__repr__7  s2    ^^,,
  "Quiq))r   r   r   N)r   zImmutableMultiDict[_KeyType, _CovariantValueType] | typing.Mapping[_KeyType, _CovariantValueType] | typing.Iterable[tuple[_KeyType, _CovariantValueType]]rm   r   r   r   )r:   r   r   zlist[_CovariantValueType])r   ztyping.KeysView[_KeyType])r   z&typing.ValuesView[_CovariantValueType])r   z/typing.ItemsView[_KeyType, _CovariantValueType])r   z*list[tuple[_KeyType, _CovariantValueType]])r:   r   r   r   r:   r   r   r   )r   ztyping.Iterator[_KeyType]r   r   r   )r   r   r   r   r   r=   r   r   r   rx   ry   r   r  r   r   r   r   r   r   r   r   r   r      sd    ..@
  
8V!#" !!9
*r   r   c                      \ rS rSrSS jrSS jrSSS jjrSS jrSS jrSS jr	SSS	 jjr
SS
 jrSS jr      SS jrSrg)rv   i=  c                (    U R                  X/5        g rE   )setlistr6   r:   r;   s      r   __setitem__MultiDict.__setitem__>  s    S'"r   c                    U R                    VVs/ s H  u  p#X!:w  d  M  X#4PM     snnU l         U R                  U	 g s  snnf rE   )r   r   )r6   r:   r   r   s       r   __delitem__MultiDict.__delitem__A  s7    )-@qxfqf@
JJsO As   ==Nc                    U R                    VVs/ s H  u  p4X1:w  d  M  X44PM     snnU l         U R                  R                  X5      $ s  snnf rE   )r   r   rh   )r6   r:   defaultr   r   s        r   rh   MultiDict.popE  s?    )-@qxfqf@
zz~~c++ As
   A
A
c                    U R                   R                  5       u  pU R                   VVs/ s H  u  p4X1:w  d  M  X44PM     snnU l        X4$ s  snnf rE   )r   popitemr   )r6   r:   r;   r   r   s        r   r)  MultiDict.popitemI  sH    ZZ'')
)-@qxfqf@
z As
   AAc                    U R                    VVs/ s H  u  p#X!:X  d  M  UPM     nnnU R                  U5        U$ s  snnf rE   )r   rh   )r6   r:   r   r   r   s        r   poplistMultiDict.poplistN  s5     $

7
ah!
7 8s   ;;c                l    U R                   R                  5         U R                  R                  5         g rE   )r   clearr   rB   s    r   r/  MultiDict.clearS  s"    



r   c                h    X;  a*  X R                   U'   U R                  R                  X45        X   $ rE   )r   r   append)r6   r:   r&  s      r   
setdefaultMultiDict.setdefaultW  s.    ?%JJsOJJsn-yr   c                    U(       d  U R                  US 5        g U R                   VVs/ s H  u  p4X1:w  d  M  X44PM     nnnXR Vs/ s H  oaU4PM     sn-   U l        US   U R                  U'   g s  snnf s  snf )Nre   )rh   r   r   )r6   r:   r   r   r   existing_itemsr;   s          r   r  MultiDict.setlist^  sl    HHS$37::J:!fqf:NJ'V*LVE<V*LLDJ$RjDJJsO K*Ls   A1A1A7c                X    U R                   R                  X45        X R                  U'   g rE   )r   r2  r   r  s      r   r2  MultiDict.appendf  s!    

3,'

3r   c                    [        U0 UD6nU R                   VVs/ s H  u  pEXCR                  5       ;  d  M  XE4PM     nnnXcR                  5       -   U l        U R                  R                  U5        g s  snnf rE   )rv   r   r   ry   r   rw   )r6   r   rm   r;   r   r   r6  s          r   rw   MultiDict.updatej  sg    
 4*6*/3zzSzVaQjjl=R&1&zS#&7&7&99


%  Ts
   A5A5r   r:   r   r;   r   r   r   r:   r   r   r   rE   )r:   r   r&  r   r   r   )r   ztuple[typing.Any, typing.Any])r:   r   r   list[typing.Any]r   r   )r:   r   r   r>  r   r   )r   zXMultiDict | typing.Mapping[typing.Any, typing.Any] | list[tuple[typing.Any, typing.Any]]rm   r   r   r   )r   r   r   r   r   r#  rh   r)  r,  r/  r3  r  r2  rw   r   r   r   r   rv   rv   =  sP    #,

) !g! ! 
	!r   rv   c                  P   ^  \ rS rSrSr      SU 4S jjrSS jrSS jrSrU =r	$ )	QueryParamsiu  z
An immutable multidict.
c                b  > [        U5      S:  d   S5       eU(       a  US   O/ n[        U[        5      (       a  [        TU ]  " [        USS940 UD6  ON[        U[        5      (       a)  [        TU ]  " [        UR                  S5      SS940 UD6  O[        TU ]  " U0 UD6  U R                   VVs/ s H  u  pE[        U5      [        U5      4PM     snnU l        U R                  R                  5        VVs0 s H  u  pE[        U5      [        U5      _M     snnU l	        g s  snnf s  snnf )Nr   r   r   Trs   r(   )r   r   r   superr=   r   bytesr1   r   r   rx   )r6   r   rm   r;   r   r   rl   s         r   r=   QueryParams.__init__z  s     4y1}333}QReS!!GYuEPPu%%GYu||I'>RVWb[abGd-f-37::>:41s1vs1v&:>
151A1A1CD1Cc!fc!fn1CD
 ?Ds   2"D%:!D+c                ,    [        U R                  5      $ rE   )r   r   rB   s    r   r   QueryParams.__str__  s    $$r   c                V    U R                   R                  n[        U 5      nU SU< S3$ r   )rl   r   r   )r6   r   r&   s      r   r   QueryParams.__repr__  s.    ^^,,
4yQ|.a00r   r  )r   zImmutableMultiDict[typing.Any, typing.Any] | typing.Mapping[typing.Any, typing.Any] | list[tuple[typing.Any, typing.Any]] | str | bytesrm   r   r   r   r   )
r   r   r   r   r   r=   r   r   r   __classcell__rl   s   @r   rA  rA  u  s>    EE E 
E,%1 1r   rA  c                      \ rS rSrSrSSSS.         SS jjr\SS j5       r\SS j5       rSS jr	SSS	 jjr
SS
 jrSS jrSS jrSrg)
UploadFilei  z8
An uploaded file included as part of the request data.
N)sizefilenamer'   c               X    X0l         Xl        X l        U=(       d
    [        5       U l        g rE   )rO  filerN  Headersr'   )r6   rQ  rN  rO  r'   s        r   r=   UploadFile.__init__  s!     !		+')r   c                :    U R                   R                  SS 5      $ )Nzcontent-type)r'   r0   rB   s    r   content_typeUploadFile.content_type  s    ||55r   c                >    [        U R                  SS5      nU(       + $ )N_rolledT)getattrrQ  )r6   rolled_to_disks     r   
_in_memoryUploadFile._in_memory  s     !It<!!!r   c                  #    U R                   b  U =R                   [        U5      -  sl         U R                  (       a  U R                  R	                  U5        g [        U R                  R                  U5      I S h  vN   g  N7frE   )rN  r   r[  rQ  writer	   )r6   datas     r   r^  UploadFile.write  sP     99 IIT"I??IIOOD!#DIIOOT:::s   A<B>B?Bc                   #    U R                   (       a  U R                  R                  U5      $ [        U R                  R                  U5      I S h  vN $  N7frE   )r[  rQ  readr	   )r6   rN  s     r   rb  UploadFile.read  s:     ??99>>$''&tyy~~t<<<<s   AAAAc                   #    U R                   (       a  U R                  R                  U5        g [        U R                  R                  U5      I S h  vN   g  N7frE   )r[  rQ  seekr	   )r6   offsets     r   re  UploadFile.seek  s4     ??IINN6"#DIINNF;;;s   AAAAc                   #    U R                   (       a  U R                  R                  5         g [        U R                  R                  5      I S h  vN   g  N7frE   )r[  rQ  closer	   rB   s    r   ri  UploadFile.close  s0     ??IIOO#DIIOO444s   AAAAc                    U R                   R                   SU R                  < SU R                  < SU R                  < S3$ )Nz
(filename=z, size=z
, headers=r   )rl   r   rO  rN  r'   rB   s    r   r   UploadFile.__repr__  sJ    ~~&&' (( )II= !||&a)	
r   )rQ  rO  r'   rN  )
rQ  ztyping.BinaryIOrN  r   rO  
str | Noner'   zHeaders | Noner   r   )r   rm  r   )r_  rD  r   r   )re   )rN  r   r   rD  )rf  r   r   r   r?  r   )r   r   r   r   r   r=   r   rU  r[  r^  rb  re  ri  r   r   r   r   r   rM  rM    s      #"&,, 	,
 ,  , 
, 6 6 " "
;=
<5
r   rM  c                  F   ^  \ rS rSrSr      SU 4S jjrSS jrSrU =r$ )FormDatai  zF
An immutable multidict, containing both file uploads and text input.
c                &   > [         TU ]  " U0 UD6  g rE   )rC  r=   )r6   r   rm   rl   s      r   r=   FormData.__init__  s    
 	$)&)r   c                   #    U R                  5        H4  u  p[        U[        5      (       d  M  UR                  5       I S h  vN   M6     g  N	7frE   )ry   r   rM  ri  r  s      r   ri  FormData.close  s9     **,JC%,,kkm## -#s   )AAA
Ar   )r   zUFormData | typing.Mapping[str, str | UploadFile] | list[tuple[str, str | UploadFile]]rm   zstr | UploadFiler   r   r?  )	r   r   r   r   r   r=   ri  r   rJ  rK  s   @r   ro  ro    s3    *d* #* 
	*$ $r   ro  c                      \ rS rSrSr   S       SS jjr\SS j5       rSS jrSS jr	SS jr
SS	 jrSS
 jrSS jrSS jrSS jrSS jrSS jrSS jrSrg)rR  i  z+
An immutable, case-insensitive multidict.
Nc                ^   / U l         Ubm  Ub   S5       eUb   S5       eUR                  5        VVs/ s H5  u  pEUR                  5       R                  S5      UR                  S5      4PM7     snnU l         g Ub  Ub   S5       eX l         g Ub  [	        US   5      =U l         US'   g g s  snnf )Nz$Cannot set both "headers" and "raw".z&Cannot set both "headers" and "scope".r(   z"Cannot set both "raw" and "scope".r'   )r   rx   lowerencoder   )r6   r'   rawr8   r:   r;   s         r   r=   Headers.__init__  s     13
;F FF;=J"JJ=elereretuetWaWZ399;--i8%,,y:QRetuDJ_=F"FF=J -1y1A,BBDJy) 	 vs   <B)c                ,    [        U R                  5      $ rE   r  rB   s    r   rx  Headers.raw  s    DJJr   c                n    U R                    VVs/ s H  u  pUR                  S5      PM     snn$ s  snnf Nr(   r   r1   r  s      r   r   Headers.keys  s)    8<

C
*#

9%
CCC   1c                n    U R                    VVs/ s H  u  pUR                  S5      PM     snn$ s  snnf r}  r~  r  s      r   r   Headers.values	  s)    :>**E*JCY'*EEEr  c                    U R                    VVs/ s H'  u  pUR                  S5      UR                  S5      4PM)     snn$ s  snnf r}  r~  r  s      r   rx   Headers.items  s;    SWS]S]^S]ZSI&Y(?@S]^^^s   .Ac                    UR                  5       R                  S5      nU R                   VVs/ s H  u  p4X2:X  d  M  UR                  S5      PM     snn$ s  snnf r}  )rv  rw  r   r1   )r6   r:   get_header_keyr   r   s        r   r   Headers.getlist  sK    ++I6IMr1EW_Wq,
!!),rrrs
   AAc                .    [        U R                  S S  S9$ )N)rx  )MutableHeadersr   rB   s    r   mutablecopyHeaders.mutablecopy  s    $**Q-00r   c                    UR                  5       R                  S5      nU R                   H  u  p4X2:X  d  M  UR                  S5      s  $    [	        U5      er}  )rv  rw  r   r1   KeyErrorr6   r:   r  
header_keyheader_values        r   r   Headers.__getitem__  sL    ++I6(,

$J+#**955 )3 smr   c                z    UR                  5       R                  S5      nU R                   H  u  p4X2:X  d  M    g   g)Nr(   TF)rv  rw  r   r  s        r   r  Headers.__contains__  s7    ++I6(,

$J+ )3 r   c                4    [        U R                  5       5      $ rE   r  rB   s    r   r   Headers.__iter__$  r  r   c                ,    [        U R                  5      $ rE   )r   r   rB   s    r   r   Headers.__len__'  r  r   c                    [        U[        5      (       d  g[        U R                  5      [        UR                  5      :H  $ r  )r   rR  r  r   r   s     r   r   Headers.__eq__*  s/    %))djj!VEKK%888r   c                    U R                   R                  n[        U R                  5       5      n[	        U5      [	        U 5      :X  a	  U SU< S3$ U SU R
                  < S3$ )Nr   r   z(raw=)rl   r   dictrx   r   rx  )r6   r   as_dicts      r   r   Headers.__repr__/  s[    ^^,,
tzz|$w<3t9$ \7+Q//U488,a00r   r   )NNN)r'   ztyping.Mapping[str, str] | Nonerx  z list[tuple[bytes, bytes]] | Noner8   z-typing.MutableMapping[str, typing.Any] | Noner   r   r   zlist[tuple[bytes, bytes]])r   	list[str])r   zlist[tuple[str, str]])r:   r   r   r  )r   r  )r:   r   r   r   r  )r   ztyping.Iterator[typing.Any]r   r   r   )r   r   r   r   r   r=   r   rx  r   r   rx   r   r  r   r  r   r   r   r   r   r   r   r   rR  rR    s     4804?C	C0C .C =	C
 
C&    DF_s1!9
1r   rR  c                  x    \ rS rSrSS jrSS jrSS jrSS jr\SS j5       r	SS jr
SS jrSS	 jrSS
 jrSrg)r  i7  c                   UR                  5       R                  S5      nUR                  S5      n/ n[        U R                  5       H   u  nu  pxXs:X  d  M  UR	                  U5        M"     [        USS 5       H  nU R                  U	 M     U(       a  US   nX44U R                  U'   gU R                  R	                  X445        g)z[
Set the header `key` to `value`, removing any duplicate entries.
Retains insertion order.
r(   rg   Nr   rv  rw  	enumerater   r2  reversed)	r6   r:   r;   set_key	set_valuefound_indexesidxr   r   s	            r   r   MutableHeaders.__setitem__8  s    
 ))+$$Y/LL+	#%+4TZZ+@'C'("$$S) ,A M!"-.C

3 / "C&2DJJsOJJw23r   c                    UR                  5       R                  S5      n/ n[        U R                  5       H   u  nu  pVXR:X  d  M  UR	                  U5        M"     [        U5       H  nU R                  U	 M     g)z
Remove the header `key`.
r(   Nr  )r6   r:   del_keypop_indexesr  r   r   s          r   r#  MutableHeaders.__delitem__N  sk     ))+$$Y/!#+4TZZ+@'C'("""3' ,A K(C

3 )r   c                    [        U[        R                  5      (       d"  [        SUR                  R
                   35      eU R                  U5        U $ NzExpected a mapping but got )r   r   r   	TypeErrorrl   r   rw   r   s     r   __ior__MutableHeaders.__ior__\  sB    %009%//:R:R9STUUEr   c                    [        U[        R                  5      (       d"  [        SUR                  R
                   35      eU R                  5       nUR                  U5        U$ r  )r   r   r   r  rl   r   r  rw   )r6   r   news      r   __or__MutableHeaders.__or__b  sP    %009%//:R:R9STUU 

5
r   c                    U R                   $ rE   r   rB   s    r   rx  MutableHeaders.rawi  s    zzr   c                   UR                  5       R                  S5      nUR                  S5      n[        U R                  5       H   u  nu  pgXc:X  d  M  UR	                  S5      s  $    U R                  R                  X445        U$ )zW
If the header `key` does not exist, then set it to `value`.
Returns the header value.
r(   )rv  rw  r  r   r1   r2  )r6   r:   r;   r  r  r  r   r   s           r   r3  MutableHeaders.setdefaultm  sw    
 ))+$$Y/LL+	+4TZZ+@'C'("!((33 ,A 	

7./r   c                >    UR                  5        H	  u  p#X0U'   M     g rE   )rx   )r6   r   r:   vals       r   rw   MutableHeaders.update{  s    HCI &r   c                    UR                  5       R                  S5      nUR                  S5      nU R                  R                  X445        g)z4
Append a header, preserving any duplicate entries.
r(   N)rv  rw  r   r2  )r6   r:   r;   
append_keyappend_values        r   r2  MutableHeaders.append  s=     YY[''	2
||I.

:45r   c                X    U R                  S5      nUb  SR                  X!/5      nXS'   g )Nvaryr   )r0   r   )r6   r  existings      r   add_vary_headerMutableHeaders.add_vary_header  s.    88F#99h-.DVr   r   N)r:   r   r;   r   r   r   )r:   r   r   r   )r   typing.Mapping[str, str]r   r  r  )r:   r   r;   r   r   r   )r   r  r   r   )r  r   r   r   )r   r   r   r   r   r#  r  r  r   rx  r3  rw   r2  r  r   r   r   r   r  r  7  s>    4,   6r   r  c                  ^   ^  \ rS rSr% SrS\S'   S
SU 4S jjjrSS jrSS jrSS jr	S	r
U =r$ )Statei  za
An object that can be used to store arbitrary state.

Used for `request.state` and `app.state`.
zdict[str, typing.Any]_statec                0   > Uc  0 n[         TU ]  SU5        g )Nr  )rC  __setattr__)r6   staterl   s     r   r=   State.__init__  s    =EHe,r   c                     X R                   U'   g rE   r  r  s      r   r  State.__setattr__  s     Cr   c                     U R                   U   $ ! [         a2    Sn[        UR                  U R                  R
                  U5      5      ef = f)Nz!'{}' object has no attribute '{}')r  r  AttributeErrorformatrl   r   )r6   r:   messages      r   __getattr__State.__getattr__  sM    	O;;s## 	O9G 0G0G!MNN	Os	    <Ac                    U R                   U	 g rE   r  r  s     r   __delattr__State.__delattr__  s    KKr   r   rE   )r  zdict[str, typing.Any] | Noner<  )r:   r   r   r   r=  )r   r   r   r   r   r   r=   r  r  r  r   rJ  rK  s   @r   r  r    s/     "!- -
!O r   r  )#
__future__r   r   r   urllib.parser   r   r   r   starlette.concurrencyr	   starlette.typesr
   
NamedTupler   TypeVarr   r   r   r   r   r   Sequencer   r   r   Anyrv   rA  rM  Unionro  rR  r  r  r   r   r   <module>r     sA   "   D D 3 !f 
 >>*% nn%:dK P9 P9f<c <<! !(6FOOC0 68B*2E(EF B*J5!"6::vzz#9: 5!p!1$S#X. !1H<
 <
~$!#v||JO'D"DE $$J1fnnS#X& J1ZTW Tn r   