documentation
This commit is contained in:
parent
d42f1811d1
commit
b49fb35d48
2 changed files with 42 additions and 2 deletions
|
|
@ -31,6 +31,9 @@ class CallErrors(Exception):
|
||||||
Exception.__init__(self, "Several errors have been raised:\n%s" % ('\n'.join(['%s: %s' % (b, e) for b, e in errors])))
|
Exception.__init__(self, "Several errors have been raised:\n%s" % ('\n'.join(['%s: %s' % (b, e) for b, e in errors])))
|
||||||
self.errors = copy(errors)
|
self.errors = copy(errors)
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
return self.errors.__iter__()
|
||||||
|
|
||||||
class Result(object):
|
class Result(object):
|
||||||
def __init__(self, backend, result):
|
def __init__(self, backend, result):
|
||||||
self.backend = backend
|
self.backend = backend
|
||||||
|
|
@ -48,6 +51,11 @@ class Result(object):
|
||||||
|
|
||||||
class BackendsCall(object):
|
class BackendsCall(object):
|
||||||
def __init__(self, backends, function, *args, **kwargs):
|
def __init__(self, backends, function, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
@param backends list of backends to call
|
||||||
|
@param function backends' method name, or callable object
|
||||||
|
@param args, kwargs arguments given to called functions
|
||||||
|
"""
|
||||||
# Store if a backend is finished
|
# Store if a backend is finished
|
||||||
self.backends = {}
|
self.backends = {}
|
||||||
for backend in backends:
|
for backend in backends:
|
||||||
|
|
@ -69,9 +77,9 @@ class BackendsCall(object):
|
||||||
with self.mutex:
|
with self.mutex:
|
||||||
for b in backends:
|
for b in backends:
|
||||||
debug('New timer for %s' % b)
|
debug('New timer for %s' % b)
|
||||||
self.threads.append(Timer(0, self.caller, (b, function, args, kwargs)).start())
|
self.threads.append(Timer(0, self._caller, (b, function, args, kwargs)).start())
|
||||||
|
|
||||||
def caller(self, b, function, args, kwargs):
|
def _caller(self, b, function, args, kwargs):
|
||||||
debug('Hello from timer %s' % b)
|
debug('Hello from timer %s' % b)
|
||||||
with b:
|
with b:
|
||||||
try:
|
try:
|
||||||
|
|
|
||||||
|
|
@ -93,16 +93,48 @@ class Weboob(object):
|
||||||
return self.backends
|
return self.backends
|
||||||
|
|
||||||
def iter_backends(self, caps=None):
|
def iter_backends(self, caps=None):
|
||||||
|
"""
|
||||||
|
Iter on each backends.
|
||||||
|
|
||||||
|
Note: each backend is locked when it is returned.
|
||||||
|
|
||||||
|
@param caps Optional list of capabilities to select backends
|
||||||
|
@return iterator on selected backends.
|
||||||
|
"""
|
||||||
for name, backend in self.backends.iteritems():
|
for name, backend in self.backends.iteritems():
|
||||||
if caps is None or backend.has_caps(caps):
|
if caps is None or backend.has_caps(caps):
|
||||||
with backend:
|
with backend:
|
||||||
yield backend
|
yield backend
|
||||||
|
|
||||||
def do(self, function, *args, **kwargs):
|
def do(self, function, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Do calls on loaded backends with specified arguments, in separated
|
||||||
|
threads.
|
||||||
|
|
||||||
|
This function has two modes:
|
||||||
|
- If 'function' is a string, it calls the method with this name on
|
||||||
|
each backends with the specified arguments;
|
||||||
|
- If 'function' is a callable, it calls it in a separated thread with
|
||||||
|
the locked backend instance at first arguments, and *args and
|
||||||
|
**kwargs.
|
||||||
|
|
||||||
|
@param function backend's method name, or callable object
|
||||||
|
@return an iterator of results
|
||||||
|
"""
|
||||||
backends = [b for b in self.iter_backends()]
|
backends = [b for b in self.iter_backends()]
|
||||||
return BackendsCall(backends, function, *args, **kwargs)
|
return BackendsCall(backends, function, *args, **kwargs)
|
||||||
|
|
||||||
def do_caps(self, caps, function, *args, **kwargs):
|
def do_caps(self, caps, function, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Do calls on loaded modules with the specified capabilities, in
|
||||||
|
separated threads.
|
||||||
|
|
||||||
|
See also documentation of the 'do' method.
|
||||||
|
|
||||||
|
@param caps list of caps or cap to select backends
|
||||||
|
@param function backend's method name, or callable object
|
||||||
|
@return an iterator of results
|
||||||
|
"""
|
||||||
backends = [b for b in self.iter_backends(caps)]
|
backends = [b for b in self.iter_backends(caps)]
|
||||||
return BackendsCall(backends, function, *args, **kwargs)
|
return BackendsCall(backends, function, *args, **kwargs)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue