adding latest not working on bool

This commit is contained in:
2021-10-16 15:29:18 +01:00
parent 957ce56a4c
commit b47170070a
2 changed files with 47 additions and 51 deletions

View File

@@ -39,7 +39,25 @@ class Config:
# no config file, look for env vars # no config file, look for env vars
return self._get_env_value(env_key, default, coerce) return self._get_env_value(env_key, default, coerce)
def _get_config_value_key_split_once(self, key: str, mask: bool) -> Any: 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:
return self.__get_config_value_key_split_once(key, mask)
if len(key.split(".")) == 2:
return self.__get_config_value_key_split_twice(key, mask)
except (KeyError, TypeError):
value = os.environ.get(env_key.replace("-", "_"))
if value is None:
return self.__get_config_value_missing_key_value_is_none(default)
# if env var, coerce value if flag is set, else return a TOML string
value = self.__get_config_value_missing_key_value_is_not_none(value, coerce)
return self.__get_config_value_missing_key_value_is_not_none(value, coerce)
def __get_config_value_key_split_once(self, key: str, mask: bool) -> Any:
if mask: if mask:
# TODO: write mask logic here # TODO: write mask logic here
pass pass
@@ -47,7 +65,7 @@ class Config:
name = key.lower() name = key.lower()
return self.config[self.header_variable][name] return self.config[self.header_variable][name]
def _get_config_value_key_split_twice(self, key: str, mask: bool) -> Any: def __get_config_value_key_split_twice(self, key: str, mask: bool) -> Any:
if mask: if mask:
# TODO: write mask logic here # TODO: write mask logic here
pass pass
@@ -55,42 +73,13 @@ class Config:
section, name = key.lower().split(".") section, name = key.lower().split(".")
return self.config[self.header_variable][section][name] return self.config[self.header_variable][section][name]
def _get_config_value_missing_key_value_is_none(self, default: Any) -> Any: def __get_config_value_missing_key_value_is_none(self, default: Any) -> Any:
if isinstance(default, str): return self.__load_default_value(default)
# 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
)
def _get_config_value_missing_key_value_is_not_none( def __get_config_value_missing_key_value_is_not_none(
self, value: str, coerce: bool self, value: str, coerce: bool
) -> Any: ) -> Any:
return ( return self.__load_value(value, coerce)
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:
return self._get_config_value_key_split_once(key, mask)
if len(key.split(".")) == 2:
return self._get_config_value_key_split_twice(key, mask)
except (KeyError, TypeError):
value = os.environ.get(env_key.replace("-", "_"))
if value is None:
return self._get_config_value_missing_key_value_is_none(default)
# if env var, coerce value if flag is set, else return a TOML string
return self._get_config_value_missing_key_value_is_not_none(value, coerce)
def _get_env_value( # noqa def _get_env_value( # noqa
self, env_key: str, default: Any, coerce: bool = False self, env_key: str, default: Any, coerce: bool = False
@@ -98,19 +87,21 @@ class Config:
# look for an environment variable, fallback to default # 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): return self.__load_default_value(default)
# if default is a string, wrap TOML value in quotes return self.__load_value(value, coerce)
return toml.loads(f'value = "{default}"')["value"]
# if default is not a string, leave TOML value as is def __load_value(self, value: str, coerce: bool) -> Any:
# 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 ( return (
toml.loads(f"value = {value}")["value"] toml.loads(f"value = {value}")["value"]
if coerce if coerce
else toml.loads(f'value = "{value}"')["value"] else toml.loads(f'value = "{value}"')["value"]
) )
def __load_default_value(self, default: Any) -> Any:
if isinstance(default, str):
return toml.loads(f'value = "{default}"')["value"]
# if default is bool convert to lower case 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
)

View File

@@ -6,28 +6,33 @@ if __name__ == "__main__":
os.environ["PANAETIUS_TEST_PATH"] = "/usr/local" os.environ["PANAETIUS_TEST_PATH"] = "/usr/local"
os.environ["PANAETIUS_TEST_BOOL"] = "true" os.environ["PANAETIUS_TEST_BOOL"] = "true"
print(os.environ.get("PANAETIUS_TEST_PATH")) print(os.environ.get("PANAETIUS_TEST_PATH"))
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 }]"
os.environ["PANAETIUS_TEST_NOC_PATH"] = "/usr/locals"
os.environ["PANAETIUS_TEST_NOC_FLOAT"] = "2.0"
os.environ["PANAETIUS_TEST_NOC_BOOL"] = "true"
os.environ["PANAETIUS_TEST_NOC_EMBEDDED_PATH"] = "/usr/local" os.environ["PANAETIUS_TEST_NOC_EMBEDDED_PATH"] = "/usr/local"
os.environ["PANAETIUS_TEST_NOC_EMBEDDED_FLOAT"] = "2.0" os.environ["PANAETIUS_TEST_NOC_EMBEDDED_FLOAT"] = "2.0"
os.environ["PANAETIUS_TEST_NOC_EMBEDDED_BOOL"] = "true" os.environ["PANAETIUS_TEST_NOC_EMBEDDED_BOOL"] = "true"
# c = Config("panaetius_test")
c = Config("panaetius_test") c = Config("panaetius_test")
# c = Config("panaetius_test_noc")
set_config(c, key="toml.points", coerce=True)
set_config(c, key="path", default="some path") set_config(c, key="path", default="some path")
set_config(c, key="top", default="some top") set_config(c, key="top", default="some top")
set_config(c, key="logging.path", default="some logging path") 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", default="some nonexistent item")
set_config(c, key="nonexistent.item") set_config(c, key="nonexistent.item")
set_config(c, key="toml.points", coerce=True) # FIXME: this isn't working after the refactor...
set_config(c, key="toml.points_config") set_config(c, key="toml.points_config")
set_config(c, key="float", default=2.0) set_config(c, key="float", default=2.0)
set_config(c, key="float_str", default="2.0") set_config(c, key="float_str", default="2.0")
set_config(c, key="bool", coerce=True) set_config(c, key="bool", coerce=True)
set_config(c, key="noexistbool", default=False) set_config(c, key="noexistbool", default=False)
set_config(c, key="middle.middle")
# set_config(c, key="path") # set_config(c, key="path")
# set_config(c, key="float", coerce=True) # set_config(c, key="float", coerce=True)