3
€'YÄ  ã               @   s>   d Z ddlZddlmZ G dd„ dejƒZG dd„ deƒZdS )	zO
requests.structures
~~~~~~~~~~~~~~~~~~~

Data structures that power Requests.
é    Né   )ÚOrderedDictc               @   sb   e Zd ZdZ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S )ÚCaseInsensitiveDictaâ  A case-insensitive ``dict``-like object.

    Implements all methods and operations of
    ``collections.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.
    Nc             K   s&   t ƒ | _|d kri }| j|f|Ž d S )N)r   Ú_storeÚupdate)ÚselfÚdataÚkwargs© r
   ú5/usr/lib/python3/dist-packages/requests/structures.pyÚ__init__*   s    zCaseInsensitiveDict.__init__c             C   s   ||f| j |jƒ < d S )N)r   Úlower)r   ÚkeyÚvaluer
   r
   r   Ú__setitem__0   s    zCaseInsensitiveDict.__setitem__c             C   s   | j |jƒ  d S )Nr   )r   r   )r   r   r
   r
   r   Ú__getitem__5   s    zCaseInsensitiveDict.__getitem__c             C   s   | j |jƒ = d S )N)r   r   )r   r   r
   r
   r   Ú__delitem__8   s    zCaseInsensitiveDict.__delitem__c             C   s   dd„ | j jƒ D ƒS )Nc             s   s   | ]\}}|V  qd S )Nr
   )Ú.0ZcasedkeyZmappedvaluer
   r
   r   ú	<genexpr><   s    z/CaseInsensitiveDict.__iter__.<locals>.<genexpr>)r   Úvalues)r   r
   r
   r   Ú__iter__;   s    zCaseInsensitiveDict.__iter__c             C   s
   t | jƒS )N)Úlenr   )r   r
   r
   r   Ú__len__>   s    zCaseInsensitiveDict.__len__c             C   s   dd„ | j jƒ D ƒS )z.Like iteritems(), but with all lowercase keys.c             s   s   | ]\}}||d  fV  qdS )r   Nr
   )r   ZlowerkeyZkeyvalr
   r
   r   r   D   s   z2CaseInsensitiveDict.lower_items.<locals>.<genexpr>)r   Úitems)r   r
   r
   r   Úlower_itemsA   s    zCaseInsensitiveDict.lower_itemsc             C   s2   t |tjƒrt|ƒ}ntS t| jƒ ƒt|jƒ ƒkS )N)Ú
isinstanceÚcollectionsÚMappingr   ÚNotImplementedÚdictr   )r   Úotherr
   r
   r   Ú__eq__I   s    
zCaseInsensitiveDict.__eq__c             C   s   t | jjƒ ƒS )N)r   r   r   )r   r
   r
   r   ÚcopyR   s    zCaseInsensitiveDict.copyc             C   s   t t| jƒ ƒƒS )N)Ústrr   r   )r   r
   r
   r   Ú__repr__U   s    zCaseInsensitiveDict.__repr__)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r!   r"   r$   r
   r
   r
   r   r      s   
	r   c                   s<   e Zd ZdZd‡ fdd„	Zdd„ Zdd„ Zdd	d
„Z‡  ZS )Ú
LookupDictzDictionary lookup object.Nc                s   || _ tt| ƒjƒ  d S )N)ÚnameÚsuperr)   r   )r   r*   )Ú	__class__r
   r   r   \   s    zLookupDict.__init__c             C   s
   d| j  S )Nz<lookup '%s'>)r*   )r   r
   r
   r   r$   `   s    zLookupDict.__repr__c             C   s   | j j|d ƒS )N)Ú__dict__Úget)r   r   r
   r
   r   r   c   s    zLookupDict.__getitem__c             C   s   | j j||ƒS )N)r-   r.   )r   r   Údefaultr
   r
   r   r.   h   s    zLookupDict.get)N)N)	r%   r&   r'   r(   r   r$   r   r.   Ú__classcell__r
   r
   )r,   r   r)   Y   s
   r)   )r(   r   Úcompatr   ÚMutableMappingr   r   r)   r
   r
   r
   r   Ú<module>   s   J