
Rc           @   s   d  d l  m Z d  d l m Z y d  d l  m Z Wn! e k
 rW d d l m Z n Xd g Z e   Z	 d e f d     YZ
 d S(   i(   t   MutableMapping(   t   RLock(   t   OrderedDicti   t   RecentlyUsedContainerc           B   sb   e  Z d  Z e Z d d
 d  Z d   Z d   Z d   Z	 d   Z
 d   Z d   Z d	   Z RS(   s  
    Provides a thread-safe dict-like container which maintains up to
    ``maxsize`` keys while throwing away the least-recently-used keys beyond
    ``maxsize``.

    :param maxsize:
        Maximum number of recent elements to retain.

    :param dispose_func:
        Every time an item is evicted from the container,
        ``dispose_func(value)`` is called.  Callback which will get called
    i
   c         C   s1   | |  _  | |  _ |  j   |  _ t   |  _ d  S(   N(   t   _maxsizet   dispose_funct   ContainerClst
   _containerR   t   lock(   t   selft   maxsizeR   (    (    s8   /usr/lib/python2.7/dist-packages/urllib3/_collections.pyt   __init__&   s    		c         C   s7   |  j  ( |  j j |  } | |  j | <| SWd  QXd  S(   N(   R   R   t   pop(   R	   t   keyt   item(    (    s8   /usr/lib/python2.7/dist-packages/urllib3/_collections.pyt   __getitem__-   s    
c         C   s   t  } |  j ] |  j j | t   } | |  j | <t |  j  |  j k rh |  j j d t  \ } } n  Wd  QX|  j r | t  k	 r |  j |  n  d  S(   Nt   last(	   t   _NullR   R   t   gett   lenR   t   popitemt   FalseR   (   R	   R   t   valuet   evicted_valuet   _key(    (    s8   /usr/lib/python2.7/dist-packages/urllib3/_collections.pyt   __setitem__4   s    
$c         C   s?   |  j   |  j j |  } Wd  QX|  j r; |  j |  n  d  S(   N(   R   R   R   R   (   R	   R   R   (    (    s8   /usr/lib/python2.7/dist-packages/urllib3/_collections.pyt   __delitem__C   s    
	c         C   s!   |  j   t |  j  SWd  QXd  S(   N(   R   R   R   (   R	   (    (    s8   /usr/lib/python2.7/dist-packages/urllib3/_collections.pyt   __len__J   s    
c         C   s   t  d   d  S(   Ns7   Iteration over this class is unlikely to be threadsafe.(   t   NotImplementedError(   R	   (    (    s8   /usr/lib/python2.7/dist-packages/urllib3/_collections.pyt   __iter__N   s    c         C   s`   |  j  ' t |  j j    } |  j j   Wd  QX|  j r\ x | D] } |  j |  qB Wn  d  S(   N(   R   t   listR   t   valuest   clearR   (   R	   R   R   (    (    s8   /usr/lib/python2.7/dist-packages/urllib3/_collections.pyR    Q   s    
	c         C   s!   |  j   |  j j   SWd  QXd  S(   N(   R   R   t   keys(   R	   (    (    s8   /usr/lib/python2.7/dist-packages/urllib3/_collections.pyR!   \   s    
N(   t   __name__t
   __module__t   __doc__R   R   t   NoneR   R   R   R   R   R   R    R!   (    (    (    s8   /usr/lib/python2.7/dist-packages/urllib3/_collections.pyR      s   						N(   t   collectionsR    t	   threadingR   R   t   ImportErrort   packages.ordered_dictt   __all__t   objectR   R   (    (    (    s8   /usr/lib/python2.7/dist-packages/urllib3/_collections.pyt   <module>   s   		