home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 October / maximum-cd-2011-10.iso / DiscContents / digsby_setup.exe / lib / protocols / adapters.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2011-06-22  |  4.5 KB  |  149 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. __all__ = [
  5.     'NO_ADAPTER_NEEDED',
  6.     'DOES_NOT_SUPPORT',
  7.     'Adapter',
  8.     'minimumAdapter',
  9.     'composeAdapters',
  10.     'updateWithSimplestAdapter',
  11.     'StickyAdapter',
  12.     'AdaptationFailure',
  13.     'bindAdapter']
  14. from types import FunctionType, ClassType, MethodType
  15.  
  16. try:
  17.     PendingDeprecationWarning
  18. except NameError:
  19.     
  20.     class PendingDeprecationWarning(Warning):
  21.         pass
  22.  
  23.  
  24.  
  25. class AdaptationFailure(NotImplementedError, TypeError):
  26.     pass
  27.  
  28.  
  29. def NO_ADAPTER_NEEDED(obj, protocol = None):
  30.     return obj
  31.  
  32.  
  33. def DOES_NOT_SUPPORT(obj, protocol = None):
  34.     pass
  35.  
  36.  
  37. try:
  38.     from _speedups import NO_ADAPTER_NEEDED, DOES_NOT_SUPPORT
  39. except ImportError:
  40.     pass
  41.  
  42.  
  43. class Adapter(object):
  44.     
  45.     def __init__(self, ob):
  46.         self.subject = ob
  47.  
  48.  
  49.  
  50. class StickyAdapter(object):
  51.     attachForProtocols = ()
  52.     
  53.     def __init__(self, ob):
  54.         self.subject = ob
  55.         provides = list(self.attachForProtocols)
  56.         declareAdapter = declareAdapter
  57.         import protocols.api
  58.         (declareAdapter,)((lambda s: self), provides, forObjects = [
  59.             ob])
  60.  
  61.  
  62.  
  63. def minimumAdapter(a1, a2, d1 = 0, d2 = 0):
  64.     if d1 < d2:
  65.         return a1
  66.     if d2 < d1:
  67.         return a2
  68.     if getattr(a1, '__unbound_adapter__', a1) is getattr(a2, '__unbound_adapter__', a2):
  69.         return a1
  70.     a1ct = getattr(a1, '__adapterCount__', 1)
  71.     a2ct = getattr(a2, '__adapterCount__', 1)
  72.     if a1ct < a2ct:
  73.         return a1
  74.     if a2ct < a1ct:
  75.         return a2
  76.     if a1 is NO_ADAPTER_NEEDED or a2 is DOES_NOT_SUPPORT:
  77.         return a1
  78.     if a1 is DOES_NOT_SUPPORT or a2 is NO_ADAPTER_NEEDED:
  79.         return a2
  80.     raise TypeError('Ambiguous adapter choice', a1, a2, d1, d2)
  81.  
  82.  
  83. def composeAdapters(baseAdapter, baseProtocol, extendingAdapter):
  84.     if baseAdapter is DOES_NOT_SUPPORT or extendingAdapter is DOES_NOT_SUPPORT:
  85.         return DOES_NOT_SUPPORT
  86.     if baseAdapter is NO_ADAPTER_NEEDED:
  87.         return extendingAdapter
  88.     if extendingAdapter is NO_ADAPTER_NEEDED:
  89.         return baseAdapter
  90.     
  91.     def newAdapter(ob):
  92.         ob = baseAdapter(ob)
  93.         if ob is not None:
  94.             return extendingAdapter(ob)
  95.  
  96.     newAdapter.__adapterCount__ = getattr(extendingAdapter, '__adapterCount__', 1) + getattr(baseAdapter, '__adapterCount__', 1)
  97.     return newAdapter
  98.  
  99.  
  100. def bindAdapter(adapter, proto):
  101.     maxargs = 2
  102.     f = adapter
  103.     tries = 10
  104.     while not isinstance(f, FunctionType) and tries:
  105.         if isinstance(f, MethodType):
  106.             maxargs += (f.im_self is not None)
  107.             f = f.im_func
  108.             tries = 10
  109.             continue
  110.         if isinstance(f, (ClassType, type)):
  111.             maxargs += 1
  112.             f = f.__init__
  113.             tries -= 1
  114.             continue
  115.         f = f.__call__
  116.         tries -= 1
  117.     if isinstance(f, FunctionType):
  118.         getargspec = getargspec
  119.         import inspect
  120.         (args, varargs, varkw, defaults) = getargspec(f)
  121.         if defaults:
  122.             args = args[:-len(defaults)]
  123.         
  124.         if len(args) >= maxargs:
  125.             
  126.             newAdapter = lambda ob: adapter(ob, proto)
  127.             newAdapter.__adapterCount__ = getattr(adapter, '__adapterCount__', 1)
  128.             newAdapter.__unbound_adapter__ = adapter
  129.             warn = warn
  130.             import warnings
  131.             warn('Adapter %r to protocol %r needs multiple arguments' % (adapter, proto), PendingDeprecationWarning, 6)
  132.             return newAdapter
  133.     
  134.     return adapter
  135.  
  136.  
  137. def updateWithSimplestAdapter(mapping, key, adapter, depth):
  138.     new = adapter
  139.     old = mapping.get(key)
  140.     if old is not None:
  141.         (old, oldDepth) = old
  142.         new = minimumAdapter(old, adapter, oldDepth, depth)
  143.         if old is new and depth >= oldDepth:
  144.             return False
  145.     
  146.     mapping[key] = (new, depth)
  147.     return True
  148.  
  149.