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

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. __all__ = [
  5.     'adapt',
  6.     'declareAdapterForType',
  7.     'declareAdapterForProtocol',
  8.     'declareAdapterForObject',
  9.     'advise',
  10.     'declareImplementation',
  11.     'declareAdapter',
  12.     'adviseObject']
  13. _marker = object()
  14. from sys import _getframe, exc_info, modules
  15. from types import ClassType
  16. ClassTypes = (ClassType, type)
  17. from adapters import NO_ADAPTER_NEEDED, DOES_NOT_SUPPORT, AdaptationFailure
  18. from adapters import bindAdapter
  19. from peak.util.decorators import decorate_class, frameinfo
  20. from interfaces import IOpenProtocol, IOpenProvider, IOpenImplementor
  21. from interfaces import Protocol, InterfaceClass
  22.  
  23. def adapt(obj, protocol, default = _marker):
  24.     if isinstance(protocol, ClassTypes) and isinstance(obj, protocol):
  25.         return obj
  26.     
  27.     try:
  28.         _conform = obj.__conform__
  29.     except AttributeError:
  30.         isinstance(obj, protocol)
  31.         isinstance(obj, protocol)
  32.     except:
  33.         isinstance(obj, protocol)
  34.  
  35.     
  36.     try:
  37.         result = _conform(protocol)
  38.         if result is not None:
  39.             return result
  40.     except TypeError:
  41.         isinstance(obj, protocol)
  42.         isinstance(obj, protocol)
  43.         if exc_info()[2].tb_next is not None:
  44.             raise 
  45.         exc_info()[2].tb_next is not None
  46.     except:
  47.         isinstance(obj, protocol)
  48.  
  49.     
  50.     try:
  51.         _adapt = protocol.__adapt__
  52.     except AttributeError:
  53.         isinstance(obj, protocol)
  54.         isinstance(obj, protocol)
  55.     except:
  56.         isinstance(obj, protocol)
  57.  
  58.     
  59.     try:
  60.         result = _adapt(obj)
  61.         if result is not None:
  62.             return result
  63.     except TypeError:
  64.         isinstance(obj, protocol)
  65.         isinstance(obj, protocol)
  66.         if exc_info()[2].tb_next is not None:
  67.             raise 
  68.         exc_info()[2].tb_next is not None
  69.     except:
  70.         isinstance(obj, protocol)
  71.  
  72.     if default is _marker:
  73.         raise AdaptationFailure("Can't adapt", obj, protocol)
  74.     default is _marker
  75.     return default
  76.  
  77.  
  78. try:
  79.     from _speedups import adapt
  80. except ImportError:
  81.     pass
  82.  
  83.  
  84. def declareAdapterForType(protocol, adapter, typ, depth = 1):
  85.     adapter = bindAdapter(adapter, protocol)
  86.     adapter = adapt(protocol, IOpenProtocol).registerImplementation(typ, adapter, depth)
  87.     oi = adapt(typ, IOpenImplementor, None)
  88.     if oi is not None:
  89.         oi.declareClassImplements(protocol, adapter, depth)
  90.     
  91.  
  92.  
  93. def declareAdapterForProtocol(protocol, adapter, proto, depth = 1):
  94.     adapt(protocol, IOpenProtocol)
  95.     adapt(proto, IOpenProtocol).addImpliedProtocol(protocol, bindAdapter(adapter, protocol), depth)
  96.  
  97.  
  98. def declareAdapterForObject(protocol, adapter, ob, depth = 1):
  99.     adapt(protocol, IOpenProtocol).registerObject(ob, bindAdapter(adapter, protocol), depth)
  100.  
  101. IOpenProtocol.registerImplementation(InterfaceClass)
  102. IOpenProtocol.registerImplementation(Protocol)
  103.  
  104. def declareAdapter(factory, provides, forTypes = (), forProtocols = (), forObjects = ()):
  105.     for protocol in provides:
  106.         for typ in forTypes:
  107.             declareAdapterForType(protocol, factory, typ)
  108.         
  109.         for proto in forProtocols:
  110.             declareAdapterForProtocol(protocol, factory, proto)
  111.         
  112.         for ob in forObjects:
  113.             declareAdapterForObject(protocol, factory, ob)
  114.         
  115.     
  116.  
  117.  
  118. def declareImplementation(typ, instancesProvide = (), instancesDoNotProvide = ()):
  119.     for proto in instancesProvide:
  120.         declareAdapterForType(proto, NO_ADAPTER_NEEDED, typ)
  121.     
  122.     for proto in instancesDoNotProvide:
  123.         declareAdapterForType(proto, DOES_NOT_SUPPORT, typ)
  124.     
  125.  
  126.  
  127. def adviseObject(ob, provides = (), doesNotProvide = ()):
  128.     for proto in provides:
  129.         declareAdapterForObject(proto, NO_ADAPTER_NEEDED, ob)
  130.     
  131.     for proto in doesNotProvide:
  132.         declareAdapterForObject(proto, DOES_NOT_SUPPORT, ob)
  133.     
  134.  
  135.  
  136. def advise(**kw):
  137.     kw = kw.copy()
  138.     frame = _getframe(1)
  139.     (kind, module, caller_locals, caller_globals) = frameinfo(frame)
  140.     if kind == 'module':
  141.         moduleProvides = kw.setdefault('moduleProvides', ())
  142.         del kw['moduleProvides']
  143.         for k in kw:
  144.             raise TypeError('Invalid keyword argument for advising modules: %s' % k)
  145.         
  146.         adviseObject(module, provides = moduleProvides)
  147.         return None
  148.     if kind != 'class':
  149.         raise SyntaxError('protocols.advise() must be called directly in a class or module body, not in a function or exec.')
  150.     kind != 'class'
  151.     classProvides = kw.setdefault('classProvides', ())
  152.     classDoesNotProvide = kw.setdefault('classDoesNotProvide', ())
  153.     instancesProvide = kw.setdefault('instancesProvide', ())
  154.     instancesDoNotProvide = kw.setdefault('instancesDoNotProvide', ())
  155.     asAdapterForTypes = kw.setdefault('asAdapterForTypes', ())
  156.     asAdapterForProtocols = kw.setdefault('asAdapterForProtocols', ())
  157.     protocolExtends = kw.setdefault('protocolExtends', ())
  158.     protocolIsSubsetOf = kw.setdefault('protocolIsSubsetOf', ())
  159.     factoryMethod = kw.setdefault('factoryMethod', None)
  160.     equivalentProtocols = kw.setdefault('equivalentProtocols', ())
  161.     map(kw.__delitem__, 'classProvides classDoesNotProvide instancesProvide instancesDoNotProvide asAdapterForTypes asAdapterForProtocols protocolExtends protocolIsSubsetOf factoryMethod equivalentProtocols'.split())
  162.     for k in kw:
  163.         raise TypeError('Invalid keyword argument for advising classes: %s' % k)
  164.     
  165.     
  166.     def callback(klass):
  167.         if classProvides or classDoesNotProvide:
  168.             adviseObject(klass, provides = classProvides, doesNotProvide = classDoesNotProvide)
  169.         
  170.         if instancesProvide or instancesDoNotProvide:
  171.             declareImplementation(klass, instancesProvide = instancesProvide, instancesDoNotProvide = instancesDoNotProvide)
  172.         
  173.         if asAdapterForTypes or asAdapterForProtocols:
  174.             if not instancesProvide:
  175.                 raise TypeError('When declaring an adapter, you must specify what its instances will provide.')
  176.             instancesProvide
  177.             if factoryMethod:
  178.                 factory = getattr(klass, factoryMethod)
  179.             else:
  180.                 factory = klass
  181.             declareAdapter(factory, instancesProvide, forTypes = asAdapterForTypes, forProtocols = asAdapterForProtocols)
  182.         elif factoryMethod:
  183.             raise TypeError("'factoryMethod' is only used when declaring an adapter type")
  184.         
  185.         if protocolExtends:
  186.             declareAdapter(NO_ADAPTER_NEEDED, protocolExtends, forProtocols = [
  187.                 klass])
  188.         
  189.         if protocolIsSubsetOf:
  190.             declareAdapter(NO_ADAPTER_NEEDED, [
  191.                 klass], forProtocols = protocolIsSubsetOf)
  192.         
  193.         if equivalentProtocols:
  194.             declareAdapter(NO_ADAPTER_NEEDED, equivalentProtocols, forProtocols = [
  195.                 klass])
  196.             declareAdapter(NO_ADAPTER_NEEDED, [
  197.                 klass], forProtocols = equivalentProtocols)
  198.         
  199.         return klass
  200.  
  201.     decorate_class(callback)
  202.  
  203.