Your IP : 216.73.216.196


Current Path : /opt/alt/python37/lib/python3.7/site-packages/betamax/__pycache__/
Upload File :
Current File : //opt/alt/python37/lib/python3.7/site-packages/betamax/__pycache__/headers.cpython-37.pyc

B

�ˀX�@s>dZddlZddlmZmZdZejdkZGdd�de�ZdS)aHBackport of urllib3's HTTPHeaderDict for older versions of requests.

This code was originally licensed under the MIT License and is copyrighted by
Andrey Petrov and contributors to urllib3.

This version was imported from:
https://github.com/shazow/urllib3/blob/3bd63406bef7c16d007c17563b6af14582567d4b/urllib3/_collections.py
�N)�Mapping�MutableMapping)�HTTPHeaderDict)�rcs�eZdZdZd-�fdd�	Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
esZej
Z
ejZe�Zdd�Zdd�Zefdd�Zdd�Zdd�Zdd�Zdd�ZeZeZeZdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Z e!d+d,��Z"�Z#S).rap
    :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'
    NcsNtt|���i|_|dk	r<t|t�r2|�|�n
|�|�|rJ|�|�dS)N)�superr�__init__�
_container�
isinstance�
_copy_from�extend)�self�headers�kwargs)�	__class__��@/opt/alt/python37/lib/python3.7/site-packages/betamax/headers.pyr4s

zHTTPHeaderDict.__init__cCs ||f|j|��<|j|��S)N)r�lower)r�key�valrrr�__setitem__?szHTTPHeaderDict.__setitem__cCs |j|��}d�|dd��S)Nz, �)rr�join)rrrrrr�__getitem__CszHTTPHeaderDict.__getitem__cCs|j|��=dS)N)rr)rrrrr�__delitem__GszHTTPHeaderDict.__delitem__cCs|��|jkS)N)rr)rrrrr�__contains__JszHTTPHeaderDict.__contains__cCs^t|t�st|d�sdSt|t|��s2t|�|�}tdd�|��D��tdd�|��D��kS)N�keysFcss|]\}}|��|fVqdS)N)r)�.0�k�vrrr�	<genexpr>Rsz(HTTPHeaderDict.__eq__.<locals>.<genexpr>css|]\}}|��|fVqdS)N)r)rrrrrrrSs)r	r�hasattr�type�dict�
itermerged)r�otherrrr�__eq__MszHTTPHeaderDict.__eq__cCs|�|�S)N)r%)rr$rrr�__ne__UszHTTPHeaderDict.__ne__cCs
t|j�S)N)�lenr)rrrr�__len__^szHTTPHeaderDict.__len__ccs"x|j��D]}|dVqWdS)Nr)r�values)r�valsrrr�__iter__aszHTTPHeaderDict.__iter__cCs<y||}Wn tk
r,||jkr(�|SX||=|SdS)z�D.pop(k[,d]) -> v, remove specified key and return the value.

        If key is not found, d is returned if given, otherwise KeyError is
        raised.
        N)�KeyError�_HTTPHeaderDict__marker)rr�default�valuerrr�popfs

zHTTPHeaderDict.popcCs$y
||=Wntk
rYnXdS)N)r,)rrrrr�discardzs
zHTTPHeaderDict.discardcCsX|��}||f}|j�||�}||k	rTt|t�r<|�|�n|d|d|g|j|<dS)z�Adds 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'
        rrN)rr�
setdefaultr	�list�append)rrrZ	key_lowerZnew_valsr*rrr�add�s	
zHTTPHeaderDict.addcOst|�dkrtd�t|����t|�dkr2|dnd}t|t�rdx�|��D]\}}|�||�qJWnvt|t�r�xj|D]}|�|||�qtWnLt|d�r�x@|�	�D]}|�|||�q�Wnx|D]\}}|�||�q�Wx |�
�D]\}}|�||�q�WdS)z�Generic 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__
        rz9extend() takes at most 1 positional arguments ({0} given)rrrN)r'�	TypeError�formatr	r�	iteritemsr5rr r�items)r�argsrr$rrr/rrrr�s"



zHTTPHeaderDict.extendcCsLy|j|��}Wntk
r&gSXt|t�r<|dgS|dd�SdS)zmReturns a list of all the values for the named field. Returns an
        empty list if the key doesn't exist.rN)rrr,r	�tuple)rrr*rrr�getlist�s

zHTTPHeaderDict.getlistcCsdt|�jt|���fS)Nz%s(%s))r!�__name__r"r#)rrrr�__repr__�szHTTPHeaderDict.__repr__cCsBx<|D]4}|�|�}t|t�r&t|�}|g||j|��<qWdS)N)r<r	r3rr)rr$rrrrrr
�s



zHTTPHeaderDict._copy_fromcCst|��}|�|�|S)N)r!r
)r�clonerrr�copy�s

zHTTPHeaderDict.copyccsDx>|D]6}|j|��}x"|dd�D]}|d|fVq&WqWdS)z8Iterate over all header lines, including duplicate ones.rNr)rr)rrr*rrrrr8�s
zHTTPHeaderDict.iteritemsccs<x6|D].}|j|��}|dd�|dd��fVqWdS)z:Iterate over all headers, merging duplicate ones together.rz, rN)rrr)rrrrrrr#�s
zHTTPHeaderDict.itermergedcCst|���S)N)r3r8)rrrrr9�szHTTPHeaderDict.itemscCsng}x`|jD]V}|�d�r@|d\}}||d|��f|d<q|�dd�\}}|�||��f�qW||�S)z4Read headers from a Python 2 httplib message object.)� �	���z
�:r)r
�
startswith�rstrip�splitr4�strip)�cls�messager
�linerr/rrr�from_httplib�s
zHTTPHeaderDict.from_httplib)N)$r=�
__module__�__qualname__�__doc__rrrrrr%r&�PY3r�iterkeys�
itervalues�objectr-r(r+r0r1r5rr<Z
getheadersZgetallmatchingheadersZigetr>r
r@r8r#r9�classmethodrL�
__classcell__rr)rrrs: r)	rO�sys�collectionsrr�__all__�version_inforPrrrrr�<module>s