
º|j½  ã               @   s\   d  Z  d d l m Z d d l m Z m Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z d	 S)
zO
requests.structures
~~~~~~~~~~~~~~~~~~~

Data structures that power Requests.
é    )ÚOrderedDicté   )ÚMappingÚMutableMappingc               @   s‘   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
    ``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   s2   t  ƒ  |  _ | d  k r i  } |  j | | � d  S)N)r   Ú_storeÚupdate)ÚselfÚdataÚkwargs© r   ú7/tmp/pip-build-1hwfuv5s/requests/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   )Ú.0ÚcasedkeyÚ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   ÚlowerkeyÚ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   sD   t  | t ƒ r t | ƒ } n t St |  j ƒ  ƒ t | j ƒ  ƒ k S)N)Ú
isinstancer   r   Ú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__)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r    r%   r&   r(   r   r   r   r   r      s   	r   c                   sR   e  Z d  Z d Z d ‡  f d d † Z d d „  Z d d „  Z d d	 d
 „ 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)r1   r2   )r	   r   Údefaultr   r   r   r2   h   s    zLookupDict.get)r)   r*   r+   r,   r   r(   r   r2   r   r   )r0   r   r-   Y   s
   r-   N)	r,   Úcollectionsr   Úcompatr   r   r   r#   r-   r   r   r   r   Ú<module>   s   J