diff options
author | Michal Jagiello <michal.jagiello@t-mobile.pl> | 2021-11-30 08:25:09 +0000 |
---|---|---|
committer | Michal Jagiello <michal.jagiello@t-mobile.pl> | 2021-12-03 09:58:59 +0000 |
commit | 66e44262b8eb996c06670dcededd899dd1cbd7dc (patch) | |
tree | 3fcea0fe3317f8069281cb93c61add4b1599ab83 /onap_data_provider/config_loader.py | |
parent | 2416a1a546c1d2922c37d513df42e9d26bbaaa42 (diff) |
Data provider release
Change-Id: Ia041a07152e8dabd87de05992d3670cbdc1ddaae
Issue-ID: INT-2010
Signed-off-by: Michal Jagiello <michal.jagiello@t-mobile.pl>
Diffstat (limited to 'onap_data_provider/config_loader.py')
-rw-r--r-- | onap_data_provider/config_loader.py | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/onap_data_provider/config_loader.py b/onap_data_provider/config_loader.py new file mode 100644 index 0000000..5757e1e --- /dev/null +++ b/onap_data_provider/config_loader.py @@ -0,0 +1,70 @@ +"""Data loader module.""" +""" + Copyright 2021 Deutsche Telekom AG + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +""" +from pathlib import Path +from typing import Any, Iterator, List +import yaml +from onap_data_provider.tag_handlers import join, generate_random_uuid + +# register custom tag handlers in yaml.SafeLoader +yaml.add_constructor("!join", join, yaml.SafeLoader) +yaml.add_constructor("!uuid4", generate_random_uuid, yaml.SafeLoader) + + +class ConfigLoader: + """Configuration loader class. + + Loads data from file resource. + """ + + YAML_EXTENSIONS = {".yml", ".yaml"} + + def __init__(self, config_file_path: List[Path]) -> None: + """Initialize configuration loader class. + + Args: + config_file_path (str): Path to yaml data source file. + + """ + self.config_file_path: List[Path] = config_file_path + + def _yamls_from_dir(self, dir: Path) -> Iterator[Path]: + for child in dir.iterdir(): # type: Path + if child.suffix in self.YAML_EXTENSIONS: + yield child + + @property + def _yamls(self) -> Iterator[Path]: + for config_file_path in self.config_file_path: # type: Path + if config_file_path.is_file(): + yield config_file_path + elif config_file_path.is_dir(): + yield from self._yamls_from_dir(config_file_path) + else: + raise ValueError("Provided path is neither file nor directory") + + def load(self) -> Iterator[Any]: + """Get data from the config file. + + Get data from the config file and return parsed to dictionary resource. + + Returns: + Any: Data from yaml file. + + """ + for yaml_path in self._yamls: # type: Path + with yaml_path.open() as f: + yield yaml.safe_load(f) |