o
    .j)                     @  sb  d Z ddlmZ ddlZddlZddlmZmZ zddlm	Z	 e	s(ddl
mZ nddlmZ W n eyH   ddlmZ ed	d
d)ddZY nw ddlmZ d*ddZedZejroddlmZ edddZedddZn
edZedZG dd deejeef ZG dd  d eZG d!d" d"ejZG d#d$ d$eZG d%d& d&eZG d'd( d(Z dS )+zO
requests.structures
~~~~~~~~~~~~~~~~~~~

Data structures that power Requests.
    )annotationsN)MappingMutableMapping   )HAS_LEGACY_URLLIB3)_lower_wrapper)	lru_cache@   )maxsizestringstrreturnc                 C  s   |   S )backport)lower)r    r   H/home/thesage/.local/lib/python3.10/site-packages/niquests/structures.pyr      s   r   )InvalidHeaderkey
typing.Anyvaluetuple[bytes | str, bytes | str]c                 C  s|   t | ttfrt |ttfr| |fS t |ttfrt|}t | ttfdu s3|d ur:t |ttfdu r:td|  | |fS )NFzIllegal header name or value )
isinstancebytesr   floatintr   )r   r   r   r   r   _ensure_str_or_bytes#   s   ,r   _T)TypeVar_KTzstr | bytesdefault_VTc                      sj  e Zd ZdZdIdJddZdKddZdLddZejdMddZ	ejdNddZ	dIdO fddZ	dJddZ
dPddZdQddZdRd d!ZdRd"d#ZdSd%d&ZdTd(d)ZdUd+d,ZdVd.d/ZejrejdLd0d1ZejdWd2d1ZejdXd4d1ZejdMd5d6ZejdWd7d6ZdYd9d:ZdZd<d=Zd[d?d@Zejd\dDdEZejd]dGdEZejd^dHdEZ  ZS   ZS )_CaseInsensitiveDicta  A case-insensitive ``dict``-like object.

    Implements all methods and operations of
    ``MutableMapping`` as well as dict's ``copy``. Also
    provides ``lower_items``.

    All keys are expected to be strings. The structure remembers the
    case of the last key to be set, and ``iter(instance)``,
    ``keys()``, ``items()``, ``iterkeys()``, and ``iteritems()``
    will contain case-sensitive keys. However, querying and contains
    testing is case insensitive::

        cid = CaseInsensitiveDict()
        cid['Accept'] = 'application/json'
        cid['aCCEPT'] == 'application/json'  # True
        list(cid) == ['Accept']  # True

    For example, ``headers['content-encoding']`` will return the
    value of a ``'Content-Encoding'`` response header, regardless
    of how the header name was originally stored.

    If the constructor, ``.update``, or equality comparison
    operations are given keys that have equal ``.lower()``s, the
    behavior is undefined.
    Nr   Nonec                 K  s   i | _ |d u r|sd S |d u ri }t|dr|j | _ d S t|tr+|j  | _ d S |s/|rOt|dr?| j|fi | d S | jdd |D fi | d S d S )Ngetlistitemsc                 S  s   i | ]\}}||qS r   r   ).0kvr   r   r   
<dictcomp>k   s    z0CaseInsensitiveDict.__init__.<locals>.<dictcomp>)_storehasattr
_containercopyr   r"   update)selfdatakwargsr   r   r   __init__Z   s$   



zCaseInsensitiveDict.__init__r   r   r   r!   c                 C  s   t ||| jt|< d S N)r   r*   r   r/   r   r   r   r   r   __setitem__o   s   zCaseInsensitiveDict.__setitem__c              	   C  s   | j t| }t|dkr|d S zt|d tr#d|dd  W S d|dd  W S  tyC   ddd |dd  D  Y S w )N   r   , s   , c                 s  &    | ]}t |tr| n|V  qd S r3   r   r   decoder&   r(   r   r   r   	<genexpr>|      $ z2CaseInsensitiveDict.__getitem__.<locals>.<genexpr>)r*   r   lenr   r   join	TypeError)r/   r   er   r   r   __getitem__t   s   6 zCaseInsensitiveDict.__getitem__
_VT | Nonec                 C     d S r3   r   r/   r   r   r   r   get~      zCaseInsensitiveDict.getr    _VT | _Tc                 C  rD   r3   r   r/   r   r    r   r   r   rF      rG   _VT | _T | Nonec                   s   t  j||dS )Nr   )superrF   rI   	__class__r   r   rF         c                 C  s   | j t|= d S r3   )r*   r   rE   r   r   r   __delitem__   rN   zCaseInsensitiveDict.__delitem__typing.Iterator[_KT]c                 c  s"    | j D ]
}| j | d V  qd S )Nr   )r*   )r/   key_cir   r   r   __iter__   s   
zCaseInsensitiveDict.__iter__r   c                 C  s
   t | jS r3   )r>   r*   r/   r   r   r   __len__   s   
zCaseInsensitiveDict.__len__ typing.Iterator[tuple[_KT, _VT]]c                 C  s   dd | j  D S )z.Like iteritems(), but with all lowercase keys.c                 s  s     | ]\}}||d  fV  qdS )r   Nr   )r&   lowerkeykeyvalr   r   r   r<      s    z2CaseInsensitiveDict.lower_items.<locals>.<genexpr>)r*   r%   rS   r   r   r   lower_items   s   zCaseInsensitiveDict.lower_itemsc                 c  s    | j D ]?}| j | }t|dkrt|V  qz|d d|dd  fV  W q tyC   |d ddd |dd  D fV  Y qw d S )Nr6   r   r7   r   c                 s  r8   r3   r9   r;   r   r   r   r<      r=   z,CaseInsensitiveDict.items.<locals>.<genexpr>)r*   r>   tupler?   r@   )r/   r'   tr   r   r   r%      s   

 
zCaseInsensitiveDict.itemsboolc                 C  s0   t |tr
t|}ntS t|  t| kS r3   )r   r   r"   NotImplementeddictrX   )r/   otherr   r   r   __eq__   s   

zCaseInsensitiveDict.__eq__CaseInsensitiveDict[_KT, _VT]c                 C  s   t | S r3   )r"   rS   r   r   r   r-      s   zCaseInsensitiveDict.copyr   c                 C  s   t t|  S r3   )r   r]   r%   rS   r   r   r   __repr__   rN   zCaseInsensitiveDict.__repr__itemc                 C  s   t || jv S r3   )r   r*   r/   rb   r   r   r   __contains__      z CaseInsensitiveDict.__contains__c                 C  rD   r3   r   rE   r   r   r   pop   rG   zCaseInsensitiveDict.popc                 C  rD   r3   r   rI   r   r   r   rf      rG   r   c                 C  rD   r3   r   rI   r   r   r   rf      rG   c                 C  rD   r3   r   rE   r   r   r   
setdefault   rG   zCaseInsensitiveDict.setdefaultc                 C  rD   r3   r   rI   r   r   r   rg      rG   tuple[_KT, _VT]c                 C  rD   r3   r   rS   r   r   r   popitem       zCaseInsensitiveDict.popitemtyping.KeysView[_KT]c                 C  rD   r3   r   rS   r   r   r   keys   rj   zCaseInsensitiveDict.keystyping.ValuesView[_VT]c                 C  rD   r3   r   rS   r   r   r   values   rj   zCaseInsensitiveDict.valuesmtyping.Mapping[_KT, _VT]r1   c                 K  rD   r3   r   r/   ro   r1   r   r   r   r.      rG   zCaseInsensitiveDict.update typing.Iterable[tuple[_KT, _VT]]c                 K  rD   r3   r   rq   r   r   r   r.      rG   c                 K  rD   r3   r   )r/   r1   r   r   r   r.      rG   r3   r   r#   )r   r   r   r!   r   r#   )r   r   r   r!   )r   r   r   rC   )r   r   r    rH   r   rH   )r   r   r    rJ   r   rJ   )r   rP   r   r   )r   rU   )r   r[   )r   r`   )r   r   )rb   r   r   r[   )r   r   r    r!   r   r!   )r   r   r    r   r   rH   )r   rh   )r   rk   )r   rm   )ro   rp   r1   r!   r   r#   )ro   rr   r1   r!   r   r#   )r1   r!   r   r#   )__name__
__module____qualname____doc__r2   r5   rB   typingoverloadrF   rO   rR   rT   rX   r%   r_   r-   ra   rd   TYPE_CHECKINGrf   rg   ri   rl   rn   r.   __classcell__r   r   rL   r   r"   ?   sP    









	




r"   c                      s>   e Zd ZdZdd fddZdd Zd	d
 ZdddZ  ZS )
LookupDictzDictionary lookup object.Nr   r#   c                   s   || _ t   d S r3   )namerK   r2   )r/   r~   rL   r   r   r2      s   zLookupDict.__init__c                 C  s   d| j  dS )Nz	<lookup 'z'>)r~   rS   r   r   r   ra      re   zLookupDict.__repr__c                 C  s   | j |d S r3   __dict__rF   rE   r   r   r   rB      s   zLookupDict.__getitem__c                 C  s   | j ||S r3   r   rI   r   r   r   rF      re   zLookupDict.getr3   rs   )	ru   rv   rw   rx   r2   ra   rB   rF   r|   r   r   rL   r   r}      s    r}   c                   @  sX   e Zd ZdddZddd	ZdddZdddZdddZdddZdd Z	dd Z
dS ) SharableLimitedDictmax_size
int | Noner   r#   c                 C  s   i | _ || _t | _d S r3   )r*   	_max_size	threadingRLock_lockr/   r   r   r   r   r2      s   zSharableLimitedDict.__init__dict[str, typing.Any]c                 C  s   | j | jdS )Nr*   r   r   rS   r   r   r   __getstate__   re   z SharableLimitedDict.__getstate__statec                 C  s"   t  | _|d | _|d | _d S Nr*   r   )r   r   r   r*   r   r/   r   r   r   r   __setstate__   s   

z SharableLimitedDict.__setstate__c                 C  s4   | j  | j|= W d    d S 1 sw   Y  d S r3   r   r*   )r/   _SharableLimitedDict__keyr   r   r   rO      s   
"zSharableLimitedDict.__delitem__r   c                 C  4   | j  t| jW  d    S 1 sw   Y  d S r3   )r   r>   r*   rS   r   r   r   rT         $zSharableLimitedDict.__len__typing.Iteratorc                 C  r   r3   )r   iterr*   rS   r   r   r   rR      r   zSharableLimitedDict.__iter__c                 C  sV   | j  | jrt| j| jkr| j  || j|< W d    d S 1 s$w   Y  d S r3   )r   r   r>   r*   ri   r4   r   r   r   r5      s
   
"zSharableLimitedDict.__setitem__c                 C  s4   | j  | j| W  d    S 1 sw   Y  d S r3   r   rc   r   r   r   rB     r   zSharableLimitedDict.__getitem__Nr   r   r   r#   )r   r   r   r   r   r#   rs   rt   )r   r   )ru   rv   rw   r2   r   r   rO   rT   rR   r5   rB   r   r   r   r   r      s    





r   c                      s>   e Zd Zd fddZddddZddddZdd Z  ZS )QuicSharedCacher   r   r   r#   c                   s   t  | i | _d S r3   )rK   r2   _exclusion_storer   rL   r   r   r2     s   
zQuicSharedCache.__init__Nhostr   portalt_portc                 C  s,   |d u rd}|d u r|}||f| ||f< d S Ni  r   r/   r   r   r   r   r   r   
add_domain  s
   zQuicSharedCache.add_domainc                 C  s.   |d u rd}|d u r|}||f| j ||f< d S r   )r   r   r   r   r   exclude_domain  s
   zQuicSharedCache.exclude_domainc                 C  sr   | j , || jv r	 W d    d S | jr"t| j| jkr"| j  || j|< W d    d S 1 s2w   Y  d S r3   )r   r   r   r>   r*   ri   r4   r   r   r   r5     s   

"zQuicSharedCache.__setitem__r   )NN)r   r   r   r   r   r   r   r#   )r   r   r   r   r   r   )ru   rv   rw   r2   r   r   r5   r|   r   r   rL   r   r     s
    r   c                      s(   e Zd Zd fddZdd	d
Z  ZS )AsyncQuicSharedCacher   r   r   r#   c                   s   t  | t | _d S r3   )rK   r2   	DummyLockr   r   rL   r   r   r2   &  s   zAsyncQuicSharedCache.__init__r   r   c                 C  s    t  | _|d | _|d | _d S r   )r   r   r*   r   r   r   r   r   r   *  s   
z!AsyncQuicSharedCache.__setstate__r   r   )ru   rv   rw   r2   r   r|   r   r   rL   r   r   %  s    r   c                   @  s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
r   c                 C  s   | S r3   r   rS   r   r   r   	__enter__1  rG   zDummyLock.__enter__c                 C  rD   r3   r   )r/   exc_typeexc_valexc_tbr   r   r   __exit__4  rG   zDummyLock.__exit__c                 C  rD   r3   r   rS   r   r   r   acquire7  rG   zDummyLock.acquirec                 C  rD   r3   r   rS   r   r   r   release:  rG   zDummyLock.releaseN)ru   rv   rw   r   r   r   r   r   r   r   r   r   0  s
    r   )r   r   r   r   )r   r   r   r   r   r   )!rx   
__future__r   r   ry   collections.abcr   r   _compatr   urllib3._collectionsr   urllib3_future._collectionsImportError	functoolsr   
exceptionsr   r   r   r   r{   typing_extensionsr   r!   Genericr"   r]   r}   r   r   r   r   r   r   r   r   <module>   s@    	



 &