X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_pla%2Fconfig%2Fconfig.py;fp=osm_pla%2Fconfig%2Fconfig.py;h=114fc5f6f7a6b0cbc99b47697e60c5b788b367b0;hb=2b0e2d72595a5e25bd8f785138416d12829fbd64;hp=0000000000000000000000000000000000000000;hpb=bc50b79b8fdcbf1c1665011ed04d85df6efcddf8;p=osm%2FPLA.git diff --git a/osm_pla/config/config.py b/osm_pla/config/config.py new file mode 100644 index 0000000..114fc5f --- /dev/null +++ b/osm_pla/config/config.py @@ -0,0 +1,65 @@ +# -*- coding: utf-8 -*- +# Copyright 2020 ArctosLabs Scandinavia AB +# +# 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. +"""Global configuration managed by environment variables.""" + +import logging +import os + +import pkg_resources +import yaml + +logger = logging.getLogger(__name__) + + +class Config: + def __init__(self, config_file: str = ''): + self.conf = {} + self._read_config_file(config_file) + self._read_env() + + def _read_config_file(self, config_file): + if not config_file: + path = 'pla.yaml' + config_file = pkg_resources.resource_filename(__name__, path) + with open(config_file) as f: + self.conf = yaml.load(f) + + def _read_env(self): + for env in os.environ: + if not env.startswith("OSMPLA_"): + continue + elements = env.lower().split("_") + if len(elements) < 3: + logger.warning( + "Environment variable %s=%s does not comply with required format. Section and/or field missing.", + env, os.getenv(env)) + continue + section = elements[1] + field = '_'.join(elements[2:]) + value = os.getenv(env) + if section not in self.conf: + self.conf[section] = {} + self.conf[section][field] = value + + def get(self, section, field=None): + if not field: + return self.conf[section] + return self.conf[section][field] + + def set(self, section, field, value): + if section not in self.conf: + self.conf[section] = {} + self.conf[section][field] = value