From 6791c33871a178b3492f9af8647ecd0a05316d45 Mon Sep 17 00:00:00 2001 From: Edouard Lefebvre du Prey Date: Wed, 24 Aug 2016 17:16:24 +0200 Subject: [PATCH] Add AnyDBMConfig, an implementation of IConfig for anydbm --- weboob/tools/config/anydbmconfig.py | 60 +++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 weboob/tools/config/anydbmconfig.py diff --git a/weboob/tools/config/anydbmconfig.py b/weboob/tools/config/anydbmconfig.py new file mode 100644 index 0000000000..81239cf803 --- /dev/null +++ b/weboob/tools/config/anydbmconfig.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- + +import anydbm +import yaml + +from .iconfig import ConfigError, IConfig + +try: + from yaml import CLoader as Loader +except ImportError: + from yaml import Loader + +from .yamlconfig import WeboobDumper + + +__all__ = ['AnyDBMConfig'] + + +class AnyDBMConfig(IConfig): + def __init__(self, path): + self.path = path + + def load(self, default={}): + self.storage = anydbm.open(self.path, 'c') + + def save(self): + pass + + def get(self, *args, **kwargs): + key = '.'.join(args) + try: + value = self.storage[key] + value = yaml.load(value, Loader=Loader) + except KeyError: + if 'default' in kwargs: + value = kwargs.get('default') + else: + raise ConfigError() + except TypeError: + raise ConfigError() + return value + + def set(self, *args): + key = '.'.join(args[:-1]) + value = args[-1] + try: + self.storage[key] = yaml.dump(value, None, Dumper=WeboobDumper, default_flow_style=False) + except KeyError: + raise ConfigError() + except TypeError: + raise ConfigError() + + def delete(self, *args): + key = '.'.join(args) + try: + del self.storage[key] + except KeyError: + raise ConfigError() + except TypeError: + raise ConfigError() -- GitLab