improvement of the fillobj

This commit is contained in:
Romain Bignon 2010-07-20 20:37:37 +02:00
commit 1398c0f7d1
2 changed files with 30 additions and 26 deletions

View file

@ -23,6 +23,7 @@ from optparse import OptionGroup, OptionParser
from weboob.core.ouiboube import Weboob
from weboob.tools.config.iconfig import ConfigError
from weboob.tools.backend import NotSupportedObject
__all__ = ['BackendNotFound', 'BaseApplication', 'ConfigError']
@ -185,6 +186,34 @@ class BaseApplication(object):
version = '%s v%s' % (self.APPNAME, self.VERSION)
return version
def _complete_obj(self, backend, obj, fields):
if fields:
try:
backend.fillobj(obj, fields)
except NotSupportedObject, e:
logging.warning(u'Could not retrieve required fields (%s): %s' % (','.join(fields), e))
return obj
def _complete_iter(self, backend, count, fields, res):
for i, sub in enumerate(res):
if count and i == count:
break
sub = self._complete_obj(backend, sub, fields)
yield sub
def complete(self, backend, count, selected_fields, function, *args, **kwargs):
res = getattr(backend, function)(*args, **kwargs)
if self.selected_fields:
fields = set(self.selected_fields) - set('*')
else:
fields = None
if hasattr(res, '__iter__'):
return self._complete_iter(backend, count, fields, res)
else:
return self._complete_obj(backend, fields, res)
@classmethod
def run(klass, args=None):
"""

View file

@ -25,7 +25,6 @@ import sys
from weboob.core import CallErrors
from weboob.core.backends import BackendsConfig
from weboob.tools.backend import NotSupportedObject
from .base import BackendNotFound, BaseApplication
from .formatters.load import formatters, load_formatter
@ -276,28 +275,4 @@ class ConsoleApplication(BaseApplication):
Call Weboob.do(), after having filled the yielded object, if selected fields are given by user.
"""
def inner(backend, count, selected_fields, function, *args, **kwargs):
res = getattr(backend, function)(*args, **kwargs)
if self.selected_fields:
fields = set(self.selected_fields) - set('*')
else:
fields = None
if hasattr(res, '__iter__'):
for i, sub in enumerate(res):
if self.options.count and i == self.options.count:
break
if fields:
try:
backend.fillobj(sub, fields)
except NoSupportedObject, e:
logging.warning(u'Could not retrieve required fields (%s): %s' % (','.join(fields), e))
yield sub
else:
if fields:
try:
backend.fillobj(sub, fields)
except NoSupportedObject, e:
logging.warning(u'Could not retrieve required fields (%s): %s' % (','.join(fields), e))
return res
return self.weboob.do(inner, function, *args, **kwargs)
return self.weboob.do(self.complete, self.options.count, self.selected_fields, function, *args, **kwargs)