Miscellanea

pydu.misc.timeout(seconds)

This func decorates any func which may be hang for a while. The param seconds can be either integer or float. In test.py, you may write like below:

import time
from pydu.misc import unix_timeout
@timeout(1)
def f():
    time.sleep(1.01)
f()

And run test.py, will see TimeoutError.

pydu.misc.trace(obj)

Tracing every statement and line number for running program, like bash -x. In test.py, you may write like below:

from pydu.misc import trace
@trace
def f():
    print(1)
    a = 1 + 5
    b = [a]
    print(2)
f()

And run test.py, will see below output from console:

test.py(4):     print(1)
1
test.py(5):     a = 1 + 5
test.py(6):     b = [a]
test.py(7):     print(2)
2
pydu.misc.memoize(obj)

A simple memoize decorator for functions supporting (hashable) positional arguments. It also provides a cache_clear() function for clearing the cache.

>>> @memoize
... def foo()
...     return 1
    ...
>>> foo()
1
>>> foo.cache_clear()
>>>
pydu.misc.memoize_when_activated(obj)

A memoize decorator which is disabled by default. It can be activated and deactivated on request. For efficiency reasons it can be used only against class methods accepting no arguments.

>>> class Foo:
...     @memoize
...     def foo()
...         print(1)
...
>>> f = Foo()
>>> # deactivated (default)
>>> foo()
1
>>> foo()
1
>>>
>>> # activated
>>> foo.cache_activate()
>>> foo()
1
>>> foo()
>>> foo()
>>>
pydu.misc.super_len(obj)

Get length of object which has attribute named __len__, len, fileno, tell, such as list, tuple, dict, file and so on.

>>> from pydu.misc import super_len
>>> super_len([1, 2])
2
>>> super_len(open('test', 'w'))
0