o
    OÊÆh/Z  ã                   @   sp  d dl Z d dlmZ d dlmZ d dlmZmZmZmZ d dl	m
Z
 d dlmZ G dd„ de jƒZe  d	¡Ze jd
dd�ZG dd„ dƒZG dd„ deƒZG dd„ dƒZG dd„ deƒZG dd„ de jeef ƒZG dd„ dee je jf ƒZG dd„ deeef ƒZG dd„ dƒZG dd„ deee jeef f ƒZG dd „ d e jeef ƒZG d!d"„ d"eƒZ G d#d$„ d$ƒZ!dS )%é    N)ÚSequence)Úshlex)ÚSplitResultÚ	parse_qslÚ	urlencodeÚurlsplit)Úrun_in_threadpool)ÚScopec                   @   s   e Zd ZU eed< eed< dS )ÚAddressÚhostÚportN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__Úint© r   r   úe/var/www/html/HyperOracle/crypto_trader/venv/lib/python3.10/site-packages/starlette/datastructures.pyr
   
   s   
 r
   Ú_KeyTypeÚ_CovariantValueTypeT)Ú	covariantc                	   @   s¬  e Zd Z		d0dedeje dejddfdd„Ze	de
fd	d
„ƒZe	defdd„ƒZe	defdd„ƒZe	defdd„ƒZe	defdd„ƒZe	defdd„ƒZe	dejdef fdd„ƒZe	dejdef fdd„ƒZe	dejdef fdd„ƒZe	deje fdd„ƒZe	defdd„ƒZdejdd fd d!„Zdejdd fd"d#„Zdejdd fd$d%„Zd&ejeeje f dd fd'd(„Zd)ejdefd*d+„Zdefd,d-„Zdefd.d/„Z dS )1ÚURLÚ NÚurlÚscopeÚ
componentsÚreturnc                 K   sF  |d ur‰|r
J dƒ‚|rJ dƒ‚|  dd¡}|  dd ¡}|  dd¡|d  }|  d	d
¡}d }|d D ]\}	}
|	dkrA|
 d¡} nq2|d urP|› d|› |› �}n.|d u rW|}n'|\}}dddddœ| }||krr|› d|› |› �}n|› d|› d|› |› �}|rˆ|d| ¡  7 }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Ú	root_pathr   ÚpathÚquery_stringó    Úheaderss   hostúlatin-1z://éP   i»  )r   ÚhttpsÚwsÚwssú:ú?z)Cannot set both "url" and "**components".r   )ÚgetÚdecoder   Úreplacer   ÚgeturlÚ_url)Úselfr   r   r   r   r    r"   r#   Úhost_headerÚkeyÚvaluer   r   Údefault_portr   r   r   Ú__init__   s:   
þ€
zURL.__init__c                 C   s   t | dƒst| jƒ| _| jS )NÚ_components)Úhasattrr   r1   r8   ©r2   r   r   r   r   ?   s   
zURL.componentsc                 C   ó   | j jS ©N)r   r   r:   r   r   r   r   E   ó   z
URL.schemec                 C   r;   r<   )r   Únetlocr:   r   r   r   r>   I   r=   z
URL.netlocc                 C   r;   r<   )r   r"   r:   r   r   r   r"   M   r=   zURL.pathc                 C   r;   r<   )r   Úqueryr:   r   r   r   r?   Q   r=   z	URL.queryc                 C   r;   r<   )r   Úfragmentr:   r   r   r   r@   U   r=   zURL.fragmentc                 C   r;   r<   )r   Úusernamer:   r   r   r   rA   Y   r=   zURL.usernamec                 C   r;   r<   )r   Úpasswordr:   r   r   r   rB   ]   r=   zURL.passwordc                 C   r;   r<   )r   Úhostnamer:   r   r   r   rC   a   r=   zURL.hostnamec                 C   r;   r<   )r   r   r:   r   r   r   r   e   r=   zURL.portc                 C   s
   | j dv S )N)r(   r*   )r   r:   r   r   r   Ú	is_securei   ó   
zURL.is_secureÚkwargsc           
      K   s  d|v sd|v sd|v sd|v rq|  dd ¡}|  d| j¡}|  d| j¡}|  d| j¡}|d u rH| j}| d¡\}}}|d dkrH| dd	¡d
 }|}|d urU|d|› �7 }|d urm|}|d urf|d|› �7 }|› d|› �}||d< | jjdi |¤Ž}	|  	|	 
¡ ¡S )NrA   rB   rC   r   ú@éÿÿÿÿú]r+   é   r   r>   r   )Úpopr   rA   rB   r>   Ú
rpartitionÚrsplitr   Ú_replaceÚ	__class__r0   )
r2   rF   rC   r   rA   rB   r>   Ú_Úuserpassr   r   r   r   r/   m   s0   zURL.replacec                 K   sB   t t| jdd�ƒ}| dd„ | ¡ D ƒ¡ t| ¡ ƒ}| j|d�S )NT©Úkeep_blank_valuesc                 S   ó   i | ]\}}t |ƒt |ƒ“qS r   ©r   ©Ú.0r4   r5   r   r   r   Ú
<dictcomp>�   ó    z,URL.include_query_params.<locals>.<dictcomp>©r?   )Ú	MultiDictr   r?   ÚupdateÚitemsr   Úmulti_itemsr/   )r2   rF   Úparamsr?   r   r   r   Úinclude_query_paramsŽ   s   zURL.include_query_paramsc                 K   s"   t dd„ | ¡ D ƒƒ}| j|d�S )Nc                 S   ó    g | ]\}}t |ƒt |ƒf‘qS r   rU   rV   r   r   r   Ú
<listcomp>•   ó     z,URL.replace_query_params.<locals>.<listcomp>rZ   )r   r]   r/   )r2   rF   r?   r   r   r   Úreplace_query_params”   ó   zURL.replace_query_paramsÚkeysc                 C   sP   t |tƒr|g}tt| jdd�ƒ}|D ]}| |d ¡ qt| ¡ ƒ}| j|d�S )NTrR   rZ   )	Ú
isinstancer   r[   r   r?   rK   r   r^   r/   )r2   rf   r_   r4   r?   r   r   r   Úremove_query_params˜   s   
zURL.remove_query_paramsÚotherc                 C   s   t | ƒt |ƒkS r<   rU   ©r2   ri   r   r   r   Ú__eq__£   ó   z
URL.__eq__c                 C   ó   | j S r<   )r1   r:   r   r   r   Ú__str__¦   ó   zURL.__str__c                 C   s6   t | ƒ}| jrt | jdd�ƒ}| jj› dt|ƒ› d�S )Nz********)rB   ú(ú))r   rB   r/   rO   r   Úrepr)r2   r   r   r   r   Ú__repr__©   s   zURL.__repr__)r   N)!r   r   r   r   ÚtypingÚOptionalr	   ÚAnyr7   Úpropertyr   r   r   r>   r"   r?   r@   ÚUnionrA   rB   rC   r   r   ÚboolrD   r/   r`   rd   r   rh   rk   rn   rs   r   r   r   r   r      sZ    ýþýü
û(!ÿ
þr   c                	   @   sd   e Zd ZdZddedededd fdd„Zddedededd	fd
d„Zdejee	f de	fdd„Z
d	S )ÚURLPathzŒ
    A URL path string that may also hold an associated protocol and/or host.
    Used by the routing to return `url_path_for` matches.
    r   r"   Úprotocolr   r   c                 C   s   |dv sJ ‚t  | |¡S )N)r   Ú	websocketr   )r   Ú__new__)Úclsr"   r{   r   r   r   r   r}   ¶   s   zURLPath.__new__Nc                 C   s   || _ || _d S r<   )r{   r   )r2   r"   r{   r   r   r   r   r7   º   s   
zURLPath.__init__Úbase_urlc                 C   sp   t |tƒr	t|ƒ}| jrdddœdddœdœ| j |j }n|j}| jp&|j}|j 	d¡t| ƒ }t|||d�S )	Nr(   r   )TFr*   r)   )r   r|   ú/)r   r>   r"   )
rg   r   r   r{   rD   r   r   r>   r"   Úrstrip)r2   r   r   r>   r"   r   r   r   Úmake_absolute_url¾   s   
þýýzURLPath.make_absolute_url)r   r   )r   r   r   Ú__doc__r   r}   r7   rt   rx   r   r‚   r   r   r   r   rz   °   s
     rz   c                   @   sH   e Zd ZdZdefdd„Zdefdd„Zdefdd	„Zdef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.
    r5   c                 C   s
   || _ d S r<   ©Ú_value©r2   r5   r   r   r   r7   Ô   ó   
zSecret.__init__r   c                 C   s   | j j}|› d�S )Nz('**********')©rO   r   )r2   Ú
class_namer   r   r   rs   ×   s   
zSecret.__repr__c                 C   rm   r<   r…   r:   r   r   r   rn   Û   ro   zSecret.__str__c                 C   ó
   t | jƒS r<   )ry   r†   r:   r   r   r   Ú__bool__Þ   rˆ   zSecret.__bool__N)
r   r   r   rƒ   r   r7   rs   rn   ry   rŒ   r   r   r   r   r„   Î   s    r„   c                   @   s†   e Zd Zdejeeje f fdd„Zdefdd„Z	dejee
f dejfdd	„Zdeje fd
d„Zdefdd„Zdefdd„ZdS )ÚCommaSeparatedStringsr5   c                 C   sD   t |tƒrt|dd�}d|_d|_dd„ |D ƒ| _d S t|ƒ| _d S )NT)Úposixú,c                 S   s   g | ]}|  ¡ ‘qS r   )Ústrip©rW   Úitemr   r   r   rb   è   ó    z2CommaSeparatedStrings.__init__.<locals>.<listcomp>)rg   r   r   Ú
whitespaceÚwhitespace_splitÚ_itemsÚlist)r2   r5   Úsplitterr   r   r   r7   ã   s   
zCommaSeparatedStrings.__init__r   c                 C   r‹   r<   )Úlenr–   r:   r   r   r   Ú__len__ì   rˆ   zCommaSeparatedStrings.__len__Úindexc                 C   ó
   | j | S r<   )r–   )r2   r›   r   r   r   Ú__getitem__ï   rˆ   z!CommaSeparatedStrings.__getitem__c                 C   r‹   r<   )Úiterr–   r:   r   r   r   Ú__iter__ò   rˆ   zCommaSeparatedStrings.__iter__c                 C   s&   | j j}dd„ | D ƒ}|› d|›d�S )Nc                 S   s   g | ]}|‘qS r   r   r‘   r   r   r   rb   ÷   s    z2CommaSeparatedStrings.__repr__.<locals>.<listcomp>rp   rq   r‰   ©r2   rŠ   r]   r   r   r   rs   õ   s   zCommaSeparatedStrings.__repr__c                 C   s   d  dd„ | D ƒ¡S )Nú, c                 s   s   � | ]}t |ƒV  qd S r<   )rr   r‘   r   r   r   Ú	<genexpr>û   s   € z0CommaSeparatedStrings.__str__.<locals>.<genexpr>)Újoinr:   r   r   r   rn   ú   ó   zCommaSeparatedStrings.__str__N)r   r   r   rt   rx   r   r   r7   r   rš   Úslicerv   r�   ÚIteratorrŸ   rs   rn   r   r   r   r   r�   â   s    	r�   c                   @   s@  e Zd ZU ejeef ed< dejdej	eef ej
ejeef  f dejddfdd„Zd	ejdeje fd
d„Zdeje fdd„Zdeje fdd„Zdejeef fdd„Zdejejeef  fdd„Zd	edefdd„Zd	ejdefdd„Zdeje fdd„Zdefdd„Zdejdefdd„Zdefdd „Z dS )!ÚImmutableMultiDictÚ_dictÚargsz1ImmutableMultiDict[_KeyType, _CovariantValueType]rF   r   Nc                 O   sæ   t |ƒdk s
J dƒ‚|r|d ng }|r t|ƒ ¡ t|ƒ ¡  }|s%g }nAt|dƒr;t tttf |¡}t| ¡ ƒ}n+t|dƒrRt tj	ttf |¡}t| 
¡ ƒ}nt tjtjtjtjf  |¡}t|ƒ}dd„ |D ƒ| _|| _d S )Né   úToo many arguments.r   r^   r]   c                 S   s   i | ]\}}||“qS r   r   ©rW   ÚkÚvr   r   r   rX   #  s    z/ImmutableMultiDict.__init__.<locals>.<dictcomp>)r™   r§   r^   r9   rt   Úcastr   r   r—   ÚMappingr]   ÚListÚTuplerv   r¨   Ú_list)r2   r©   rF   r5   r–   r   r   r   r7     s.   	

ÿÿ
ÿ
ÿ
zImmutableMultiDict.__init__r4   c                    s   ‡ fdd„| j D ƒS )Nc                    ó   g | ]
\}}|ˆ kr|‘qS r   r   ©rW   Úitem_keyÚ
item_value©r4   r   r   rb   '  ó    z.ImmutableMultiDict.getlist.<locals>.<listcomp>©r³   ©r2   r4   r   r¸   r   Úgetlist&  r¤   zImmutableMultiDict.getlistc                 C   ó
   | j  ¡ S r<   )r¨   rf   r:   r   r   r   rf   )  rˆ   zImmutableMultiDict.keysc                 C   r½   r<   )r¨   Úvaluesr:   r   r   r   r¾   ,  rˆ   zImmutableMultiDict.valuesc                 C   r½   r<   )r¨   r]   r:   r   r   r   r]   /  rˆ   zImmutableMultiDict.itemsc                 C   r‹   r<   ©r—   r³   r:   r   r   r   r^   2  rˆ   zImmutableMultiDict.multi_itemsc                 C   rœ   r<   ©r¨   r»   r   r   r   r�   5  rˆ   zImmutableMultiDict.__getitem__c                 C   s
   || j v S r<   rÀ   r»   r   r   r   Ú__contains__8  rˆ   zImmutableMultiDict.__contains__c                 C   ó   t |  ¡ ƒS r<   ©rž   rf   r:   r   r   r   rŸ   ;  ó   zImmutableMultiDict.__iter__c                 C   r‹   r<   )r™   r¨   r:   r   r   r   rš   >  rˆ   zImmutableMultiDict.__len__ri   c                 C   s$   t || jƒsdS t| jƒt|jƒkS ©NF)rg   rO   Úsortedr³   rj   r   r   r   rk   A  s   zImmutableMultiDict.__eq__c                 C   s    | j j}|  ¡ }|› d|›d�S ©Nrp   rq   )rO   r   r^   r    r   r   r   rs   F  ó   zImmutableMultiDict.__repr__)!r   r   r   rt   ÚDictr   r   r   rx   r°   ÚIterabler²   rv   r7   r±   r¼   ÚKeysViewrf   Ú
ValuesViewr¾   Ú	ItemsViewr]   r^   r�   ry   rÁ   r¦   rŸ   r   rš   rk   r   rs   r   r   r   r   r§   þ   s2   
 þÿþù
ø%r§   c                   @   s  e Zd Zdejdejddfdd„Zdejddfdd„Zddejd	ejdejfd
d„Zdejfdd„Z	dejdej
fdd„Zddd„Zddejd	ejdejfdd„Zdejdej
ddfdd„Zdejdejddfdd„Zdejd ejej
ejejejf  f dejddfdd„ZdS )r[   r4   r5   r   Nc                 C   s   |   ||g¡ d S r<   )Úsetlist©r2   r4   r5   r   r   r   Ú__setitem__M  s   zMultiDict.__setitem__c                    s"   ‡ fdd„| j D ƒ| _ | jˆ = d S )Nc                    ó    g | ]\}}|ˆ kr||f‘qS r   r   r¬   r¸   r   r   rb   Q  rc   z)MultiDict.__delitem__.<locals>.<listcomp>)r³   r¨   r»   r   r¸   r   Ú__delitem__P  re   zMultiDict.__delitem__Údefaultc                    s$   ‡ fdd„| j D ƒ| _ | j ˆ |¡S )Nc                    rÑ   r   r   r¬   r¸   r   r   rb   U  rc   z!MultiDict.pop.<locals>.<listcomp>)r³   r¨   rK   ©r2   r4   rÓ   r   r¸   r   rK   T  s   zMultiDict.popc                    s,   | j  ¡ \‰ }‡ fdd„| jD ƒ| _ˆ |fS )Nc                    rÑ   r   r   r¬   r¸   r   r   rb   Z  rc   z%MultiDict.popitem.<locals>.<listcomp>)r¨   Úpopitemr³   r‡   r   r¸   r   rÕ   X  s   zMultiDict.popitemc                    s"   ‡ fdd„| j D ƒ}|  ˆ ¡ |S )Nc                    r´   r   r   r¬   r¸   r   r   rb   ^  r¹   z%MultiDict.poplist.<locals>.<listcomp>)r³   rK   )r2   r4   r¾   r   r¸   r   Úpoplist]  s   
zMultiDict.poplistc                 C   s   | j  ¡  | j ¡  d S r<   )r¨   Úclearr³   r:   r   r   r   r×   b  s   
zMultiDict.clearc                 C   s*   || vr|| j |< | j ||f¡ | | S r<   )r¨   r³   ÚappendrÔ   r   r   r   Ú
setdefaultf  s   
zMultiDict.setdefaultr¾   c                    sR   |s
|   ˆ d ¡ d S ‡ fdd„| jD ƒ}|‡ fdd„|D ƒ | _|d | jˆ < d S )Nc                    rÑ   r   r   r¬   r¸   r   r   rb   q  rc   z%MultiDict.setlist.<locals>.<listcomp>c                    s   g | ]}ˆ |f‘qS r   r   )rW   r5   r¸   r   r   rb   r  r“   rH   )rK   r³   r¨   )r2   r4   r¾   Úexisting_itemsr   r¸   r   rÎ   m  s
   zMultiDict.setlistc                 C   s   | j  ||f¡ || j|< d S r<   )r³   rØ   r¨   rÏ   r   r   r   rØ   u  s   zMultiDict.appendr©   rF   c                    s@   t |i |¤Ž‰ ‡ fdd„| jD ƒ}|ˆ  ¡  | _| j ˆ ¡ d S )Nc                    s$   g | ]\}}|ˆ   ¡ vr||f‘qS r   )rf   r¬   ©r5   r   r   rb   ƒ  s   $ z$MultiDict.update.<locals>.<listcomp>)r[   r³   r^   r¨   r\   )r2   r©   rF   rÚ   r   rÛ   r   r\   y  s   	zMultiDict.updater<   ©r   N)r   r   r   rt   rv   rÐ   rÒ   rK   r²   rÕ   r±   rÖ   r×   rÙ   rÎ   rØ   rx   r°   r\   r   r   r   r   r[   L  s,    
þÿþùør[   c                       sr   e Zd ZdZdejdejejejej	ej	f  e
ef dej	ddf‡ fdd„Zde
fd	d
„Zde
fdd„Z‡  ZS )ÚQueryParamsz!
    An immutable multidict.
    r©   r§   rF   r   Nc                    s¸   t |ƒdk s
J dƒ‚|r|d ng }t|tƒr&tƒ jt|dd�fi |¤Ž n t|tƒr=tƒ jt| d¡dd�fi |¤Ž n	tƒ j|i |¤Ž dd„ | jD ƒ| _d	d
„ | j	 
¡ D ƒ| _	d S )Nrª   r«   r   TrR   r&   c                 S   ra   r   rU   r¬   r   r   r   rb   ¤  rc   z(QueryParams.__init__.<locals>.<listcomp>c                 S   rT   r   rU   r¬   r   r   r   rX   ¥  rY   z(QueryParams.__init__.<locals>.<dictcomp>)r™   rg   r   Úsuperr7   r   Úbytesr.   r³   r¨   r]   )r2   r©   rF   r5   ©rO   r   r   r7   �  s   

ÿÿzQueryParams.__init__c                 C   r‹   r<   )r   r³   r:   r   r   r   rn   §  rˆ   zQueryParams.__str__c                 C   s    | j j}t| ƒ}|› d|›d�S rÇ   )rO   r   r   )r2   rŠ   r#   r   r   r   rs   ª  rÈ   zQueryParams.__repr__)r   r   r   rƒ   rt   rx   r°   r±   r²   rv   r   rß   r7   rn   rs   Ú__classcell__r   r   rà   r   rÝ   ˆ  s$    üÿþ	÷
örÝ   c                   @   s²   e Zd ZdZddddœdejdeje deje ddd	df
d
d„Z	e
d	eje fdd„ƒZe
d	efdd„ƒZded	dfdd„Zdded	efdd„Zded	dfdd„Zddd„ZdS )Ú
UploadFilez@
    An uploaded file included as part of the request data.
    N)ÚsizeÚfilenamer%   Úfilerã   rä   r%   ztyping.Optional[Headers]r   c                C   s"   || _ || _|| _|ptƒ | _d S r<   )rä   rå   rã   ÚHeadersr%   )r2   rå   rã   rä   r%   r   r   r   r7   µ  s   zUploadFile.__init__c                 C   s   | j  dd ¡S )Nzcontent-type)r%   r-   r:   r   r   r   Úcontent_typeÂ  s   zUploadFile.content_typec                 C   s   t | jddƒ}| S )NÚ_rolledT)Úgetattrrå   )r2   Úrolled_to_diskr   r   r   Ú
_in_memoryÆ  s   zUploadFile._in_memoryÚdatac                 Ã   sL   �| j d ur|  j t|ƒ7  _ | jr| j |¡ d S t| jj|ƒI d H  d S r<   )rã   r™   rë   rå   Úwriter   )r2   rì   r   r   r   rí   Ì  s   €
zUploadFile.writerH   c                 Ã   s(   �| j r
| j |¡S t| jj|ƒI d H S r<   )rë   rå   Úreadr   )r2   rã   r   r   r   rî   Õ  s   €zUploadFile.readÚoffsetc                 Ã   s0   �| j r| j |¡ d S t| jj|ƒI d H  d S r<   )rë   rå   Úseekr   )r2   rï   r   r   r   rð   Ú  s   €zUploadFile.seekc                 Ã   s,   �| j r| j ¡  d S t| jjƒI d H  d S r<   )rë   rå   Úcloser   r:   r   r   r   rñ   à  s   €zUploadFile.close)rH   rÜ   )r   r   r   rƒ   rt   ÚBinaryIOru   r   r   r7   rw   rç   ry   rë   rß   rí   rî   rð   rñ   r   r   r   r   râ   °  s0    úþüûú
ù	râ   c                
       s|   e Zd ZdZdejd ejeejeef f ej	ej
eejeef f  f dejeef ddf‡ fdd„Zd
dd	„Z‡  ZS )ÚFormDatazN
    An immutable multidict, containing both file uploads and text input.
    r©   rF   r   Nc                    s   t ƒ j|i |¤Ž d S r<   )rÞ   r7   )r2   r©   rF   rà   r   r   r7   ì  s   	zFormData.__init__c                 Ã   s0   �|   ¡ D ]\}}t|tƒr| ¡ I d H  qd S r<   )r^   rg   râ   rñ   rÏ   r   r   r   rñ   ÷  s   €
€þzFormData.closerÜ   )r   r   r   rƒ   rt   rx   r°   r   râ   r±   r²   r7   rñ   rá   r   r   rà   r   ró   ç  s    þÿþùøró   c                
   @   s`  e Zd ZdZ			d$dejejeef  dejejej	e
e
f   dejejeejf  ddfdd„Zedejej	e
e
f  fd	d
„ƒZdeje fdd„Zdeje fdd„Zdejej	eef  fdd„Zdedeje fdd„Zd%dd„Zdedefdd„Zdejdefdd„Zdejej fdd„Zdefdd„Zdejdefd d!„Zdefd"d#„ZdS )&ræ   z3
    An immutable, case-insensitive multidict.
    Nr%   Úrawr   r   c                 C   sŽ   g | _ |d ur#|d u sJ dƒ‚|d u sJ dƒ‚dd„ | ¡ D ƒ| _ d S |d ur4|d u s/J dƒ‚|| _ d S |d urEt|d ƒ | _ |d< d S d S )Nz$Cannot set both "headers" and "raw".z&Cannot set both "headers" and "scope".c                 S   s(   g | ]\}}|  ¡  d ¡| d ¡f‘qS ©r&   )ÚlowerÚencoderV   r   r   r   rb     s    ÿÿz$Headers.__init__.<locals>.<listcomp>z"Cannot set both "raw" and "scope".r%   )r³   r]   r—   )r2   r%   rô   r   r   r   r   r7     s   þ
ýzHeaders.__init__c                 C   r‹   r<   r¿   r:   r   r   r   rô     rE   zHeaders.rawc                 C   ó   dd„ | j D ƒS )Nc                 S   s   g | ]	\}}|  d ¡‘qS rõ   ©r.   rV   r   r   r   rb     ó    z Headers.keys.<locals>.<listcomp>rº   r:   r   r   r   rf     rl   zHeaders.keysc                 C   rø   )Nc                 S   s   g | ]	\}}|  d ¡‘qS rõ   rù   rV   r   r   r   rb      rú   z"Headers.values.<locals>.<listcomp>rº   r:   r   r   r   r¾     rl   zHeaders.valuesc                 C   rø   )Nc                 S   s$   g | ]\}}|  d ¡|  d ¡f‘qS rõ   rù   rV   r   r   r   rb   #  s    ÿÿz!Headers.items.<locals>.<listcomp>rº   r:   r   r   r   r]   "  s   þzHeaders.itemsr4   c                    s"   |  ¡  d¡‰ ‡ fdd„| jD ƒS )Nr&   c                    s"   g | ]\}}|ˆ kr|  d ¡‘qS rõ   rù   rµ   ©Úget_header_keyr   r   rb   *  s
    þz#Headers.getlist.<locals>.<listcomp>©rö   r÷   r³   r»   r   rû   r   r¼   (  s   
þzHeaders.getlistÚMutableHeadersc                 C   s   t | jd d … d�S )N)rô   )rþ   r³   r:   r   r   r   Úmutablecopy0  r¤   zHeaders.mutablecopyc                 C   s<   |  ¡  d¡}| jD ]\}}||kr| d¡  S q
t|ƒ‚)Nr&   )rö   r÷   r³   r.   ÚKeyError©r2   r4   rü   Ú
header_keyÚheader_valuer   r   r   r�   3  s   ÿzHeaders.__getitem__c                 C   s0   |  ¡  d¡}| jD ]\}}||kr dS q
dS )Nr&   TFrý   r  r   r   r   rÁ   :  s   ÿzHeaders.__contains__c                 C   rÂ   r<   rÃ   r:   r   r   r   rŸ   A  rÄ   zHeaders.__iter__c                 C   r‹   r<   )r™   r³   r:   r   r   r   rš   D  rˆ   zHeaders.__len__ri   c                 C   s"   t |tƒsdS t| jƒt|jƒkS rÅ   )rg   ræ   rÆ   r³   rj   r   r   r   rk   G  s   
zHeaders.__eq__c                 C   sF   | j j}t|  ¡ ƒ}t|ƒt| ƒkr|› d|›d�S |› d| j›d�S )Nrp   rq   z(raw=)rO   r   Údictr]   r™   rô   )r2   rŠ   Úas_dictr   r   r   rs   L  s
   zHeaders.__repr__)NNN)r   rþ   )r   r   r   rƒ   rt   ru   r°   r   r±   r²   rß   ÚMutableMappingrv   r7   rw   rô   rf   r¾   r]   r¼   rÿ   r�   ry   rÁ   r¦   rŸ   r   rš   rk   rs   r   r   r   r   ræ   ý  s6    üþýü
û 
ræ   c                   @   sè   e Zd Zdededdfdd„Zdeddfdd„Zd	ejeef dd fd
d„Zd	ejeef dd fdd„Z	e
dejejeef  fdd„ƒZdededefdd„Zd	ejeef ddfdd„Zdededdfdd„Zdeddfdd„ZdS )rþ   r4   r5   r   Nc           	      C   s–   |  ¡  d¡}| d¡}g }t| jƒD ]\}\}}||kr"| |¡ qt|dd… ƒD ]}| j|= q+|rA|d }||f| j|< dS | j ||f¡ dS )zs
        Set the header `key` to `value`, removing any duplicate entries.
        Retains insertion order.
        r&   rJ   Nr   ©rö   r÷   Ú	enumerater³   rØ   Úreversed)	r2   r4   r5   Úset_keyÚ	set_valueÚfound_indexesÚidxr¶   r·   r   r   r   rÐ   U  s   

€
zMutableHeaders.__setitem__c                 C   sV   |  ¡  d¡}g }t| jƒD ]\}\}}||kr| |¡ qt|ƒD ]}| j|= q"dS )z*
        Remove the header `key`.
        r&   Nr  )r2   r4   Údel_keyÚpop_indexesr  r¶   r·   r   r   r   rÒ   k  s   
€
ÿzMutableHeaders.__delitem__ri   c                 C   s,   t |tjƒstd|jj› �ƒ‚|  |¡ | S ©NzExpected a mapping but got )rg   rt   r°   Ú	TypeErrorrO   r   r\   rj   r   r   r   Ú__ior__y  s   
zMutableHeaders.__ior__c                 C   s4   t |tjƒstd|jj› �ƒ‚|  ¡ }| |¡ |S r  )rg   rt   r°   r  rO   r   rÿ   r\   )r2   ri   Únewr   r   r   Ú__or__  s
   
zMutableHeaders.__or__c                 C   rm   r<   rº   r:   r   r   r   rô   †  s   zMutableHeaders.rawc                 C   sZ   |  ¡  d¡}| d¡}t| jƒD ]\}\}}||kr"| d¡  S q| j ||f¡ |S )zo
        If the header `key` does not exist, then set it to `value`.
        Returns the header value.
        r&   )rö   r÷   r  r³   r.   rØ   )r2   r4   r5   r
  r  r  r¶   r·   r   r   r   rÙ   Š  s   
ÿzMutableHeaders.setdefaultc                 C   s   |  ¡ D ]\}}|| |< qd S r<   )r]   )r2   ri   r4   Úvalr   r   r   r\   ˜  s   
ÿzMutableHeaders.updatec                 C   s,   |  ¡  d¡}| d¡}| j ||f¡ dS )zD
        Append a header, preserving any duplicate entries.
        r&   N)rö   r÷   r³   rØ   )r2   r4   r5   Ú
append_keyÚappend_valuer   r   r   rØ   œ  s   
zMutableHeaders.appendÚvaryc                 C   s,   |   d¡}|d urd ||g¡}|| d< d S )Nr  r¡   )r-   r£   )r2   r  Úexistingr   r   r   Úadd_vary_header¤  s   
zMutableHeaders.add_vary_header)r   r   r   r   rÐ   rÒ   rt   r°   r  r  rw   r±   r²   rß   rô   rÙ   r\   rØ   r  r   r   r   r   rþ   T  s     rþ   c                       s”   e Zd ZU dZejeejf ed< ddej	ejeejf  f‡ fdd„Z
dejdejd	dfd
d„Zdejd	ejfdd„Zdejd	dfdd„Z‡  ZS )ÚStatezm
    An object that can be used to store arbitrary state.

    Used for `request.state` and `app.state`.
    Ú_stateNÚstatec                    s   |d u ri }t ƒ  d|¡ d S )Nr  )rÞ   Ú__setattr__)r2   r  rà   r   r   r7   ´  s   zState.__init__r4   r5   r   c                 C   s   || j |< d S r<   ©r  rÏ   r   r   r   r  ¹  s   zState.__setattr__c                 C   s4   z| j | W S  ty   d}t| | jj|¡ƒ‚w )Nz!'{}' object has no attribute '{}')r  r   ÚAttributeErrorÚformatrO   r   )r2   r4   Úmessager   r   r   Ú__getattr__¼  s   þzState.__getattr__c                 C   s   | j |= d S r<   r  r»   r   r   r   Ú__delattr__Ã  rÄ   zState.__delattr__r<   )r   r   r   rƒ   rt   rÉ   r   rv   r   ru   r7   r  r#  r$  rá   r   r   rà   r   r  «  s   
 &r  )"rt   Úcollections.abcr   r   Úurllib.parser   r   r   r   Ústarlette.concurrencyr   Ústarlette.typesr	   Ú
NamedTupler
   ÚTypeVarr   r   r   r   rz   r„   r�   r°   r§   rv   r[   rÝ   râ   rx   ró   ræ   rþ   r  r   r   r   r   Ú<module>   s,    
 N<("7WW