decorator(caller) converts a caller function into a decorator
(caller, _func=None)
| 240 | |
| 241 | |
| 242 | def decorator(caller, _func=None): |
| 243 | """decorator(caller) converts a caller function into a decorator""" |
| 244 | if _func is not None: # return a decorated function |
| 245 | # this is obsolete behavior; you should use decorate instead |
| 246 | return decorate(_func, caller) |
| 247 | # else return a decorator function |
| 248 | if inspect.isclass(caller): |
| 249 | name = caller.__name__.lower() |
| 250 | doc = 'decorator(%s) converts functions/generators into ' \ |
| 251 | 'factories of %s objects' % (caller.__name__, caller.__name__) |
| 252 | elif inspect.isfunction(caller): |
| 253 | if caller.__name__ == '<lambda>': |
| 254 | name = '_lambda_' |
| 255 | else: |
| 256 | name = caller.__name__ |
| 257 | doc = caller.__doc__ |
| 258 | else: # assume caller is an object with a __call__ method |
| 259 | name = caller.__class__.__name__.lower() |
| 260 | doc = caller.__call__.__doc__ |
| 261 | evaldict = dict(_call_=caller, _decorate_=decorate) |
| 262 | return FunctionMaker.create( |
| 263 | '%s(func)' % name, 'return _decorate_(func, _call_)', |
| 264 | evaldict, doc=doc, module=caller.__module__, |
| 265 | __wrapped__=caller) |
| 266 | |
| 267 | |
| 268 | # ####################### contextmanager ####################### # |
no test coverage detected