aboutsummaryrefslogtreecommitdiffstats
path: root/onap_data_provider/config_loader.py
diff options
context:
space:
mode:
authorMichal Jagiello <michal.jagiello@t-mobile.pl>2021-11-30 08:25:09 +0000
committerMichal Jagiello <michal.jagiello@t-mobile.pl>2021-12-03 09:58:59 +0000
commit66e44262b8eb996c06670dcededd899dd1cbd7dc (patch)
tree3fcea0fe3317f8069281cb93c61add4b1599ab83 /onap_data_provider/config_loader.py
parent2416a1a546c1d2922c37d513df42e9d26bbaaa42 (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.py70
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)