home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 October / maximum-cd-2011-10.iso / DiscContents / digsby_setup.exe / lib / pyxmpp / expdict.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2011-06-22  |  2.7 KB  |  116 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. __revision__ = '$Id: expdict.py 714 2010-04-05 10:20:10Z jajcus $'
  5. __docformat__ = 'restructuredtext en'
  6. import time
  7. import threading
  8. __all__ = [
  9.     'ExpiringDictionary']
  10. sentinel = object()
  11.  
  12. class ExpiringDictionary(dict):
  13.     __slots__ = [
  14.         '_timeouts',
  15.         '_default_timeout',
  16.         '_lock']
  17.     
  18.     def __init__(self, default_timeout = 300):
  19.         dict.__init__(self)
  20.         self._timeouts = { }
  21.         self._default_timeout = default_timeout
  22.         self._lock = threading.RLock()
  23.  
  24.     
  25.     def __delitem__(self, key):
  26.         self._lock.acquire()
  27.         
  28.         try:
  29.             del self._timeouts[key]
  30.             return dict.__delitem__(self, key)
  31.         finally:
  32.             self._lock.release()
  33.  
  34.  
  35.     
  36.     def __getitem__(self, key):
  37.         self._lock.acquire()
  38.         
  39.         try:
  40.             self._expire_item(key)
  41.             return dict.__getitem__(self, key)
  42.         finally:
  43.             self._lock.release()
  44.  
  45.  
  46.     
  47.     def pop(self, key, default = sentinel):
  48.         self._lock.acquire()
  49.         
  50.         try:
  51.             self._expire_item(key)
  52.             del self._timeouts[key]
  53.             if default is not sentinel:
  54.                 return dict.pop(self, key, default)
  55.             return dict.pop(self, key)
  56.         finally:
  57.             self._lock.release()
  58.  
  59.  
  60.     
  61.     def __setitem__(self, key, value):
  62.         return self.set_item(key, value)
  63.  
  64.     
  65.     def set_item(self, key, value, timeout = None, timeout_callback = None):
  66.         self._lock.acquire()
  67.         
  68.         try:
  69.             if not timeout:
  70.                 timeout = self._default_timeout
  71.             
  72.             self._timeouts[key] = (time.time() + timeout, timeout_callback)
  73.             return dict.__setitem__(self, key, value)
  74.         finally:
  75.             self._lock.release()
  76.  
  77.  
  78.     
  79.     def expire(self):
  80.         self._lock.acquire()
  81.         
  82.         try:
  83.             for k in self._timeouts.keys():
  84.                 self._expire_item(k)
  85.         finally:
  86.             self._lock.release()
  87.  
  88.  
  89.     
  90.     def _expire_item(self, key):
  91.         (timeout, callback) = self._timeouts[key]
  92.         if timeout <= time.time():
  93.             item = dict.pop(self, key)
  94.             del self._timeouts[key]
  95.             if callback:
  96.                 
  97.                 try:
  98.                     callback(key, item)
  99.                 except TypeError:
  100.                     
  101.                     try:
  102.                         callback(key)
  103.                     except TypeError:
  104.                         callback()
  105.                     except:
  106.                         None<EXCEPTION MATCH>TypeError
  107.                     
  108.  
  109.                     None<EXCEPTION MATCH>TypeError
  110.                 
  111.  
  112.             None<EXCEPTION MATCH>TypeError
  113.         
  114.  
  115.  
  116.