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

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. from pprint import pprint
  5. from collections import defaultdict
  6.  
  7. try:
  8.     sentinel
  9. except NameError:
  10.     
  11.     class Sentinel(object):
  12.         
  13.         def __repr__(self):
  14.             return '<Sentinel (%r backup) %#x>' % (__file__, id(self))
  15.  
  16.  
  17.     sentinel = Sentinel()
  18.  
  19.  
  20. class ObservableMeta(type):
  21.     
  22.     def __new__(mcl, name, bases, cdict):
  23.         obsprops = _[1]
  24.         for name, prop in obsprops:
  25.             for hidden_attr in prop.observe:
  26.                 props[hidden_attr].append(name)
  27.             
  28.         
  29.         return super(ObservableMeta, mcl).__new__(mcl, name, bases, cdict)
  30.  
  31.  
  32.  
  33. class ObservableProperty(object):
  34.     
  35.     def __init__(self, fget = None, fset = None, fdel = None, doc = None, observe = sentinel):
  36.         if not all((lambda .0: for c in .0:
  37. callable(c))(filter(None, [
  38.             fget,
  39.             fset,
  40.             fdel]))):
  41.             raise AssertionError('%s %s %s' % (repr(fget), repr(fset), repr(fdel)))
  42.         
  43.         self.fget = fget
  44.         self.fset = fset
  45.         self.fdel = fdel
  46.         self.__doc__ = doc
  47.         if observe is sentinel:
  48.             raise ValueError("'observe' keyword argument is required")
  49.         
  50.         if isinstance(observe, basestring):
  51.             observe = tuple([
  52.                 observe])
  53.         
  54.         self.observe = observe
  55.  
  56.     
  57.     def __get__(self, obj, objtype):
  58.         return self.fget(obj)
  59.  
  60.     
  61.     def __set__(self, obj, value):
  62.         self.fset(obj, value)
  63.  
  64.     
  65.     def __delete__(self, obj):
  66.         self.fdel(obj)
  67.  
  68.     
  69.     def __repr__(self):
  70.         return '<ObservableProperty (%r)>' % self.observe
  71.  
  72.  
  73.  
  74. def main():
  75.     Observable = Observable
  76.     import util.observe
  77.     
  78.     class foo((Observable,)):
  79.         __metaclass__ = ObservableMeta
  80.         
  81.         def __init__(self):
  82.             Observable.__init__(self)
  83.             self._hidden = 'Hello world'
  84.  
  85.         
  86.         def _wikized(self):
  87.             return self._hidden.title().replace(' ', '')
  88.  
  89.         
  90.         def transmutate(self):
  91.             self.setnotify('_hidden', 'Observable properties sure are fun')
  92.  
  93.         wikiword = ObservableProperty(_wikized, observe = '_hidden')
  94.  
  95.     f = foo()
  96.     
  97.     def observer(instance, attr, old, new):
  98.         print '%s: %s -> %s' % (attr, old, new)
  99.  
  100.     f.add_observer(observer, 'wikiword')
  101.     f.transmutate()
  102.     f.setnotify('_hidden', 'another test')
  103.  
  104. if __name__ == '__main__':
  105.     main()
  106.  
  107.