
    OjZ                       d dl mZ d dlmZmZmZmZmZmZm	Z	m
Z
 d dlmZ d dlmZmZmZmZmZmZ d dlmZmZmZmZ d dlmZ d dlmZ d dlmZ  G d	 d
e      Z ed      Z edd      Z  G d d      Z! G d de"      Z# G d d      Z$ G d de	e"         Z% G d deee f         Z& G d de&eef         Z' G d de&e"e"f         Z( G d d      Z) G d d e&e"e)e"z  f         Z* G d! d"ee"e"f         Z+ G d# d$e+      Z, G d% d&      Z-y')(    )annotations)	ItemsViewIterableIteratorKeysViewMappingMutableMappingSequence
ValuesView)shlex)AnyBinaryIOLiteral
NamedTupleTypeVarcast)SplitResult	parse_qsl	urlencodeurlsplit)parse_host_header)run_in_threadpool)Scopec                  "    e Zd ZU ded<   ded<   y)AddressstrhostintportN)__name__
__module____qualname____annotations__     o/var/www/origus_pro_usr/data/www/origus.pro/core/.venv/lib/python3.12/site-packages/starlette/datastructures.pyr   r      s    
I
Ir%   r   _KeyType_CovariantValueTypeT)	covariantc                  &   e Zd Z	 	 d	 	 	 	 	 	 	 ddZedd       Zedd       Zedd       Zedd       Zedd       Z	edd       Z
edd	       Zedd
       Zedd       Zedd       Zedd       ZddZddZddZddZddZddZddZy)URLNc                   |"|rJ d       |rJ d       |j                  dd      }|j                  dd       }|d   }|j                  dd      }d }|d	   D ]  \  }	}
|	d
k(  s|
j                  d      } n t        |      }||j                  r|j                  }n=|9|\  }}d|v r|j                  d      sd| d}ddddd|   }||k(  r|n| d| }nd }|j                         }|&t        ||||d      j                         }|| _        y |r| d| n|}|| _        y |r<|rJ d        t        d      j                  di |j                  j                         }|| _        y )Nz"Cannot set both "url" and "scope".z+Cannot set both "scope" and "**components".schemehttpserverpathquery_stringr%   headerss   hostlatin-1:[]P   i  )r.   httpswswss )r-   netlocr0   queryfragment?z)Cannot set both "url" and "**components".r$   )getdecoder   is_valid_port	authority
startswithr   geturlr+   replace
components_url)selfurlscoperG   r-   r/   r0   r1   host_headerkeyvalueparsed_hostr<   r   r   default_portr=   s                    r&   __init__zURL.__init__   s    @@@7!P#PP>YYx0FYYx.F=D 99^S9LK#I. 
U'>"',,y"9K
 ,K8K&;+D+D$..##
d$;ts';tfA;D(*S3OPVW!%!5dV1TF;K '')E!!TQVacdkkm 	 ,1aw'd
 		 GGG7!#b'///J/::AACC	r%   c                f    t        | d      st        | j                        | _        | j                  S )N_components)hasattrr   rH   rS   rI   s    r&   rG   zURL.componentsE   s)    t]+'		2Dr%   c                .    | j                   j                  S N)rG   r-   rU   s    r&   r-   z
URL.schemeK       %%%r%   c                .    | j                   j                  S rW   )rG   r<   rU   s    r&   r<   z
URL.netlocO   rX   r%   c                .    | j                   j                  S rW   )rG   r0   rU   s    r&   r0   zURL.pathS       ###r%   c                .    | j                   j                  S rW   )rG   r=   rU   s    r&   r=   z	URL.queryW   s    $$$r%   c                .    | j                   j                  S rW   )rG   r>   rU   s    r&   r>   zURL.fragment[       '''r%   c                .    | j                   j                  S rW   )rG   usernamerU   s    r&   r`   zURL.username_   r^   r%   c                .    | j                   j                  S rW   )rG   passwordrU   s    r&   rb   zURL.passwordc   r^   r%   c                .    | j                   j                  S rW   )rG   hostnamerU   s    r&   rd   zURL.hostnameg   r^   r%   c                .    | j                   j                  S rW   )rG   r   rU   s    r&   r   zURL.portk   r[   r%   c                    | j                   dv S )N)r8   r:   )r-   rU   s    r&   	is_securezURL.is_secureo   s    {{...r%   c                4   d|v sd|v sd|v sd|v r|j                  dd       }|j                  d| j                        }|j                  d| j                        }|j                  d| j                        }|@| j                  }|j                  d      \  }}}|r|d   dk7  r|j                  dd	      d
   }|}||d| z  }||}||d| z  }| d| }||d<    | j                  j                  di |}	| j                  |	j                               S )Nr`   rb   rd   r   @r6   r4      r   r<   r$   )popr   r`   rb   r<   
rpartitionrsplitrG   _replace	__class__rE   )
rI   kwargsrd   r   r`   rb   r<   _userpassrG   s
             r&   rF   zURL.replaces   s<   :#7:;OSY]cSczz*d3H::fdii0Dzz*dmm<Hzz*dmm<H!'!2!23!71h 3'sA6q9HFAdV*$##'!H:.H$:Qvh/%F8-T__--77
~~j//122r%   c           
     .   t        t        | j                  d            }|j                  |j	                         D ci c]  \  }}t        |      t        |       c}}       t        |j                               }| j                  |      S c c}}w NTkeep_blank_valuesr=   )		MultiDictr   r=   updateitemsr   r   multi_itemsrF   )rI   rq   paramsrM   rN   r=   s         r&   include_query_paramszURL.include_query_params   so    9TZZ4HIfllnM
Us3xU+MN&,,./||%|(( Ns   B
c           
         t        |j                         D cg c]  \  }}t        |      t        |      f c}}      }| j                  |      S c c}}w )Nrx   )r   r{   r   rF   )rI   rq   rM   rN   r=   s        r&   replace_query_paramszURL.replace_query_params   sE    FLLNSjc5CHc%j1ST||%|(( Ts    A
c                    t        |t              r|g}t        t        | j                  d            }|D ]  }|j                  |d         t        |j                               }| j                  |      S ru   )	
isinstancer   ry   r   r=   rl   r   r|   rF   )rI   keysr}   rM   r=   s        r&   remove_query_paramszURL.remove_query_params   si    dC 6D9TZZ4HI 	"CJJsD!	"&,,./||%|((r%   c                0    t        |       t        |      k(  S rW   )r   rI   others     r&   __eq__z
URL.__eq__   s    4yCJ&&r%   c                    | j                   S rW   )rH   rU   s    r&   __str__zURL.__str__   s    yyr%   c                    t        |       }| j                  rt        | j                  d            }| j                  j                   dt        |       dS )Nz********)rb   ())r   rb   rF   rp   r    repr)rI   rJ   s     r&   __repr__zURL.__repr__   sI    $i==dllJl78C..))*!DI;a88r%   )r;   N)rJ   r   rK   zScope | NonerG   r   returnNone)r   r   r   r   )r   z
None | str)r   
int | Noner   bool)rq   r   r   r+   )r   str | Sequence[str]r   r+   r   r   r   r   )r    r!   r"   rQ   propertyrG   r-   r<   r0   r=   r>   r`   rb   rd   r   rg   rF   r~   r   r   r   r   r   r$   r%   r&   r+   r+      s5    ")) ) 	)
 
)V    
 & & & & $ $ % % ( ( ( ( ( ( ( ( $ $ / /38)))'9r%   r+   c                  ,    e Zd ZdZdddZdddZd	dZy)
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.
    c                :    |dv sJ t         j                  | |      S )N)r.   	websocketr;   )r   __new__)clsr0   protocolr   s       r&   r   zURLPath.__new__   s"    4444{{3%%r%   c                     || _         || _        y rW   )r   r   )rI   r0   r   r   s       r&   rQ   zURLPath.__init__   s     	r%   c                R   t        |t              rt        |      }| j                  r&ddddddd| j                     |j                     }n|j
                  }| j                  xs |j                  }|j                  j                  d      t        |       z   }t        |||      S )	Nr8   r.   )TFr:   r9   )r.   r   /)r-   r<   r0   )
r   r   r+   r   rg   r-   r   r<   r0   rstrip)rI   base_urlr-   r<   r0   s        r&   make_absolute_urlzURLPath.make_absolute_url   s    h$8}H==&v6$)$7 mm &//1F
 __F-hoo}}##C(3t94&d;;r%   N)r;   r;   )r0   r   r    Literal['http', 'websocket', '']r   r   r   r   )r0   r   r   r   r   r   r   r   )r   z	str | URLr   r+   )r    r!   r"   __doc__r   rQ   r   r$   r%   r&   r   r      s    
&<r%   r   c                  0    e Zd ZdZddZddZddZd	dZy)
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.
    c                    || _         y rW   _value)rI   rN   s     r&   rQ   zSecret.__init__   s	    r%   c                8    | j                   j                  }| dS )Nz('**********')rp   r    )rI   
class_names     r&   r   zSecret.__repr__   s    ^^,,
^,,r%   c                    | j                   S rW   r   rU   s    r&   r   zSecret.__str__   s    {{r%   c                ,    t        | j                        S rW   )r   r   rU   s    r&   __bool__zSecret.__bool__       DKK  r%   N)rN   r   r   r   )r    r!   r"   r   rQ   r   r   r   r$   r%   r&   r   r      s    
-!r%   r   c                  <    e Zd ZddZd	dZd
dZddZddZddZy)CommaSeparatedStringsc                    t        |t              r?t        |d      }d|_        d|_        |D cg c]  }|j                          c}| _        y t        |      | _        y c c}w )NT)posix,)r   r   r   
whitespacewhitespace_splitstrip_itemslist)rI   rN   splitteritems       r&   rQ   zCommaSeparatedStrings.__init__   sP    eS!U$/H"%H(,H%4<=D4::<=DKu+DK >s   A!c                ,    t        | j                        S rW   )lenr   rU   s    r&   __len__zCommaSeparatedStrings.__len__       4;;r%   c                     | j                   |   S rW   )r   )rI   indexs     r&   __getitem__z!CommaSeparatedStrings.__getitem__   s    {{5!!r%   c                ,    t        | j                        S rW   )iterr   rU   s    r&   __iter__zCommaSeparatedStrings.__iter__   r   r%   c                f    | j                   j                  }| D cg c]  }| }}| d|dS c c}w Nr   r   r   )rI   r   r   r{   s       r&   r   zCommaSeparatedStrings.__repr__   s<    ^^,,
"&'$''Quiq)) (s   	.c                2    dj                  d | D              S )N, c              3  2   K   | ]  }t        |        y wrW   )r   ).0r   s     r&   	<genexpr>z0CommaSeparatedStrings.__str__.<locals>.<genexpr>   s     5d5s   )joinrU   s    r&   r   zCommaSeparatedStrings.__str__   s    yy5555r%   N)rN   r   r   r   )r   zint | slicer   r   r   zIterator[str]r   )	r    r!   r"   rQ   r   r   r   r   r   r$   r%   r&   r   r      s     & "!*
6r%   r   c                      e Zd ZU ded<   	 	 	 	 	 	 ddZddZddZddZddZddZ	dd	Z
dd
ZddZddZddZddZy)ImmutableMultiDictz#dict[_KeyType, _CovariantValueType]_dictc                >   t        |      dk  sJ d       |r|d   ng }|r3t        |      j                         t        |      j                         z   }|sg }nt        |d      r7t	        t        t
        t        f   |      }t        |j                               }nZt        |d      r7t	        t        t
        t        f   |      }t        |j                               }nt	        d|      }t        |      }|D ci c]  \  }}||
 c}}| _
        || _        y c c}}w )N   Too many arguments.r   r|   r{   zlist[tuple[Any, Any]])r   r   r|   rT   r   r'   r(   r   r   r{   r   _list)rI   argsrq   rN   r   kvs          r&   rQ   zImmutableMultiDict.__init__   s     4y1}333} $T!W"&u-99;>PQW>X>d>d>ffE,.FUM*+H6I,IJERE%++-.FUG$+>!>?GE%++-(F0%8E%[F'-.tq!ad.

 /s   ;Dc                X    | j                   D cg c]  \  }}||k(  s| c}}S c c}}w rW   r   )rI   rM   item_key
item_values       r&   getlistzImmutableMultiDict.getlist  s&    7;zzU3xXQT_
UUUs   &&c                6    | j                   j                         S rW   )r   r   rU   s    r&   r   zImmutableMultiDict.keys  s    zz  r%   c                6    | j                   j                         S rW   )r   valuesrU   s    r&   r   zImmutableMultiDict.values"  s    zz  ""r%   c                6    | j                   j                         S rW   )r   r{   rU   s    r&   r{   zImmutableMultiDict.items%  s    zz!!r%   c                ,    t        | j                        S rW   r   r   rU   s    r&   r|   zImmutableMultiDict.multi_items(  s    DJJr%   c                     | j                   |   S rW   r   rI   rM   s     r&   r   zImmutableMultiDict.__getitem__+  s    zz#r%   c                    || j                   v S rW   r   r   s     r&   __contains__zImmutableMultiDict.__contains__.  s    djj  r%   c                4    t        | j                               S rW   r   r   rU   s    r&   r   zImmutableMultiDict.__iter__1      DIIK  r%   c                ,    t        | j                        S rW   )r   r   rU   s    r&   r   zImmutableMultiDict.__len__4      4::r%   c                    t        || j                        syt        | j                        t        |j                        k(  S NF)r   rp   sortedr   r   s     r&   r   zImmutableMultiDict.__eq__7  s0    %0djj!VEKK%888r%   c                ^    | j                   j                  }| j                         }| d|dS r   )rp   r    r|   )rI   r   r{   s      r&   r   zImmutableMultiDict.__repr__<  s2    ^^,,
  "Quiq))r%   N)r   zImmutableMultiDict[_KeyType, _CovariantValueType] | Mapping[_KeyType, _CovariantValueType] | Iterable[tuple[_KeyType, _CovariantValueType]]rq   r   r   r   )rM   r   r   zlist[_CovariantValueType])r   zKeysView[_KeyType])r   zValuesView[_CovariantValueType])r   z(ItemsView[_KeyType, _CovariantValueType])r   z*list[tuple[_KeyType, _CovariantValueType]])rM   r'   r   r(   rM   r   r   r   )r   zIterator[_KeyType]r   r   r   )r    r!   r"   r#   rQ   r   r   r   r{   r|   r   r   r   r   r   r   r$   r%   r&   r   r      sc    ..9
  
8V!#" !!9
*r%   r   c                  l    e Zd ZddZddZdddZddZddZddZdddZ	dd	Z
dd
Z	 	 	 	 	 	 ddZy)ry   c                *    | j                  ||g       y rW   )setlistrI   rM   rN   s      r&   __setitem__zMultiDict.__setitem__C  s    S5'"r%   c                    | j                   D cg c]  \  }}||k7  s||f c}}| _         | j                  |= y c c}}w rW   )r   r   )rI   rM   r   r   s       r&   __delitem__zMultiDict.__delitem__F  s7    )-@AqCxq!f@
JJsO As   ;;Nc                    | j                   D cg c]  \  }}||k7  s||f c}}| _         | j                  j                  ||      S c c}}w rW   )r   r   rl   )rI   rM   defaultr   r   s        r&   rl   zMultiDict.popJ  sA    )-@AqCxq!f@
zz~~c7++ As
   A	A	c                    | j                   j                         \  }}| j                  D cg c]  \  }}||k7  s||f c}}| _        ||fS c c}}w rW   )r   popitemr   )rI   rM   rN   r   r   s        r&   r  zMultiDict.popitemN  sL    ZZ'')
U)-@AqCxq!f@
Ez As
   AAc                |    | j                   D cg c]  \  }}||k(  s| }}}| j                  |       |S c c}}w rW   )r   rl   )rI   rM   r   r   r   s        r&   poplistzMultiDict.poplistS  s8     $

71a3h!77 8s   88c                l    | j                   j                          | j                  j                          y rW   )r   clearr   rU   s    r&   r  zMultiDict.clearX  s"    



r%   c                l    || vr,|| j                   |<   | j                  j                  ||f       | |   S rW   )r   r   append)rI   rM   r   s      r&   
setdefaultzMultiDict.setdefault\  s6    d?%DJJsOJJsGn-Cyr%   c                    |s| j                  |d        y | j                  D cg c]  \  }}||k7  s||f }}}||D cg c]  }||f c}z   | _        |d   | j                  |<   y c c}}w c c}w )Nrj   )rl   r   r   )rI   rM   r   r   r   existing_itemsrN   s          r&   r   zMultiDict.setlistc  sm    HHS$37::J!Qcq!fJNJ'V*LEC<*LLDJ$RjDJJsO K*Ls   A)A)A/c                \    | j                   j                  ||f       || j                  |<   y rW   )r   r  r   r   s      r&   r  zMultiDict.appendk  s%    

3,'

3r%   c                    t        |i |}| j                  D cg c]  \  }}||j                         vs||f }}}||j                         z   | _        | j                  j                  |       y c c}}w rW   )ry   r   r   r|   r   rz   )rI   r   rq   rN   r   r   r  s          r&   rz   zMultiDict.updateo  sl    
 4*6*/3zzSVaQejjl=R1a&SS#e&7&7&99


%  Ts
   A3A3rM   r   rN   r   r   r   rM   r   r   r   rW   )rM   r   r   r   r   r   )r   ztuple[Any, Any])rM   r   r   	list[Any]r   r   )rM   r   r   r  r   r   )r   z5MultiDict | Mapping[Any, Any] | list[tuple[Any, Any]]rq   r   r   r   )r    r!   r"   r   r   rl   r  r  r  r	  r   r  rz   r$   r%   r&   ry   ry   B  sP    #,

) !D! ! 
	!r%   ry   c                  @     e Zd ZdZ	 	 	 	 	 	 d fdZddZddZ xZS )QueryParamsz!
    An immutable multidict.
    c                @   t        |      dk  sJ d       |r|d   ng }t        |t              rt        |   t        |d      fi | nJt        |t              r+t        |   t        |j                  d      d      fi | nt        |   |i | | j                  D cg c]  \  }}t        |      t        |      f c}}| _        | j                  j                         D ci c]  \  }}t        |      t        |       c}}| _	        y c c}}w c c}}w )Nr   r   r   Trv   r3   )r   r   r   superrQ   r   bytesrA   r   r   r{   )rI   r   rq   rN   r   r   rp   s         r&   rQ   zQueryParams.__init__  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::>41as1vs1v&>
151A1A1CDAc!fc!fnD
 ?Ds   % D+Dc                ,    t        | j                        S rW   )r   r   rU   s    r&   r   zQueryParams.__str__  s    $$r%   c                T    | j                   j                  }t        |       }| d|dS r   )rp   r    r   )rI   r   r1   s      r&   r   zQueryParams.__repr__  s.    ^^,,
4yQ|.a00r%   )r   zVImmutableMultiDict[Any, Any] | Mapping[Any, Any] | list[tuple[Any, Any]] | str | bytesrq   r   r   r   r   )r    r!   r"   r   rQ   r   r   __classcell__rp   s   @r&   r  r  z  s7    EeE E 
	E$%1r%   r  c                      e Zd ZdZdddd	 	 	 	 	 	 	 	 	 ddZedd       Zedd       ZddZddZ	ddd	Z
dd
ZddZddZy)
UploadFilez@
    An uploaded file included as part of the request data.
    N)sizefilenamer2   c                   || _         || _        || _        |xs
 t               | _        t        | j                  dd      | _        y )N	_max_sizer   )r  filer  Headersr2   getattr_max_mem_size)rI   r!  r  r  r2   s        r&   rQ   zUploadFile.__init__  s>     !		+') %TYYQ?r%   c                :    | j                   j                  dd       S )Nzcontent-type)r2   r@   rU   s    r&   content_typezUploadFile.content_type  s    ||55r%   c                6    t        | j                  dd      }| S )N_rolledT)r#  r!  )rI   rolled_to_disks     r&   
_in_memoryzUploadFile._in_memory  s     !It<!!!r%   c                    | j                   sy| j                  j                         |z   }| j                  rt	        || j                  kD        S dS )NTF)r*  r!  tellr$  r   )rI   size_to_addfuture_sizes      r&   
_will_rollzUploadFile._will_roll  sG     iinn&49=9K9KtK$"4"445VQVVr%   c                  K   t        |      }| j                  | xj                  |z  c_        | j                  |      r)t        | j                  j
                  |       d {    y | j                  j                  |       y 7 !wrW   )r   r  r/  r   r!  write)rI   datanew_data_lens      r&   r1  zUploadFile.write  s`     4y99 II%I??<(#DIIOOT:::IIOOD! ;s   A!B#B$"Bc                   K   | j                   r| j                  j                  |      S t        | j                  j                  |       d {   S 7 wrW   )r*  r!  readr   )rI   r  s     r&   r5  zUploadFile.read  s;     ??99>>$''&tyy~~t<<<<s   AAAAc                   K   | j                   r| j                  j                  |       y t        | j                  j                  |       d {    y 7 wrW   )r*  r!  seekr   )rI   offsets     r&   r7  zUploadFile.seek  s5     ??IINN6"#DIINNF;;;s   AAAAc                   K   | j                   r| j                  j                          y t        | j                  j                         d {    y 7 wrW   )r*  r!  closer   rU   s    r&   r:  zUploadFile.close  s1     ??IIOO#DIIOO444s   A
AAAc                    | j                   j                   d| j                  d| j                  d| j                  dS )Nz
(filename=z, size=z
, headers=r   )rp   r    r  r  r2   rU   s    r&   r   zUploadFile.__repr__  s?    ..))**T]]4EWTYYMYcdhdpdpcsstuur%   )
r!  r   r  r   r  
str | Noner2   zHeaders | Noner   r   )r   r<  r   )r-  r   r   r   )r2  r  r   r   )rj   )r  r   r   r  )r8  r   r   r   r  r   )r    r!   r"   r   rQ   r   r&  r*  r/  r1  r5  r7  r:  r   r$   r%   r&   r  r    s      #"&@@ 	@
 @  @ 
@" 6 6 " "
W"=
<5vr%   r  c                  8     e Zd ZdZ	 	 	 	 	 	 d fdZddZ xZS )FormDatazN
    An immutable multidict, containing both file uploads and text input.
    c                $    t        |   |i | y rW   )r  rQ   )rI   r   rq   rp   s      r&   rQ   zFormData.__init__  s    
 	$)&)r%   c                   K   | j                         D ].  \  }}t        |t              s|j                          d {    0 y 7 wrW   )r|   r   r  r:  r   s      r&   r:  zFormData.close  s>     **, 	$JC%,kkm##	$#s   'AAAA)r   zNFormData | Mapping[str, str | UploadFile] | list[tuple[str, str | UploadFile]]rq   zstr | UploadFiler   r   r  )r    r!   r"   r   rQ   r:  r  r  s   @r&   r>  r>    s.    *]* #* 
	*$r%   r>  c                      e Zd ZdZ	 	 	 d	 	 	 	 	 	 	 ddZedd       ZddZddZddZ	ddZ
dd	Zdd
ZddZddZddZddZddZy)r"  z3
    An immutable, case-insensitive multidict.
    Nc                P   g | _         |i|J d       |J d       |j                         D cg c]5  \  }}|j                         j                  d      |j                  d      f7 c}}| _         y ||J d       || _         y |t	        |d         x| _         |d<   y y c c}}w )Nz$Cannot set both "headers" and "raw".z&Cannot set both "headers" and "scope".r3   z"Cannot set both "raw" and "scope".r2   )r   r{   lowerencoder   )rI   r2   rawrK   rM   rN   s         r&   rQ   zHeaders.__init__  s     13
;F FF;=J"JJ=elereretuWaWZ\a399;--i8%,,y:QRuDJ_=F"FF=DJ -1y1A,BBDJy) 	 vs   :B"c                ,    t        | j                        S rW   r   rU   s    r&   rE  zHeaders.raw  s    DJJr%   c                j    | j                   D cg c]  \  }}|j                  d       c}}S c c}}w Nr3   r   rA   r   s      r&   r   zHeaders.keys  s'    8<

C*#u

9%CCC   /c                j    | j                   D cg c]  \  }}|j                  d       c}}S c c}}w rH  rI  r   s      r&   r   zHeaders.values  s'    :>**EJCY'EEErJ  c                    | j                   D cg c]'  \  }}|j                  d      |j                  d      f) c}}S c c}}w rH  rI  r   s      r&   r{   zHeaders.items  s7    SWS]S]^ZS%I&Y(?@^^^s   ,A c                    |j                         j                  d      }| j                  D cg c]  \  }}||k(  s|j                  d       c}}S c c}}w rH  )rC  rD  r   rA   )rI   rM   get_header_keyr   r   s        r&   r   zHeaders.getlist  sI    ++I6IMr1E:W_cqWq
!!),rrrs
   AAc                4    t        | j                  d d        S )N)rE  )MutableHeadersr   rU   s    r&   mutablecopyzHeaders.mutablecopy  s    $**Q-00r%   c                    |j                         j                  d      }| j                  D ]  \  }}||k(  s|j                  d      c S  t	        |      rH  )rC  rD  r   rA   KeyErrorrI   rM   rN  
header_keyheader_values        r&   r   zHeaders.__getitem__   sU    ++I6(,

 	6$J^+#**955	6 smr%   c                x    |j                         j                  d      }| j                  D ]  \  }}||k(  s y y)Nr3   TF)rC  rD  r   rT  s        r&   r   zHeaders.__contains__'  s@    ++I6(,

 	$J^+	 r%   c                4    t        | j                               S rW   r   rU   s    r&   r   zHeaders.__iter__.  r   r%   c                ,    t        | j                        S rW   )r   r   rU   s    r&   r   zHeaders.__len__1  r   r%   c                z    t        |t              syt        | j                        t        |j                        k(  S r   )r   r"  r   r   r   s     r&   r   zHeaders.__eq__4  s,    %)djj!VEKK%888r%   c                    | j                   j                  }t        | j                               }t	        |      t	        |       k(  r| d|dS | d| j
                  dS )Nr   r   z(raw=)rp   r    dictr{   r   rE  )rI   r   as_dicts      r&   r   zHeaders.__repr__9  s[    ^^,,
tzz|$w<3t9$ \7+Q//U488,a00r%   )NNN)r2   zMapping[str, str] | NonerE  z list[tuple[bytes, bytes]] | NonerK   zMutableMapping[str, Any] | Noner   r   r   zlist[tuple[bytes, bytes]])r   	list[str])r   zlist[tuple[str, str]])rM   r   r   r_  )r   rP  )rM   r   r   r   r   )r   zIterator[Any]r   r   r   )r    r!   r"   r   rQ   r   rE  r   r   r{   r   rQ  r   r   r   r   r   r   r$   r%   r&   r"  r"    s     -10415	C)C .C /	C
 
C&    DF_s1!9
1r%   r"  c                  ^    e Zd ZddZddZddZddZedd       ZddZ	ddZ
ddZdd	Zy
)rP  c                   |j                         j                  d      }|j                  d      }g }t        | j                        D ]  \  }\  }}||k(  s|j	                  |       ! t        |dd       D ]  }| j                  |=  |r|d   }||f| j                  |<   y| j                  j	                  ||f       y)zs
        Set the header `key` to `value`, removing any duplicate entries.
        Retains insertion order.
        r3   rk   Nr   rC  rD  	enumerater   r  reversed)	rI   rM   rN   set_key	set_valuefound_indexesidxr   r   s	            r&   r   zMutableHeaders.__setitem__B  s    
 ))+$$Y/LL+	#%+4TZZ+@ 	*'C'(J7"$$S)	* M!"-. 	 C

3	  "C&	2DJJsOJJw	23r%   c                    |j                         j                  d      }g }t        | j                        D ]  \  }\  }}||k(  s|j	                  |       ! t        |      D ]  }| j                  |=  y)z*
        Remove the header `key`.
        r3   Nrb  )rI   rM   del_keypop_indexesrh  r   r   s          r&   r   zMutableHeaders.__delitem__X  sx     ))+$$Y/!#+4TZZ+@ 	('C'(J7"""3'	( K( 	 C

3	 r%   c                    t        |t              s"t        d|j                  j                         | j                  |       | S NzExpected a mapping but got )r   r   	TypeErrorrp   r    rz   r   s     r&   __ior__zMutableHeaders.__ior__f  s;    %)9%//:R:R9STUUEr%   c                    t        |t              s"t        d|j                  j                         | j                         }|j                  |       |S rm  )r   r   rn  rp   r    rQ  rz   )rI   r   news      r&   __or__zMutableHeaders.__or__l  sI    %)9%//:R:R9STUU 

5
r%   c                    | j                   S rW   r   rU   s    r&   rE  zMutableHeaders.raws  s    zzr%   c                   |j                         j                  d      }|j                  d      }t        | j                        D ]   \  }\  }}||k(  s|j	                  d      c S  | j                  j                  ||f       |S )zo
        If the header `key` does not exist, then set it to `value`.
        Returns the header value.
        r3   )rC  rD  rc  r   rA   r  )rI   rM   rN   re  rf  rh  r   r   s           r&   r	  zMutableHeaders.setdefaultw  s    
 ))+$$Y/LL+	+4TZZ+@ 	4'C'(J7"!((33	4 	

7I./r%   c                >    |j                         D ]
  \  }}|| |<    y rW   )r{   )rI   r   rM   vals       r&   rz   zMutableHeaders.update  s$     	HCDI	r%   c                    |j                         j                  d      }|j                  d      }| j                  j                  ||f       y)zD
        Append a header, preserving any duplicate entries.
        r3   N)rC  rD  r   r  )rI   rM   rN   
append_keyappend_values        r&   r  zMutableHeaders.append  s?     YY[''	2
||I.

:|45r%   c                Z    | j                  d      }|dj                  ||g      }|| d<   y )Nvaryr   )r@   r   )rI   r{  existings      r&   add_vary_headerzMutableHeaders.add_vary_header  s2    88F#99h-.DVr%   N)rM   r   rN   r   r   r   rM   r   r   r   )r   Mapping[str, str]r   rP  r^  )rM   r   rN   r   r   r   )r   r  r   r   )r{  r   r   r   )r    r!   r"   r   r   ro  rr  r   rE  r	  rz   r  r}  r$   r%   r&   rP  rP  A  s>    4,   6r%   rP  c                  r     e Zd ZU dZded<   dd fdZddZddZddZddZ	dd	Z
dd
ZddZddZ xZS )Statezm
    An object that can be used to store arbitrary state.

    Used for `request.state` and `app.state`.
    zdict[str, Any]_statec                .    |i }t         |   d|       y )Nr  )r  __setattr__)rI   staterp   s     r&   rQ   zState.__init__  s    =EHe,r%   c                "    || j                   |<   y rW   r  r   s      r&   r  zState.__setattr__       Cr%   c                    	 | j                   |   S # t        $ r2 d}t        |j                  | j                  j
                  |            w xY w)Nz!'{}' object has no attribute '{}')r  rS  AttributeErrorformatrp   r    )rI   rM   messages      r&   __getattr__zState.__getattr__  sM    	O;;s## 	O9G 0G0G!MNN	Os	    ;Ac                    | j                   |= y rW   r  r   s     r&   __delattr__zState.__delattr__      KKr%   c                     | j                   |   S rW   r  r   s     r&   r   zState.__getitem__  s    {{3r%   c                "    || j                   |<   y rW   r  r   s      r&   r   zState.__setitem__  r  r%   c                    | j                   |= y rW   r  r   s     r&   r   zState.__delitem__  r  r%   c                ,    t        | j                        S rW   )r   r  rU   s    r&   r   zState.__iter__  r   r%   c                ,    t        | j                        S rW   )r   r  rU   s    r&   r   zState.__len__  r   r%   rW   )r  zdict[str, Any] | Noner  )rM   r   r   r   r  )rM   r   r   r   )rM   r   rN   r   r   r   r~  r   r   )r    r!   r"   r   r#   rQ   r  r  r  r   r   r   r   r   r  r  s   @r&   r  r    s>     -
!O !! r%   r  N).
__future__r   collections.abcr   r   r   r   r   r	   r
   r   r   typingr   r   r   r   r   r   urllib.parser   r   r   r   starlette._utilsr   starlette.concurrencyr   starlette.typesr   r   r'   r(   r+   r   r   r   r   r   ry   r  r  r>  r"  rP  r  r$   r%   r&   <module>r     s(   " r r r  D D D D . 3 !j 
 : 3tD S9 S9l<c <<! !(6HSM 68B*+>!>? B*J5!"38, 5!p1$S#X. 1@Ev EvP$!#zC'7"78 $$J1gc3h J1ZTW Tn(  ( r%   