Skip to main content

A lightweight way to find the project root and load config

Project description

fastconfig

A lightweight way to find the project root and load config in python3. current support is [3.9, 3.10, 3.11].

This library provides two functionalities:

  • A function to search for files while traversing up to the project root.
    • fastconfig.find_project_root
    • fastconfig.is_project_root
    • fastconfig.search
  • A function to directly build a class from a configuration file.
    • fastconfig.config.FastConfig
      • build
      • to_dict

Install

pip install fastconfig

Usage

  • example.json
{
    "setting_path": "setting_path",
    "section": {
        "numeric": 42
    }
}
  • other.toml
setting_path = "setting_path"
[section]
numeric = 24
# main.py
import fastconfig
from fastconfig.config import FastConfig, fc_field
from fastconfig.exception import FastConfigError
from dataclasses import field, dataclass


@dataclass
class Config(FastConfig):
    result: int = fc_field(key="section.numeric", default=-1)
    # If metadata does not exist, it is searched by variable name
    setting_path: str = fc_field(default="default")
    # Type checking is done based on the type of dataclass. Type checking is recursive.
    dic: dict[str, int] = fc_field(key="section", default_factory=dict)


if path := fastconfig.search("example.json"):
    try:
        # build instance
        config = Config.build(path)
        assert config == Config(
            result=42, setting_path="setting_path", dic={"numeric": 42}
        )
    except FastConfigError:
        raise RuntimeError
else:
    config = Config()

if other_path := fastconfig.search("other.toml"):
    # can update config
    config = Config.build(other_path, config)
    assert config == Config(result=24, setting_path="setting_path", dic={"numeric": 24})

Motivation

In many projects, it is common to write configuration files, read them in code, and build Config classes. I created this library to enable these functions to be implemented by simply defining a class and specifying a file name (such as pyproject.toml).

Contribution

If you have suggestions for features or improvements to the code, please feel free to create an issue first.

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

fastconfig-0.2.0.tar.gz (7.5 kB view details)

Uploaded Source

Built Distribution

fastconfig-0.2.0-py3-none-any.whl (8.6 kB view details)

Uploaded Python 3

File details

Details for the file fastconfig-0.2.0.tar.gz.

File metadata

  • Download URL: fastconfig-0.2.0.tar.gz
  • Upload date:
  • Size: 7.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.4.2 CPython/3.10.10 Darwin/22.4.0

File hashes

Hashes for fastconfig-0.2.0.tar.gz
Algorithm Hash digest
SHA256 d2ac6c982fa3b1a554208b711d59d22da35e605d0de689d9857ced8ee3cbd6f4
MD5 121f1d98d7328727f65d8f5ed1e33dea
BLAKE2b-256 2f92b7658069b89524d74df3832b798e67ba27261026de63c67c74cffe310f04

See more details on using hashes here.

File details

Details for the file fastconfig-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: fastconfig-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 8.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.4.2 CPython/3.10.10 Darwin/22.4.0

File hashes

Hashes for fastconfig-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f37515044a6dcb14a6033d1bcc75d90678dbe879ecb0220c20d32593229f6643
MD5 20958c1f292fab80195b53494323d8fe
BLAKE2b-256 54888b07cdb2ef8f99c60944b3d9dbe7f6a8d224af2089a3ec81ae94c469c9ac

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