summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-05-10 06:26:05 +0000
committerCoprDistGit <infra@openeuler.org>2023-05-10 06:26:05 +0000
commit5330fe07073f609ecdaa987424d7c568897ed3c8 (patch)
tree640e8960ff049e66db99917750d70663fa7fc54e
parent53b176e0520bccf15b4450475d54ab8273730b6f (diff)
automatic import of python-configframework
-rw-r--r--.gitignore1
-rw-r--r--python-configframework.spec555
-rw-r--r--sources1
3 files changed, 557 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..f2b90c0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/ConfigFramework-3.0.3.tar.gz
diff --git a/python-configframework.spec b/python-configframework.spec
new file mode 100644
index 0000000..bddeece
--- /dev/null
+++ b/python-configframework.spec
@@ -0,0 +1,555 @@
+%global _empty_manifest_terminate_build 0
+Name: python-ConfigFramework
+Version: 3.0.3
+Release: 1
+Summary: A small framework to build your flexible project configurations
+License: GPLv3
+URL: https://github.com/Rud356/ConfigFramework
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/d6/42/c6f45d1c08c3d5f8eeece6e0767315c45cc48555d459e089fe269fd5732e/ConfigFramework-3.0.3.tar.gz
+BuildArch: noarch
+
+Requires: python3-pyyaml
+Requires: python3-sphinx
+Requires: python3-sphinx-rtd-theme
+Requires: python3-Pygments
+Requires: python3-mypy
+Requires: python3-types-PyYAML
+
+%description
+# ConfigFramework 3.0
+![PyPI version](https://img.shields.io/pypi/v/ConfigFramework)
+![Python version](https://img.shields.io/pypi/pyversions/ConfigFramework)
+![PyPi downloads/m](https://img.shields.io/pypi/dm/ConfigFramework)
+![Issues](https://img.shields.io/github/issues/Rud356/ConfigFramework)
+[![Python package](https://github.com/Rud356/ConfigFramework/actions/workflows/python-tests.yml/badge.svg)](https://github.com/Rud356/ConfigFramework/actions/workflows/python-tests.yml)
+
+A small and simple framework to build your configs.
+
+This project been created mostly because of me myself needing some simplistic
+and at the same time powerful enough tool to create configs, validate them through have simple interface.
+
+## Installing
+Pypi link: https://pypi.org/project/ConfigFramework
+
+Install with command:
+`pip install ConfigFramework`
+
+To install with mypy you must use command:
+`pip install ConfigFramework[mypy]`
+
+To install with mypy and dev dependencies building requirements you must use command:
+`pip install ConfigFramework[mypy,dev]`
+
+## Documentation
+[ConfigFrameworks stable branch documentation](https://configframework.readthedocs.io)
+
+### How to build docs for local usage
+1. Install dev-requirements.txt via `pip install -r dev-requirements.txt`
+2. Change a current directory to docs/
+3. Execute `make html`
+4. Open build/html folder and then open index.html in your browser
+
+## Example of usage
+
+Here's basic example:
+```python3
+from typing import Tuple
+from config_framework import BaseConfig, VariableKey, Variable, types
+from config_framework.loaders import Dict
+
+loader = Dict.load(
+ data=dict(
+ user_id=1,
+ nested_val=dict(pi=3.14),
+ python="3.6.7"
+ )
+)
+
+
+class ConfigSample(BaseConfig):
+ user_id: Variable[int] = Variable(loader, VariableKey("user_id"))
+ pi_value = Variable(loader, VariableKey("nested_val") / "pi")
+ # Defaults only applied when key isn't found.
+ # Also default values will be validated after initializing
+ # and after you register new validator.
+ some_value = Variable(loader, "not_found_value", default="Hello world")
+ python: Variable[Tuple[int, int, int]] = Variable(
+ loader, "python"
+ )
+
+ @staticmethod
+ @python.register_deserializer
+ def deserialize_version(
+ var: Variable, value: str
+ ) -> Tuple[int, int, int]:
+ version = tuple(map(int, value.split(".")))
+ if len(version) != 3:
+ raise types.custom_exceptions.InvalidValueError(
+ "Version must contain 3 parts"
+ )
+
+ return version # noqa: there's a check on being must be exactly 3 parts
+
+ @staticmethod
+ @python.register_serializer
+ def serialize_version(
+ var: Variable, value: Tuple[int, int, int]
+ ) -> str:
+ if len(value) != 3:
+ raise types.custom_exceptions.InvalidValueError(
+ "Version must contain 3 parts"
+ )
+
+ version = ".".join(map(str, value))
+ return version
+
+ @staticmethod
+ @user_id.register_validator
+ def validate_user_id(var, value):
+ # Functions can return bool values or raise
+ # config_framework.types.custom_exceptions.InvalidValueError
+ # for more detailed description.
+ return value == 1
+
+ def __post_init__(self) -> None:
+ print("Post init here!")
+ print("Values aren't locked yet")
+
+ self.new_value = 122
+
+
+config = ConfigSample()
+print("User id:", config.user_id)
+print("Pi value:", config.pi_value)
+print("Some value:", config.some_value)
+print("Post inited value:", config.new_value)
+
+# Configs by default aren't modifiable since frozen=True
+# If you need changing variables for modifying config - you must
+# create an instance of like this: ConfigSample(frozen=False)
+# But right now it will raise NotImplementedError
+config.some_value = "random"
+```
+
+See examples with explanation [here](https://github.com/Rud356/ConfigFramework/blob/master/examples/)
+
+## Supported formats
+Config formats:
+- Yaml
+- Json (strings or files)
+- Environment variables
+- Pythons dictionaries
+- Composite loading from multiple simple loaders
+
+## Features
+- Loading configs from multiple sources
+- Creating custom loaders and variables types
+- Nested configs
+- Flexible configs definition
+- Config values validations
+- Casting variables values to specific types using functions
+- Casting to acceptable variable type before dumping variable to loader
+- Variables serialization/deserialization depending on from which loader it was fetched
+- Default values for per loader or per variable
+- Translating one config loaders data to other (with or without including default values for each one)
+- Composite loaders that allow you to define where to look up values using only one loader, that handles
+ combining others
+- Simpler access to variables values (new in 3.0)
+
+## About 3.0
+This version of config framework breaks many things and has other structure,
+so you will have to manually migrate to this one. I think it was necessary
+to improve many things, and I hope it will make your life easier.
+
+### What is different?
+- Now module will be called config_framework when you import it into project
+- Structure of whole project is different comparing to 2.0
+- Usage of VariableKey to create key that will tell how to access nested values
+without worrying about what symbols to use, but requiring to explicitly write
+VariableKey whenever you want to go from this root key
+- Improved usability by using descriptors and making more logical arguments order
+- By default, config will not allow you
+assigning any values after `__post_init__` was called
+
+### Known issues
+- Typehint for `Variable[any_type]` doesn't work properly and give
+only hints for Variable methods, while must give hints for any_type, when
+called from instance of any subclass of BaseConfig
+
+
+%package -n python3-ConfigFramework
+Summary: A small framework to build your flexible project configurations
+Provides: python-ConfigFramework
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-ConfigFramework
+# ConfigFramework 3.0
+![PyPI version](https://img.shields.io/pypi/v/ConfigFramework)
+![Python version](https://img.shields.io/pypi/pyversions/ConfigFramework)
+![PyPi downloads/m](https://img.shields.io/pypi/dm/ConfigFramework)
+![Issues](https://img.shields.io/github/issues/Rud356/ConfigFramework)
+[![Python package](https://github.com/Rud356/ConfigFramework/actions/workflows/python-tests.yml/badge.svg)](https://github.com/Rud356/ConfigFramework/actions/workflows/python-tests.yml)
+
+A small and simple framework to build your configs.
+
+This project been created mostly because of me myself needing some simplistic
+and at the same time powerful enough tool to create configs, validate them through have simple interface.
+
+## Installing
+Pypi link: https://pypi.org/project/ConfigFramework
+
+Install with command:
+`pip install ConfigFramework`
+
+To install with mypy you must use command:
+`pip install ConfigFramework[mypy]`
+
+To install with mypy and dev dependencies building requirements you must use command:
+`pip install ConfigFramework[mypy,dev]`
+
+## Documentation
+[ConfigFrameworks stable branch documentation](https://configframework.readthedocs.io)
+
+### How to build docs for local usage
+1. Install dev-requirements.txt via `pip install -r dev-requirements.txt`
+2. Change a current directory to docs/
+3. Execute `make html`
+4. Open build/html folder and then open index.html in your browser
+
+## Example of usage
+
+Here's basic example:
+```python3
+from typing import Tuple
+from config_framework import BaseConfig, VariableKey, Variable, types
+from config_framework.loaders import Dict
+
+loader = Dict.load(
+ data=dict(
+ user_id=1,
+ nested_val=dict(pi=3.14),
+ python="3.6.7"
+ )
+)
+
+
+class ConfigSample(BaseConfig):
+ user_id: Variable[int] = Variable(loader, VariableKey("user_id"))
+ pi_value = Variable(loader, VariableKey("nested_val") / "pi")
+ # Defaults only applied when key isn't found.
+ # Also default values will be validated after initializing
+ # and after you register new validator.
+ some_value = Variable(loader, "not_found_value", default="Hello world")
+ python: Variable[Tuple[int, int, int]] = Variable(
+ loader, "python"
+ )
+
+ @staticmethod
+ @python.register_deserializer
+ def deserialize_version(
+ var: Variable, value: str
+ ) -> Tuple[int, int, int]:
+ version = tuple(map(int, value.split(".")))
+ if len(version) != 3:
+ raise types.custom_exceptions.InvalidValueError(
+ "Version must contain 3 parts"
+ )
+
+ return version # noqa: there's a check on being must be exactly 3 parts
+
+ @staticmethod
+ @python.register_serializer
+ def serialize_version(
+ var: Variable, value: Tuple[int, int, int]
+ ) -> str:
+ if len(value) != 3:
+ raise types.custom_exceptions.InvalidValueError(
+ "Version must contain 3 parts"
+ )
+
+ version = ".".join(map(str, value))
+ return version
+
+ @staticmethod
+ @user_id.register_validator
+ def validate_user_id(var, value):
+ # Functions can return bool values or raise
+ # config_framework.types.custom_exceptions.InvalidValueError
+ # for more detailed description.
+ return value == 1
+
+ def __post_init__(self) -> None:
+ print("Post init here!")
+ print("Values aren't locked yet")
+
+ self.new_value = 122
+
+
+config = ConfigSample()
+print("User id:", config.user_id)
+print("Pi value:", config.pi_value)
+print("Some value:", config.some_value)
+print("Post inited value:", config.new_value)
+
+# Configs by default aren't modifiable since frozen=True
+# If you need changing variables for modifying config - you must
+# create an instance of like this: ConfigSample(frozen=False)
+# But right now it will raise NotImplementedError
+config.some_value = "random"
+```
+
+See examples with explanation [here](https://github.com/Rud356/ConfigFramework/blob/master/examples/)
+
+## Supported formats
+Config formats:
+- Yaml
+- Json (strings or files)
+- Environment variables
+- Pythons dictionaries
+- Composite loading from multiple simple loaders
+
+## Features
+- Loading configs from multiple sources
+- Creating custom loaders and variables types
+- Nested configs
+- Flexible configs definition
+- Config values validations
+- Casting variables values to specific types using functions
+- Casting to acceptable variable type before dumping variable to loader
+- Variables serialization/deserialization depending on from which loader it was fetched
+- Default values for per loader or per variable
+- Translating one config loaders data to other (with or without including default values for each one)
+- Composite loaders that allow you to define where to look up values using only one loader, that handles
+ combining others
+- Simpler access to variables values (new in 3.0)
+
+## About 3.0
+This version of config framework breaks many things and has other structure,
+so you will have to manually migrate to this one. I think it was necessary
+to improve many things, and I hope it will make your life easier.
+
+### What is different?
+- Now module will be called config_framework when you import it into project
+- Structure of whole project is different comparing to 2.0
+- Usage of VariableKey to create key that will tell how to access nested values
+without worrying about what symbols to use, but requiring to explicitly write
+VariableKey whenever you want to go from this root key
+- Improved usability by using descriptors and making more logical arguments order
+- By default, config will not allow you
+assigning any values after `__post_init__` was called
+
+### Known issues
+- Typehint for `Variable[any_type]` doesn't work properly and give
+only hints for Variable methods, while must give hints for any_type, when
+called from instance of any subclass of BaseConfig
+
+
+%package help
+Summary: Development documents and examples for ConfigFramework
+Provides: python3-ConfigFramework-doc
+%description help
+# ConfigFramework 3.0
+![PyPI version](https://img.shields.io/pypi/v/ConfigFramework)
+![Python version](https://img.shields.io/pypi/pyversions/ConfigFramework)
+![PyPi downloads/m](https://img.shields.io/pypi/dm/ConfigFramework)
+![Issues](https://img.shields.io/github/issues/Rud356/ConfigFramework)
+[![Python package](https://github.com/Rud356/ConfigFramework/actions/workflows/python-tests.yml/badge.svg)](https://github.com/Rud356/ConfigFramework/actions/workflows/python-tests.yml)
+
+A small and simple framework to build your configs.
+
+This project been created mostly because of me myself needing some simplistic
+and at the same time powerful enough tool to create configs, validate them through have simple interface.
+
+## Installing
+Pypi link: https://pypi.org/project/ConfigFramework
+
+Install with command:
+`pip install ConfigFramework`
+
+To install with mypy you must use command:
+`pip install ConfigFramework[mypy]`
+
+To install with mypy and dev dependencies building requirements you must use command:
+`pip install ConfigFramework[mypy,dev]`
+
+## Documentation
+[ConfigFrameworks stable branch documentation](https://configframework.readthedocs.io)
+
+### How to build docs for local usage
+1. Install dev-requirements.txt via `pip install -r dev-requirements.txt`
+2. Change a current directory to docs/
+3. Execute `make html`
+4. Open build/html folder and then open index.html in your browser
+
+## Example of usage
+
+Here's basic example:
+```python3
+from typing import Tuple
+from config_framework import BaseConfig, VariableKey, Variable, types
+from config_framework.loaders import Dict
+
+loader = Dict.load(
+ data=dict(
+ user_id=1,
+ nested_val=dict(pi=3.14),
+ python="3.6.7"
+ )
+)
+
+
+class ConfigSample(BaseConfig):
+ user_id: Variable[int] = Variable(loader, VariableKey("user_id"))
+ pi_value = Variable(loader, VariableKey("nested_val") / "pi")
+ # Defaults only applied when key isn't found.
+ # Also default values will be validated after initializing
+ # and after you register new validator.
+ some_value = Variable(loader, "not_found_value", default="Hello world")
+ python: Variable[Tuple[int, int, int]] = Variable(
+ loader, "python"
+ )
+
+ @staticmethod
+ @python.register_deserializer
+ def deserialize_version(
+ var: Variable, value: str
+ ) -> Tuple[int, int, int]:
+ version = tuple(map(int, value.split(".")))
+ if len(version) != 3:
+ raise types.custom_exceptions.InvalidValueError(
+ "Version must contain 3 parts"
+ )
+
+ return version # noqa: there's a check on being must be exactly 3 parts
+
+ @staticmethod
+ @python.register_serializer
+ def serialize_version(
+ var: Variable, value: Tuple[int, int, int]
+ ) -> str:
+ if len(value) != 3:
+ raise types.custom_exceptions.InvalidValueError(
+ "Version must contain 3 parts"
+ )
+
+ version = ".".join(map(str, value))
+ return version
+
+ @staticmethod
+ @user_id.register_validator
+ def validate_user_id(var, value):
+ # Functions can return bool values or raise
+ # config_framework.types.custom_exceptions.InvalidValueError
+ # for more detailed description.
+ return value == 1
+
+ def __post_init__(self) -> None:
+ print("Post init here!")
+ print("Values aren't locked yet")
+
+ self.new_value = 122
+
+
+config = ConfigSample()
+print("User id:", config.user_id)
+print("Pi value:", config.pi_value)
+print("Some value:", config.some_value)
+print("Post inited value:", config.new_value)
+
+# Configs by default aren't modifiable since frozen=True
+# If you need changing variables for modifying config - you must
+# create an instance of like this: ConfigSample(frozen=False)
+# But right now it will raise NotImplementedError
+config.some_value = "random"
+```
+
+See examples with explanation [here](https://github.com/Rud356/ConfigFramework/blob/master/examples/)
+
+## Supported formats
+Config formats:
+- Yaml
+- Json (strings or files)
+- Environment variables
+- Pythons dictionaries
+- Composite loading from multiple simple loaders
+
+## Features
+- Loading configs from multiple sources
+- Creating custom loaders and variables types
+- Nested configs
+- Flexible configs definition
+- Config values validations
+- Casting variables values to specific types using functions
+- Casting to acceptable variable type before dumping variable to loader
+- Variables serialization/deserialization depending on from which loader it was fetched
+- Default values for per loader or per variable
+- Translating one config loaders data to other (with or without including default values for each one)
+- Composite loaders that allow you to define where to look up values using only one loader, that handles
+ combining others
+- Simpler access to variables values (new in 3.0)
+
+## About 3.0
+This version of config framework breaks many things and has other structure,
+so you will have to manually migrate to this one. I think it was necessary
+to improve many things, and I hope it will make your life easier.
+
+### What is different?
+- Now module will be called config_framework when you import it into project
+- Structure of whole project is different comparing to 2.0
+- Usage of VariableKey to create key that will tell how to access nested values
+without worrying about what symbols to use, but requiring to explicitly write
+VariableKey whenever you want to go from this root key
+- Improved usability by using descriptors and making more logical arguments order
+- By default, config will not allow you
+assigning any values after `__post_init__` was called
+
+### Known issues
+- Typehint for `Variable[any_type]` doesn't work properly and give
+only hints for Variable methods, while must give hints for any_type, when
+called from instance of any subclass of BaseConfig
+
+
+%prep
+%autosetup -n ConfigFramework-3.0.3
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-ConfigFramework -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Wed May 10 2023 Python_Bot <Python_Bot@openeuler.org> - 3.0.3-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..6141a6d
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+66db325494956d1b2bde14f8ccfbeb1b ConfigFramework-3.0.3.tar.gz