adding latest working

This commit is contained in:
2021-10-16 05:24:56 +01:00
parent 2c0735fedf
commit 8dfae28832
2 changed files with 91 additions and 58 deletions

View File

@@ -34,62 +34,73 @@ class Config:
) -> Any:
env_key = f"{self.header_variable.upper()}_{key.upper().replace('.', '_')}"
# look in the config file
if not self._missing_config:
try:
# look under top header
if len(key.split(".")) == 1:
if mask:
# TODO: write mask logic here
pass
else:
name = key.lower()
value = self.config[self.header_variable][name]
elif len(key.split(".")) == 2:
if mask:
# TODO: write mask logic here
pass
else:
section, name = key.lower().split(".")
value = self.config[self.header_variable][section][name]
return value
# look in the config file
return self._get_config_value(env_key, key, default, mask, coerce)
# no config file, look for env vars
return self._get_env_value(env_key, default, coerce)
except (KeyError, TypeError):
value = os.environ.get(env_key.replace("-", "_"))
if value is None:
if isinstance(default, str):
# if default is a string, wrap TOML value in quotes
return toml.loads(f'value = "{default}"')["value"]
# if default is not a string, leave TOML value as is
return (
toml.loads(f"value = {default}")["value"]
if default is not None
else None
)
# if env var, coerce value if flag is set, else return a TOML string
return (
toml.loads(f"value = {value}")["value"]
if coerce
else toml.loads(f'value = "{value}"')["value"]
)
def _get_config_value(
self, env_key: str, key: str, default: Any, mask: bool, coerce: bool = False
) -> Any:
try:
# look under top header
if len(key.split(".")) == 1:
if mask:
# TODO: write mask logic here
pass
else:
name = key.lower()
value = self.config[self.header_variable][name]
elif len(key.split(".")) == 2:
if mask:
# TODO: write mask logic here
pass
else:
section, name = key.lower().split(".")
value = self.config[self.header_variable][section][name]
return value
else:
# look for an environment variable, fallback to default
except (KeyError, TypeError):
value = os.environ.get(env_key.replace("-", "_"))
if value is None:
if isinstance(default, str):
# if default is a string, wrap TOML value in quotes
return toml.loads(f'value = "{default}"')["value"]
# if default is not a string, leave TOML value as is
# if default is a bool, convert to lower case for TOML syntax
default = str(default).lower() if isinstance(default, bool) else default
return (
toml.loads(f'value = "{default}"')["value"]
toml.loads(f"value = {default}")["value"]
if default is not None
else None
)
return toml.loads(f'value = "{value}"')["value"]
# if env var, coerce value if flag is set, else return a TOML string
return (
toml.loads(f"value = {value}")["value"]
if coerce
else toml.loads(f'value = "{value}"')["value"]
)
def _get_config_value(
self, key: str, default: Any, mask: bool, coerce: bool = False
def _get_env_value( # noqa
self, env_key: str, default: Any, coerce: bool = False
) -> Any:
pass
def _get_env_value(
self, key: str, default: Any, mask: bool, coerce: bool = False
) -> Any:
pass
# look for an environment variable, fallback to default
value = os.environ.get(env_key.replace("-", "_"))
if value is None:
if isinstance(default, str):
# if default is a string, wrap TOML value in quotes
return toml.loads(f'value = "{default}"')["value"]
# if default is not a string, leave TOML value as is
# if default is a bool, convert to lower case for TOML syntax
default = str(default).lower() if isinstance(default, bool) else default
return (
toml.loads(f"value = {default}")["value"]
if default is not None
else None
)
return (
toml.loads(f"value = {value}")["value"]
if coerce
else toml.loads(f'value = "{value}"')["value"]
)