mirror of
https://github.com/dtomlinson91/panaetius.git
synced 2025-12-22 04:55:44 +00:00
adding latest working
This commit is contained in:
@@ -34,62 +34,73 @@ class Config:
|
|||||||
) -> Any:
|
) -> Any:
|
||||||
env_key = f"{self.header_variable.upper()}_{key.upper().replace('.', '_')}"
|
env_key = f"{self.header_variable.upper()}_{key.upper().replace('.', '_')}"
|
||||||
|
|
||||||
# look in the config file
|
|
||||||
if not self._missing_config:
|
if not self._missing_config:
|
||||||
try:
|
# look in the config file
|
||||||
# look under top header
|
return self._get_config_value(env_key, key, default, mask, coerce)
|
||||||
if len(key.split(".")) == 1:
|
# no config file, look for env vars
|
||||||
if mask:
|
return self._get_env_value(env_key, default, coerce)
|
||||||
# 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
|
|
||||||
|
|
||||||
except (KeyError, TypeError):
|
def _get_config_value(
|
||||||
value = os.environ.get(env_key.replace("-", "_"))
|
self, env_key: str, key: str, default: Any, mask: bool, coerce: bool = False
|
||||||
if value is None:
|
) -> Any:
|
||||||
if isinstance(default, str):
|
try:
|
||||||
# if default is a string, wrap TOML value in quotes
|
# look under top header
|
||||||
return toml.loads(f'value = "{default}"')["value"]
|
if len(key.split(".")) == 1:
|
||||||
# if default is not a string, leave TOML value as is
|
if mask:
|
||||||
return (
|
# TODO: write mask logic here
|
||||||
toml.loads(f"value = {default}")["value"]
|
pass
|
||||||
if default is not None
|
else:
|
||||||
else None
|
name = key.lower()
|
||||||
)
|
value = self.config[self.header_variable][name]
|
||||||
# if env var, coerce value if flag is set, else return a TOML string
|
elif len(key.split(".")) == 2:
|
||||||
return (
|
if mask:
|
||||||
toml.loads(f"value = {value}")["value"]
|
# TODO: write mask logic here
|
||||||
if coerce
|
pass
|
||||||
else toml.loads(f'value = "{value}"')["value"]
|
else:
|
||||||
)
|
section, name = key.lower().split(".")
|
||||||
|
value = self.config[self.header_variable][section][name]
|
||||||
|
return value
|
||||||
|
|
||||||
else:
|
except (KeyError, TypeError):
|
||||||
# look for an environment variable, fallback to default
|
|
||||||
value = os.environ.get(env_key.replace("-", "_"))
|
value = os.environ.get(env_key.replace("-", "_"))
|
||||||
if value is None:
|
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 (
|
return (
|
||||||
toml.loads(f'value = "{default}"')["value"]
|
toml.loads(f"value = {default}")["value"]
|
||||||
if default is not None
|
if default is not None
|
||||||
else 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(
|
def _get_env_value( # noqa
|
||||||
self, key: str, default: Any, mask: bool, coerce: bool = False
|
self, env_key: str, default: Any, coerce: bool = False
|
||||||
) -> Any:
|
) -> Any:
|
||||||
pass
|
# look for an environment variable, fallback to default
|
||||||
|
value = os.environ.get(env_key.replace("-", "_"))
|
||||||
def _get_env_value(
|
if value is None:
|
||||||
self, key: str, default: Any, mask: bool, coerce: bool = False
|
if isinstance(default, str):
|
||||||
) -> Any:
|
# if default is a string, wrap TOML value in quotes
|
||||||
pass
|
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"]
|
||||||
|
)
|
||||||
|
|||||||
@@ -8,17 +8,39 @@ if __name__ == "__main__":
|
|||||||
os.environ[
|
os.environ[
|
||||||
"PANAETIUS_TEST_TOML_POINTS"
|
"PANAETIUS_TEST_TOML_POINTS"
|
||||||
] = "[ { x = 1, y = 2, z = 3 }, { x = 7, y = 8, z = 9 }, { x = 2, y = 4, z = 8 }]"
|
] = "[ { x = 1, y = 2, z = 3 }, { x = 7, y = 8, z = 9 }, { x = 2, y = 4, z = 8 }]"
|
||||||
c = Config("panaetius_test")
|
|
||||||
|
|
||||||
set_config(c, key="path", default="some path")
|
os.environ["PANAETIUS_TEST_NOC_EMBEDDED_PATH"] = "/usr/local"
|
||||||
set_config(c, key="top", default="some top")
|
os.environ["PANAETIUS_TEST_NOC_EMBEDDED_FLOAT"] = "2.0"
|
||||||
set_config(c, key="logging.path", default="some logging path")
|
os.environ["PANAETIUS_TEST_NOC_EMBEDDED_BOOL"] = "true"
|
||||||
set_config(c, key="nonexistent.item", default="some nonexistent item")
|
|
||||||
set_config(c, key="nonexistent.item")
|
# c = Config("panaetius_test")
|
||||||
set_config(c, key="toml.points", coerce=True)
|
c = Config("panaetius_test_noc")
|
||||||
set_config(c, key="toml.points_config")
|
|
||||||
set_config(c, key="float", default=2.0)
|
# set_config(c, key="path", default="some path")
|
||||||
set_config(c, key="float_str", default="2.0")
|
# set_config(c, key="top", default="some top")
|
||||||
|
# set_config(c, key="logging.path", default="some logging path")
|
||||||
|
# set_config(c, key="nonexistent.item", default="some nonexistent item")
|
||||||
|
# set_config(c, key="nonexistent.item")
|
||||||
|
# set_config(c, key="toml.points", coerce=True)
|
||||||
|
# set_config(c, key="toml.points_config")
|
||||||
|
# set_config(c, key="float", default=2.0)
|
||||||
|
# set_config(c, key="float_str", default="2.0")
|
||||||
|
# set_config(c, key="bool", coerce=True)
|
||||||
|
# set_config(c, key="noexistbool", default=False)
|
||||||
|
|
||||||
|
# set_config(c, key="path")
|
||||||
|
# set_config(c, key="float", coerce=True)
|
||||||
|
# set_config(c, key="bool", coerce=True)
|
||||||
|
# set_config(c, key="noexiststr", default="2.0")
|
||||||
|
# set_config(c, key="noexistfloat", default=2.0)
|
||||||
|
# set_config(c, key="noexistbool", default=False)
|
||||||
|
|
||||||
|
set_config(c, key="embedded.path")
|
||||||
|
set_config(c, key="embedded.float", coerce=True)
|
||||||
|
set_config(c, key="embedded.bool", coerce=True)
|
||||||
|
set_config(c, key="embedded.noexiststr", default="2.0")
|
||||||
|
set_config(c, key="embedded.noexistfloat", default=2.0)
|
||||||
|
set_config(c, key="embedded.noexistbool", default=False)
|
||||||
|
|
||||||
print(c)
|
print(c)
|
||||||
pass
|
pass
|
||||||
|
|||||||
Reference in New Issue
Block a user