Source code for simudo.util.todo
from cached_property import cached_property
__all__ = ['TODO']
[docs]class TODO():
''' Maintain a list of callbacks to be done later. Useful for
plotting for example.
>>> from simudo.util.todo import TODO
>>> todo = TODO()
>>> todo(0, print, "a")
>>> todo(2, print, "c")
>>> todo(1, print, "b")
>>> todo.call()
a
b
c
'''
@cached_property
def list(self):
return []
def __call__(self, *args, **kwargs):
''' Add call to be performed later.
Parameters
----------
order: orderable
Sorting key to determine order in which callback is
called. Smaller comes first.
callback: callable
Callable.
*args:
Extra positional arguments to pass to `callback`.
**kwargs:
Extra keyword arguments to pass to `callback`.
'''
order, callback = args[:2]
args = args[2:]
self.list.append((order, callback, args, kwargs))
[docs] def call(self):
''' Perform calls in order dictated by their sorting key. '''
lst = self.list
lst.sort(key=lambda x: x[0])
for order, func, args, kwargs in lst:
func(*args, **kwargs)