| Index: swarm_client/third_party/requests/packages/urllib3/_collections.py
|
| ===================================================================
|
| --- swarm_client/third_party/requests/packages/urllib3/_collections.py (revision 235167)
|
| +++ swarm_client/third_party/requests/packages/urllib3/_collections.py (working copy)
|
| @@ -1,94 +0,0 @@
|
| -# urllib3/_collections.py
|
| -# Copyright 2008-2013 Andrey Petrov and contributors (see CONTRIBUTORS.txt)
|
| -#
|
| -# This module is part of urllib3 and is released under
|
| -# the MIT License: http://www.opensource.org/licenses/mit-license.php
|
| -
|
| -from collections import MutableMapping
|
| -from threading import RLock
|
| -
|
| -try: # Python 2.7+
|
| - from collections import OrderedDict
|
| -except ImportError:
|
| - from .packages.ordered_dict import OrderedDict
|
| -
|
| -
|
| -__all__ = ['RecentlyUsedContainer']
|
| -
|
| -
|
| -_Null = object()
|
| -
|
| -
|
| -class RecentlyUsedContainer(MutableMapping):
|
| - """
|
| - 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
|
| - """
|
| -
|
| - ContainerCls = OrderedDict
|
| -
|
| - def __init__(self, maxsize=10, dispose_func=None):
|
| - self._maxsize = maxsize
|
| - self.dispose_func = dispose_func
|
| -
|
| - self._container = self.ContainerCls()
|
| - self.lock = RLock()
|
| -
|
| - def __getitem__(self, key):
|
| - # Re-insert the item, moving it to the end of the eviction line.
|
| - with self.lock:
|
| - item = self._container.pop(key)
|
| - self._container[key] = item
|
| - return item
|
| -
|
| - def __setitem__(self, key, value):
|
| - evicted_value = _Null
|
| - with self.lock:
|
| - # Possibly evict the existing value of 'key'
|
| - evicted_value = self._container.get(key, _Null)
|
| - self._container[key] = value
|
| -
|
| - # If we didn't evict an existing value, we might have to evict the
|
| - # least recently used item from the beginning of the container.
|
| - if len(self._container) > self._maxsize:
|
| - _key, evicted_value = self._container.popitem(last=False)
|
| -
|
| - if self.dispose_func and evicted_value is not _Null:
|
| - self.dispose_func(evicted_value)
|
| -
|
| - def __delitem__(self, key):
|
| - with self.lock:
|
| - value = self._container.pop(key)
|
| -
|
| - if self.dispose_func:
|
| - self.dispose_func(value)
|
| -
|
| - def __len__(self):
|
| - with self.lock:
|
| - return len(self._container)
|
| -
|
| - def __iter__(self):
|
| - raise NotImplementedError('Iteration over this class is unlikely to be threadsafe.')
|
| -
|
| - def clear(self):
|
| - with self.lock:
|
| - # Copy pointers to all values, then wipe the mapping
|
| - # under Python 2, this copies the list of values twice :-|
|
| - values = list(self._container.values())
|
| - self._container.clear()
|
| -
|
| - if self.dispose_func:
|
| - for value in values:
|
| - self.dispose_func(value)
|
| -
|
| - def keys(self):
|
| - with self.lock:
|
| - return self._container.keys()
|
|
|