home *** CD-ROM | disk | FTP | other *** search
/ Freelog 116 / FreelogNo116-JuilletSeptembre2013.iso / Bureautique / gImageReader / gimagereader_0.9-1_win32.exe / bin / functools.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2011-03-24  |  5KB  |  114 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.7)
  3.  
  4. '''functools.py - Tools for working with functions and callable objects
  5. '''
  6. from _functools import partial, reduce
  7. WRAPPER_ASSIGNMENTS = ('__module__', '__name__', '__doc__')
  8. WRAPPER_UPDATES = ('__dict__',)
  9.  
  10. def update_wrapper(wrapper, wrapped, assigned = WRAPPER_ASSIGNMENTS, updated = WRAPPER_UPDATES):
  11.     '''Update a wrapper function to look like the wrapped function
  12.  
  13.        wrapper is the function to be updated
  14.        wrapped is the original function
  15.        assigned is a tuple naming the attributes assigned directly
  16.        from the wrapped function to the wrapper function (defaults to
  17.        functools.WRAPPER_ASSIGNMENTS)
  18.        updated is a tuple naming the attributes of the wrapper that
  19.        are updated with the corresponding attribute from the wrapped
  20.        function (defaults to functools.WRAPPER_UPDATES)
  21.     '''
  22.     for attr in assigned:
  23.         setattr(wrapper, attr, getattr(wrapped, attr))
  24.     
  25.     for attr in updated:
  26.         getattr(wrapper, attr).update(getattr(wrapped, attr, { }))
  27.     
  28.     return wrapper
  29.  
  30.  
  31. def wraps(wrapped, assigned = WRAPPER_ASSIGNMENTS, updated = WRAPPER_UPDATES):
  32.     '''Decorator factory to apply update_wrapper() to a wrapper function
  33.  
  34.        Returns a decorator that invokes update_wrapper() with the decorated
  35.        function as the wrapper argument and the arguments to wraps() as the
  36.        remaining arguments. Default arguments are as for update_wrapper().
  37.        This is a convenience function to simplify applying partial() to
  38.        update_wrapper().
  39.     '''
  40.     return partial(update_wrapper, wrapped = wrapped, assigned = assigned, updated = updated)
  41.  
  42.  
  43. def total_ordering(cls):
  44.     '''Class decorator that fills in missing ordering methods'''
  45.     convert = {
  46.         '__lt__': [
  47.             ('__gt__', (lambda self, other: other < self)),
  48.             ('__le__', (lambda self, other: not (other < self))),
  49.             ('__ge__', (lambda self, other: not (self < other)))],
  50.         '__le__': [
  51.             ('__ge__', (lambda self, other: other <= self)),
  52.             ('__lt__', (lambda self, other: not (other <= self))),
  53.             ('__gt__', (lambda self, other: not (self <= other)))],
  54.         '__gt__': [
  55.             ('__lt__', (lambda self, other: other > self)),
  56.             ('__ge__', (lambda self, other: not (other > self))),
  57.             ('__le__', (lambda self, other: not (self > other)))],
  58.         '__ge__': [
  59.             ('__le__', (lambda self, other: other >= self)),
  60.             ('__gt__', (lambda self, other: not (other >= self))),
  61.             ('__lt__', (lambda self, other: not (self >= other)))] }
  62.     roots = set(dir(cls)) & set(convert)
  63.     if not roots:
  64.         raise ValueError('must define at least one ordering operation: < > <= >=')
  65.     root = max(roots)
  66.     for opname, opfunc in convert[root]:
  67.         if opname not in roots:
  68.             opfunc.__name__ = opname
  69.             opfunc.__doc__ = getattr(int, opname).__doc__
  70.             setattr(cls, opname, opfunc)
  71.             continue
  72.     return cls
  73.  
  74.  
  75. def cmp_to_key(mycmp):
  76.     '''Convert a cmp= function into a key= function'''
  77.     
  78.     class K((object,)):
  79.         
  80.         def __init__(self, obj, *args):
  81.             self.obj = obj
  82.  
  83.         
  84.         def __lt__(self, other):
  85.             return mycmp(self.obj, other.obj) < 0
  86.  
  87.         
  88.         def __gt__(self, other):
  89.             return mycmp(self.obj, other.obj) > 0
  90.  
  91.         
  92.         def __eq__(self, other):
  93.             return mycmp(self.obj, other.obj) == 0
  94.  
  95.         
  96.         def __le__(self, other):
  97.             return mycmp(self.obj, other.obj) <= 0
  98.  
  99.         
  100.         def __ge__(self, other):
  101.             return mycmp(self.obj, other.obj) >= 0
  102.  
  103.         
  104.         def __ne__(self, other):
  105.             return mycmp(self.obj, other.obj) != 0
  106.  
  107.         
  108.         def __hash__(self):
  109.             raise TypeError('hash not implemented')
  110.  
  111.  
  112.     return K
  113.  
  114.