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

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. __revision__ = '$Id: utils.py 647 2006-08-26 18:27:39Z jajcus $'
  5. __docformat__ = 'restructuredtext en'
  6. import sys
  7. from types import FunctionType
  8.  
  9. def classImplements(cls, *interfaces):
  10.     if not isinstance(cls, classobj):
  11.         raise TypeError, '%r is not a class'
  12.     
  13.     for interface in interfaces:
  14.         if not isinstance(interface, InterfaceClass):
  15.             raise TypeError, 'Only interfaces may be implemented'
  16.             continue
  17.     
  18.     cls.__implemented__ = tuple(interfaces)
  19.  
  20.  
  21. def implements(*interfaces):
  22.     for interface in interfaces:
  23.         if not isinstance(interface, InterfaceClass):
  24.             raise TypeError, 'Only interfaces may be implemented'
  25.             continue
  26.     
  27.     frame = sys._getframe(1)
  28.     locals = frame.f_locals
  29.     if locals is frame.f_globals or '__module__' not in locals:
  30.         raise TypeError, 'implements() may only be used in a class definition'
  31.     
  32.     if '__implemented__' in locals:
  33.         raise TypeError, 'implements() may be used only once'
  34.     
  35.     locals['__implemented__'] = tuple(interfaces)
  36.  
  37.  
  38. def _whole_tree(cls):
  39.     yield cls
  40.     for base in cls.__bases__:
  41.         for b in _whole_tree(base):
  42.             yield b
  43.         
  44.     
  45.  
  46.  
  47. def implementedBy(cls):
  48.     
  49.     try:
  50.         for interface in cls.__implemented__:
  51.             for c in _whole_tree(interface):
  52.                 yield c
  53.             
  54.     except AttributeError:
  55.         pass
  56.  
  57.     for base in cls.__bases__:
  58.         for interface in implementedBy(base):
  59.             yield interface
  60.         
  61.     
  62.  
  63.  
  64. def providedBy(ob):
  65.     
  66.     try:
  67.         for interface in ob.__provides__:
  68.             yield interface
  69.     except AttributeError:
  70.         
  71.         try:
  72.             for interface in implementedBy(ob.__class__):
  73.                 yield interface
  74.         except AttributeError:
  75.             return None
  76.         except:
  77.             None<EXCEPTION MATCH>AttributeError
  78.         
  79.  
  80.         None<EXCEPTION MATCH>AttributeError
  81.  
  82.  
  83.  
  84. class InterfaceClass(object):
  85.     
  86.     def __init__(self, name, bases = (), attrs = None, __doc__ = None, __module__ = None):
  87.         if __module__ is None:
  88.             if attrs is not None and '__module__' in attrs and isinstance(attrs['__module__'], str):
  89.                 __module__ = attrs['__module__']
  90.                 del attrs['__module__']
  91.             else:
  92.                 __module__ = sys._getframe(1).f_globals['__name__']
  93.         
  94.         if __doc__ is not None:
  95.             self.__doc__ = __doc__
  96.         
  97.         if attrs is not None and '__doc__' in attrs:
  98.             del attrs['__doc__']
  99.         
  100.         self.__module__ = __module__
  101.         for base in bases:
  102.             if not isinstance(base, InterfaceClass):
  103.                 raise TypeError, 'Interface bases must be Interfaces'
  104.                 continue
  105.         
  106.         if attrs is not None:
  107.             for aname, attr in attrs.items():
  108.                 if not isinstance(attr, Attribute) and type(attr) is not FunctionType:
  109.                     raise TypeError, 'Interface attributes must be Attributes o functions (%r found in %s)' % (attr, aname)
  110.                     continue
  111.             
  112.         
  113.         self.__bases__ = bases
  114.         self._InterfaceClass__attrs = attrs
  115.         self.__name__ = name
  116.         self.__identifier__ = '%s.%s' % (self.__module__, self.__name__)
  117.  
  118.     
  119.     def providedBy(self, ob):
  120.         if self in providedBy(ob):
  121.             return True
  122.         
  123.         return False
  124.  
  125.     
  126.     def implementedBy(self, cls):
  127.         return self in implementedBy(cls)
  128.  
  129.     
  130.     def __repr__(self):
  131.         name = self.__name__
  132.         module = self.__module__
  133.         if module and module != '__main__':
  134.             name = '%s.%s' % (module, name)
  135.         
  136.         return '<%s %s>' % (self.__class__.__name__, name)
  137.  
  138.  
  139.  
  140. class Attribute(object):
  141.     
  142.     def __init__(self, doc):
  143.         self.__doc__ = doc
  144.  
  145.  
  146. Interface = InterfaceClass('Interface', __module__ = 'pyxmpp.inteface_micro_impl')
  147.