diff options
author | Devaev Maxim <[email protected]> | 2018-11-14 20:34:46 +0300 |
---|---|---|
committer | Devaev Maxim <[email protected]> | 2018-11-14 20:34:46 +0300 |
commit | b690dbce4447665db5b4ce0b11f14dc796ca917b (patch) | |
tree | 62d4961002e09fa79886cdd076283c1c45f8bdd0 /kvmd | |
parent | e97975fc15d3688a121cfdf18126a16c957838bd (diff) |
common logging.yaml
Diffstat (limited to 'kvmd')
-rw-r--r-- | kvmd/application.py | 33 | ||||
-rw-r--r-- | kvmd/apps/cleanup/__init__.py | 2 | ||||
-rw-r--r-- | kvmd/apps/kvmd/__init__.py | 2 |
3 files changed, 32 insertions, 5 deletions
diff --git a/kvmd/application.py b/kvmd/application.py index a78c1047..31a57925 100644 --- a/kvmd/application.py +++ b/kvmd/application.py @@ -1,10 +1,15 @@ +import os import argparse import logging import logging.config from typing import Dict +from typing import IO +from typing import Any import yaml +import yaml.loader +import yaml.nodes # ===== @@ -13,10 +18,32 @@ def init() -> Dict: parser.add_argument("-c", "--config", required=True, metavar="<path>") options = parser.parse_args() - with open(options.config) as config_file: - config = yaml.load(config_file) + config: Dict = _load_yaml_file(options.config) logging.captureWarnings(True) logging.config.dictConfig(config["logging"]) - return config["kvmd"] + return config + + +# ===== +def _load_yaml_file(path: str) -> Any: + with open(path) as yaml_file: + try: + return yaml.load(yaml_file, _YamlLoader) + except Exception: + # Reraise internal exception as standard ValueError and show the incorrect file + raise ValueError("Incorrect YAML syntax in file '{}'".format(path)) + + +class _YamlLoader(yaml.loader.Loader): # pylint: disable=too-many-ancestors + def __init__(self, yaml_file: IO) -> None: + yaml.loader.Loader.__init__(self, yaml_file) + self.__root = os.path.dirname(yaml_file.name) + + def include(self, node: yaml.nodes.Node) -> str: + path = os.path.join(self.__root, self.construct_scalar(node)) # pylint: disable=no-member + return _load_yaml_file(path) + + +_YamlLoader.add_constructor("!include", _YamlLoader.include) # pylint: disable=no-member diff --git a/kvmd/apps/cleanup/__init__.py b/kvmd/apps/cleanup/__init__.py index 60446c2b..c99fd271 100644 --- a/kvmd/apps/cleanup/__init__.py +++ b/kvmd/apps/cleanup/__init__.py @@ -10,7 +10,7 @@ from ... import gpio # ===== def main() -> None: - config = init() + config = init()["kvmd"] logger = get_logger(0) logger.info("Cleaning up ...") diff --git a/kvmd/apps/kvmd/__init__.py b/kvmd/apps/kvmd/__init__.py index 1959f05c..099fd192 100644 --- a/kvmd/apps/kvmd/__init__.py +++ b/kvmd/apps/kvmd/__init__.py @@ -17,7 +17,7 @@ from .server import Server # ===== def main() -> None: - config = init() + config = init()["kvmd"] with gpio.bcm(): loop = asyncio.get_event_loop() http_session = aiohttp.ClientSession(loop=loop) |