diff --git a/weboob/core/backends.py b/weboob/core/backends.py index f0cf23c4..ee41aa58 100644 --- a/weboob/core/backends.py +++ b/weboob/core/backends.py @@ -78,7 +78,8 @@ class Backend(object): def has_caps(self, *caps): for c in caps: - if issubclass(self.klass, c): + if (isinstance(c, (unicode,str)) and c in [cap.__name__ for cap in self.iter_caps()]) or \ + (type(c) == type and issubclass(self.klass, c)): return True return False diff --git a/weboob/tools/application/console.py b/weboob/tools/application/console.py index acd3ca2f..be4580f0 100644 --- a/weboob/tools/application/console.py +++ b/weboob/tools/application/console.py @@ -258,7 +258,7 @@ class ConsoleApplication(BaseApplication): if caps is not None: if not isinstance(caps, (list, tuple, set)): caps = (caps,) - caps = iter(cap.__name__ for cap in caps) + caps = [(cap if isinstance(cap, (str,unicode)) else cap.__name__) for cap in caps] weboobcfg.command_backends(*caps) logging.error(u'You can configure backends using the "weboob-config add" command:\nweboob-config add [options..]') with open('/dev/null', 'w') as devnull: diff --git a/weboob/tools/backend.py b/weboob/tools/backend.py index 49b46720..c2c3fd2d 100644 --- a/weboob/tools/backend.py +++ b/weboob/tools/backend.py @@ -21,6 +21,7 @@ import os from threading import RLock from logging import debug +from weboob.capabilities.cap import ICap __all__ = ['BaseBackend', 'ObjectNotSupported'] @@ -170,9 +171,15 @@ class BaseBackend(object): return self.BROWSER(*args, **kwargs) + def iter_caps(self): + for cap in self.__class__.__bases__: + if issubclass(cap, ICap) and cap != ICap: + yield cap + def has_caps(self, *caps): for c in caps: - if isinstance(self, c): + if (isinstance(c, (unicode,str)) and c in [cap.__name__ for cap in self.iter_caps()]) or \ + isinstance(self, c): return True return False