Skip to main content

Small config manager for parsing configs from different sources

Project description

config_manager

Tests Release PyPI

Configuration manager for parsing from different sources

Installation

python -m pip install config-manager-evjeny

Usage

Create class with config variables and inherit it from config_manager.config.Config. You can define variables and their types or even define values. Then we can parse variables from different sources. For example, this is example_parser.py:

from config_manager.config import Config
from config_manager.variable_parsers import ListType


class TestConfig(Config):
    """Config example with some variables of different types"""

    name: str
    age: int
    is_useful: bool = False
    parts: ListType[float]


my_config = TestConfig() \
    .parse_env(prefix="test_config_") \
    .parse_json(json_path="test_config.json") \
    .parse_arguments("TestConfig parser")

print(my_config)

If we run it:

test_config_age=33 python example_parser.py \
  --name hello \
  --is_useful false \
  --parts "[0.25, 0.5, 0.75]"

It will output something like and all the primitive types will be parsed correctly:

age = 33
is_useful = False
name = hello
parts = [0.25, 0.5, 0.75]

Type details

str, int and float

For str, int and float casting is the same as builtin functions.

bool

Generally all not empty containers (even string "false") cast to bool would return True.

Thus, there is a BoolParser that casts value to True in one of these cases:

  • variable is subclass of str and it's value one of (in any case):
    • "yes"
    • "true"
    • "1"
    • "on"
  • in other cases default bool call used
from config_manager.variable_parsers import BoolParser

parser = BoolParser()

assert parser("yes") == True
assert parser("yES") == True
assert parser("tRuE") == True
assert parser("1") == True
assert parser("on") == True

assert parser("no") == False
assert parser("FaLsE") == False

assert parser(1.0) == True
assert parser(0.0) == False
assert parser(1) == True
assert parser(0) == False
assert parser(True) == True
assert parser(False) == False

ListType

As it is impossible to get type from typing.List[T] (plus this annotation removed in Python 3.9) there is a ListType. It can be used with any parseable type, so every element will be cast to target type. For example:

from config_manager.variable_parsers import ListType

# shallow lists
assert ListType[int](["1", "2", "3"]) == [1, 2, 3]
assert ListType[str]([1.0, -213.5122, 52.123]) == ["1.0", "-213.5122", "52.123"]
assert ListType[int]("[1, 2, 3]") == [1, 2, 3]

All the parse sources provide different ways to define list, so there they are:

  • in predefine and json case simply assign any python list to variable
  • in environment and argument cases every list is parsed from string [item_1, item_2, ...]

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

config_manager_evjeny-0.3.0.tar.gz (4.4 kB view details)

Uploaded Source

Built Distribution

config_manager_evjeny-0.3.0-py3-none-any.whl (5.2 kB view details)

Uploaded Python 3

File details

Details for the file config_manager_evjeny-0.3.0.tar.gz.

File metadata

  • Download URL: config_manager_evjeny-0.3.0.tar.gz
  • Upload date:
  • Size: 4.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for config_manager_evjeny-0.3.0.tar.gz
Algorithm Hash digest
SHA256 9ecef1041773c01cf9d1d5c3a8335a5c2abd762c27e340db454c27a3816978b1
MD5 7767c8e67e59775a7767c0248abd4c5d
BLAKE2b-256 4b246be29afc711ff63550637770ee58092dea1002f1f2bb6eed7df80ab971a3

See more details on using hashes here.

File details

Details for the file config_manager_evjeny-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: config_manager_evjeny-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 5.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for config_manager_evjeny-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f35cfef01607f8d06ab1a6276419dc6eb79c0dc57ce8f46721d684a75c50cd0c
MD5 d76610494fd033f0a106781eab02ec95
BLAKE2b-256 d76cdf1cd62736e6911610b5e18624ffd0cb974bbd21e9c0312f0e8310195084

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page