
    ,hV              	         d dl mZ d dl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j,                  e         Z G d dej0                  eef         Z G d deej4                  ej4                  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j0                  eef         Z  G d! d"e       Z! G d# d$      Z"y)%    )annotationsN)shlex)SplitResult	parse_qsl	urlencodeurlsplit)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__     Z/var/www/html/Resume-Scraper/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                0   ||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 |
| d| | }n/||}n*|\  }}ddddd|   }||k(  r
| d| | }n| d| d| | }|r\|d|j                         z   z  }|| _        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-1z://P   i  )r   httpswswss:?z)Cannot set both "url" and "**components". r   )getdecoder   replace
componentsgeturl_url)selfurlscoper/   r   r    r!   r"   host_headerkeyvaluer   r   default_ports                 r   __init__zURL.__init__   sk    @@@!P#PPYYx0FYYx.F=D 99^S9LK#I. 
U'>"',,y"9K
 &K=7#
d(*S3OPVW<'#HCvdV4C#HCvQtfTF;Cs\00222
 		 GGG!#b'///J/::AACC	r   c                f    t        | d      st        | j                        | _        | j                  S )N_components)hasattrr   r1   r;   r2   s    r   r/   zURL.components@   s)    t]+'		2Dr   c                .    | j                   j                  S N)r/   r   r=   s    r   r   z
URL.schemeF       %%%r   c                .    | j                   j                  S r?   )r/   netlocr=   s    r   rB   z
URL.netlocJ   r@   r   c                .    | j                   j                  S r?   )r/   r!   r=   s    r   r!   zURL.pathN       ###r   c                .    | j                   j                  S r?   )r/   queryr=   s    r   rF   z	URL.queryR   s    $$$r   c                .    | j                   j                  S r?   )r/   fragmentr=   s    r   rH   zURL.fragmentV       '''r   c                .    | j                   j                  S r?   )r/   usernamer=   s    r   rK   zURL.usernameZ   rI   r   c                .    | j                   j                  S r?   )r/   passwordr=   s    r   rM   zURL.password^   rI   r   c                .    | j                   j                  S r?   )r/   hostnamer=   s    r   rO   zURL.hostnameb   rI   r   c                .    | j                   j                  S r?   )r/   r   r=   s    r   r   zURL.portf   rD   r   c                    | j                   dv S )N)r&   r(   )r   r=   s    r   	is_securezURL.is_securej   s    {{...r   c                0   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      \  }}}|d   dk7  r|j                  dd	      d
   }|}||d| z  }||}||d| z  }| d| }||d<    | j                  j                  di |}	| j                  |	j                               S )NrK   rM   rO   r   @]r)      r   rB   r   )popr   rK   rM   rB   
rpartitionrsplitr/   _replace	__class__r0   )
r2   kwargsrO   r   rK   rM   rB   _userpassr/   s
             r   r.   zURL.replacen   s:   :#7:;OSY]cSczz*d3H::fdii0Dzz*dmm<Hzz*dmm<H!'!2!23!71hB<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rF   )		MultiDictr   rF   updateitemsr   r   multi_itemsr.   )r2   r]   paramsr6   r7   rF   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 )Nrd   )r   rg   r   r.   )r2   r]   r6   r7   rF   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 ra   )	
isinstancer   re   r   rF   rX   r   rh   r.   )r2   keysri   r6   rF   s        r   remove_query_paramszURL.remove_query_params   si    dC 6D9TZZ4HI 	"CJJsD!	"&,,./||%|((r   c                0    t        |       t        |      k(  S r?   )r   r2   others     r   __eq__z
URL.__eq__   s    4yCJ&&r   c                    | j                   S r?   )r1   r=   s    r   __str__zURL.__str__   s    yyr   c                    t        |       }| j                  rt        | j                  d            }| j                  j                   dt        |       dS )Nz********)rM   ())r   rM   r.   r\   r   repr)r2   r3   s     r   __repr__zURL.__repr__   sI    $i==dllJl78C..))*!DI;a88r   )r+   N)r3   r   r4   zScope | Noner/   
typing.AnyreturnNone)r}   r   r}   r   )r}   z
None | str)r}   
int | Noner}   bool)r]   r|   r}   r   )ro   str | typing.Sequence[str]r}   r   rs   r|   r}   r   )r   r   r   r9   propertyr/   r   rB   r!   rF   rH   rK   rM   rO   r   rR   r.   rj   rl   rp   rt   rv   r{   r   r   r   r   r      s5    "&& & !	&
 
&P    
 & & & & $ $ % % ( ( ( ( ( ( ( ( $ $ / /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__)clsr!   protocolr   s       r   r   zURLPath.__new__   s    444{{3%%r   c                     || _         || _        y r?   )r   r   )r2   r!   r   r   s       r   r9   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 )	Nr&   r   )TFr(   r'   )r   r   /)r   rB   r!   )
rn   r   r   r   rR   r   r   rB   r!   rstrip)r2   base_urlr   rB   r!   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+   )r!   r   r   r   r   r   r}   r   )r!   r   r   r   r   r   r}   r~   )r   z	str | URLr}   r   )r   r   r   __doc__r   r9   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 r?   _value)r2   r7   s     r   r9   zSecret.__init__   s	    r   c                8    | j                   j                  }| dS )Nz('**********')r\   r   )r2   
class_names     r   r{   zSecret.__repr__   s    ^^,,
^,,r   c                    | j                   S r?   r   r=   s    r   rv   zSecret.__str__   s    {{r   c                ,    t        | j                        S r?   )r   r   r=   s    r   __bool__zSecret.__bool__       DKK  r   N)r7   r   r   r   )r   r   r   r   r9   r{   rv   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,)rn   r   r   
whitespacewhitespace_splitstrip_itemslist)r2   r7   splitteritems       r   r9   zCommaSeparatedStrings.__init__   sP    eS!U$/H"%H(,H%4<=D4::<=DKu+DK >s   A!c                ,    t        | j                        S r?   )lenr   r=   s    r   __len__zCommaSeparatedStrings.__len__   s    4;;r   c                     | j                   |   S r?   )r   )r2   indexs     r   __getitem__z!CommaSeparatedStrings.__getitem__   s    {{5!!r   c                ,    t        | j                        S r?   )iterr   r=   s    r   __iter__zCommaSeparatedStrings.__iter__   r   r   c                f    | j                   j                  }| D cg c]  }| }}| d|dS c c}w Nrx   ry   r   )r2   r   r   rg   s       r   r{   zCommaSeparatedStrings.__repr__   s<    ^^,,
"&'$''Quiq)) (s   	.c                2    dj                  d | D              S )N, c              3  2   K   | ]  }t        |        y wr?   )rz   ).0r   s     r   	<genexpr>z0CommaSeparatedStrings.__str__.<locals>.<genexpr>   s     5d5s   )joinr=   s    r   rv   zCommaSeparatedStrings.__str__   s    yy5555r   N)r7   r   r}   r   )r   zint | slicer}   r|   )r}   ztyping.Iterator[str]r   )	r   r   r   r9   r   r   r   r{   rv   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      rAt	        j
                  t        t        t        f   |      }t        |j                               }nxt        |d      rKt	        j
                  t        j                  t        t        f   |      }t        |j                               }n!t	        j
                  d|      }t        |      }|D ci c]  \  }}||
 c}}| _        || _        y c c}}w )N   Too many arguments.r   rh   rg   z#list[tuple[typing.Any, typing.Any]])r   r   rh   r<   typingcastr   r   r   Mappingrg   r   _list)r2   argsr]   r7   r   kvs          r   r9   z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'-.tq!ad.

 /s   #Ec                X    | j                   D cg c]  \  }}||k(  s| c}}S c c}}w r?   r   )r2   r6   item_key
item_values       r   getlistzImmutableMultiDict.getlist  s&    7;zzU3xXQT_
UUUs   &&c                6    | j                   j                         S r?   )r   ro   r=   s    r   ro   zImmutableMultiDict.keys  s    zz  r   c                6    | j                   j                         S r?   )r   valuesr=   s    r   r   zImmutableMultiDict.values  s    zz  ""r   c                6    | j                   j                         S r?   )r   rg   r=   s    r   rg   zImmutableMultiDict.items   s    zz!!r   c                ,    t        | j                        S r?   r   r   r=   s    r   rh   zImmutableMultiDict.multi_items#  s    DJJr   c                     | j                   |   S r?   r   r2   r6   s     r   r   zImmutableMultiDict.__getitem__&  s    zz#r   c                    || j                   v S r?   r   r   s     r   __contains__zImmutableMultiDict.__contains__)  s    djj  r   c                4    t        | j                               S r?   r   ro   r=   s    r   r   zImmutableMultiDict.__iter__,      DIIK  r   c                ,    t        | j                        S r?   )r   r   r=   s    r   r   zImmutableMultiDict.__len__/      4::r   c                    t        || j                        syt        | j                        t        |j                        k(  S NF)rn   r\   sortedr   rr   s     r   rt   zImmutableMultiDict.__eq__2  s0    %0djj!VEKK%888r   c                ^    | j                   j                  }| j                         }| d|dS r   )r\   r   rh   )r2   r   rg   s      r   r{   zImmutableMultiDict.__repr__7  s2    ^^,,
  "Quiq))r   N)r   zImmutableMultiDict[_KeyType, _CovariantValueType] | typing.Mapping[_KeyType, _CovariantValueType] | typing.Iterable[tuple[_KeyType, _CovariantValueType]]r]   r|   r}   r~   )r6   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]])r6   r   r}   r   r6   r|   r}   r   )r}   ztyping.Iterator[_KeyType]r   r   r   )r   r   r   r   r9   r   ro   r   rg   rh   r   r   r   r   rt   r{   r   r   r   r   r      sd    ..@
  
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)re   c                *    | j                  ||g       y r?   )setlistr2   r6   r7   s      r   __setitem__zMultiDict.__setitem__>  s    S5'"r   c                    | j                   D cg c]  \  }}||k7  s||f c}}| _         | j                  |= y c c}}w r?   )r   r   )r2   r6   r   r   s       r   __delitem__zMultiDict.__delitem__A  s7    )-@AqCxq!f@
JJsO As   ;;Nc                    | j                   D cg c]  \  }}||k7  s||f c}}| _         | j                  j                  ||      S c c}}w r?   )r   r   rX   )r2   r6   defaultr   r   s        r   rX   zMultiDict.popE  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 r?   )r   popitemr   )r2   r6   r7   r   r   s        r   r   zMultiDict.popitemI  sL    ZZ'')
U)-@AqCxq!f@
Ez As
   AAc                |    | j                   D cg c]  \  }}||k(  s| }}}| j                  |       |S c c}}w r?   )r   rX   )r2   r6   r   r   r   s        r   poplistzMultiDict.poplistN  s8     $

71a3h!77 8s   88c                l    | j                   j                          | j                  j                          y r?   )r   clearr   r=   s    r   r   zMultiDict.clearS  s"    



r   c                l    || vr,|| j                   |<   | j                  j                  ||f       | |   S r?   )r   r   append)r2   r6   r   s      r   
setdefaultzMultiDict.setdefaultW  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 )NrU   )rX   r   r   )r2   r6   r   r   r   existing_itemsr7   s          r   r   zMultiDict.setlist^  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 r?   )r   r   r   r   s      r   r   zMultiDict.appendf  s%    

3,'

3r   c                    t        |i |}| j                  D cg c]  \  }}||j                         vs||f }}}||j                         z   | _        | j                  j                  |       y c c}}w r?   )re   r   ro   rh   r   rf   )r2   r   r]   r7   r   r   r   s          r   rf   zMultiDict.updatej  sl    
 4*6*/3zzSVaQejjl=R1a&SS#e&7&7&99


%  Ts
   A3A3r6   r|   r7   r|   r}   r~   r6   r|   r}   r~   r?   )r6   r|   r   r|   r}   r|   )r}   ztuple[typing.Any, typing.Any])r6   r|   r}   list[typing.Any]r}   r~   )r6   r|   r   r   r}   r~   )r   zXMultiDict | typing.Mapping[typing.Any, typing.Any] | list[tuple[typing.Any, typing.Any]]r]   r|   r}   r~   )r   r   r   r   r   rX   r   r   r   r   r   r   rf   r   r   r   re   re   =  sP    #,

) !g! ! 
	!r   re   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   Trb   r$   )r   rn   r   superr9   r   bytesr-   r   r   rg   )r2   r   r]   r7   r   r   r\   s         r   r9   z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::>41as1vs1v&>
151A1A1CDAc!fc!fnD
 ?Ds   % D+Dc                ,    t        | j                        S r?   )r   r   r=   s    r   rv   zQueryParams.__str__  s    $$r   c                T    | j                   j                  }t        |       }| d|dS r   )r\   r   r   )r2   r   r"   s      r   r{   zQueryParams.__repr__  s.    ^^,,
4yQ|.a00r   )r   zImmutableMultiDict[typing.Any, typing.Any] | typing.Mapping[typing.Any, typing.Any] | list[tuple[typing.Any, typing.Any]] | str | bytesr]   r|   r}   r~   r   )r   r   r   r   r9   rv   r{   __classcell__r\   s   @r   r   r   u  s9    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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filenamer#   c               T    || _         || _        || _        |xs
 t               | _        y r?   )r  filer
  Headersr#   )r2   r  r
  r  r#   s        r   r9   zUploadFile.__init__  s'     !		+')r   c                :    | j                   j                  dd       S )Nzcontent-type)r#   r,   r=   s    r   content_typezUploadFile.content_type  s    ||55r   c                6    t        | j                  dd      }| S )N_rolledT)getattrr  )r2   rolled_to_disks     r   
_in_memoryzUploadFile._in_memory  s     !It<!!!r   c                  K   | j                   | xj                   t        |      z  c_         | j                  r| j                  j	                  |       y t        | j                  j                  |       d {    y 7 wr?   )r
  r   r  r  writer	   )r2   datas     r   r  zUploadFile.write  sQ     99 IIT"I??IIOOD!#DIIOOT:::s   A6B 8A>9B c                   K   | j                   r| j                  j                  |      S t        | j                  j                  |       d {   S 7 wr?   )r  r  readr	   )r2   r
  s     r   r  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r?   )r  r  seekr	   )r2   offsets     r   r  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r?   )r  r  closer	   r=   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=ry   )r\   r   r  r
  r#   r=   s    r   r{   zUploadFile.__repr__  s?    ..))**T]]4EWTYYMYcdhdpdpcsstuur   )
r  ztyping.BinaryIOr
  r   r  
str | Noner#   zHeaders | Noner}   r~   )r}   r!  r   )r  r  r}   r~   )rU   )r
  r   r}   r  )r  r   r}   r~   r   r   )r   r   r   r   r9   r   r  r  r  r  r  r  r{   r   r   r   r	  r	    s      #"&,, 	,
 ,  , 
, 6 6 " "
;=
<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 r?   )r  r9   )r2   r   r]   r\   s      r   r9   zFormData.__init__  s    
 	$)&)r   c                   K   | j                         D ].  \  }}t        |t              s|j                          d {    0 y 7 wr?   )rh   rn   r	  r  r   s      r   r  zFormData.close  s>     **, 	$JC%,kkm##	$#s   'AAAA)r   zUFormData | typing.Mapping[str, str | UploadFile] | list[tuple[str, str | UploadFile]]r]   zstr | UploadFiler}   r~   r   )r   r   r   r   r9   r  r  r  s   @r   r#  r#    s.    *d* #* 
	*$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".r$   z"Cannot set both "raw" and "scope".r#   )r   rg   lowerencoder   )r2   r#   rawr4   r6   r7   s         r   r9   zHeaders.__init__  s     13
;F FF=J"JJelereretuWaWZ\a399;--i8%,,y:QRuDJ_=F"FFDJ -1y1A,BBDJy) 	 vs   :B"c                ,    t        | j                        S r?   r   r=   s    r   r*  zHeaders.raw  s    DJJr   c                j    | j                   D cg c]  \  }}|j                  d       c}}S c c}}w Nr$   r   r-   r   s      r   ro   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 r-  r.  r   s      r   r   zHeaders.values  s'    :>**EJCY'EEEr/  c                    | j                   D cg c]'  \  }}|j                  d      |j                  d      f) c}}S c c}}w r-  r.  r   s      r   rg   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 r-  )r(  r)  r   r-   )r2   r6   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)r*  )MutableHeadersr   r=   s    r   mutablecopyzHeaders.mutablecopy  s    $**Q-00r   c                    |j                         j                  d      }| j                  D ]  \  }}||k(  s|j                  d      c S  t	        |      r-  )r(  r)  r   r-   KeyErrorr2   r6   r3  
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)Nr$   TF)r(  r)  r   r9  s        r   r   zHeaders.__contains__  s@    ++I6(,

 	$J^+	 r   c                4    t        | j                               S r?   r   r=   s    r   r   zHeaders.__iter__  r   r   c                ,    t        | j                        S r?   )r   r   r=   s    r   r   zHeaders.__len__"  r   r   c                z    t        |t              syt        | j                        t        |j                        k(  S r   )rn   r  r   r   rr   s     r   rt   zHeaders.__eq__%  s,    %)djj!VEKK%888r   c                    | j                   j                  }t        | j                               }t	        |      t	        |       k(  r| d|dS | d| j
                  dS )Nrx   ry   z(raw=)r\   r   dictrg   r   r*  )r2   r   as_dicts      r   r{   zHeaders.__repr__*  s[    ^^,,
tzz|$w<3t9$ \7+Q//U488,a00r   )NNN)r#   ztyping.Mapping[str, str] | Noner*  z list[tuple[bytes, bytes]] | Noner4   z-typing.MutableMapping[str, typing.Any] | Noner}   r~   r}   zlist[tuple[bytes, bytes]])r}   	list[str])r}   zlist[tuple[str, str]])r6   r   r}   rD  )r}   r5  )r6   r   r}   r   r   )r}   ztyping.Iterator[typing.Any]r   r   r   )r   r   r   r   r9   r   r*  ro   r   rg   r   r6  r   r   r   r   rt   r{   r   r   r   r  r    s     4804?C	C0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
)r5  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.
        r$   rW   Nr   r(  r)  	enumerater   r   reversed)	r2   r6   r7   set_key	set_valuefound_indexesidxr   r   s	            r   r   zMutableHeaders.__setitem__3  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`.
        r$   NrG  )r2   r6   del_keypop_indexesrM  r   r   s          r   r   zMutableHeaders.__delitem__I  sx     ))+$$Y/!#+4TZZ+@ 	('C'(J7"""3'	( K( 	 C

3	 r   c                    t        |t        j                        s"t        d|j                  j
                         | j                  |       | S NzExpected a mapping but got )rn   r   r   	TypeErrorr\   r   rf   rr   s     r   __ior__zMutableHeaders.__ior__W  s?    %09%//:R:R9STUUEr   c                    t        |t        j                        s"t        d|j                  j
                         | j                         }|j                  |       |S rR  )rn   r   r   rS  r\   r   r6  rf   )r2   rs   news      r   __or__zMutableHeaders.__or__]  sM    %09%//:R:R9STUU 

5
r   c                    | j                   S r?   r   r=   s    r   r*  zMutableHeaders.rawd  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.
        r$   )r(  r)  rH  r   r-   r   )r2   r6   r7   rJ  rK  rM  r   r   s           r   r   zMutableHeaders.setdefaulth  s    
 ))+$$Y/LL+	+4TZZ+@ 	4'C'(J7"!((33	4 	

7I./r   c                >    |j                         D ]
  \  }}|| |<    y r?   )rg   )r2   rs   r6   vals       r   rf   zMutableHeaders.updatev  s$     	HCDI	r   c                    |j                         j                  d      }|j                  d      }| j                  j                  ||f       y)zD
        Append a header, preserving any duplicate entries.
        r$   N)r(  r)  r   r   )r2   r6   r7   
append_keyappend_values        r   r   zMutableHeaders.appendz  s?     YY[''	2
||I.

:|45r   c                Z    | j                  d      }|dj                  ||g      }|| d<   y )Nvaryr   )r,   r   )r2   r`  existings      r   add_vary_headerzMutableHeaders.add_vary_header  s2    88F#99h-.DVr   N)r6   r   r7   r   r}   r~   )r6   r   r}   r~   )rs   typing.Mapping[str, str]r}   r5  rC  )r6   r   r7   r   r}   r   )rs   rc  r}   r~   )r`  r   r}   r~   )r   r   r   r   r   rT  rW  r   r*  r   rf   r   rb  r   r   r   r5  r5  2  s>    4,   6r   r5  c                  J     e Zd ZU dZded<   dd	 f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, typing.Any]_statec                .    |i }t         |   d|       y )Nrf  )r  __setattr__)r2   stater\   s     r   r9   zState.__init__  s    =EHe,r   c                "    || j                   |<   y r?   rf  r   s      r   rh  zState.__setattr__  s     Cr   c                    	 | j                   |   S # t        $ r2 d}t        |j                  | j                  j
                  |            w xY w)Nz!'{}' object has no attribute '{}')rf  r8  AttributeErrorformatr\   r   )r2   r6   messages      r   __getattr__zState.__getattr__  sM    	O;;s## 	O9G 0G0G!MNN	Os	    ;Ac                    | j                   |= y r?   rk  r   s     r   __delattr__zState.__delattr__  s    KKr   r?   )ri  zdict[str, typing.Any] | Noner   )r6   r|   r}   r|   r   )
r   r   r   r   r   r9   rh  rp  rr  r  r  s   @r   re  re    s%     "!-
!Or   re  )#
__future__r   r   r   urllib.parser   r   r   r   starlette.concurrencyr	   starlette.typesr
   
NamedTupler   TypeVarr   r   r   r   r   r   Sequencer   r   r   Anyre   r   r	  Unionr#  r  r5  re  r   r   r   <module>r|     sG   "   D D 3 !f 
 6>>*% %fnn%: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7v 7vt$!#v||JO'D"DE $$J1fnnS#X& J1ZTW Tn r   