
    E2iW                       d dl mZ d dlmZmZmZmZmZmZm	Z	m
Z
 d dlmZ d dlmZmZmZmZmZ 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 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 )'    )annotations)	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__     W/var/www/html/pixcura-vrs/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
componentsr   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  )r3   httpswswss:?z)Cannot set both "url" and "**components".r*   r"   )getdecoder)   replacer.   geturl_url)selfr+   r,   r.   r2   r4   r5   r6   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   rC   rK   rD   s    r$   r.   zURL.componentsG   s/    t]++ 	3'	22Dr#   c                    | j         j        S N)r.   r2   rM   s    r$   r2   z
URL.schemeM       %%r#   c                    | j         j        S rO   )r.   netlocrM   s    r$   rR   z
URL.netlocQ   rP   r#   c                    | j         j        S rO   )r.   r5   rM   s    r$   r5   zURL.pathU       ##r#   c                    | j         j        S rO   )r.   queryrM   s    r$   rV   z	URL.queryY   s    $$r#   c                    | j         j        S rO   )r.   fragmentrM   s    r$   rX   zURL.fragment]       ''r#   
None | strc                    | j         j        S rO   )r.   usernamerM   s    r$   r\   zURL.usernamea   rY   r#   c                    | j         j        S rO   )r.   passwordrM   s    r$   r^   zURL.passworde   rY   r#   c                    | j         j        S rO   )r.   hostnamerM   s    r$   r`   zURL.hostnamei   rY   r#   
int | Nonec                    | j         j        S rO   )r.   r   rM   s    r$   r   zURL.portm   rT   r#   boolc                    | j         dv S )N)r:   r<   )r2   rM   s    r$   	is_securezURL.is_secureq   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^   r`   r   @]r=      r   rR   r"   )popr   r\   r^   rR   
rpartitionrsplitr.   _replace	__class__rB   )
rD   rf   r`   r   r\   r^   rR   _userpassr.   s
             r$   rA   zURL.replaceu   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   .0rF   rG   s      r$   
<dictcomp>z,URL.include_query_params.<locals>.<dictcomp>   s*    MMM
Us3xxUMMMr#   rV   )	MultiDictr   rV   updateitemsr   multi_itemsrA   )rD   rf   paramsrV   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"   rw   rx   s      r$   
<listcomp>z,URL.replace_query_params.<locals>.<listcomp>   s-    SSSjc5CHHc%jj1SSSr#   r{   )r   r~   rA   )rD   rf   rV   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 )NTrt   r{   )	
isinstancer   r|   r   rV   rl   r   r   rA   )rD   r   r   rF   rV   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 rO   rw   rD   r   s     r$   __eq__z
URL.__eq__   s    4yyCJJ&&r#   c                    | j         S rO   )rC   rM   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^   rA   rp   r   repr)rD   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/   rZ   )r/   ra   r/   rc   )rf   r   r/   r)   )r   r   r/   r)   r   r   r/   rc   )r   r   r    rI   propertyr.   r2   rR   r5   rV   rX   r\   r^   r`   r   re   rA   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 rO   )r   r   )rD   r5   r   r   s       r$   rI   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   rR   r5   )
r   r   r)   r   re   r2   r   rR   r5   rstrip)rD   r   r2   rR   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   rI   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.
    rG   r   c                    || _         d S rO   _value)rD   rG   s     r$   rI   zSecret.__init__   s    r#   r/   c                $    | j         j        }| dS )Nz('**********')rp   r   )rD   
class_names     r$   r   zSecret.__repr__   s    ^,
,,,,r#   c                    | j         S rO   r   rM   s    r$   r   zSecret.__str__   s
    {r#   rc   c                *    t          | j                  S rO   )rc   r   rM   s    r$   __bool__zSecret.__bool__       DK   r#   N)rG   r   r   r   )r   r   r    r   rI   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 )CommaSeparatedStringsrG   r   c                    t          |t                    r2t          |d          }d|_        d|_        d |D             | _        d S t          |          | _        d S )NT)posix,c                6    g | ]}|                                 S r"   )stripry   items     r$   r   z2CommaSeparatedStrings.__init__.<locals>.<listcomp>   s     ===D4::<<===r#   )r   r   r   
whitespacewhitespace_split_itemslist)rD   rG   splitters      r$   rI   zCommaSeparatedStrings.__init__   s`    eS!! 	&U$///H"%H(,H%==H===DKKKu++DKKKr#   r/   r   c                *    t          | j                  S rO   )lenr   rM   s    r$   __len__zCommaSeparatedStrings.__len__   s    4;r#   indexint | slicer   c                    | j         |         S rO   )r   )rD   r   s     r$   __getitem__z!CommaSeparatedStrings.__getitem__   s    {5!!r#   Iterator[str]c                *    t          | j                  S rO   )iterr   rM   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   rD   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 rO   )r   r   s     r$   	<genexpr>z0CommaSeparatedStrings.__str__.<locals>.<genexpr>   s(      55d555555r#   )joinrM   s    r$   r   zCommaSeparatedStrings.__str__   s#    yy55555555r#   N)rG   r   r/   r   )r   r   r/   r   )r/   r   r   )	r   r   r    rI   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]]rf   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"   ry   kvs      r$   rz   z/ImmutableMultiDict.__init__.<locals>.<dictcomp>  s    ...tq!a...r#   )r   r   r   rL   r   r%   r&   r   r   r~   r   _list)rD   r   rf   rG   r   s        r$   rI   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#   rF   list[_CovariantValueType]c                *    fd| j         D             S )Nc                &    g | ]\  }}|k    |S r"   r"   )ry   item_key
item_valuerF   s      r$   r   z.ImmutableMultiDict.getlist.<locals>.<listcomp>  s$    UUU3xXQT__
___r#   r   rD   rF   s    `r$   getlistzImmutableMultiDict.getlist  s    UUUUtzUUUUr#   KeysView[_KeyType]c                4    | j                                         S rO   )r   r   rM   s    r$   r   zImmutableMultiDict.keys!  s    z   r#   ValuesView[_CovariantValueType]c                4    | j                                         S rO   )r   valuesrM   s    r$   r   zImmutableMultiDict.values$  s    z  """r#   (ItemsView[_KeyType, _CovariantValueType]c                4    | j                                         S rO   )r   r~   rM   s    r$   r~   zImmutableMultiDict.items'  s    z!!!r#   *list[tuple[_KeyType, _CovariantValueType]]c                *    t          | j                  S rO   r   r   rM   s    r$   r   zImmutableMultiDict.multi_items*  s    DJr#   r%   r&   c                    | j         |         S rO   r   r   s     r$   r   zImmutableMultiDict.__getitem__-  s    z#r#   rc   c                    || j         v S rO   r   r   s     r$   __contains__zImmutableMultiDict.__contains__0  s    dj  r#   Iterator[_KeyType]c                D    t          |                                           S rO   r   r   rM   s    r$   r   zImmutableMultiDict.__iter__3      DIIKK   r#   r   c                *    t          | j                  S rO   )r   r   rM   s    r$   r   zImmutableMultiDict.__len__6      4:r#   r   c                    t          || j                  sdS t          | j                  t          |j                  k    S NF)r   rp   sortedr   r   s     r$   r   zImmutableMultiDict.__eq__9  s:    %00 	5dj!!VEK%8%888r#   r   c                R    | j         j        }|                                 }| d|dS Nr   r   )rp   r   r   r   s      r$   r   zImmutableMultiDict.__repr__>  s4    ^,
  ""))u))))r#   N)r   r   rf   r   r/   r0   )rF   r   r/   r   )r/   r   )r/   r   )r/   r   )r/   r   )rF   r%   r/   r&   rF   r   r/   rc   )r/   r   r   r   r   )r   r   r    r!   rI   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|   rF   r   rG   r/   r0   c                4    |                      ||g           d S rO   )setlistrD   rF   rG   s      r$   __setitem__zMultiDict.__setitem__E  s    S5'"""""r#   c                H    fd| j         D             | _         | j        = d S )Nc                *    g | ]\  }}|k    ||fS r"   r"   ry   r   r   rF   s      r$   r   z)MultiDict.__delitem__.<locals>.<listcomp>I  &    @@@AqCxxq!fxxxr#   )r   r   r   s    `r$   __delitem__zMultiDict.__delitem__H  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>M  r  r#   )r   r   rl   rD   rF   r  s    ` r$   rl   zMultiDict.popL  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>R  r  r#   )r   popitemr   )rD   rG   rF   s     @r$   r  zMultiDict.popitemP  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>V  s"    7771a3hh!hhhr#   )r   rl   )rD   rF   r   s    ` r$   poplistzMultiDict.poplistU  s2    7777
777r#   c                j    | j                                          | j                                         d S rO   )r   clearr   rM   s    r$   r  zMultiDict.clearZ  s0    

r#   c                f    || vr&|| j         |<   | j                            ||f           | |         S rO   )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>i  s&    JJJ!Qcq!fr#   c                    g | ]}|fS r"   r"   )ry   rG   rF   s     r$   r   z%MultiDict.setlist.<locals>.<listcomp>j  s    *L*L*LEC<*L*L*Lr#   ri   )rl   r   r   )rD   rF   r   existing_itemss    `  r$   r  zMultiDict.setliste  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 rO   )r   r  r   r	  s      r$   r  zMultiDict.appendm  s+    
3,'''
3r#   r   5MultiDict | Mapping[Any, Any] | list[tuple[Any, Any]]rf   c                    t          |i |fd| j        D             }|                                z   | _        | j                                       d S )Nc                J    g | ]\  }}|                                 v||f S r"   )r   )ry   r   r   rG   s      r$   r   z$MultiDict.update.<locals>.<listcomp>w  s3    SSSVaQejjll=R=R1a&=R=R=Rr#   )r|   r   r   r   r}   )rD   r   rf   r$  rG   s       @r$   r}   zMultiDict.updateq  sf    
 4*6**SSSStzSSS#e&7&7&9&99

%     r#   rF   r   rG   r   r/   r0   rF   r   r/   r0   rO   )rF   r   r  r   r/   r   )r/   r  )rF   r   r/   r  r/   r0   )rF   r   r   r  r/   r0   )r   r&  rf   r   r/   r0   )r   r   r    r
  r  rl   r  r  r  r   r  r  r}   r"   r#   r$   r|   r|   D  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 | bytesrf   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   Trt   r8   c                P    g | ]#\  }}t          |          t          |          f$S r"   rw   r   s      r$   r   z(QueryParams.__init__.<locals>.<listcomp>  s-    >>>41as1vvs1vv&>>>r#   c                N    i | ]"\  }}t          |          t          |          #S r"   rw   r   s      r$   rz   z(QueryParams.__init__.<locals>.<dictcomp>  s*    DDDAc!ffc!ffDDDr#   )r   r   r   superrI   r   bytesr@   r   r   r~   )rD   r   rf   rG   rp   s       r$   rI   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 rO   )r   r   rM   s    r$   r   zQueryParams.__str__  s    $$$r#   c                H    | j         j        }t          |           }| d|dS r  )rp   r   r   )rD   r   r6   s      r$   r   zQueryParams.__repr__  s.    ^,
4yy00|0000r#   )r   r.  rf   r   r/   r0   r   )r   r   r    r   rI   r   r   __classcell__rp   s   @r$   r-  r-  |  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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:  ra   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)rD   r<  r:  r;  r7   s        r$   rI   zUploadFile.__init__  sG     !		+')) %TYQ??r#   c                8    | j                             dd           S )Nzcontent-type)r7   r?   rM   s    r$   content_typezUploadFile.content_type  s    |555r#   rc   c                4    t          | j        dd          }| S )N_rolledT)rB  r<  )rD   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)rI  r<  tellrC  rc   )rD   rJ  future_sizes      r$   
_will_rollzUploadFile._will_roll  sM     	4 inn&&49=9KVtK$"44555QVVr#   datar3  c                   K   t          |          }| j        | xj        |z  c_        |                     |          r"t          | j        j        |           d {V  d S | j                            |           d S rO   )r   r:  rN  r   r<  write)rD   rO  new_data_lens      r$   rQ  zUploadFile.write  s      4yy9 II%II??<(( 	"#DIOT:::::::::::IOOD!!!!!r#   ri   c                   K   | j         r| j                            |          S t          | j        j        |           d {V S rO   )rI  r<  readr   )rD   r:  s     r$   rT  zUploadFile.read  sJ      ? 	(9>>$'''&ty~t<<<<<<<<<r#   offsetc                   K   | j         r| j                            |           d S t          | j        j        |           d {V  d S rO   )rI  r<  seekr   )rD   rU  s     r$   rW  zUploadFile.seek  sV      ? 	<INN6"""""#DINF;;;;;;;;;;;r#   c                   K   | j         r| j                                         d S t          | j        j                   d {V  d S rO   )rI  r<  closer   rM   s    r$   rY  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   )rp   r   r;  r:  r7   rM   s    r$   r   zUploadFile.__repr__  s6    .)uuT]uuTYuudhdpuuuur#   )
r<  r   r:  ra   r;  r=  r7   r>  r/   r0   )r/   r=  r   )rJ  r   r/   rc   )rO  r3  r/   r0   )ri   )r:  r   r/   r3  )rU  r   r/   r0   r+  r   )r   r   r    r   rI   r   rE  rI  rN  rQ  rT  rW  rY  r   r"   r#   r$   r9  r9    s          #"&@ @ @ @ @ @" 6 6 6 X6 " " " X"
W W W W" " " "= = = = =
< < < <5 5 5 5v v v v v vr#   r9  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]]rf   str | UploadFiler/   r0   c                :     t                      j        |i | d S rO   )r2  rI   )rD   r   rf   rp   s      r$   rI   zFormData.__init__  s'    
 	$)&)))))r#   c                   K   |                                  D ]4\  }}t          |t                    r|                                 d {V  5d S rO   )r   r   r9  rY  r	  s      r$   rY  zFormData.close  sb      **,, 	$ 	$JC%,, $kkmm#######	$ 	$r#   )r   r]  rf   r^  r/   r0   r+  )r   r   r    r   rI   rY  r6  r7  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 )0rA  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encoderx   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   )rD   r7   rc  r,   s       r$   rI   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 rO   r   rM   s    r$   rc  zHeaders.raw  s    DJr#   	list[str]c                $    d | j         D             S )Nc                >    g | ]\  }}|                     d           S rh  r@   rx   s      r$   r   z Headers.keys.<locals>.<listcomp>  s(    CCC*#u

9%%CCCr#   r   rM   s    r$   r   zHeaders.keys  s    CC
CCCCr#   c                $    d | j         D             S )Nc                >    g | ]\  }}|                     d           S rh  rp  rx   s      r$   r   z"Headers.values.<locals>.<listcomp>  s(    EEEJCY''EEEr#   r   rM   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 rh  rp  rx   s      r$   r   z!Headers.items.<locals>.<listcomp>  s9    ^^^ZS%I&&Y(?(?@^^^r#   r   rM   s    r$   r~   zHeaders.items  s    ^^SWS]^^^^r#   rF   r   c                x    |                                                     d          fd| j        D             S )Nr8   c                L    g | ] \  }}|k    |                     d           !S rh  rp  )ry   r   r   get_header_keys      r$   r   z#Headers.getlist.<locals>.<listcomp>  s8    rrr1E:W_cqWqWq
!!),,WqWqWqr#   ri  rj  r   )rD   rF   rx  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)rc  )rz  r   rM   s    r$   mutablecopyzHeaders.mutablecopy  s    $*QQQ-0000r#   c                    |                                                     d          }| j        D ]"\  }}||k    r|                    d          c S #t	          |          )Nr8   )ri  rj  r   r@   KeyErrorrD   rF   rx  
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   rc   c                    |                                                     d          }| j        D ]\  }}||k    r dS dS )Nr8   TFry  r  s        r$   r   zHeaders.__contains__)  sO    ++I66(,
 	 	$J^++tt ,ur#   Iterator[Any]c                D    t          |                                           S rO   r   rM   s    r$   r   zHeaders.__iter__0  r   r#   r   c                *    t          | j                  S rO   )r   r   rM   s    r$   r   zHeaders.__len__3  r   r#   r   c                    t          |t                    sdS t          | j                  t          |j                  k    S r  )r   rA  r  r   r   s     r$   r   zHeaders.__eq__6  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=)rp   r   dictr~   r   rc  )rD   r   as_dicts      r$   r   zHeaders.__repr__;  sh    ^,
tzz||$$w<<3t99$$ //7////00480000r#   )NNN)r7   rb  rc  rd  r,   re  r/   r0   r/   rk  )r/   rm  )r/   rs  )rF   r   r/   rm  )r/   rz  )rF   r   r/   r   r  )r/   r  r   r   r   )r   r   r    r   rI   r   rc  r   r   r~   r   r|  r   r   r   r   r   r   r"   r#   r$   rA  rA    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#   rA  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 )rz  rF   r   rG   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   rk   Nr   ri  rj  	enumerater   r  reversed)	rD   rF   rG   set_key	set_valuefound_indexesidxr   r   s	            r$   r
  zMutableHeaders.__setitem__D  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  )rD   rF   del_keypop_indexesr  r   r   s          r$   r  zMutableHeaders.__delitem__Z  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   	TypeErrorrp   r   r}   r   s     r$   __ior__zMutableHeaders.__ior__h  sH    %)) 	VT%/:RTTUUUEr#   c                    t          |t                    st          d|j        j                   |                                 }|                    |           |S r  )r   r   r  rp   r   r|  r}   )rD   r   news      r$   __or__zMutableHeaders.__or__n  sY    %)) 	VT%/:RTTUUU  

5
r#   rk  c                    | j         S rO   r   rM   s    r$   rc  zMutableHeaders.rawu  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   )ri  rj  r  r   r@   r  )rD   rF   rG   r  r  r  r   r   s           r$   r   zMutableHeaders.setdefaulty  s    
 ))++$$Y//LL++	+4TZ+@+@ 	4 	4'C'(J7""!((33333 #
7I.///r#   c                D    |                                 D ]
\  }}|| |<   d S rO   )r~   )rD   r   rF   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)ri  rj  r   r  )rD   rF   rG   
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   )rD   r  existings      r$   add_vary_headerzMutableHeaders.add_vary_header  s<    88F##99h-..DVr#   N)rF   r   rG   r   r/   r0   )rF   r   r/   r0   )r   r  r/   rz  r  )rF   r   rG   r   r/   r   )r   r  r/   r0   )r  r   r/   r0   )r   r   r    r
  r  r  r  r   rc  r   r}   r  r  r"   r#   r$   rz  rz  C  s        4 4 4 4,                 X      6 6 6 6     r#   rz  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, Any]_stateNstatedict[str, Any] | Nonec                T    |i }t                                          d|           d S )Nr  )r2  __setattr__)rD   r  rp   s     r$   rI   zState.__init__  s-    =EHe,,,,,r#   rF   r   rG   r/   r0   c                    || j         |<   d S rO   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  r~  AttributeErrorformatrp   r   )rD   rF   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 rO   r  r   s     r$   __delattr__zState.__delattr__  s    Kr#   rO   )r  r  r)  )rF   r   r/   r   r*  )
r   r   r    r   r!   rI   r  r  r  r6  r7  s   @r$   r  r    s           - - - - - - -
! ! ! !O O O O       r#   r  N)+
__future__r   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&   r)   r   r   r   r   r   r|   r-  r9  r\  rA  rz  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                    E D D D D D D D D D D D 3 3 3 3 3 3 ! ! ! ! ! !    j   
 7: g3tDDD 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#   