Catch errors in boobill (cmds without args)

Closes #1303
This commit is contained in:
Florent 2013-10-28 18:25:17 +01:00
commit c712da56a3
2 changed files with 22 additions and 5 deletions

View file

@ -24,7 +24,8 @@ from decimal import Decimal
from weboob.capabilities.bill import ICapBill, Detail, Subscription from weboob.capabilities.bill import ICapBill, Detail, Subscription
from weboob.tools.application.repl import ReplApplication, defaultcount from weboob.tools.application.repl import ReplApplication, defaultcount
from weboob.tools.application.formatters.iformatter import PrettyFormatter from weboob.tools.application.formatters.iformatter import PrettyFormatter
from weboob.tools.application.base import MoreResultsAvailable
from weboob.core import CallErrors
__all__ = ['Boobill'] __all__ = ['Boobill']
@ -67,12 +68,28 @@ class Boobill(ReplApplication):
else: else:
l.append((id, backend_name)) l.append((id, backend_name))
more_results = []
not_implemented = []
self.start_format()
for id, backend in l: for id, backend in l:
names = (backend,) if backend is not None else None names = (backend,) if backend is not None else None
try:
for backend, result in self.do(method, id, backends=names):
self.format(result)
except CallErrors as errors:
for backend, error, backtrace in errors:
if isinstance(error, MoreResultsAvailable):
more_results.append(id + u'@' + backend.name)
elif isinstance(error, NotImplementedError):
if backend not in not_implemented:
not_implemented.append(backend)
else:
self.bcall_error_handler(backend, error, backtrace)
self.start_format() if len(more_results) > 0:
for backend, result in self.do(method, id, backends=names): print >>sys.stderr, 'Hint: There are more results available for %s (use option -n or count command)' % (', '.join(more_results))
self.format(result) for backend in not_implemented:
print >>sys.stderr, u'Error(%s): This feature is not supported yet by this backend.' % backend.name
def do_subscriptions(self, line): def do_subscriptions(self, line):
""" """
@ -104,6 +121,7 @@ class Boobill(ReplApplication):
names = (backend,) if backend is not None else None names = (backend,) if backend is not None else None
# XXX: should be generated by backend? -Flo # XXX: should be generated by backend? -Flo
# XXX: no, but you should do it in a specific formatter -romain # XXX: no, but you should do it in a specific formatter -romain
# TODO: do it, and use exec_method here. Code is obsolete
mysum = Detail() mysum = Detail()
mysum.label = u"Sum" mysum.label = u"Sum"
mysum.infos = u"Generated by boobill" mysum.infos = u"Generated by boobill"

View file

@ -247,7 +247,6 @@ class ReplApplication(Cmd, ConsoleApplication):
if len(self.objects) > 0: if len(self.objects) > 0:
return self.objects return self.objects
elif method is not None: elif method is not None:
fields = None
kwargs['backends'] = self.enabled_backends kwargs['backends'] = self.enabled_backends
for backend, object in self.weboob.do(self._do_complete, None, None, method, *args, **kwargs): for backend, object in self.weboob.do(self._do_complete, None, None, method, *args, **kwargs):
self.add_object(object) self.add_object(object)