diff --git a/weboob/backend.py b/weboob/backend.py index e503b034..68eea904 100644 --- a/weboob/backend.py +++ b/weboob/backend.py @@ -31,21 +31,21 @@ class BackendStorage(object): def set(self, *args): if self.storage: - return self.storage.set(self.name, *args) + return self.storage.set('backends', self.name, *args) def get(self, *args, **kwargs): if self.storage: - return self.storage.get(self.name, *args, **kwargs) + return self.storage.get('backends', self.name, *args, **kwargs) else: return kwargs.get('default', None) def load(self, default): if self.storage: - return self.storage.load(self.name, default) + return self.storage.load('backends', self.name, default) def save(self): if self.storage: - return self.storage.save(self.name) + return self.storage.save('backends', self.name) class BaseBackend(object): # Module name. diff --git a/weboob/tools/application/base.py b/weboob/tools/application/base.py index 27b0f6d5..8359eb5f 100644 --- a/weboob/tools/application/base.py +++ b/weboob/tools/application/base.py @@ -27,12 +27,36 @@ from weboob.tools.config.iconfig import ConfigError __all__ = ['BaseApplication', 'ConfigError'] +class FrontendStorage(object): + def __init__(self, name, storage): + self.name = name + self.storage = storage + + def set(self, *args): + if self.storage: + return self.storage.set('frontends', self.name, *args) + + def get(self, *args, **kwargs): + if self.storage: + return self.storage.get('frontends', self.name, *args, **kwargs) + else: + return kwargs.get('default', None) + + def load(self, default): + if self.storage: + return self.storage.load('frontends', self.name, default) + + def save(self): + if self.storage: + return self.storage.save('frontends', self.name) class BaseApplication(object): # Application name APPNAME = '' # Default configuration CONFIG = {} + # Default storage + STORAGE = {} # Configuration directory CONFDIR = os.path.join(os.path.expanduser('~'), '.weboob') # Synopsis @@ -79,7 +103,10 @@ class BaseApplication(object): elif not path.startswith('/'): path = os.path.join(self.CONFDIR, path) - return klass(path) + storage = klass(path) + self.storage = FrontendStorage(self.APPNAME, storage) + self.storage.load(self.STORAGE) + return storage def load_config(self, path=None, klass=None): """ diff --git a/weboob/tools/storage.py b/weboob/tools/storage.py index a89169d6..feff972e 100644 --- a/weboob/tools/storage.py +++ b/weboob/tools/storage.py @@ -19,16 +19,16 @@ from copy import deepcopy from logging import error class IStorage: - def load(self, backend, default={}): + def load(self, what, name, default={}): raise NotImplementedError() - def save(self, backend): + def save(self, what, name): raise NotImplementedError() - def set(self, backend, *args): + def set(self, what, name, *args): raise NotImplementedError() - def get(self, backend, *args, **kwargs): + def get(self, what, name, *args, **kwargs): raise NotImplementedError() try: @@ -41,16 +41,21 @@ else: self.config = YamlConfig(path) self.config.load() - def load(self, backend, default={}): - d = self.config.values.get(backend, {}) - self.config.values[backend] = deepcopy(default) - self.config.values[backend].update(d) + def load(self, what, name, default={}): + d = {} + if not what in self.config.values: + self.config.values[what] = {} + else: + d = self.config.values[what].get(name, {}) - def save(self, backend): + self.config.values[what][name] = deepcopy(default) + self.config.values[what][name].update(d) + + def save(self, what, name): self.config.save() - def set(self, backend, *args): - self.config.set(backend, *args) + def set(self, what, name, *args): + self.config.set(what, name, *args) - def get(self, backend, *args, **kwargs): - return self.config.get(backend, *args, **kwargs) + def get(self, what, name, *args, **kwargs): + return self.config.get(what, name, *args, **kwargs)