o
    tBh&                     @   s^  d Z ddlZddlZzddlmZ ddlmZ ddlmZ W n ey9   ddlmZ ddlmZ ddlmZ Y nw zddl	m
Z
 ddlmZ W n% eym   zddlm
Z
 ddlmZ W n eyj   dZ
dZY nw Y nw ejdk rvdZnzdd	lmZ W n ey   dd	lmZ Y nw ejd
k rdZnzddlmZ W n ey   ddlmZ Y nw ejdk rdZn&zddlmZ W n ey   zddlmZ W n ey   dZY nw Y nw ejdkZerddlmZmZ ddlZddlmZm Z  nddl!mZmZ ddl"Zddl#mZ ddl$m Z  ze%Z%W n e&y"   e'e(fZ%Y nw G dd deZ)dZ*dS )zPrivate module full of compatibility hacks.

Primarily this is for downstream redistributions of requests that unvendor
urllib3 without providing a shim.

.. warning::

    This module is private. If you use it, and something breaks, you were
    warned
    N)fields)filepost)poolmanager)HTTPConnection)
connectioni  )timeouti  )	appenginei  )PyOpenSSLContext)   r   )MappingMutableMapping)	urlencodeurljoin)r   )r   c                       s   e Zd ZdZd- fdd	Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
es-ejZejZe Zdd Zdd ZefddZdd Zdd Zdd Zdd ZeZeZeZdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Z e!d+d, Z"  Z#S ).HTTPHeaderDictap  
    :param headers:
        An iterable of field-value pairs. Must not contain multiple field names
        when compared case-insensitively.

    :param kwargs:
        Additional field-value pairs to pass in to ``dict.update``.

    A ``dict`` like container for storing HTTP Headers.

    Field names are stored and compared case-insensitively in compliance with
    RFC 7230. Iteration provides the first case-sensitive key seen for each
    case-insensitive pair.

    Using ``__setitem__`` syntax overwrites fields that compare equal
    case-insensitively in order to maintain ``dict``'s api. For fields that
    compare equal, instead create a new ``HTTPHeaderDict`` and use ``.add``
    in a loop.

    If multiple fields that are equal case-insensitively are passed to the
    constructor or ``.update``, the behavior is undefined and some will be
    lost.

    >>> headers = HTTPHeaderDict()
    >>> headers.add('Set-Cookie', 'foo=bar')
    >>> headers.add('set-cookie', 'baz=quxx')
    >>> headers['content-length'] = '7'
    >>> headers['SET-cookie']
    'foo=bar, baz=quxx'
    >>> headers['Content-Length']
    '7'
    Nc                    sR   t t|   i | _|d urt|tr| | n| | |r'| | d S d S N)superr   __init__
_container
isinstance
_copy_fromextend)selfheaderskwargs	__class__ p/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/requests_toolbelt/_compat.pyr   t   s   

zHTTPHeaderDict.__init__c                 C   s    ||f| j | < | j |  S r   r   lowerr   keyvalr   r   r   __setitem__   s   zHTTPHeaderDict.__setitem__c                 C   s    | j |  }d|dd  S )N,    r   r   joinr    r   r   r   __getitem__   s   zHTTPHeaderDict.__getitem__c                 C   s   | j | = d S r   r   r   r!   r   r   r   __delitem__   s   zHTTPHeaderDict.__delitem__c                 C   s   |  | jv S r   )r   r   r)   r   r   r   __contains__   s   zHTTPHeaderDict.__contains__c                 C   s^   t |tst|dsdS t |t| st| |}tdd |  D tdd | D kS )NkeysFc                 s        | ]\}}|  |fV  qd S r   r   .0kvr   r   r   	<genexpr>       z(HTTPHeaderDict.__eq__.<locals>.<genexpr>c                 s   r-   r   r.   r/   r   r   r   r3      r4   )r   r   hasattrtypedict
itermergedr   otherr   r   r   __eq__   s   zHTTPHeaderDict.__eq__c                 C   s   |  | S r   )r;   r9   r   r   r   __ne__      zHTTPHeaderDict.__ne__c                 C   s
   t | jS r   )lenr   r   r   r   r   __len__   s   
zHTTPHeaderDict.__len__c                 c   s     | j  D ]}|d V  qd S )Nr   )r   values)r   valsr   r   r   __iter__   s   zHTTPHeaderDict.__iter__c                 C   s:   z| | }W n t y   || ju r | Y S w | |= |S )zD.pop(k[,d]) -> v, remove specified key and return its value.

        If key is not found, d is returned if given, otherwise KeyError is
        raised.
        )KeyError_HTTPHeaderDict__marker)r   r!   defaultvaluer   r   r   pop   s   

zHTTPHeaderDict.popc                 C   s"   z| |= W d S  t y   Y d S w r   )rD   r)   r   r   r   discard   s
   zHTTPHeaderDict.discardc                 C   s^   |  }||f}| j||}||ur-t|tr|| dS |d |d |g| j|< dS dS )zAdds a (name, value) pair, doesn't overwrite the value if it already
        exists.

        >>> headers = HTTPHeaderDict(foo='bar')
        >>> headers.add('Foo', 'baz')
        >>> headers['foo']
        'bar, baz'
        r   r%   N)r   r   
setdefaultr   listappend)r   r!   r"   	key_lowernew_valsrB   r   r   r   add   s   	
zHTTPHeaderDict.addc                 O   s   t |dkrtdt |t |dkr|d nd}t|tr0| D ]
\}}| || q$n5t|trC|D ]
}| |||  q7n"t|drX|	 D ]
}| |||  qLn|D ]
\}}| || qZ|
 D ]
\}}| || qidS )zGeneric import function for any type of header-like object.
        Adapted version of MutableMapping.update in order to insert items
        with self.add instead of self.__setitem__
        r%   z8extend() takes at most 1 positional arguments ({} given)r   r   r,   N)r>   	TypeErrorformatr   r   	iteritemsrO   r   r5   r,   items)r   argsr   r:   r!   r"   rG   r   r   r   r      s,   



zHTTPHeaderDict.extendc                 C   sJ   z	| j |  }W n ty   g  Y S w t|tr|d gS |dd S )zmReturns a list of all the values for the named field. Returns an
        empty list if the key doesn't exist.r%   N)r   r   rD   r   tuple)r   r!   rB   r   r   r   getlist   s   

zHTTPHeaderDict.getlistc                 C   s   dt | jt|  f S )Nz%s(%s))r6   __name__r7   r8   r?   r   r   r   __repr__  s   zHTTPHeaderDict.__repr__c                 C   s>   |D ]}| |}t|trt|}|g| | j| < qd S r   )rV   r   rK   r   r   )r   r:   r!   r"   r   r   r   r     s   

zHTTPHeaderDict._copy_fromc                 C   s   t |  }||  |S r   )r6   r   )r   cloner   r   r   copy  s   

zHTTPHeaderDict.copyc                 c   s>    | D ]}| j |  }|dd D ]	}|d |fV  qqdS )z8Iterate over all header lines, including duplicate ones.r%   Nr   r   )r   r!   rB   r"   r   r   r   rR     s   zHTTPHeaderDict.iteritemsc                 c   s:    | D ]}| j |  }|d d|dd fV  qdS )z:Iterate over all headers, merging duplicate ones together.r   r$   r%   Nr&   r    r   r   r   r8     s
   zHTTPHeaderDict.itermergedc                 C   s   t |  S r   )rK   rR   r?   r   r   r   rS      r=   zHTTPHeaderDict.itemsc                 C   sj   g }|j D ]+}|dr|d \}}||d |  f|d< q|dd\}}||| f q| |S )z4Read headers from a Python 2 httplib message object.) 	z
:r%   )r   
startswithrstripsplitrL   strip)clsmessager   liner!   rG   r   r   r   from_httplib#  s   

zHTTPHeaderDict.from_httplibr   )$rW   
__module____qualname____doc__r   r#   r(   r*   r+   r;   r<   PY3r   iterkeys
itervaluesobjectrE   r@   rC   rH   rI   rO   r   rV   
getheadersgetallmatchingheadersigetrX   r   rZ   rR   r8   rS   classmethodrf   __classcell__r   r   r   r   r   R   s>    !r   )
basestringr   r   r   r   r   r   queuer   
gaecontribr   r	   )+ri   sysrequestsrequests.packages.urllib3r   r   r   ImportErrorurllib3$requests.packages.urllib3.connectionr   r   urllib3.connection	__build__r   requests.packages.urllib3.utilurllib3.utilru   !requests.packages.urllib3.contribr   urllib3.contribr	   +requests.packages.urllib3.contrib.pyopensslurllib3.contrib.pyopensslversion_inforj   collections.abcr   r   rt   urllib.parser   r   collectionsQueueurlliburlparsers   	NameErrorstrbytesr   __all__r   r   r   r   <module>   s    

	


 f