Skip to main content

A small framework to build your flexible project configurations

Project description

ConfigFramework

PyPI version Python version PyPi downloads/m Issues

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

pip install ConfigFramework

Documentation

ConfigFrameworks stable branch documentation

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:

from ConfigFramework import loaders, variables, BaseConfig


first_loader = loaders.JsonStringLoader.load('{"Is it simple?": true}', defaults={"useful?": "maybe", "pi": 2.74})
second_loader = loaders.JsonStringLoader.load('{"Is it simple?": false, "Var": "value"}')
composite_loader = loaders.CompositeLoader.load(first_loader, second_loader)


class Config(BaseConfig):
    is_simple = variables.BoolVar("Is it simple?", first_loader)
    is_useful = variables.ConfigVar("useful?", first_loader, validator=lambda v: v == "maybe")
    pi = variables.FloatVar("pi", first_loader, default=3.14, constant=True, validator=lambda v: v == 3.14)

    class NestedConfig(BaseConfig):
        are_composite_loaders_simple = variables.BoolVar("Is it simple?", composite_loader)

        def __post_init__(self, *args, **kwargs):
            yes_or_no = 'Yes' if self.are_composite_loaders_simple.value else 'No'
            print(f"Is it simple to use composite loaders? {yes_or_no}")
            print("Nested config:", kwargs['phrase'])

    def __post_init__(self, *args, **kwargs):
        is_simple_to_str = 'simple' if self.is_simple.value else 'hard'
        print(f"ConfigFramework is {is_simple_to_str} and {self.is_useful.value} useful")
        print(f"Here's pi = {self.pi.value}")
        print("Main config:", kwargs['phrase'])


config = Config(phrase="Here's a way to pass variables")

try:
    print("pi is constant:", config.pi.is_constant)
    config.pi.value = 2.22

except NotImplementedError:
    print("You can not set value to constants on runtime")

See examples with explanation here

Supported formats

Config formats:

  • Yaml
  • Json (strings or files)
  • Environment variables
  • 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
  • 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

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

ConfigFramework-2.0.8.tar.gz (10.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ConfigFramework-2.0.8-py3-none-any.whl (27.2 kB view details)

Uploaded Python 3

File details

Details for the file ConfigFramework-2.0.8.tar.gz.

File metadata

  • Download URL: ConfigFramework-2.0.8.tar.gz
  • Upload date:
  • Size: 10.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4

File hashes

Hashes for ConfigFramework-2.0.8.tar.gz
Algorithm Hash digest
SHA256 7a46e7ce6aef67563a6b59eeeca4c47821b25ea387065420c9f889e8eb30d7cc
MD5 a4ea1e64d965b9fb1188f9564a75cf02
BLAKE2b-256 013592dfb7be058b6ce21931f967374a5caecd55dfac91daa67d005f3da61180

See more details on using hashes here.

File details

Details for the file ConfigFramework-2.0.8-py3-none-any.whl.

File metadata

  • Download URL: ConfigFramework-2.0.8-py3-none-any.whl
  • Upload date:
  • Size: 27.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.4

File hashes

Hashes for ConfigFramework-2.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 9193239b4b3ba00808103b42014c691bde969ec24e55449583693c8f2f1ae132
MD5 5ffd542bb4caf6527521e00b8fe697d4
BLAKE2b-256 1ffa3d6c676134634a25c33d590509737a85fef355af7d5e5f8907956506b686

See more details on using hashes here.

Supported by

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