
    9Cg>W              	         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j        eef                   Z G d deej        ej        f                   Z G d deeef                   Z G d d          Z G d deeej        eef         f                   Z G d d ej        eef                   Z  G d! d"e           Z! G d# d$          Z"dS )%    )annotationsN)shlex)SplitResult	parse_qsl	urlencodeurlsplit)run_in_threadpool)Scopec                  $    e Zd ZU ded<   ded<   dS )AddressstrhostintportN)__name__
__module____qualname____annotations__     J/var/www/api/venv/lib/python3.11/site-packages/starlette/datastructures.pyr   r      s"         IIIIIIIIr   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dS )0URL Nurlr   scopeScope | None
components
typing.AnyreturnNonec                l   ||r
J d            |r
J d            |                     dd          }|                     dd           }|d         }|                     dd          }d }|d	         D ]"\  }	}
|	d
k    r|
                    d          } n#|
| d| | }n3||}n.|\  }}ddddd|         }||k    r
| d| | }n| d| d| | }|r|d|                                z   z  }n?|r=|r
J d             t          d          j        di |j                                        }|| _        d S )Nz"Cannot set both "url" and "scope".z+Cannot set both "scope" and "**components".schemehttpserverpathquery_stringr   headerss   hostlatin-1z://P   i  )r'   httpswswss:?z)Cannot set both "url" and "**components".r   r   )getdecoder   replacer!   geturl_url)selfr   r   r!   r&   r(   r)   r*   host_headerkeyvaluer   r   default_ports                 r   __init__zURL.__init__   s    @@@@@@!PP#PPPPYYx00FYYx..F=D 99^S99LK#I.  
U'>>"',,y"9"9KE " &77K777#
d(*S3OOPVW<''#444d44CC#;;;;t;T;;C 3s\002222 	DGGGGGG!#b''///J//:AACCC			r   r   c                b    t          | d          st          | j                  | _        | j        S )N_components)hasattrr   r7   r?   r8   s    r   r!   zURL.components@   s/    t]++ 	3'	22Dr   c                    | j         j        S N)r!   r&   rA   s    r   r&   z
URL.schemeF       %%r   c                    | j         j        S rC   )r!   netlocrA   s    r   rF   z
URL.netlocJ   rD   r   c                    | j         j        S rC   )r!   r)   rA   s    r   r)   zURL.pathN       ##r   c                    | j         j        S rC   )r!   queryrA   s    r   rJ   z	URL.queryR   s    $$r   c                    | j         j        S rC   )r!   fragmentrA   s    r   rL   zURL.fragmentV       ''r   
None | strc                    | j         j        S rC   )r!   usernamerA   s    r   rP   zURL.usernameZ   rM   r   c                    | j         j        S rC   )r!   passwordrA   s    r   rR   zURL.password^   rM   r   c                    | j         j        S rC   )r!   hostnamerA   s    r   rT   zURL.hostnameb   rM   r   
int | Nonec                    | j         j        S rC   )r!   r   rA   s    r   r   zURL.portf   rH   r   boolc                    | j         dv S )N)r.   r0   )r&   rA   s    r   	is_securezURL.is_securej   s    {...r   kwargsc                B   d|v sd|v sd|v sd|v r|                     dd           }|                     d| j                  }|                     d| j                  }|                     d| j                  }|H| j        }|                    d          \  }}}|d         dk    r|                    dd	          d
         }|}||d| z  }||}||d| z  }| d| }||d<    | j        j        di |}	| 	                    |	
                                          S )NrP   rR   rT   r   @]r1      r   rF   r   )popr   rP   rR   rF   
rpartitionrsplitr!   _replace	__class__r6   )
r8   rZ   rT   r   rP   rR   rF   _userpassr!   s
             r   r5   zURL.replacen   s]   :#7#7:;O;OSY]cScSczz*d33H::fdi00Dzz*dm<<Hzz*dm<<H!'!2!23!7!71hB<3&&'sA66q9HF*d**$##'H.H$//v//%F8-T_-7777
~~j//11222r   c                   t          t          | j        d                    }|                    d |                                D                        t          |                                          }|                     |          S )NTkeep_blank_valuesc                N    i | ]"\  }}t          |          t          |          #S r   r   .0r:   r;   s      r   
<dictcomp>z,URL.include_query_params.<locals>.<dictcomp>   s*    MMM
Us3xxUMMMr   rJ   )	MultiDictr   rJ   updateitemsr   multi_itemsr5   )r8   rZ   paramsrJ   s       r   include_query_paramszURL.include_query_params   st    9TZ4HHHIIMMfllnnMMMNNN&,,..//||%|(((r   c                    t          d |                                D                       }|                     |          S )Nc                P    g | ]#\  }}t          |          t          |          f$S r   rk   rl   s      r   
<listcomp>z,URL.replace_query_params.<locals>.<listcomp>   s-    SSSjc5CHHc%jj1SSSr   ro   )r   rr   r5   )r8   rZ   rJ   s      r   replace_query_paramszURL.replace_query_params   s:    SSFLLNNSSSTT||%|(((r   keysstr | typing.Sequence[str]c                   t          |t                    r|g}t          t          | j        d                    }|D ]}|                    |d            t          |                                          }|                     |          S )NTrh   ro   )	
isinstancer   rp   r   rJ   r`   r   rs   r5   )r8   rz   rt   r:   rJ   s        r   remove_query_paramszURL.remove_query_params   s    dC   	6D9TZ4HHHII 	" 	"CJJsD!!!!&,,..//||%|(((r   otherc                B    t          |           t          |          k    S rC   rk   r8   r   s     r   __eq__z
URL.__eq__   s    4yyCJJ&&r   c                    | j         S rC   )r7   rA   s    r   __str__zURL.__str__   s
    yr   c                    t          |           }| j        r#t          |                     d                    }| j        j         dt          |           dS )Nz********)rR   ())r   rR   r5   rd   r   repr)r8   r   s     r   __repr__zURL.__repr__   sT    $ii= 	9dllJl7788C.)88DII8888r   )r   N)r   r   r   r    r!   r"   r#   r$   )r#   r   r#   r   )r#   rN   )r#   rU   r#   rW   )rZ   r"   r#   r   )rz   r{   r#   r   r   r"   r#   rW   )r   r   r   r=   propertyr!   r&   rF   r)   rJ   rL   rP   rR   rT   r   rY   r5   ru   ry   r~   r   r   r   r   r   r   r   r      s"        "& & & & &P       X 
 & & & X& & & & X& $ $ $ X$ % % % X% ( ( ( X( ( ( ( X( ( ( ( X( ( ( ( X( $ $ $ X$ / / / X/3 3 3 38) ) ) )) ) ) )) ) ) )' ' ' '   9 9 9 9 9 9r   r   c                  .    e Zd ZdZdddZddd
ZddZdS )URLPathz
    A URL path string that may also hold an associated protocol and/or host.
    Used by the routing to return `url_path_for` matches.
    r   r)   r   protocolr   r#   c                D    |dv sJ t                               | |          S )N)r'   	websocketr   )r   __new__)clsr)   r   r   s       r   r   zURLPath.__new__   s(    44444{{3%%%r   r$   c                "    || _         || _        d S rC   )r   r   )r8   r)   r   r   s       r   r=   zURLPath.__init__   s     			r   base_url	str | URLr   c                >   t          |t                    rt          |          }| j        r"ddddddd| j                 |j                 }n|j        }| j        p|j        }|j        	                    d          t          |           z   }t          |||          S )	Nr.   r'   )TFr0   r/   )r'   r   /)r&   rF   r)   )
r}   r   r   r   rY   r&   r   rF   r)   rstrip)r8   r   r&   rF   r)   s        r   make_absolute_urlzURLPath.make_absolute_url   s    h$$ 	%8}}H= 	%&v66$)$77  m &/1FF
 _F-ho}##C((3t994&d;;;;r   N)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   __doc__r   r=   r   r   r   r   r   r      sd         
& & & & &    < < < < < <r   r   c                  2    e Zd ZdZddZddZddZdd	Zd
S )Secretz
    Holds a string value that should not be revealed in tracebacks etc.
    You should cast the value to `str` at the point it is required.
    r;   r   c                    || _         d S rC   _value)r8   r;   s     r   r=   zSecret.__init__   s    r   r#   c                $    | j         j        }| dS )Nz('**********')rd   r   )r8   
class_names     r   r   zSecret.__repr__   s    ^,
,,,,r   c                    | j         S rC   r   rA   s    r   r   zSecret.__str__   s
    {r   rW   c                *    t          | j                  S rC   )rW   r   rA   s    r   __bool__zSecret.__bool__       DK   r   N)r;   r   r   r   )r   r   r   r   r=   r   r   r   r   r   r   r   r      sn         
   - - - -   ! ! ! ! ! !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dS )CommaSeparatedStringsr;   r{   c                    t          |t                    r2t          |d          }d|_        d|_        d |D             | _        d S t          |          | _        d S )NT)posix,c                6    g | ]}|                                 S r   )striprm   items     r   rx   z2CommaSeparatedStrings.__init__.<locals>.<listcomp>   s     ===D4::<<===r   )r}   r   r   
whitespacewhitespace_split_itemslist)r8   r;   splitters      r   r=   zCommaSeparatedStrings.__init__   s`    eS!! 	&U$///H"%H(,H%==H===DKKKu++DKKKr   r#   r   c                *    t          | j                  S rC   )lenr   rA   s    r   __len__zCommaSeparatedStrings.__len__   s    4;r   indexint | slicer"   c                    | j         |         S rC   )r   )r8   r   s     r   __getitem__z!CommaSeparatedStrings.__getitem__   s    {5!!r   typing.Iterator[str]c                *    t          | j                  S rC   )iterr   rA   s    r   __iter__zCommaSeparatedStrings.__iter__   r   r   r   c                B    | j         j        }d | D             }| d|dS )Nc                    g | ]}|S r   r   r   s     r   rx   z2CommaSeparatedStrings.__repr__.<locals>.<listcomp>   s    '''$'''r   r   r   r   r8   r   rr   s      r   r   zCommaSeparatedStrings.__repr__   s6    ^,
''$'''))u))))r   c                @    d                     d | D                       S )N, c              3  4   K   | ]}t          |          V  d S rC   )r   r   s     r   	<genexpr>z0CommaSeparatedStrings.__str__.<locals>.<genexpr>   s(      55d555555r   )joinrA   s    r   r   zCommaSeparatedStrings.__str__   s#    yy55555555r   N)r;   r{   r#   r   )r   r   r#   r"   )r#   r   r   )	r   r   r   r=   r   r   r   r   r   r   r   r   r   r      s        & & & &       " " " "! ! ! !* * * *
6 6 6 6 6 6r   r   c                  z    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d"S )/ImmutableMultiDictz#dict[_KeyType, _CovariantValueType]_dictargsImmutableMultiDict[_KeyType, _CovariantValueType] | typing.Mapping[_KeyType, _CovariantValueType] | typing.Iterable[tuple[_KeyType, _CovariantValueType]]rZ   r"   r#   r$   c                   t          |          dk     s
J d            |r|d         ng }|rCt          |                                          t          |                                          z   }|sg }nt          |d          rNt	          j        t          t          t          f         |          }t          |                                          }nt          |d          rSt	          j        t          j	        t          t          f         |          }t          |
                                          }n$t	          j        d|          }t          |          }d |D             | _        || _        d S )N   Too many arguments.r   rs   rr   z#list[tuple[typing.Any, typing.Any]]c                    i | ]\  }}||	S r   r   rm   kvs      r   rn   z/ImmutableMultiDict.__init__.<locals>.<dictcomp>  s    ...tq!a...r   )r   r   rs   r@   typingcastr   r   r   Mappingrr   r   _list)r8   r   rZ   r;   r   s        r   r=   zImmutableMultiDict.__init__   sK    4yy1}}}3}}}'+3DGG 	g&u--99;;>PQW>X>X>d>d>f>ffE 
	!:<FFUM** 	!K 28=P3P QSXYYE%++--..FFUG$$ 	!Kx9L/L MuUUE%++--((FFK EuMME%[[F..v...



r   r:   list[_CovariantValueType]c                *    fd| j         D             S )Nc                &    g | ]\  }}|k    |S r   r   )rm   item_key
item_valuer:   s      r   rx   z.ImmutableMultiDict.getlist.<locals>.<listcomp>  s$    UUU3xXQT__
___r   r   r8   r:   s    `r   getlistzImmutableMultiDict.getlist  s    UUUUtzUUUUr   typing.KeysView[_KeyType]c                4    | j                                         S rC   )r   rz   rA   s    r   rz   zImmutableMultiDict.keys  s    z   r   &typing.ValuesView[_CovariantValueType]c                4    | j                                         S rC   )r   valuesrA   s    r   r   zImmutableMultiDict.values  s    z  """r   /typing.ItemsView[_KeyType, _CovariantValueType]c                4    | j                                         S rC   )r   rr   rA   s    r   rr   zImmutableMultiDict.items   s    z!!!r   *list[tuple[_KeyType, _CovariantValueType]]c                *    t          | j                  S rC   r   r   rA   s    r   rs   zImmutableMultiDict.multi_items#  s    DJr   r   r   c                    | j         |         S rC   r   r   s     r   r   zImmutableMultiDict.__getitem__&  s    z#r   rW   c                    || j         v S rC   r   r   s     r   __contains__zImmutableMultiDict.__contains__)  s    dj  r   typing.Iterator[_KeyType]c                D    t          |                                           S rC   r   rz   rA   s    r   r   zImmutableMultiDict.__iter__,      DIIKK   r   r   c                *    t          | j                  S rC   )r   r   rA   s    r   r   zImmutableMultiDict.__len__/      4:r   r   c                    t          || j                  sdS t          | j                  t          |j                  k    S NF)r}   rd   sortedr   r   s     r   r   zImmutableMultiDict.__eq__2  s:    %00 	5dj!!VEK%8%888r   r   c                R    | j         j        }|                                 }| d|dS Nr   r   )rd   r   rs   r   s      r   r   zImmutableMultiDict.__repr__7  s4    ^,
  ""))u))))r   N)r   r   rZ   r"   r#   r$   )r:   r"   r#   r   )r#   r   )r#   r   )r#   r   )r#   r   )r:   r   r#   r   r:   r"   r#   rW   )r#   r   r   r   r   )r   r   r   r   r=   r   rz   r   rr   rs   r   r   r   r   r   r   r   r   r   r   r      s        ....   8V V V V! ! ! !# # # #" " " "          ! ! ! !! ! ! !   9 9 9 9
* * * * * *r   r   c                  b    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dS )!rp   r:   r"   r;   r#   r$   c                4    |                      ||g           d S rC   )setlistr8   r:   r;   s      r   __setitem__zMultiDict.__setitem__>  s    S5'"""""r   c                H    fd| j         D             | _         | j        = d S )Nc                *    g | ]\  }}|k    ||fS r   r   rm   r   r   r:   s      r   rx   z)MultiDict.__delitem__.<locals>.<listcomp>B  &    @@@AqCxxq!fxxxr   )r   r   r   s    `r   __delitem__zMultiDict.__delitem__A  s-    @@@@@@@
JsOOOr   Ndefaultc                j    fd| j         D             | _         | j                            |          S )Nc                *    g | ]\  }}|k    ||fS r   r   r  s      r   rx   z!MultiDict.pop.<locals>.<listcomp>F  r  r   )r   r   r`   r8   r:   r  s    ` r   r`   zMultiDict.popE  s6    @@@@@@@
z~~c7+++r   tuple[typing.Any, typing.Any]c                t    | j                                         \  }fd| j        D             | _        |fS )Nc                *    g | ]\  }}|k    ||fS r   r   r  s      r   rx   z%MultiDict.popitem.<locals>.<listcomp>K  r  r   )r   popitemr   )r8   r;   r:   s     @r   r  zMultiDict.popitemI  sA    Z''))
U@@@@@@@
Ezr   list[typing.Any]c                X    fd| j         D             }|                                |S )Nc                &    g | ]\  }}|k    |S r   r   r  s      r   rx   z%MultiDict.poplist.<locals>.<listcomp>O  s"    7771a3hh!hhhr   )r   r`   )r8   r:   r   s    ` r   poplistzMultiDict.poplistN  s2    7777
777r   c                j    | j                                          | j                                         d S rC   )r   clearr   rA   s    r   r  zMultiDict.clearS  s0    

r   c                f    || vr&|| j         |<   | j                            ||f           | |         S rC   )r   r   appendr
  s      r   
setdefaultzMultiDict.setdefaultW  s:    d??%DJsOJsGn---Cyr   r   c                    |s|                      d            d S fd| j        D             }|fd|D             z   | _        |d         | j        <   d S )Nc                *    g | ]\  }}|k    ||fS r   r   r  s      r   rx   z%MultiDict.setlist.<locals>.<listcomp>b  s&    JJJ!Qcq!fr   c                    g | ]}|fS r   r   )rm   r;   r:   s     r   rx   z%MultiDict.setlist.<locals>.<listcomp>c  s    *L*L*LEC<*L*L*Lr   r]   )r`   r   r   )r8   r:   r   existing_itemss    `  r   r   zMultiDict.setlist^  st     	)HHS$JJJJ4:JJJN'*L*L*L*LV*L*L*LLDJ$RjDJsOOOr   c                R    | j                             ||f           || j        |<   d S rC   )r   r  r   r   s      r   r  zMultiDict.appendf  s+    
3,'''
3r   r   XMultiDict | typing.Mapping[typing.Any, typing.Any] | list[tuple[typing.Any, typing.Any]]rZ   c                    t          |i |fd| j        D             }|                                z   | _        | j                                       d S )Nc                J    g | ]\  }}|                                 v||f S r   )rz   )rm   r   r   r;   s      r   rx   z$MultiDict.update.<locals>.<listcomp>p  s3    SSSVaQejjll=R=R1a&=R=R=Rr   )rp   r   rs   r   rq   )r8   r   rZ   r  r;   s       @r   rq   zMultiDict.updatej  sf    
 4*6**SSSStzSSS#e&7&7&9&99

%     r   r:   r"   r;   r"   r#   r$   r:   r"   r#   r$   rC   )r:   r"   r  r"   r#   r"   )r#   r  )r:   r"   r#   r  r#   r$   )r:   r"   r   r  r#   r$   )r   r  rZ   r"   r#   r$   )r   r   r   r  r  r`   r  r  r  r  r   r  rq   r   r   r   rp   rp   =  s        # # # #   , , , , ,   
   
       ) ) ) )       ! ! ! ! ! !r   rp   c                  4     e Zd ZdZd fdZdd
ZddZ xZS )QueryParamsz!
    An immutable multidict.
    r   ImmutableMultiDict[typing.Any, typing.Any] | typing.Mapping[typing.Any, typing.Any] | list[tuple[typing.Any, typing.Any]] | str | bytesrZ   r"   r#   r$   c                *   t          |          dk     s
J d            |r|d         ng }t          |t                    r* t                      j        t          |d          fi | nkt          |t                    r= t                      j        t          |                    d          d          fi | n t                      j        |i | d | j        D             | _        d | j	        
                                D             | _	        d S )	Nr   r   r   Trh   r,   c                P    g | ]#\  }}t          |          t          |          f$S r   rk   r   s      r   rx   z(QueryParams.__init__.<locals>.<listcomp>  s-    >>>41as1vvs1vv&>>>r   c                N    i | ]"\  }}t          |          t          |          #S r   rk   r   s      r   rn   z(QueryParams.__init__.<locals>.<dictcomp>  s*    DDDAc!ffc!ffDDDr   )r   r}   r   superr=   r   bytesr4   r   r   rr   )r8   r   rZ   r;   rd   s       r   r=   zQueryParams.__init__z  s    4yy1}}}3}}}'QReS!! 	.EGGYuEEEPPPPPPu%% 	.EGGYu||I'>'>RVWWWbb[abbbbEGGd-f--->>4:>>>
DD1A1A1C1CDDD


r   r   c                *    t          | j                  S rC   )r   r   rA   s    r   r   zQueryParams.__str__  s    $$$r   c                H    | j         j        }t          |           }| d|dS r   )rd   r   r   )r8   r   r*   s      r   r   zQueryParams.__repr__  s.    ^,
4yy00|0000r   )r   r%  rZ   r"   r#   r$   r   )r   r   r   r   r=   r   r   __classcell__rd   s   @r   r$  r$  u  su         E E E E E E,% % % %1 1 1 1 1 1 1 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dS )&
UploadFilez@
    An uploaded file included as part of the request data.
    N)sizefilenamer+   filetyping.BinaryIOr1  rU   r2  
str | Noner+   Headers | Noner#   r$   c               Z    || _         || _        || _        |pt                      | _        d S rC   )r2  r3  r1  Headersr+   )r8   r3  r1  r2  r+   s        r   r=   zUploadFile.__init__  s-     !		+'))r   c                8    | j                             dd           S )Nzcontent-type)r+   r3   rA   s    r   content_typezUploadFile.content_type  s    |555r   rW   c                4    t          | j        dd          }| S )N_rolledT)getattrr3  )r8   rolled_to_disks     r   
_in_memoryzUploadFile._in_memory  s      !It<<!!!r   datar*  c                   K   | j         | xj         t          |          z  c_         | j        r| j                            |           d S t          | j        j        |           d {V  d S rC   )r1  r   r?  r3  writer	   )r8   r@  s     r   rB  zUploadFile.write  st      9 IIT"II? 	;IOOD!!!!!#DIOT:::::::::::r   r]   r   c                   K   | j         r| j                            |          S t          | j        j        |           d {V S rC   )r?  r3  readr	   )r8   r1  s     r   rD  zUploadFile.read  sJ      ? 	(9>>$'''&ty~t<<<<<<<<<r   offsetc                   K   | j         r| j                            |           d S t          | j        j        |           d {V  d S rC   )r?  r3  seekr	   )r8   rE  s     r   rG  zUploadFile.seek  sV      ? 	<INN6"""""#DINF;;;;;;;;;;;r   c                   K   | j         r| j                                         d S t          | j        j                   d {V  d S rC   )r?  r3  closer	   rA   s    r   rI  zUploadFile.close  sR      ? 	5IOO#DIO44444444444r   r   c                P    | j         j         d| j        d| j        d| j        dS )Nz
(filename=z, size=z
, headers=r   )rd   r   r2  r1  r+   rA   s    r   r   zUploadFile.__repr__  sM    ~& ) )) )I) ) |) ) )	
r   )
r3  r4  r1  rU   r2  r5  r+   r6  r#   r$   )r#   r5  r   )r@  r*  r#   r$   )r]   )r1  r   r#   r*  )rE  r   r#   r$   r"  r   )r   r   r   r   r=   r   r:  r?  rB  rD  rG  rI  r   r   r   r   r0  r0    s           #"&, , , , , , 6 6 6 X6 " " " X"
; ; ; ;= = = = =
< < < <5 5 5 5
 
 
 
 
 
r   r0  c                  ,     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.
    r   UFormData | typing.Mapping[str, str | UploadFile] | list[tuple[str, str | UploadFile]]rZ   str | UploadFiler#   r$   c                :     t                      j        |i | d S rC   )r)  r=   )r8   r   rZ   rd   s      r   r=   zFormData.__init__  s'    
 	$)&)))))r   c                   K   |                                  D ]4\  }}t          |t                    r|                                 d {V  5d S rC   )rs   r}   r0  rI  r   s      r   rI  zFormData.close  sb      **,, 	$ 	$JC%,, $kkmm#######	$ 	$r   )r   rM  rZ   rN  r#   r$   r"  )r   r   r   r   r=   rI  r-  r.  s   @r   rL  rL    s[         * * * * * *$ $ $ $ $ $ $ $r   rL  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dS )0r8  z3
    An immutable, case-insensitive multidict.
    Nr+   typing.Mapping[str, str] | Noneraw list[tuple[bytes, bytes]] | Noner   -typing.MutableMapping[str, typing.Any] | Noner#   r$   c                   g | _         |=|
J d            |
J d            d |                                D             | _         d S ||
J d            || _         d S |!t          |d                   x| _         |d<   d S d S )Nz$Cannot set both "headers" and "raw".z&Cannot set both "headers" and "scope".c                    g | ]A\  }}|                                                     d           |                    d           fBS r,   )lowerencoderl   s      r   rx   z$Headers.__init__.<locals>.<listcomp>  sF    uuuWaWZ\a399;;--i88%,,y:Q:QRuuur   z"Cannot set both "raw" and "scope".r+   )r   rr   r   )r8   r+   rS  r   s       r   r=   zHeaders.__init__  s     13
;; F;;;=="J===uuelereretetuuuDJJJ_=="F===DJJJ -1y1A,B,BBDJy))) r   list[tuple[bytes, bytes]]c                *    t          | j                  S rC   r   rA   s    r   rS  zHeaders.raw  s    DJr   	list[str]c                $    d | j         D             S )Nc                >    g | ]\  }}|                     d           S rX  r4   rl   s      r   rx   z Headers.keys.<locals>.<listcomp>  s(    CCC*#u

9%%CCCr   r   rA   s    r   rz   zHeaders.keys  s    CC
CCCCr   c                $    d | j         D             S )Nc                >    g | ]\  }}|                     d           S rX  r`  rl   s      r   rx   z"Headers.values.<locals>.<listcomp>
  s(    EEEJCY''EEEr   r   rA   s    r   r   zHeaders.values	  s    EE$*EEEEr   list[tuple[str, str]]c                $    d | j         D             S )Nc                h    g | ]/\  }}|                     d           |                     d           f0S rX  r`  rl   s      r   rx   z!Headers.items.<locals>.<listcomp>  s9    ^^^ZS%I&&Y(?(?@^^^r   r   rA   s    r   rr   zHeaders.items  s    ^^SWS]^^^^r   r:   r   c                x    |                                                     d          fd| j        D             S )Nr,   c                L    g | ] \  }}|k    |                     d           !S rX  r`  )rm   r   r   get_header_keys      r   rx   z#Headers.getlist.<locals>.<listcomp>  s8    rrr1E:W_cqWqWq
!!),,WqWqWqr   rY  rZ  r   )r8   r:   rh  s     @r   r   zHeaders.getlist  s:    ++I66rrrrrrrrr   MutableHeadersc                <    t          | j        d d                    S )N)rS  )rj  r   rA   s    r   mutablecopyzHeaders.mutablecopy  s    $*QQQ-0000r   c                    |                                                     d          }| j        D ]"\  }}||k    r|                    d          c S #t	          |          )Nr,   )rY  rZ  r   r4   KeyErrorr8   r:   rh  
header_keyheader_values        r   r   zHeaders.__getitem__  si    ++I66(,
 	6 	6$J^++#**955555 ,smmr   r"   rW   c                    |                                                     d          }| j        D ]\  }}||k    r dS dS )Nr,   TFri  ro  s        r   r   zHeaders.__contains__  sO    ++I66(,
 	 	$J^++tt ,ur   typing.Iterator[typing.Any]c                D    t          |                                           S rC   r   rA   s    r   r   zHeaders.__iter__$  r   r   r   c                *    t          | j                  S rC   )r   r   rA   s    r   r   zHeaders.__len__'  r   r   r   c                    t          |t                    sdS t          | j                  t          |j                  k    S r   )r}   r8  r   r   r   s     r   r   zHeaders.__eq__*  s8    %)) 	5dj!!VEK%8%888r   c                    | j         j        }t          |                                           }t	          |          t	          |           k    r| d|dS | d| j        dS )Nr   r   z(raw=)rd   r   dictrr   r   rS  )r8   r   as_dicts      r   r   zHeaders.__repr__/  sh    ^,
tzz||$$w<<3t99$$ //7////00480000r   )NNN)r+   rR  rS  rT  r   rU  r#   r$   r#   r[  )r#   r]  )r#   rc  )r:   r   r#   r]  )r#   rj  )r:   r   r#   r   r   )r#   rs  r   r   r   )r   r   r   r   r=   r   rS  rz   r   rr   r   rl  r   r   r   r   r   r   r   r   r   r8  r8    sS         4804?C	C C C C C&       X D D D DF F F F_ _ _ _s s s s1 1 1 1      ! ! ! !   9 9 9 9
1 1 1 1 1 1r   r8  c                  f    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dS )rj  r:   r   r;   r#   r$   c                   |                                                     d          }|                    d          }g }t          | j                  D ]#\  }\  }}||k    r|                    |           $t          |dd                   D ]
}| j        |= |r|d         }||f| j        |<   dS | j                            ||f           dS )zs
        Set the header `key` to `value`, removing any duplicate entries.
        Retains insertion order.
        r,   r_   Nr   rY  rZ  	enumerater   r  reversed)	r8   r:   r;   set_key	set_valuefound_indexesidxr   r   s	            r   r  zMutableHeaders.__setitem__8  s    
 ))++$$Y//LL++	#%+4TZ+@+@ 	* 	*'C'(J7""$$S)))M!""-.. 	  	 C
3 	4"C&	2DJsOOOJw	233333r   c                    |                                                     d          }g }t          | j                  D ]#\  }\  }}||k    r|                    |           $t          |          D ]
}| j        |= dS )z*
        Remove the header `key`.
        r,   Nr}  )r8   r:   del_keypop_indexesr  r   r   s          r   r  zMutableHeaders.__delitem__N  s     ))++$$Y//!#+4TZ+@+@ 	( 	('C'(J7""""3'''K(( 	  	 C
3	  	 r   r   typing.Mapping[str, str]c                    t          |t          j                  st          d|j        j                   |                     |           | S NzExpected a mapping but got )r}   r   r   	TypeErrorrd   r   rq   r   s     r   __ior__zMutableHeaders.__ior__\  sJ    %00 	VT%/:RTTUUUEr   c                    t          |t          j                  st          d|j        j                   |                                 }|                    |           |S r  )r}   r   r   r  rd   r   rl  rq   )r8   r   news      r   __or__zMutableHeaders.__or__b  s[    %00 	VT%/:RTTUUU  

5
r   r[  c                    | j         S rC   r   rA   s    r   rS  zMutableHeaders.rawi  s
    zr   c                *   |                                                     d          }|                    d          }t          | j                  D ]%\  }\  }}||k    r|                    d          c S &| j                            ||f           |S )zo
        If the header `key` does not exist, then set it to `value`.
        Returns the header value.
        r,   )rY  rZ  r~  r   r4   r  )r8   r:   r;   r  r  r  r   r   s           r   r  zMutableHeaders.setdefaultm  s    
 ))++$$Y//LL++	+4TZ+@+@ 	4 	4'C'(J7""!((33333 #
7I.///r   c                D    |                                 D ]
\  }}|| |<   d S rC   )rr   )r8   r   r:   vals       r   rq   zMutableHeaders.update{  s2     	 	HCDII	 	r   c                    |                                                     d          }|                    d          }| j                            ||f           dS )zD
        Append a header, preserving any duplicate entries.
        r,   N)rY  rZ  r   r  )r8   r:   r;   
append_keyappend_values        r   r  zMutableHeaders.append  sQ     YY[[''	22
||I..
:|455555r   varyc                l    |                      d          }|d                    ||g          }|| d<   d S )Nr  r   )r3   r   )r8   r  existings      r   add_vary_headerzMutableHeaders.add_vary_header  s<    88F##99h-..DVr   N)r:   r   r;   r   r#   r$   )r:   r   r#   r$   )r   r  r#   rj  rz  )r:   r   r;   r   r#   r   )r   r  r#   r$   )r  r   r#   r$   )r   r   r   r  r  r  r  r   rS  r  rq   r  r  r   r   r   rj  rj  7  s        4 4 4 4,                 X      6 6 6 6     r   rj  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]_stateNstatedict[str, typing.Any] | Nonec                T    |i }t                                          d|           d S )Nr  )r)  __setattr__)r8   r  rd   s     r   r=   zState.__init__  s-    =EHe,,,,,r   r:   r"   r;   r#   r$   c                    || j         |<   d S rC   r  r   s      r   r  zState.__setattr__  s     Cr   c                    	 | j         |         S # t          $ r0 d}t          |                    | j        j        |                    w xY w)Nz!'{}' object has no attribute '{}')r  rn  AttributeErrorformatrd   r   )r8   r:   messages      r   __getattr__zState.__getattr__  sZ    	O;s## 	O 	O 	O9G 0G!M!MNNN	Os	    :A	c                    | j         |= d S rC   r  r   s     r   __delattr__zState.__delattr__  s    Kr   rC   )r  r  r   )r:   r"   r#   r"   r!  )
r   r   r   r   r   r=   r  r  r  r-  r.  s   @r   r  r    s           "!!!- - - - - - -
! ! ! !O O O 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   Anyrp   r$  r0  UnionrL  r8  rj  r  r   r   r   <module>r     sC   " " " " " "        D D D D D D D D D D D D 3 3 3 3 3 3 ! ! ! ! ! !    f   
 6>*%% %fn%:dKKK P9 P9 P9 P9 P9 P9 P9 P9f< < < < <c < < <<! ! ! ! ! ! ! !(6 6 6 6 6FOC0 6 6 68B* B* B* B* B*2E(EF B* B* B*J5! 5! 5! 5! 5!"6:vz#9: 5! 5! 5!p!1 !1 !1 !1 !1$S#X. !1 !1 !1H<
 <
 <
 <
 <
 <
 <
 <
~$ $ $ $ $!#v|JO'D"DE $ $ $$J1 J1 J1 J1 J1fnS#X& J1 J1 J1ZT T T T TW T T Tn         r   