home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 February / maximum-cd-2011-02.iso / DiscContents / digsby_setup85.exe / lib / util / hook_util.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-11-24  |  1.8 KB  |  46 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. from primitives.error_handling import with_traceback
  5. from primitives.funcs import Delegate
  6. from primitives.synchronization import lock
  7. from peak.util.addons import AddOn
  8. from peak.util.plugins import Hook
  9. import threading
  10.  
  11. class OneShotHook(AddOn):
  12.     
  13.     def __init__(self, subject, group, impl = None):
  14.         self.subject = subject
  15.         self.group = group
  16.         self.impl = impl
  17.         self.delegate = Delegate()
  18.         self._lock = threading.RLock()
  19.         self.registered = False
  20.         self.fired = False
  21.  
  22.     
  23.     def check_registered(self):
  24.         if not self.registered:
  25.             self.registered = True
  26.             Hook(self.group, self.impl).register(self.call_and_clear)
  27.         
  28.  
  29.     check_registered = lock(check_registered)
  30.     
  31.     def __call__(self, func, if_not_fired = False):
  32.         if not if_not_fired and self.fired:
  33.             (self.delegate,) += (lambda : with_traceback(func, *a, **k))
  34.             self.check_registered()
  35.             return True
  36.         return False
  37.  
  38.     __call__ = lock(__call__)
  39.     
  40.     def call_and_clear(self, *a, **k):
  41.         self.delegate.call_and_clear(*a, **k)
  42.         self.fired = True
  43.  
  44.     call_and_clear = lock(call_and_clear)
  45.  
  46.