From b9721f6ee4b845fc8bc77390fe5a0aba302781df Mon Sep 17 00:00:00 2001 From: Daniel Tomlinson Date: Sat, 16 Oct 2021 02:16:53 +0100 Subject: [PATCH] adding latest --- .vscode/settings.json | 18 ++++++++++- {src => old_src}/panaetius/__init__.py | 0 {src => old_src}/panaetius/__version__.py | 0 {src => old_src}/panaetius/config.py | 0 {src => old_src}/panaetius/config_inst.py | 0 {src => old_src}/panaetius/db.py | 0 {src => old_src}/panaetius/header.py | 0 {src => old_src}/panaetius/library.py | 0 {src => old_src}/panaetius/logging.py | 0 panaetius/__init__.py | 2 ++ panaetius/config.py | 38 +++++++++-------------- panaetius/library.py | 24 ++++++++++++++ tests/test_panaetius.py | 25 +++++++++++++-- 13 files changed, 80 insertions(+), 27 deletions(-) rename {src => old_src}/panaetius/__init__.py (100%) rename {src => old_src}/panaetius/__version__.py (100%) rename {src => old_src}/panaetius/config.py (100%) rename {src => old_src}/panaetius/config_inst.py (100%) rename {src => old_src}/panaetius/db.py (100%) rename {src => old_src}/panaetius/header.py (100%) rename {src => old_src}/panaetius/library.py (100%) rename {src => old_src}/panaetius/logging.py (100%) create mode 100644 panaetius/library.py diff --git a/.vscode/settings.json b/.vscode/settings.json index 31b5b02..3525082 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,5 +3,21 @@ "python.linting.prospectorEnabled": true, "python.linting.enabled": true, "python.pythonPath": ".venv/bin/python", - "restructuredtext.confPath": "${workspaceFolder}/docs/source" + "restructuredtext.confPath": "${workspaceFolder}/docs/source", + "workbench.colorCustomizations": { + "editorGroup.border": "#3ea389", + "panel.border": "#3ea389", + "sash.hoverBorder": "#3ea389", + "sideBar.border": "#3ea389", + "statusBar.background": "#307e6a", + "statusBar.foreground": "#e7e7e7", + "statusBarItem.hoverBackground": "#3ea389", + "statusBarItem.remoteBackground": "#307e6a", + "statusBarItem.remoteForeground": "#e7e7e7", + "titleBar.activeBackground": "#307e6a", + "titleBar.activeForeground": "#e7e7e7", + "titleBar.inactiveBackground": "#307e6a99", + "titleBar.inactiveForeground": "#e7e7e799" + }, + "peacock.color": "#307E6A" } diff --git a/src/panaetius/__init__.py b/old_src/panaetius/__init__.py similarity index 100% rename from src/panaetius/__init__.py rename to old_src/panaetius/__init__.py diff --git a/src/panaetius/__version__.py b/old_src/panaetius/__version__.py similarity index 100% rename from src/panaetius/__version__.py rename to old_src/panaetius/__version__.py diff --git a/src/panaetius/config.py b/old_src/panaetius/config.py similarity index 100% rename from src/panaetius/config.py rename to old_src/panaetius/config.py diff --git a/src/panaetius/config_inst.py b/old_src/panaetius/config_inst.py similarity index 100% rename from src/panaetius/config_inst.py rename to old_src/panaetius/config_inst.py diff --git a/src/panaetius/db.py b/old_src/panaetius/db.py similarity index 100% rename from src/panaetius/db.py rename to old_src/panaetius/db.py diff --git a/src/panaetius/header.py b/old_src/panaetius/header.py similarity index 100% rename from src/panaetius/header.py rename to old_src/panaetius/header.py diff --git a/src/panaetius/library.py b/old_src/panaetius/library.py similarity index 100% rename from src/panaetius/library.py rename to old_src/panaetius/library.py diff --git a/src/panaetius/logging.py b/old_src/panaetius/logging.py similarity index 100% rename from src/panaetius/logging.py rename to old_src/panaetius/logging.py diff --git a/panaetius/__init__.py b/panaetius/__init__.py index e69de29..866a529 100644 --- a/panaetius/__init__.py +++ b/panaetius/__init__.py @@ -0,0 +1,2 @@ +from panaetius.config import Config +from panaetius.library import set_config diff --git a/panaetius/config.py b/panaetius/config.py index 6e0e274..f527b41 100644 --- a/panaetius/config.py +++ b/panaetius/config.py @@ -29,9 +29,8 @@ class Config: self._missing_config = True return {} - def get_value( - self, key: str, default: str, cast: Any = None, mask: bool = False - ) -> Any: + # TODO: fix the return error + def get_value(self, key: str, default: str | None, mask: bool) -> Any: env_key = f"{self.header_variable.upper()}_{key.upper().replace('.', '_')}" # look in the config file @@ -52,29 +51,22 @@ class Config: else: section, name = key.lower().split(".") value = self.config[self.header_variable][section][name] + return value # TODO: set a custom error and move this to the end to tell user that incorrect key was given and couldn't be found # try: # return cast(value) if cast else value # except UnboundLocalError: # # pass if nothing was found # pass - except KeyError: - # key not found in config file - pass - except TypeError: - # key not found in config file - pass - - # look for an environment variable - value = os.environ.get(env_key.replace("-", "_"), default) - - -if __name__ == "__main__": - os.environ["PANAETIUS_PATH"] = "/usr/local" - c = Config("panaetius_test") - print(c.config) - c.get_value("path", "some path") - c.get_value("top", "str", list) - c.get_value("logging.path", "str", list) - c.get_value("nonexistent.item", "some default value") - pass + except (KeyError, TypeError): + value = os.environ.get(env_key.replace("-", "_")) + if value is None: + return toml.loads(default) if default is not None else None + return toml.loads(value) + else: + # look for an environment variable, fallback to default + value = os.environ.get(env_key.replace("-", "_")) + if value is None: + return toml.loads(default) if default is not None else None + return toml.loads(value) + return default diff --git a/panaetius/library.py b/panaetius/library.py new file mode 100644 index 0000000..1a016ee --- /dev/null +++ b/panaetius/library.py @@ -0,0 +1,24 @@ +from __future__ import annotations +import ast +from typing import Any + +from panaetius import Config + + +def set_config( + config_inst: Config, + key: str, + default: str | None = None, + mask: bool = False, + coerce: bool = False, +): # sourcery skip: remove-redundant-pass + config_var = key.lower().replace(".", "_") + if not coerce: + setattr(config_inst, config_var, config_inst.get_value(key, default, mask)) + elif type(config_inst.get_value(key, default, mask)) is not coerce: # noqa + var = ast.literal_eval(config_inst.get_value(key, default, mask)) + if isinstance(var, (list, dict)): + setattr(config_inst, config_var, var) + else: + pass + # TODO: raise error to say type of coersion isn't valid! diff --git a/tests/test_panaetius.py b/tests/test_panaetius.py index caeeb82..c9d66dd 100644 --- a/tests/test_panaetius.py +++ b/tests/test_panaetius.py @@ -1,5 +1,24 @@ -from panaetius import __version__ +import os +from panaetius import Config, set_config -def test_version(): - assert __version__ == '0.1.0' +if __name__ == "__main__": + os.environ["PANAETIUS_TEST_PATH"] = "/usr/local" + print(os.environ.get("PANAETIUS_TEST_PATH")) + os.environ[ + "PANAETIUS_TEST_TOML_POINTS" + ] = "[ { x = 1, y = 2, z = 3 }, { x = 7, y = 8, z = 9 }, { x = 2, y = 4, z = 8 }]" + c = Config("panaetius_test") + # print(c.config) + # c.get_value("path", "some path") + # c.get_value("top", "str") + # c.get_value("logging.path", "str") + # c.get_value("nonexistent.item", "some default value") + set_config(c, key="path", default="some path") + 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") + print(c) + pass