Skip to main content

PyPI - Downloads

Comprehensive Configuration

A simple configuration library that lets you create a pydantic-like model for your configuration.

Installation

pip install comprehensiveconfig

Features

  • Supports static type checking
  • toml writer
  • json writer
  • Number fields
  • Text fields (with regex filtering)
  • File/Folder path fields (PathField)
    • Ability to change validator (unix/linux, windows, agnostic, and current system)
    • Validate for only files, folder, or accept both.
  • List fields
  • Table fields
  • TableSpec (Model) fields
  • Sections
  • Include doc comments in Section
  • auto loading
  • initialize default config (with auto loader)
  • [N/a] yaml writer (This will likely be moved to a different library as an extension of comprehensiveconfig!)
  • Tests targetting mypy and other static type checkers to ensure EVERYTHING looks good across IDE's
  • section list (via a Table field)
  • Field type unions (overwriting normal union syntax)
  • per attribute doc comments (inline and noninline)
  • enum support (Via spec.ConfigEnum and python's enum.Enum)
  • fully supported string escapes

Example (Python)

# example.py
from comprehensiveconfig import ConfigSpec
from comprehensiveconfig.spec import Section, Integer, Float, Text, List
from comprehensiveconfig.toml import TomlWriter

class MyConfigSpec(ConfigSpec,
                   default_file="myconfig.toml",
                   writer=TomlWriter,
                   create_file=True):
    class MySection(Section, name="My_Section"):
        some_field = Integer(10)
        other_field = Text("Some Default Text")

        class SubSection(Section):
            '''An example Sub Section'''
            x = Integer(10)

    class Credentials(Section):
        '''Example credentials section'''
        email = Text("example@email.com", regex=r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$")
        password = Text("MyPassword")

    some_field = Float(6.9)
    list_of_stuff = List(["12", "13", "14"], inner_type=Text())


# Accessing values from globally loaded config (if one exists, otherwise it accesses the actual Field class)
print(MyConfigSpec.some_field)
print(MyConfigSpec.MySection.other_field)

# Another way to open configuration
second_config = MyConfigSpec.load("another_config.toml", TomlWriter)

Example (toml output)

some_field = 6.9
list_of_stuff = ["12", "13", "14"]

[My_Section]
some_field = 10
other_field = "Some Default Text"

[My_Section.SubSection]
# An example Sub Section
x = 10

[Credentials]
# Example credentials section
email = "example@email.com"
password = "MyPassword"

Autoloaded Configuration Classes (Typing Issues in Mypy)

There is one particular pitfall I have yet to develop around. Mypy is missing a few essential checks that improve type checking on autoloaded configuration classes. For the time being, I recommend avoiding using mypy with this project until class-decorator annotations work (something that hasn't worked since 2017) or until I can manage to create a mypy plugin to work around the issue. Pyright doesn't seem to believe anything is wrong. Pyright is the default typechecker used in vscode's pylance extension.

If type checking issues occur on your autoloaded config classes, try using this temporary decorator as a fix:

@autoloaded # makes your type checker think `MyConfig` is an instance of itself. (or at least it *should* do that.)
class MyConfig(ConfigSpec, default_file="test.toml", writer=TomlWriter, create_file=True):
    ... # impl here

The other option is to just manually load your configuration.

class MyConfig(ConfigSpec, auto_load=False):
    ...

config = MyConfig.load("test.toml", TomlWriter, create_file=True) # load and/or create our config file

Download files

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

Source Distribution

comprehensiveconfig-1.2.0.tar.gz (24.2 kB view details)

Uploaded Source

Built Distribution

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

comprehensiveconfig-1.2.0-py3-none-any.whl (22.5 kB view details)

Uploaded Python 3

File details

Details for the file comprehensiveconfig-1.2.0.tar.gz.

File metadata

  • Download URL: comprehensiveconfig-1.2.0.tar.gz
  • Upload date:
  • Size: 24.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for comprehensiveconfig-1.2.0.tar.gz
Algorithm Hash digest
SHA256 3c2896ca3ca736e9fb1785fef05e19621780e309ed0addcdd8c1f04783947d5c
MD5 7ff0f215c2669819faf3a48d1aba52d0
BLAKE2b-256 5c1b5d56ed38d5c27d9750064512ad73910200ac213d1ede305826ca7015c69f

See more details on using hashes here.

File details

Details for the file comprehensiveconfig-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: comprehensiveconfig-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 22.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for comprehensiveconfig-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3621193fab4a1eb67091cff0a8ada5a7f47aeb2e59cf4e80d18b37b0d4e1723b
MD5 6c5309682c615f9c0527ce2190dae600
BLAKE2b-256 97b07af6afaec1c2ed6fe7f0547727b8ee7a937e479c6b3bb33f8a7208393a94

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