lump.decorators module¶
-
class
lump.decorators.
DeferredStr
(func)[source]¶ Bases:
object
Simple helper class to defer the execution of formatting functions until it is needed
-
lump.decorators.
cache
(cacher=None)[source]¶ Usage:
>>> @cache() ... def test(): ... print('test') ... return 'result' >>> >>> test() test 'result' >>> test() 'result'
-
lump.decorators.
classcache
(f)[source]¶ Usage:
>>> class SomeClass: ... def __init__(self): ... self._call_count = 0 ... self._cacher = None ... ... @classcache ... def someFunc(self): ... self._call_count += 1 ... return self._call_count >>> # no class cacher set... >>> cls = SomeClass() >>> cls.someFunc() 1 >>> cls.someFunc() 2 >>> >>> class SomeClassWithCacher(SomeClass): ... def __init__(self): ... super().__init__() ... self._cacher = LocalCacher() ... ... def get_cacher(self): ... return self._cacher >>> # with a class cacher set >>> cls = SomeClassWithCacher() >>> cls.someFunc() 1 >>> cls.someFunc() 1
-
lump.decorators.
exception_redirect
(new_exception_class, old_exception_class=<class 'Exception'>, logger=None)[source]¶ Decorator to replace a given exception to another Exception class, with optional exception logging.
>>> >>> class MyException(Exception): ... pass >>> >>> @exception_redirect(MyException) ... def test(): ... raise Exception("test") >>> >>> test() Traceback (most recent call last): ... lump.decorators.MyException: test
-
lump.decorators.
log_call
(logger: logging.Logger, log_level=None, result=None)[source]¶ Decorator to log all calls to decorated function to given logger
>>> import logging, sys, io >>> >>> logger = logging.getLogger('logger_name') >>> logger.setLevel(logging.DEBUG) >>> ch = logging.StreamHandler(sys.stdout) >>> ch.setFormatter(logging.Formatter('%(levelname)s:%(name)s: %(message)s')) >>> logger.addHandler(ch) >>> >>> @log_call(logger, logging.WARNING) ... def test(*args, **kwargs): ... return 'result' >>> test('arg1', arg2='someval', arg3='someotherval') WARNING:logger_name: test('arg1', arg2='someval', arg3='someotherval') 'result' >>> @log_call(logger, result=True) ... def test(*args, **kwargs): ... return 'result' >>> test(arg2='someval', arg3='someotherval') DEBUG:logger_name: test(arg2='someval', arg3='someotherval') DEBUG:logger_name: test returned: result 'result'
-
lump.decorators.
memoize
(f, cacher=None)[source]¶ Usage:
>>> called = 0 >>> @memoize ... def someFunc(): ... global called ... called += 1 ... return called >>> >>> someFunc() 1 >>> someFunc() 1
-
lump.decorators.
retry
(tries=5, logger=None, sleep=None)[source]¶ Automagically retry the action
>>> times = 0 >>> @retry(5, logger=None) ... def a(n): ... global times ... times += 1 ... if times < n: ... raise Exception("nope") ... success = times ... times = 0 ... return success >>> a(4) 4 >>> a(0) 1 >>> a(1) 1 >>> a(5) 5 >>> a(6) Traceback (most recent call last): ... Exception: nope