diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ac8d7b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +__pycache__ +dist diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..d615775 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,41 @@ +[project] +name = "configurator" +version ="0.1" +authors = [ + { name="RemiZOffAlex", email="remizoffalex@gmail.com" }, +] +maintainers = [ + { name="RemiZOffAlex", email="remizoffalex@gmail.com" }, +] +description = "Configuration Manager" +requires-python = ">=3.10" +classifiers = [ + "Environment :: Console", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "Operating System :: POSIX :: BSD :: FreeBSD", + "Operating System :: POSIX :: Linux", + "Programming Language :: Formal", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Topic :: Software Development :: Code Generators", + "Topic :: Software Development :: Compilers", + "Topic :: Software Development :: Libraries", +] +keywords = ["config", "configurator", "configuration management"] +dependencies = [ + "pyyaml", + "middleware@git+https://codex.r10x.net/RemiZOffAlex/middleware", +] + +[build-system] +requires = ["flit_core >=3.2,<4"] +build-backend = "flit_core.buildapi" + +[tool.flit.sdist] +include = [] +exclude = [] diff --git a/src/configurator/__init__.py b/src/configurator/__init__.py new file mode 100644 index 0000000..18c55bb --- /dev/null +++ b/src/configurator/__init__.py @@ -0,0 +1,2 @@ +__author__ = 'RemiZOffAlex' +__email__ = 'remizoffalex@mail.ru' diff --git a/src/configurator/config.py b/src/configurator/config.py new file mode 100644 index 0000000..1810944 --- /dev/null +++ b/src/configurator/config.py @@ -0,0 +1,61 @@ +__author__ = 'RemiZOffAlex' +__email__ = 'remizoffalex@mail.ru' + +from middleware.common import middleware + + +class Config: + @middleware + def __init__(self, value): + self.__value__ = value + + @middleware + def __contains__(self, key): + if key in self.__value__: + return True + else: + return False + + @middleware + def __delitem__(self, key): + del self.__value__[key] + + @middleware + def __getattr__(self, key): + value = self.__value__[key] + if isinstance(value, dict): + result = Config(value) + elif isinstance(value, list): + result = Config(value) + else: + result = value + return result + + @middleware + def __getitem__(self, key): + # if isinstance(self.__value__, dict): + value = self.__value__[key] + if isinstance(value, dict): + result = Config(value) + elif isinstance(value, list): + result = Config(value) + else: + result = value + return result + + @middleware + def __iter__(self): + for name in self.__value__.keys(): + yield name + + @middleware + def __len__(self): + return len(self.__value__) + + @middleware + def __repr__(self): + return '<{cls} at {id}>'.format(cls=self.__class__.__name__, id=id(self)) + + @middleware + def __setitem__(self, key, value): + self.__value__[key] = value