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

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. from primitives.funcs import Delegate
  5. from logging import getLogger
  6. log = getLogger('events')
  7.  
  8. class Veto(object):
  9.     pass
  10.  
  11.  
  12. class BadEventException(Exception):
  13.     pass
  14.  
  15.  
  16. class EventMixin(object):
  17.     events = set()
  18.     
  19.     def __init__(self):
  20.         if not hasattr(self, 'handlers'):
  21.             self.handlers = { }
  22.             self.clear()
  23.         
  24.  
  25.     
  26.     def bind(self, ename, callback):
  27.         self.handlers[ename] += callback
  28.  
  29.     bind_event = bind
  30.     
  31.     def event(self, ename, *args):
  32.         if ename not in self.events:
  33.             raise BadEventException(type(self).__name__, ename, self.events)
  34.         ename not in self.events
  35.         if self.handlers[ename]:
  36.             self.handlers[ename](*args)
  37.         
  38.  
  39.     
  40.     def unbind(self, ename, callback):
  41.         if self.handlers[ename]:
  42.             
  43.             try:
  44.                 self.handlers[ename] -= callback
  45.             except ValueError:
  46.                 pass
  47.             except:
  48.                 None<EXCEPTION MATCH>ValueError
  49.             
  50.  
  51.         None<EXCEPTION MATCH>ValueError
  52.  
  53.     
  54.     def clear(self):
  55.         for evtname in self.events:
  56.             self.handlers[evtname] = Delegate()
  57.         
  58.  
  59.     
  60.     def __getattr__(self, attr):
  61.         if attr in self.events:
  62.             return self.handlers[attr]
  63.         return object.__getattribute__(self, attr)
  64.  
  65.  
  66.  
  67. def event(f):
  68.     import functools
  69.     
  70.     def wrapper(self, *a):
  71.         name = f.func_name
  72.         retval = f(self, *a)
  73.         if retval is Veto or isinstance(retval, Veto):
  74.             return None
  75.         if isinstance(retval, tuple):
  76.             self.event(name, *retval)
  77.         elif retval not in (None, sentinel):
  78.             self.event(name, retval)
  79.         elif retval is None:
  80.             self.event(name, *a)
  81.         
  82.  
  83.     wrapper = (functools.wraps(f),)(wrapper)
  84.     return wrapper
  85.  
  86.