home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_1916 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  2.5 KB  |  63 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. __all__ = [
  5.     'decorator',
  6.     'update_wrapper',
  7.     'getinfo']
  8. import inspect
  9. import sys
  10.  
  11. def getinfo(func):
  12.     (regargs, varargs, varkwargs, defaults) = inspect.getargspec(func)
  13.     argnames = list(regargs)
  14.     if varargs:
  15.         argnames.append(varargs)
  16.     
  17.     if varkwargs:
  18.         argnames.append(varkwargs)
  19.     
  20.     signature = inspect.formatargspec(regargs, varargs, varkwargs, defaults, formatvalue = (lambda value: ''))[1:-1]
  21.     return dict(name = func.__name__, argnames = argnames, signature = signature, defaults = func.func_defaults, doc = func.__doc__, module = func.__module__, dict = func.__dict__, globals = func.func_globals, closure = func.func_closure)
  22.  
  23.  
  24. def update_wrapper(wrapper, wrapped, create = False):
  25.     if isinstance(wrapped, dict):
  26.         infodict = wrapped
  27.     else:
  28.         infodict = getinfo(wrapped)
  29.     if create:
  30.         src = 'lambda %(signature)s: _wrapper_(%(signature)s)' % infodict
  31.         wrapper = eval(src, dict(_wrapper_ = wrapper))
  32.     
  33.     
  34.     try:
  35.         wrapper.__name__ = infodict['name']
  36.     except:
  37.         pass
  38.  
  39.     wrapper.__doc__ = infodict['doc']
  40.     wrapper.__module__ = infodict['module']
  41.     wrapper.__dict__.update(infodict['dict'])
  42.     wrapper.func_defaults = infodict['defaults']
  43.     return wrapper
  44.  
  45.  
  46. def _decorator(caller, func):
  47.     infodict = getinfo(func)
  48.     argnames = infodict['argnames']
  49.     src = 'lambda %(signature)s: _call_(_func_, %(signature)s)' % infodict
  50.     dec_func = eval(src, dict(_func_ = func, _call_ = caller))
  51.     return update_wrapper(dec_func, func)
  52.  
  53.  
  54. def decorator(caller, func = None):
  55.     if func is None:
  56.         return (update_wrapper,)((lambda f: _decorator(caller, f)), caller)
  57.     return _decorator(caller, func)
  58.  
  59. if __name__ == '__main__':
  60.     import doctest
  61.     doctest.testmod()
  62.  
  63.