
    l0jZ                       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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Literal
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__     [/home/wildlama/miniconda3/envs/lam/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|}n&|"|\  }}ddddd|         }||k    r|n| d| }nd }|                                }|'t	          ||||d                                          }nK|r| d| n|}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-1P   i  )r4   httpswswss:r+   )r3   netlocr6   queryfragment?z)Cannot set both "url" and "**components".r#   )
getdecode_HOST_RE	fullmatchr   geturlr*   replacer/   _url)selfr,   r-   r/   r3   r5   r6   r7   host_headerkeyvaluer?   r   r   default_portr@   s                   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&$##
d(*S3OOPVW!%!5!5d;K;KT;K;K ''))E!!TQVacdddkkmm+0:'''''d 	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   rI   rQ   rJ   s    r%   r/   zURL.componentsE   s/    t]++ 	3'	22Dr$   c                    | j         j        S N)r/   r3   rS   s    r%   r3   z
URL.schemeK       %%r$   c                    | j         j        S rU   )r/   r?   rS   s    r%   r?   z
URL.netlocO   rV   r$   c                    | j         j        S rU   )r/   r6   rS   s    r%   r6   zURL.pathS       ##r$   c                    | j         j        S rU   )r/   r@   rS   s    r%   r@   z	URL.queryW   s    $$r$   c                    | j         j        S rU   )r/   rA   rS   s    r%   rA   zURL.fragment[       ''r$   
None | strc                    | j         j        S rU   )r/   usernamerS   s    r%   r_   zURL.username_   r\   r$   c                    | j         j        S rU   )r/   passwordrS   s    r%   ra   zURL.passwordc   r\   r$   c                    | j         j        S rU   )r/   hostnamerS   s    r%   rc   zURL.hostnameg   r\   r$   
int | Nonec                    | j         j        S rU   )r/   r   rS   s    r%   r   zURL.portk   rY   r$   boolc                    | j         dv S )N)r;   r=   )r3   rS   s    r%   	is_securezURL.is_secureo   s    {...r$   kwargsc                F   d|v sd|v sd|v sd|v r|                     dd           }|                     d| j                  }|                     d| j                  }|                     d| j                  }|J| j        }|                    d          \  }}}|r(|d         dk    r|                    dd	          d
         }|}||d| z  }||}||d| z  }| d| }||d<    | j        j        di |}	| 	                    |	
                                          S )Nr_   ra   rc   r   @]r>      r   r?   r#   )popr   r_   ra   r?   
rpartitionrsplitr/   _replace	__class__rG   )
rJ   ri   rc   r   r_   ra   r?   _userpassr/   s
             r%   rH   zURL.replaces   sd   :#7#7:;O;OSY]cScSczz*d33H::fdi00Dzz*dm<<Hzz*dm<<H!'!2!23!7!71h : 3 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   .0rL   rM   s      r%   
<dictcomp>z,URL.include_query_params.<locals>.<dictcomp>   s*    MMM
Us3xxUMMMr$   r@   )	MultiDictr   r@   updateitemsr   multi_itemsrH   )rJ   ri   paramsr@   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#   rz   r{   s      r%   
<listcomp>z,URL.replace_query_params.<locals>.<listcomp>   s-    SSSjc5CHHc%jj1SSSr$   r~   )r   r   rH   )rJ   ri   r@   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 )NTrw   r~   )	
isinstancer   r   r   r@   ro   r   r   rH   )rJ   r   r   rL   r@   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 rU   rz   rJ   r   s     r%   __eq__z
URL.__eq__   s    4yyCJJ&&r$   c                    | j         S rU   )rI   rS   s    r%   __str__zURL.__str__   s
    yr$   c                    t          |           }| j        r#t          |                     d                    }| j        j         dt          |           dS )Nz********)ra   ())r   ra   rH   rs   r   repr)rJ   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   r0   r1   )r0   r   r0   r   )r0   r]   )r0   rd   r0   rf   )ri   r   r0   r*   )r   r   r0   r*   r   r   r0   rf   )r   r    r!   rO   propertyr/   r3   r?   r6   r@   rA   r_   ra   rc   r   rh   rH   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+   r6   r   protocol Literal['http', 'websocket', '']r   r0   c                D    |dv sJ t                               | |          S )N)r4   	websocketr+   )r   __new__)clsr6   r   r   s       r%   r   zURLPath.__new__   s(    44444{{3%%%r$   r1   c                "    || _         || _        d S rU   )r   r   )rJ   r6   r   r   s       r%   rO   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;   r4   )TFr=   r<   )r4   r   /)r3   r?   r6   )
r   r   r*   r   rh   r3   r   r?   r6   rstrip)rJ   r   r3   r?   r6   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+   )r6   r   r   r   r   r   r0   r   )r6   r   r   r   r   r   r0   r1   )r   r   r0   r*   )r   r    r!   __doc__r   rO   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.
    rM   r   c                    || _         d S rU   _value)rJ   rM   s     r%   rO   zSecret.__init__   s    r$   r0   c                $    | j         j        }| dS )Nz('**********')rs   r   )rJ   
class_names     r%   r   zSecret.__repr__   s    ^,
,,,,r$   c                    | j         S rU   r   rS   s    r%   r   zSecret.__str__   s
    {r$   rf   c                *    t          | j                  S rU   )rf   r   rS   s    r%   __bool__zSecret.__bool__       DK   r$   N)rM   r   r   r   )r   r    r!   r   rO   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 )CommaSeparatedStringsrM   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)rJ   rM   splitters      r%   rO   zCommaSeparatedStrings.__init__   s`    eS!! 	&U$///H"%H(,H%==H===DKKKu++DKKKr$   r0   r   c                *    t          | j                  S rU   )lenr   rS   s    r%   __len__zCommaSeparatedStrings.__len__       4;r$   indexint | slicer   c                    | j         |         S rU   )r   )rJ   r   s     r%   __getitem__z!CommaSeparatedStrings.__getitem__   s    {5!!r$   Iterator[str]c                *    t          | j                  S rU   )iterr   rS   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   rJ   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 rU   )r   r   s     r%   	<genexpr>z0CommaSeparatedStrings.__str__.<locals>.<genexpr>   s(      55d555555r$   )joinrS   s    r%   r   zCommaSeparatedStrings.__str__   s#    yy55555555r$   N)rM   r   r0   r   )r   r   r0   r   r0   r   r   )	r   r    r!   rO   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]]ri   r   r0   r1   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   rR   r   r&   r'   r   r   r   r   _list)rJ   r   ri   rM   r   s        r%   rO   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$   rL   list[_CovariantValueType]c                *    fd| j         D             S )Nc                &    g | ]\  }}|k    |S r#   r#   )r|   item_key
item_valuerL   s      r%   r   z.ImmutableMultiDict.getlist.<locals>.<listcomp>  s$    UUU3xXQT__
___r$   r   rJ   rL   s    `r%   getlistzImmutableMultiDict.getlist  s    UUUUtzUUUUr$   KeysView[_KeyType]c                4    | j                                         S rU   )r   r   rS   s    r%   r   zImmutableMultiDict.keys  s    z   r$   ValuesView[_CovariantValueType]c                4    | j                                         S rU   )r   valuesrS   s    r%   r   zImmutableMultiDict.values"  s    z  """r$   (ItemsView[_KeyType, _CovariantValueType]c                4    | j                                         S rU   )r   r   rS   s    r%   r   zImmutableMultiDict.items%  s    z!!!r$   *list[tuple[_KeyType, _CovariantValueType]]c                *    t          | j                  S rU   r   r   rS   s    r%   r   zImmutableMultiDict.multi_items(  s    DJr$   r&   r'   c                    | j         |         S rU   r   r   s     r%   r   zImmutableMultiDict.__getitem__+  s    z#r$   rf   c                    || j         v S rU   r   r   s     r%   __contains__zImmutableMultiDict.__contains__.  s    dj  r$   Iterator[_KeyType]c                D    t          |                                           S rU   r   r   rS   s    r%   r   zImmutableMultiDict.__iter__1      DIIKK   r$   r   c                *    t          | j                  S rU   )r   r   rS   s    r%   r   zImmutableMultiDict.__len__4      4:r$   r   c                    t          || j                  sdS t          | j                  t          |j                  k    S NF)r   rs   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   )rs   r   r   r   s      r%   r   zImmutableMultiDict.__repr__<  s4    ^,
  ""))u))))r$   N)r   r   ri   r   r0   r1   )rL   r   r0   r   )r0   r   )r0   r   )r0   r   )r0   r   )rL   r&   r0   r'   rL   r   r0   rf   )r0   r   r   r   r   )r   r    r!   r"   rO   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   rL   r   rM   r0   r1   c                4    |                      ||g           d S rU   )setlistrJ   rL   rM   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   rL   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   ro   rJ   rL   r  s    ` r%   ro   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   )rJ   rM   rL   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   ro   )rJ   rL   r   s    ` r%   poplistzMultiDict.poplistS  s2    7777
777r$   c                j    | j                                          | j                                         d S rU   )r   clearr   rS   s    r%   r#  zMultiDict.clearX  s0    

r$   c                f    || vr&|| j         |<   | j                            ||f           | |         S rU   )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|   rM   rL   s     r%   r   z%MultiDict.setlist.<locals>.<listcomp>h  s    *L*L*LEC<*L*L*Lr$   rl   )ro   r   r   )rJ   rL   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 rU   )r   r%  r   r  s      r%   r%  zMultiDict.appendk  s+    
3,'''
3r$   r   5MultiDict | Mapping[Any, Any] | list[tuple[Any, Any]]ri   c                    t          |i |fd| j        D             }|                                z   | _        | j                                       d S )Nc                J    g | ]\  }}|                                 v||f S r#   )r   )r|   r   r   rM   s      r%   r   z$MultiDict.update.<locals>.<listcomp>u  s3    SSSVaQejjll=R=R1a&=R=R=Rr$   )r   r   r   r   r   )rJ   r   ri   r*  rM   s       @r%   r   zMultiDict.updateo  sf    
 4*6**SSSStzSSS#e&7&7&9&99

%     r$   rL   r   rM   r   r0   r1   rL   r   r0   r1   rU   )rL   r   r  r   r0   r   )r0   r  )rL   r   r0   r  r0   r1   )rL   r   r   r  r0   r1   )r   r,  ri   r   r0   r1   )r   r    r!   r  r  ro   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 | bytesri   r   r0   r1   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   Trw   r9   c                P    g | ]#\  }}t          |          t          |          f$S r#   rz   r   s      r%   r   z(QueryParams.__init__.<locals>.<listcomp>  s-    >>>41as1vvs1vv&>>>r$   c                N    i | ]"\  }}t          |          t          |          #S r#   rz   r   s      r%   r}   z(QueryParams.__init__.<locals>.<dictcomp>  s*    DDDAc!ffc!ffDDDr$   )r   r   r   superrO   r   bytesrD   r   r   r   )rJ   r   ri   rM   rs   s       r%   rO   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 rU   )r   r   rS   s    r%   r   zQueryParams.__str__  s    $$$r$   c                H    | j         j        }t          |           }| d|dS r
  )rs   r   r   )rJ   r   r7   s      r%   r   zQueryParams.__repr__  s.    ^,
4yy00|0000r$   )r   r4  ri   r   r0   r1   r   )r   r    r!   r   rO   r   r   __classcell__rs   s   @r%   r3  r3  z  su         E E E E E E$% % % %1 1 1 1 1 1 1 1r$   r3  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filenamer8   filer   r@  rd   rA  
str | Noner8   Headers | Noner0   r1   c                   || _         || _        || _        |pt                      | _        t          | j        dd          | _        d S )N	_max_sizer   )rA  rB  r@  Headersr8   getattr_max_mem_size)rJ   rB  r@  rA  r8   s        r%   rO   zUploadFile.__init__  sG     !		+')) %TYQ??r$   c                8    | j                             dd           S )Nzcontent-type)r8   rC   rS   s    r%   content_typezUploadFile.content_type  s    |555r$   rf   c                4    t          | j        dd          }| S )N_rolledT)rH  rB  )rJ   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)rO  rB  tellrI  rf   )rJ   rP  future_sizes      r%   
_will_rollzUploadFile._will_roll  sM     	4 inn&&49=9KVtK$"44555QVVr$   datar9  c                   K   t          |          }| j        | xj        |z  c_        |                     |          r"t          | j        j        |           d {V  d S | j                            |           d S rU   )r   r@  rT  r   rB  write)rJ   rU  new_data_lens      r%   rW  zUploadFile.write  s      4yy9 II%II??<(( 	"#DIOT:::::::::::IOOD!!!!!r$   rl   c                   K   | j         r| j                            |          S t          | j        j        |           d {V S rU   )rO  rB  readr   )rJ   r@  s     r%   rZ  zUploadFile.read  sJ      ? 	(9>>$'''&ty~t<<<<<<<<<r$   offsetc                   K   | j         r| j                            |           d S t          | j        j        |           d {V  d S rU   )rO  rB  seekr   )rJ   r[  s     r%   r]  zUploadFile.seek  sV      ? 	<INN6"""""#DINF;;;;;;;;;;;r$   c                   K   | j         r| j                                         d S t          | j        j                   d {V  d S rU   )rO  rB  closer   rS   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   )rs   r   rA  r@  r8   rS   s    r%   r   zUploadFile.__repr__  s6    .)uuT]uuTYuudhdpuuuur$   )
rB  r   r@  rd   rA  rC  r8   rD  r0   r1   )r0   rC  r   )rP  r   r0   rf   )rU  r9  r0   r1   )rl   )r@  r   r0   r9  )r[  r   r0   r1   r1  r   )r   r    r!   r   rO   r   rK  rO  rT  rW  rZ  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]]ri   str | UploadFiler0   r1   c                :     t                      j        |i | d S rU   )r8  rO   )rJ   r   ri   rs   s      r%   rO   zFormData.__init__  s'    
 	$)&)))))r$   c                   K   |                                  D ]4\  }}t          |t                    r|                                 d {V  5d S rU   )r   r   r?  r_  r  s      r%   r_  zFormData.close  sb      **,, 	$ 	$JC%,, $kkmm#######	$ 	$r$   )r   rc  ri   rd  r0   r1   r1  )r   r    r!   r   rO   r_  r<  r=  s   @r%   rb  rb    s[         * * * * * *$ $ $ $ $ $ $ $r$   rb  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 )0rG  z3
    An immutable, case-insensitive multidict.
    Nr8   Mapping[str, str] | Noneraw list[tuple[bytes, bytes]] | Noner-   MutableMapping[str, Any] | Noner0   r1   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 r9   )lowerencoder{   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".r8   )r   r   r   )rJ   r8   ri  r-   s       r%   rO   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 rU   r   rS   s    r%   ri  zHeaders.raw  s    DJr$   	list[str]c                $    d | j         D             S )Nc                >    g | ]\  }}|                     d           S rn  rD   r{   s      r%   r   z Headers.keys.<locals>.<listcomp>  s(    CCC*#u

9%%CCCr$   r   rS   s    r%   r   zHeaders.keys  s    CC
CCCCr$   c                $    d | j         D             S )Nc                >    g | ]\  }}|                     d           S rn  rv  r{   s      r%   r   z"Headers.values.<locals>.<listcomp>  s(    EEEJCY''EEEr$   r   rS   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 rn  rv  r{   s      r%   r   z!Headers.items.<locals>.<listcomp>  s9    ^^^ZS%I&&Y(?(?@^^^r$   r   rS   s    r%   r   zHeaders.items  s    ^^SWS]^^^^r$   rL   r   c                x    |                                                     d          fd| j        D             S )Nr9   c                L    g | ] \  }}|k    |                     d           !S rn  rv  )r|   r   r   get_header_keys      r%   r   z#Headers.getlist.<locals>.<listcomp>  s8    rrr1E:W_cqWqWq
!!),,WqWqWqr$   ro  rp  r   )rJ   rL   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)ri  )r  r   rS   s    r%   mutablecopyzHeaders.mutablecopy  s    $*QQQ-0000r$   c                    |                                                     d          }| j        D ]"\  }}||k    r|                    d          c S #t	          |          )Nr9   )ro  rp  r   rD   KeyErrorrJ   rL   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   rf   c                    |                                                     d          }| j        D ]\  }}||k    r dS dS )Nr9   TFr  r  s        r%   r   zHeaders.__contains__'  sO    ++I66(,
 	 	$J^++tt ,ur$   Iterator[Any]c                D    t          |                                           S rU   r  rS   s    r%   r   zHeaders.__iter__.  r  r$   r   c                *    t          | j                  S rU   )r   r   rS   s    r%   r   zHeaders.__len__1  r  r$   r   c                    t          |t                    sdS t          | j                  t          |j                  k    S r  )r   rG  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=)rs   r   dictr   r   ri  )rJ   r   as_dicts      r%   r   zHeaders.__repr__9  sh    ^,
tzz||$$w<<3t99$$ //7////00480000r$   )NNN)r8   rh  ri  rj  r-   rk  r0   r1   r0   rq  )r0   rs  )r0   ry  )rL   r   r0   rs  )r0   r  )rL   r   r0   r   r  )r0   r  r   r   r   )r   r    r!   r   rO   r   ri  r   r   r   r   r  r   r   r   r   r   r   r#   r$   r%   rG  rG    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$   rG  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  rL   r   rM   r0   r1   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.
        r9   rn   Nr   ro  rp  	enumerater   r%  reversed)	rJ   rL   rM   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`.
        r9   Nr  )rJ   rL   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   	TypeErrorrs   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  rs   r   r  r   )rJ   r   news      r%   __or__zMutableHeaders.__or__l  sY    %)) 	VT%/:RTTUUU  

5
r$   rq  c                    | j         S rU   r   rS   s    r%   ri  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.
        r9   )ro  rp  r  r   rD   r%  )rJ   rL   rM   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 rU   )r   )rJ   r   rL   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.
        r9   N)ro  rp  r   r%  )rJ   rL   rM   
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   )rC   r   )rJ   r  existings      r%   add_vary_headerzMutableHeaders.add_vary_header  s<    88F##99h-..DVr$   N)rL   r   rM   r   r0   r1   rL   r   r0   r1   )r   r  r0   r  r  )rL   r   rM   r   r0   r   )r   r  r0   r1   )r  r   r0   r1   )r   r    r!   r  r  r  r  r   ri  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  )r8  __setattr__)rJ   r  rs   s     r%   rO   zState.__init__  s-    =EHe,,,,,r$   rL   r   rM   r0   r1   c                    || j         |<   d S rU   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formatrs   r   )rJ   rL   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 rU   r  r   s     r%   __delattr__zState.__delattr__      Kr$   r   c                    | j         |         S rU   r  r   s     r%   r   zState.__getitem__  s    {3r$   c                    || j         |<   d S rU   r  r  s      r%   r  zState.__setitem__  r  r$   c                    | j         |= d S rU   r  r   s     r%   r  zState.__delitem__  r  r$   r   c                *    t          | j                  S rU   )r   r  rS   s    r%   r   zState.__iter__  r   r$   r   c                *    t          | j                  S rU   )r   r  rS   s    r%   r   zState.__len__  r   r$   rU   )r  r  r/  )rL   r   r0   r   r0  )rL   r   r0   r   )rL   r   rM   r   r0   r1   r  r   r   )r   r    r!   r   r"   rO   r  r  r  r   r  r  r   r   r<  r=  s   @r%   r  r    s           - - - - - - -
! ! ! !O O O O          ! ! ! !   ! ! ! !               r$   r  )0
__future__r   recollections.abcr   r   r   r   r   r	   r
   r   r   typingr   r   r   r   r   r   urllib.parser   r   r   r   starlette.concurrencyr   starlette.typesr   r   r&   r'   compile
IGNORECASErE   r*   r   r   r   r   r   r   r3  r?  rb  rG  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 D D D D 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$   