Skip to main content

ConfigFramework 4.0

PyPI version Python version PyPi downloads/m Issues Python package

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]

If you have python below 3.11 or need toml format with ability to write it back: pip install ConfigFramework[toml]

To install with mypy and dev dependencies building requirements you must use command: pip install ConfigFramework[mypy,dev]

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 config_framework import BaseConfig, VariableKey, Variable
from config_framework.loaders import Dict

loader = Dict.load(
    data=dict(
        user_id=1,
        nested_val=dict(pi=3.14)
    )
)


class ConfigSample(BaseConfig):
    user_id: Variable[int] = Variable(VariableKey("user_id"))
    pi_value = Variable(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("not_found_value", default="Hello world")

    @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(loader)
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

Supported formats

Config formats:

  • Yaml
  • Toml (read only with default lib included with python 3.11, and read-write with toml external lib)
  • 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
  • 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
  • Simple access to variables values
  • Single entry point for initialization of config with loader

About 4.0

This version of ConfigFramework is not backwards compatible and requires a bit of work to make migration. It was needed to get rid of annoying initialization with one config loader per variable listing, which also made it really hard to replace config sources and made it more uncertain where is the source of data for variable.

What is different?

  • Configs must get only one loader as input when initializing them, and all variables don't have argument for specifying loader.
  • Added toml support for python above 3.11 and with external library that adds ability to read and write data.
  • Changes in internals regarding variables initialization to support assigning data from provided loader dynamically on initialization of whole config.
  • Added pyproject.toml for more modern package management.

Metadata

Release files for ConfigFramework 4.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ConfigFramework 4.1.0
File Size Uploaded
configframework-4.1.0.tar.gz 15.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ConfigFramework 4.1.0
File Interpreter ABI Platform
ConfigFramework-4.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 37.5 kB

Release files / configframework-4.1.0.tar.gz

Download URL configframework-4.1.0.tar.gz
Size 15.9 kB
Tags Source
SHA-256 checksum
How to use checksums
03d01d97350583d6c6b4847e34ef636ef191fad190762e4e6729668d4cf035c6
BLAKE2b-256 checksum
How to use checksums
21b0d4236170df280d6278d6ddf3f48aa4212588089ebdd6d3f82afdebc86449
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.12.7

Release files / ConfigFramework-4.1.0-py3-none-any.whl

Download URL ConfigFramework-4.1.0-py3-none-any.whl
Size 21.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e7d1b8c762afd27a87fe5c28f8f4638cd7eca6cda41280a9fee934afe03edafb
BLAKE2b-256 checksum
How to use checksums
15240555929f1c50e938b06225e5bf80f40f6939ba289626c901bb29921b799a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.12.7

Release history Release notifications | RSS feed

This release

4.1.0 This release

2 release files

4.0.2

2 release files

4.0.1

2 release files

4.0.0

2 release files

3.0.3

2 release files

3.0.2

2 release files

3.0.1

2 release files

3.0.0

2 release files

2.2.4

2 release files

2.2.2

2 release files

2.2.1

2 release files

2.1.1

2 release files

2.1.0

2 release files

2.0.8

2 release files

2.0.7

2 release files

2.0.6

2 release files

2.0.5

2 release files

2.0.4

2 release files

2.0.3

2 release files

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.3.3

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page