# HG changeset patch # User Franz Glasner # Date 1523000537 -7200 # Node ID b883f4ef19679635b91170274307e4a43243fb45 # Parent e84870359e1a3f5999153461c428a9c68a1e916c Indirectly map extensions to configuration file styles diff -r e84870359e1a -r b883f4ef1967 configmix/__init__.py --- a/configmix/__init__.py Thu Apr 05 09:42:23 2018 +0200 +++ b/configmix/__init__.py Fri Apr 06 09:42:17 2018 +0200 @@ -58,21 +58,43 @@ return Configuration(ex) +def _load_yaml(filename): + from . import yaml + with open(filename, "rb") as yf: + return yaml.safe_load(yf) + + +def _load_json(filename): + from . import json + return json.load(filename) + + +def _load_py(filename): + from . import py + return py.load(filename) + + +def _load_ini(filename): + from . import ini + return ini.load(filename) + + +_loaders = { + ".yml": _load_yaml, + ".yaml": _load_yaml, + ".json": _load_json, + ".py": _load_py, + ".ini": _load_ini +} + + def _load_cfg_from_file(filename): fnl = filename.lower() - if fnl.endswith(".yml") or fnl.endswith("yaml"): - from . import yaml - with open(filename, "rb") as yf: - return yaml.safe_load(yf) - elif fnl.endswith(".json"): - from . import json - return json.load(filename) - elif fnl.endswith(".py"): - from . import py - return py.load(filename) - elif fnl.endswith(".ini"): - from . import ini - return ini.load(filename) + extensions = list(_loaders.keys()) + extensions.sort(key=lambda x: len(x), reverse=True) + for ext in extensions: + if fnl.endswith(ext): + return _loaders[ext](filename) else: raise ValueError("Unknown configuration file type for filename " "%r" % filename)