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

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. __all__ = [
  5.     'ProviderMixin']
  6. from types import FunctionType, ModuleType, InstanceType, ClassType
  7. from adapters import *
  8. from api import declareImplementation, advise, declareAdapterForObject, adapt
  9. from interfaces import *
  10. from new import instancemethod
  11. from advice import getMRO, metamethod, mkRef
  12.  
  13. class ProviderMixin:
  14.     advise(instancesProvide = [
  15.         IOpenProvider,
  16.         IImplicationListener])
  17.     
  18.     def declareProvides(self, protocol, adapter = NO_ADAPTER_NEEDED, depth = 1):
  19.         registry = self.__dict__.get('__protocols_provided__')
  20.         if registry is None:
  21.             self.__protocols_provided__ = registry = { }
  22.         
  23.         if updateWithSimplestAdapter(registry, protocol, adapter, depth):
  24.             adapt(protocol, IOpenProtocol).addImplicationListener(self)
  25.             return True
  26.  
  27.     declareProvides = metamethod(declareProvides)
  28.     
  29.     def newProtocolImplied(self, srcProto, destProto, adapter, depth):
  30.         registry = self.__dict__.get('__protocols_provided__', ())
  31.         if srcProto not in registry:
  32.             return None
  33.         (baseAdapter, d) = registry[srcProto]
  34.         adapter = composeAdapters(baseAdapter, srcProto, adapter)
  35.         declareAdapterForObject(destProto, adapter, self, depth + d)
  36.  
  37.     newProtocolImplied = metamethod(newProtocolImplied)
  38.     
  39.     def __conform__(self, protocol):
  40.         for cls in getMRO(self):
  41.             conf = cls.__dict__.get('__protocols_provided__', ())
  42.             if protocol in conf:
  43.                 return conf[protocol][0](self)
  44.         
  45.  
  46.     __conform__ = metamethod(__conform__)
  47.  
  48.  
  49. class conformsRegistry(dict):
  50.     
  51.     def __call__(self, protocol):
  52.         if protocol in self:
  53.             subject = self.subject()
  54.             if subject is not None:
  55.                 return self[protocol][0](subject)
  56.         
  57.  
  58.     
  59.     def findImplementation(self, subject, protocol, checkSelf = True):
  60.         for cls in getMRO(subject):
  61.             conf = cls.__dict__.get('__conform__')
  62.             if conf is None:
  63.                 continue
  64.             
  65.             if not isinstance(conf, conformsRegistry):
  66.                 raise TypeError('Incompatible __conform__ in base class', conf, cls)
  67.             isinstance(conf, conformsRegistry)
  68.             if protocol in conf:
  69.                 return conf[protocol][0](subject)
  70.         
  71.  
  72.     
  73.     def newProtocolImplied(self, srcProto, destProto, adapter, depth):
  74.         subject = self.subject()
  75.         if subject is None or srcProto not in self:
  76.             return None
  77.         (baseAdapter, d) = self[srcProto]
  78.         adapter = composeAdapters(baseAdapter, srcProto, adapter)
  79.         declareAdapterForObject(destProto, adapter, subject, depth + d)
  80.  
  81.     
  82.     def __hash__(self):
  83.         return id(self)
  84.  
  85.     
  86.     def __get__(self, ob, typ = None):
  87.         if ob is not None:
  88.             raise AttributeError('__conform__ registry does not pass to instances')
  89.         ob is not None
  90.         return instancemethod(self.findImplementation, typ, type(typ))
  91.  
  92.     
  93.     def __getstate__(self):
  94.         return (self.subject(), self.items())
  95.  
  96.     
  97.     def __setstate__(self, .1):
  98.         (subject, items) = .1
  99.         self.clear()
  100.         self.update(dict(items))
  101.         self.subject = mkRef(subject)
  102.  
  103.  
  104.  
  105. class MiscObjectsAsOpenProvider(object):
  106.     advise(instancesProvide = [
  107.         IOpenProvider], asAdapterForTypes = [
  108.         FunctionType,
  109.         ModuleType,
  110.         InstanceType,
  111.         ClassType,
  112.         type,
  113.         object])
  114.     
  115.     def __init__(self, ob):
  116.         obs = list(getMRO(ob))
  117.         for item in obs:
  118.             
  119.             try:
  120.                 reg = item.__dict__.get('__conform__')
  121.                 if reg is None and obs == [
  122.                     ob]:
  123.                     reg = getattr(item, '__conform__', None)
  124.             except AttributeError:
  125.                 raise TypeError('Only objects with dictionaries can use this adapter', ob)
  126.  
  127.             if reg is not None and not isinstance(reg, conformsRegistry):
  128.                 raise TypeError('Incompatible __conform__ on adapted object', ob, reg)
  129.             not isinstance(reg, conformsRegistry)
  130.         
  131.         reg = ob.__dict__.get('__conform__')
  132.         if reg is None:
  133.             reg = ob.__conform__ = self.newRegistry(ob)
  134.         
  135.         self.ob = ob
  136.         self.reg = reg
  137.  
  138.     
  139.     def declareProvides(self, protocol, adapter = NO_ADAPTER_NEEDED, depth = 1):
  140.         if updateWithSimplestAdapter(self.reg, protocol, adapter, depth):
  141.             adapt(protocol, IOpenProtocol).addImplicationListener(self.reg)
  142.             return True
  143.  
  144.     
  145.     def newRegistry(self, subject):
  146.         reg = conformsRegistry()
  147.         reg.subject = mkRef(subject)
  148.         return reg
  149.  
  150.  
  151.