
    jZ                       d dl mZ d dl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 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          Z ed          Z edd          Z ej        dej                   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.dS )(    )annotationsN)	ItemsViewIterableIteratorKeysViewMappingMutableMappingSequence
ValuesView)shlex)AnyBinaryIO
NamedTupleTypeVarcast)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/home/kuhnn/.cache/uv/archive-v0/2m3GSyFXjlQcJqu5/lib/python3.11/site-packages/starlette/datastructures.pyr   r      s"         IIIIIIIIr#   r   _KeyType_CovariantValueTypeT)	covariantz5^([a-z0-9.-]+|\[[a-f0-9]*:[a-f0-9.:]+\])(?::[0-9]+)?$c                  \   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
componentsr   returnNonec                   ||r
J d            |r
J d            |                     dd          }|                     dd           }|d         }|                     dd          }d }|d	         D ]"\  }	}
|	d
k    r|
                    d          } n#|$t                              |          r
| 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  )r3   httpswswss:?z)Cannot set both "url" and "**components".r*   r"   )	getdecode_HOST_RE	fullmatchr)   replacer.   geturl_url)selfr+   r,   r.   r2   r4   r5   r6   host_headerkeyvaluer   r   default_ports                 r$   __init__zURL.__init__   s    @@@@@7!PP#PPP>YYx00FYYx..F=D 99^S99LK#I.  
U'>>"',,y"9"9KE " &8+=+=k+J+J&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G7!#b''///J//:AACCC			r#   r   c                b    t          | d          st          | j                  | _        | j        S )N_components)hasattrr   rE   rM   rF   s    r$   r.   zURL.componentsE   s/    t]++ 	3'	22Dr#   c                    | j         j        S N)r.   r2   rO   s    r$   r2   z
URL.schemeK       %%r#   c                    | j         j        S rQ   )r.   netlocrO   s    r$   rT   z
URL.netlocO   rR   r#   c                    | j         j        S rQ   )r.   r5   rO   s    r$   r5   zURL.pathS       ##r#   c                    | j         j        S rQ   )r.   queryrO   s    r$   rX   z	URL.queryW   s    $$r#   c                    | j         j        S rQ   )r.   fragmentrO   s    r$   rZ   zURL.fragment[       ''r#   
None | strc                    | j         j        S rQ   )r.   usernamerO   s    r$   r^   zURL.username_   r[   r#   c                    | j         j        S rQ   )r.   passwordrO   s    r$   r`   zURL.passwordc   r[   r#   c                    | j         j        S rQ   )r.   hostnamerO   s    r$   rb   zURL.hostnameg   r[   r#   
int | Nonec                    | j         j        S rQ   )r.   r   rO   s    r$   r   zURL.portk   rV   r#   boolc                    | j         dv S )N)r:   r<   )r2   rO   s    r$   	is_securezURL.is_secureo   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 )Nr^   r`   rb   r   @]r=      r   rT   r"   )popr   r^   r`   rT   
rpartitionrsplitr.   _replace	__class__rD   )
rF   rh   rb   r   r^   r`   rT   _userpassr.   s
             r$   rC   zURL.replaces   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   .0rH   rI   s      r$   
<dictcomp>z,URL.include_query_params.<locals>.<dictcomp>   s*    MMM
Us3xxUMMMr#   rX   )	MultiDictr   rX   updateitemsr   multi_itemsrC   )rF   rh   paramsrX   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"   ry   rz   s      r$   
<listcomp>z,URL.replace_query_params.<locals>.<listcomp>   s-    SSSjc5CHHc%jj1SSSr#   r}   )r   r   rC   )rF   rh   rX   s      r$   replace_query_paramszURL.replace_query_params   s:    SSFLLNNSSSTT||%|(((r#   keysstr | Sequence[str]c                   t          |t                    r|g}t          t          | j        d                    }|D ]}|                    |d            t          |                                          }|                     |          S )NTrv   r}   )	
isinstancer   r~   r   rX   rn   r   r   rC   )rF   r   r   rH   rX   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 rQ   ry   rF   r   s     r$   __eq__z
URL.__eq__   s    4yyCJJ&&r#   c                    | j         S rQ   )rE   rO   s    r$   __str__zURL.__str__   s
    yr#   c                    t          |           }| j        r#t          |                     d                    }| j        j         dt          |           dS )Nz********)r`   ())r   r`   rC   rr   r   repr)rF   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/   r0   )r/   r   r/   r   )r/   r\   )r/   rc   r/   re   )rh   r   r/   r)   )r   r   r/   r)   r   r   r/   re   )r   r   r    rK   propertyr.   r2   rT   r5   rX   rZ   r^   r`   rb   r   rg   rC   r   r   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*   r5   r   protocolr   r/   c                D    |dv sJ t                               | |          S )N)r3   	websocketr*   )r   __new__)clsr5   r   r   s       r$   r   zURLPath.__new__   s(    44444{{3%%%r#   r0   c                "    || _         || _        d S rQ   )r   r   )rF   r5   r   r   s       r$   rK   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:   r3   )TFr<   r;   )r3   r   /)r2   rT   r5   )
r   r   r)   r   rg   r2   r   rT   r5   rstrip)rF   r   r2   rT   r5   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*   )r5   r   r   r   r   r   r/   r   )r5   r   r   r   r   r   r/   r0   )r   r   r/   r)   )r   r   r    __doc__r   rK   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.
    rI   r   c                    || _         d S rQ   _value)rF   rI   s     r$   rK   zSecret.__init__   s    r#   r/   c                $    | j         j        }| dS )Nz('**********')rr   r   )rF   
class_names     r$   r   zSecret.__repr__   s    ^,
,,,,r#   c                    | j         S rQ   r   rO   s    r$   r   zSecret.__str__   s
    {r#   re   c                *    t          | j                  S rQ   )re   r   rO   s    r$   __bool__zSecret.__bool__       DK   r#   N)rI   r   r   r   )r   r   r    r   rK   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 )CommaSeparatedStringsrI   r   c                    t          |t                    r2t          |d          }d|_        d|_        d |D             | _        d S t          |          | _        d S )NT)posix,c                6    g | ]}|                                 S r"   )stripr{   items     r$   r   z2CommaSeparatedStrings.__init__.<locals>.<listcomp>   s     ===D4::<<===r#   )r   r   r   
whitespacewhitespace_split_itemslist)rF   rI   splitters      r$   rK   zCommaSeparatedStrings.__init__   s`    eS!! 	&U$///H"%H(,H%==H===DKKKu++DKKKr#   r/   r   c                *    t          | j                  S rQ   )lenr   rO   s    r$   __len__zCommaSeparatedStrings.__len__       4;r#   indexint | slicer   c                    | j         |         S rQ   )r   )rF   r   s     r$   __getitem__z!CommaSeparatedStrings.__getitem__   s    {5!!r#   Iterator[str]c                *    t          | j                  S rQ   )iterr   rO   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$   r   z2CommaSeparatedStrings.__repr__.<locals>.<listcomp>   s    '''$'''r#   r   r   r   rF   r   r   s      r$   r   zCommaSeparatedStrings.__repr__   s6    ^,
''$'''))u))))r#   c                @    d                     d | D                       S )N, c              3  4   K   | ]}t          |          V  d S rQ   )r   r   s     r$   	<genexpr>z0CommaSeparatedStrings.__str__.<locals>.<genexpr>   s(      55d555555r#   )joinrO   s    r$   r   zCommaSeparatedStrings.__str__   s#    yy55555555r#   N)rI   r   r/   r   )r   r   r/   r   r/   r   r   )	r   r   r    rK   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] | Mapping[_KeyType, _CovariantValueType] | Iterable[tuple[_KeyType, _CovariantValueType]]rh   r   r/   r0   c                   t          |          dk     s
J d            |r|d         ng }|rCt          |                                          t          |                                          z   }|sg }nt          |d          rIt	          t          t
          t          f         |          }t          |                                          }nxt          |d          rIt	          t          t
          t          f         |          }t          |	                                          }nt	          d|          }t          |          }d |D             | _
        || _        d S )N   Too many arguments.r   r   r   zlist[tuple[Any, Any]]c                    i | ]\  }}||	S r"   r"   r{   kvs      r$   r|   z/ImmutableMultiDict.__init__.<locals>.<dictcomp>  s    ...tq!a...r#   )r   r   r   rN   r   r%   r&   r   r   r   r   _list)rF   r   rh   rI   r   s        r$   rK   zImmutableMultiDict.__init__   sB    4yy1}}}3}}} $,T!WW" 	g&u--99;;>PQW>X>X>d>d>f>ffE 
	!,.FFUM** 	!+H6I,IJERRE%++--..FFUG$$ 	!+>!>?GGE%++--((FF0%88E%[[F..v...



r#   rH   list[_CovariantValueType]c                *    fd| j         D             S )Nc                &    g | ]\  }}|k    |S r"   r"   )r{   item_key
item_valuerH   s      r$   r   z.ImmutableMultiDict.getlist.<locals>.<listcomp>  s$    UUU3xXQT__
___r#   r   rF   rH   s    `r$   getlistzImmutableMultiDict.getlist  s    UUUUtzUUUUr#   KeysView[_KeyType]c                4    | j                                         S rQ   )r   r   rO   s    r$   r   zImmutableMultiDict.keys  s    z   r#   ValuesView[_CovariantValueType]c                4    | j                                         S rQ   )r   valuesrO   s    r$   r   zImmutableMultiDict.values"  s    z  """r#   (ItemsView[_KeyType, _CovariantValueType]c                4    | j                                         S rQ   )r   r   rO   s    r$   r   zImmutableMultiDict.items%  s    z!!!r#   *list[tuple[_KeyType, _CovariantValueType]]c                *    t          | j                  S rQ   r   r   rO   s    r$   r   zImmutableMultiDict.multi_items(  s    DJr#   r%   r&   c                    | j         |         S rQ   r   r   s     r$   r   zImmutableMultiDict.__getitem__+  s    z#r#   re   c                    || j         v S rQ   r   r   s     r$   __contains__zImmutableMultiDict.__contains__.  s    dj  r#   Iterator[_KeyType]c                D    t          |                                           S rQ   r   r   rO   s    r$   r   zImmutableMultiDict.__iter__1      DIIKK   r#   r   c                *    t          | j                  S rQ   )r   r   rO   s    r$   r   zImmutableMultiDict.__len__4      4:r#   r   c                    t          || j                  sdS t          | j                  t          |j                  k    S NF)r   rr   sortedr   r   s     r$   r   zImmutableMultiDict.__eq__7  s:    %00 	5dj!!VEK%8%888r#   r   c                R    | j         j        }|                                 }| d|dS Nr   r   )rr   r   r   r   s      r$   r   zImmutableMultiDict.__repr__<  s4    ^,
  ""))u))))r#   N)r   r   rh   r   r/   r0   )rH   r   r/   r   )r/   r   )r/   r   )r/   r   )r/   r   )rH   r%   r/   r&   rH   r   r/   re   )r/   r   r   r   r   )r   r   r    r!   rK   r   r   r   r   r   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 )!r~   rH   r   rI   r/   r0   c                4    |                      ||g           d S rQ   )setlistrF   rH   rI   s      r$   __setitem__zMultiDict.__setitem__C  s    S5'"""""r#   c                H    fd| j         D             | _         | j        = d S )Nc                *    g | ]\  }}|k    ||fS r"   r"   r{   r   r   rH   s      r$   r   z)MultiDict.__delitem__.<locals>.<listcomp>G  &    @@@AqCxxq!fxxxr#   )r   r   r   s    `r$   __delitem__zMultiDict.__delitem__F  s-    @@@@@@@
JsOOOr#   Ndefaultc                j    fd| j         D             | _         | j                            |          S )Nc                *    g | ]\  }}|k    ||fS r"   r"   r  s      r$   r   z!MultiDict.pop.<locals>.<listcomp>K  r  r#   )r   r   rn   rF   rH   r  s    ` r$   rn   zMultiDict.popJ  s6    @@@@@@@
z~~c7+++r#   tuple[Any, Any]c                t    | j                                         \  }fd| j        D             | _        |fS )Nc                *    g | ]\  }}|k    ||fS r"   r"   r  s      r$   r   z%MultiDict.popitem.<locals>.<listcomp>P  r  r#   )r   popitemr   )rF   rI   rH   s     @r$   r  zMultiDict.popitemN  sA    Z''))
U@@@@@@@
Ezr#   	list[Any]c                X    fd| j         D             }|                                |S )Nc                &    g | ]\  }}|k    |S r"   r"   r  s      r$   r   z%MultiDict.poplist.<locals>.<listcomp>T  s"    7771a3hh!hhhr#   )r   rn   )rF   rH   r   s    ` r$   poplistzMultiDict.poplistS  s2    7777
777r#   c                j    | j                                          | j                                         d S rQ   )r   clearr   rO   s    r$   r!  zMultiDict.clearX  s0    

r#   c                f    || vr&|| j         |<   | j                            ||f           | |         S rQ   )r   r   appendr  s      r$   
setdefaultzMultiDict.setdefault\  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$   r   z%MultiDict.setlist.<locals>.<listcomp>g  s&    JJJ!Qcq!fr#   c                    g | ]}|fS r"   r"   )r{   rI   rH   s     r$   r   z%MultiDict.setlist.<locals>.<listcomp>h  s    *L*L*LEC<*L*L*Lr#   rk   )rn   r   r   )rF   rH   r   existing_itemss    `  r$   r  zMultiDict.setlistc  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 rQ   )r   r#  r   r  s      r$   r#  zMultiDict.appendk  s+    
3,'''
3r#   r   5MultiDict | Mapping[Any, Any] | list[tuple[Any, Any]]rh   c                    t          |i |fd| j        D             }|                                z   | _        | j                                       d S )Nc                J    g | ]\  }}|                                 v||f S r"   )r   )r{   r   r   rI   s      r$   r   z$MultiDict.update.<locals>.<listcomp>u  s3    SSSVaQejjll=R=R1a&=R=R=Rr#   )r~   r   r   r   r   )rF   r   rh   r(  rI   s       @r$   r   zMultiDict.updateo  sf    
 4*6**SSSStzSSS#e&7&7&9&99

%     r#   rH   r   rI   r   r/   r0   rH   r   r/   r0   rQ   )rH   r   r  r   r/   r   )r/   r  )rH   r   r/   r  r/   r0   )rH   r   r   r  r/   r0   )r   r*  rh   r   r/   r0   )r   r   r    r  r  rn   r  r  r!  r$  r  r#  r   r"   r#   r$   r~   r~   B  s        # # # #   , , , , ,   
   
       ) ) ) )       ! ! ! ! ! !r#   r~   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   VImmutableMultiDict[Any, Any] | Mapping[Any, Any] | list[tuple[Any, Any]] | str | bytesrh   r   r/   r0   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   Trv   r8   c                P    g | ]#\  }}t          |          t          |          f$S r"   ry   r   s      r$   r   z(QueryParams.__init__.<locals>.<listcomp>  s-    >>>41as1vvs1vv&>>>r#   c                N    i | ]"\  }}t          |          t          |          #S r"   ry   r   s      r$   r|   z(QueryParams.__init__.<locals>.<dictcomp>  s*    DDDAc!ffc!ffDDDr#   )r   r   r   superrK   r   bytesr@   r   r   r   )rF   r   rh   rI   rr   s       r$   rK   zQueryParams.__init__  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 rQ   )r   r   rO   s    r$   r   zQueryParams.__str__  s    $$$r#   c                H    | j         j        }t          |           }| d|dS r  )rr   r   r   )rF   r   r6   s      r$   r   zQueryParams.__repr__  s.    ^,
4yy00|0000r#   )r   r2  rh   r   r/   r0   r   )r   r   r    r   rK   r   r   __classcell__rr   s   @r$   r1  r1  z  su         E E E E E E$% % % %1 1 1 1 1 1 1 1r#   r1  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dS ))
UploadFilez@
    An uploaded file included as part of the request data.
    N)sizefilenamer7   filer   r>  rc   r?  
str | Noner7   Headers | Noner/   r0   c                   || _         || _        || _        |pt                      | _        t          | j        dd          | _        d S )N	_max_sizer   )r?  r@  r>  Headersr7   getattr_max_mem_size)rF   r@  r>  r?  r7   s        r$   rK   zUploadFile.__init__  sG     !		+')) %TYQ??r#   c                8    | j                             dd           S )Nzcontent-type)r7   r?   rO   s    r$   content_typezUploadFile.content_type  s    |555r#   re   c                4    t          | j        dd          }| S )N_rolledT)rF  r@  )rF   rolled_to_disks     r$   
_in_memoryzUploadFile._in_memory  s      !It<<!!!r#   size_to_addr   c                    | j         sdS | j                                        |z   }| j        rt	          || j        k              ndS )NTF)rM  r@  tellrG  re   )rF   rN  future_sizes      r$   
_will_rollzUploadFile._will_roll  sM     	4 inn&&49=9KVtK$"44555QVVr#   datar7  c                   K   t          |          }| j        | xj        |z  c_        |                     |          r"t          | j        j        |           d {V  d S | j                            |           d S rQ   )r   r>  rR  r   r@  write)rF   rS  new_data_lens      r$   rU  zUploadFile.write  s      4yy9 II%II??<(( 	"#DIOT:::::::::::IOOD!!!!!r#   rk   c                   K   | j         r| j                            |          S t          | j        j        |           d {V S rQ   )rM  r@  readr   )rF   r>  s     r$   rX  zUploadFile.read  sJ      ? 	(9>>$'''&ty~t<<<<<<<<<r#   offsetc                   K   | j         r| j                            |           d S t          | j        j        |           d {V  d S rQ   )rM  r@  seekr   )rF   rY  s     r$   r[  zUploadFile.seek  sV      ? 	<INN6"""""#DINF;;;;;;;;;;;r#   c                   K   | j         r| j                                         d S t          | j        j                   d {V  d S rQ   )rM  r@  closer   rO   s    r$   r]  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   )rr   r   r?  r>  r7   rO   s    r$   r   zUploadFile.__repr__  s6    .)uuT]uuTYuudhdpuuuur#   )
r@  r   r>  rc   r?  rA  r7   rB  r/   r0   )r/   rA  r   )rN  r   r/   re   )rS  r7  r/   r0   )rk   )r>  r   r/   r7  )rY  r   r/   r0   r/  r   )r   r   r    r   rK   r   rI  rM  rR  rU  rX  r[  r]  r   r"   r#   r$   r=  r=    s          #"&@ @ @ @ @ @" 6 6 6 X6 " " " X"
W W W W" " " "= = = = =
< < < <5 5 5 5v v v v v vr#   r=  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   NFormData | Mapping[str, str | UploadFile] | list[tuple[str, str | UploadFile]]rh   str | UploadFiler/   r0   c                :     t                      j        |i | d S rQ   )r6  rK   )rF   r   rh   rr   s      r$   rK   zFormData.__init__  s'    
 	$)&)))))r#   c                   K   |                                  D ]4\  }}t          |t                    r|                                 d {V  5d S rQ   )r   r   r=  r]  r  s      r$   r]  zFormData.close  sb      **,, 	$ 	$JC%,, $kkmm#######	$ 	$r#   )r   ra  rh   rb  r/   r0   r/  )r   r   r    r   rK   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dS )0rE  z3
    An immutable, case-insensitive multidict.
    Nr7   Mapping[str, str] | Noneraw list[tuple[bytes, bytes]] | Noner,   MutableMapping[str, Any] | Noner/   r0   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 r8   )lowerencoderz   s      r$   r   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".r7   )r   r   r   )rF   r7   rg  r,   s       r$   rK   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 rQ   r   rO   s    r$   rg  zHeaders.raw  s    DJr#   	list[str]c                $    d | j         D             S )Nc                >    g | ]\  }}|                     d           S rl  r@   rz   s      r$   r   z Headers.keys.<locals>.<listcomp>  s(    CCC*#u

9%%CCCr#   r   rO   s    r$   r   zHeaders.keys  s    CC
CCCCr#   c                $    d | j         D             S )Nc                >    g | ]\  }}|                     d           S rl  rt  rz   s      r$   r   z"Headers.values.<locals>.<listcomp>  s(    EEEJCY''EEEr#   r   rO   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 rl  rt  rz   s      r$   r   z!Headers.items.<locals>.<listcomp>  s9    ^^^ZS%I&&Y(?(?@^^^r#   r   rO   s    r$   r   zHeaders.items  s    ^^SWS]^^^^r#   rH   r   c                x    |                                                     d          fd| j        D             S )Nr8   c                L    g | ] \  }}|k    |                     d           !S rl  rt  )r{   r   r   get_header_keys      r$   r   z#Headers.getlist.<locals>.<listcomp>  s8    rrr1E:W_cqWqWq
!!),,WqWqWqr#   rm  rn  r   )rF   rH   r|  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)rg  )r~  r   rO   s    r$   mutablecopyzHeaders.mutablecopy  s    $*QQQ-0000r#   c                    |                                                     d          }| j        D ]"\  }}||k    r|                    d          c S #t	          |          )Nr8   )rm  rn  r   r@   KeyErrorrF   rH   r|  
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   re   c                    |                                                     d          }| j        D ]\  }}||k    r dS dS )Nr8   TFr}  r  s        r$   r   zHeaders.__contains__'  sO    ++I66(,
 	 	$J^++tt ,ur#   Iterator[Any]c                D    t          |                                           S rQ   r   rO   s    r$   r   zHeaders.__iter__.  r  r#   r   c                *    t          | j                  S rQ   )r   r   rO   s    r$   r   zHeaders.__len__1  r  r#   r   c                    t          |t                    sdS t          | j                  t          |j                  k    S r  )r   rE  r  r   r   s     r$   r   zHeaders.__eq__4  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=)rr   r   dictr   r   rg  )rF   r   as_dicts      r$   r   zHeaders.__repr__9  sh    ^,
tzz||$$w<<3t99$$ //7////00480000r#   )NNN)r7   rf  rg  rh  r,   ri  r/   r0   r/   ro  )r/   rq  )r/   rw  )rH   r   r/   rq  )r/   r~  )rH   r   r/   r   r	  )r/   r  r   r   r   )r   r   r    r   rK   r   rg  r   r   r   r   r  r   r   r   r   r   r   r"   r#   r$   rE  rE    sS         -10415	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#   rE  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 )r~  rH   r   rI   r/   r0   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.
        r8   rm   Nr   rm  rn  	enumerater   r#  reversed)	rF   rH   rI   set_key	set_valuefound_indexesidxr   r   s	            r$   r  zMutableHeaders.__setitem__B  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`.
        r8   Nr  )rF   rH   del_keypop_indexesr  r   r   s          r$   r  zMutableHeaders.__delitem__X  s     ))++$$Y//!#+4TZ+@+@ 	( 	('C'(J7""""3'''K(( 	  	 C
3	  	 r#   r   Mapping[str, str]c                    t          |t                    st          d|j        j                   |                     |           | S NzExpected a mapping but got )r   r   	TypeErrorrr   r   r   r   s     r$   __ior__zMutableHeaders.__ior__f  sH    %)) 	VT%/:RTTUUUEr#   c                    t          |t                    st          d|j        j                   |                                 }|                    |           |S r  )r   r   r  rr   r   r  r   )rF   r   news      r$   __or__zMutableHeaders.__or__l  sY    %)) 	VT%/:RTTUUU  

5
r#   ro  c                    | j         S rQ   r   rO   s    r$   rg  zMutableHeaders.raws  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.
        r8   )rm  rn  r  r   r@   r#  )rF   rH   rI   r  r  r  r   r   s           r$   r$  zMutableHeaders.setdefaultw  s    
 ))++$$Y//LL++	+4TZ+@+@ 	4 	4'C'(J7""!((33333 #
7I.///r#   c                D    |                                 D ]
\  }}|| |<   d S rQ   )r   )rF   r   rH   vals       r$   r   zMutableHeaders.update  s2     	 	HCDII	 	r#   c                    |                                                     d          }|                    d          }| j                            ||f           dS )zD
        Append a header, preserving any duplicate entries.
        r8   N)rm  rn  r   r#  )rF   rH   rI   
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   )r?   r   )rF   r  existings      r$   add_vary_headerzMutableHeaders.add_vary_header  s<    88F##99h-..DVr#   N)rH   r   rI   r   r/   r0   rH   r   r/   r0   )r   r  r/   r~  r  )rH   r   rI   r   r/   r   )r   r  r/   r0   )r  r   r/   r0   )r   r   r    r  r  r  r  r   rg  r$  r   r#  r  r"   r#   r$   r~  r~  A  s        4 4 4 4,                 X      6 6 6 6     r#   r~  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]_stateNstatedict[str, Any] | Nonec                T    |i }t                                          d|           d S )Nr  )r6  __setattr__)rF   r  rr   s     r$   rK   zState.__init__  s-    =EHe,,,,,r#   rH   r   rI   r/   r0   c                    || j         |<   d S rQ   r  r  s      r$   r  zState.__setattr__       Cr#   c                    	 | j         |         S # t          $ r0 d}t          |                    | j        j        |                    w xY w)Nz!'{}' object has no attribute '{}')r  r  AttributeErrorformatrr   r   )rF   rH   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 rQ   r  r   s     r$   __delattr__zState.__delattr__      Kr#   r   c                    | j         |         S rQ   r  r   s     r$   r   zState.__getitem__  s    {3r#   c                    || j         |<   d S rQ   r  r  s      r$   r  zState.__setitem__  r  r#   c                    | j         |= d S rQ   r  r   s     r$   r  zState.__delitem__  r  r#   r   c                *    t          | j                  S rQ   )r   r  rO   s    r$   r   zState.__iter__  r   r#   r   c                *    t          | j                  S rQ   )r   r  rO   s    r$   r   zState.__len__  r   r#   rQ   )r  r  r-  )rH   r   r/   r   r.  )rH   r   r/   r   )rH   r   rI   r   r/   r0   r  r   r   )r   r   r    r   r!   rK   r  r  r  r   r  r  r   r   r:  r;  s   @r$   r  r    s           - - - - - - -
! ! ! !O O O O          ! ! ! !   ! ! ! !               r#   r  )/
__future__r   recollections.abcr   r   r   r   r   r	   r
   r   r   typingr   r   r   r   r   urllib.parser   r   r   r   starlette.concurrencyr   starlette.typesr   r   r%   r&   compile
IGNORECASErA   r)   r   r   r   r   r   r~   r1  r=  r`  rE  r~  r  r"   r#   r$   <module>r     s   " " " " " " 				 r r r r r r r r r r r r r r r r r r r r       ; ; ; ; ; ; ; ; ; ; ; ; ; ; D D D D D D D D D D D D 3 3 3 3 3 3 ! ! ! ! ! !    j   
 7: g3tDDD  2:NPRP]^^P9 P9 P9 P9 P9 P9 P9 P9f< < < < <c < < <<! ! ! ! ! ! ! !(6 6 6 6 6HSM 6 6 68B* B* B* B* B*+>!>? B* B* B*J5! 5! 5! 5! 5!"38, 5! 5! 5!p1 1 1 1 1$S#X. 1 1 1@Ev Ev Ev Ev Ev Ev Ev EvP$ $ $ $ $!#zC'7"78 $ $ $$J1 J1 J1 J1 J1gc3h J1 J1 J1ZT T T T TW T T Tn(  (  (  (  (  (  (  (  (  ( r#   