home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2009 June / maximum-cd-2009-06.iso / DiscContents / digsby_setup.exe / lib / util / Events.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-02-26  |  2.5 KB  |  87 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. from primitives 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.         
  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.         else:
  64.             return object.__getattribute__(self, attr)
  65.  
  66.  
  67.  
  68. def event(f):
  69.     import functools
  70.     
  71.     def wrapper(self, *a):
  72.         name = f.func_name
  73.         retval = f(self, *a)
  74.         if retval is Veto or isinstance(retval, Veto):
  75.             return None
  76.         elif isinstance(retval, tuple):
  77.             self.event(name, *retval)
  78.         elif retval not in (None, sentinel):
  79.             self.event(name, retval)
  80.         elif retval is None:
  81.             self.event(name, *a)
  82.         
  83.  
  84.     wrapper = (functools.wraps(f),)(wrapper)
  85.     return wrapper
  86.  
  87.