home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyo (Python 2.6)
-
- __revision__ = '$Id: expdict.py 714 2010-04-05 10:20:10Z jajcus $'
- __docformat__ = 'restructuredtext en'
- import time
- import threading
- __all__ = [
- 'ExpiringDictionary']
- sentinel = object()
-
- class ExpiringDictionary(dict):
- __slots__ = [
- '_timeouts',
- '_default_timeout',
- '_lock']
-
- def __init__(self, default_timeout = 300):
- dict.__init__(self)
- self._timeouts = { }
- self._default_timeout = default_timeout
- self._lock = threading.RLock()
-
-
- def __delitem__(self, key):
- self._lock.acquire()
-
- try:
- del self._timeouts[key]
- return dict.__delitem__(self, key)
- finally:
- self._lock.release()
-
-
-
- def __getitem__(self, key):
- self._lock.acquire()
-
- try:
- self._expire_item(key)
- return dict.__getitem__(self, key)
- finally:
- self._lock.release()
-
-
-
- def pop(self, key, default = sentinel):
- self._lock.acquire()
-
- try:
- self._expire_item(key)
- del self._timeouts[key]
- if default is not sentinel:
- return dict.pop(self, key, default)
- return dict.pop(self, key)
- finally:
- self._lock.release()
-
-
-
- def __setitem__(self, key, value):
- return self.set_item(key, value)
-
-
- def set_item(self, key, value, timeout = None, timeout_callback = None):
- self._lock.acquire()
-
- try:
- if not timeout:
- timeout = self._default_timeout
-
- self._timeouts[key] = (time.time() + timeout, timeout_callback)
- return dict.__setitem__(self, key, value)
- finally:
- self._lock.release()
-
-
-
- def expire(self):
- self._lock.acquire()
-
- try:
- for k in self._timeouts.keys():
- self._expire_item(k)
- finally:
- self._lock.release()
-
-
-
- def _expire_item(self, key):
- (timeout, callback) = self._timeouts[key]
- if timeout <= time.time():
- item = dict.pop(self, key)
- del self._timeouts[key]
- if callback:
-
- try:
- callback(key, item)
- except TypeError:
-
- try:
- callback(key)
- except TypeError:
- callback()
- except:
- None<EXCEPTION MATCH>TypeError
-
-
- None<EXCEPTION MATCH>TypeError
-
-
- None<EXCEPTION MATCH>TypeError
-
-
-
-