A lightweight, layered configuration management library for Python that merges constants, default YAML files, and user-provided configs with optional fallback control.
Project description
jps-config-manager
A lightweight, layered configuration management library for Python that merges constants, default YAML files, and user-provided configs with optional fallback control.
🚀 Overview
jps-config-manager provides a clean, unified configuration system for Python applications and CLI tools.
It supports:
- A project's Python constants (e.g.,
constants.py) - A default configuration YAML file
- A user-supplied configuration file provided via
--config-file - Optional fallback behavior (enabled by default, user-controlled via
default_fallback: false) - Strong validation and typed accessors
It is ideal for applications that require predictable, validated, hierarchical configuration loading (e.g., pipelines, services, CLI utilities).
✨ Features
✅ Layered Configuration
Configuration is merged in the following order:
- Project defaults (constants.py)
- Default YAML file (e.g.,
conf/config.yaml) - User-provided YAML file (
--config-file)
Later layers override earlier ones.
✅ Optional Fallback Support
Users may disable fallback entirely:
behavior:
default_fallback: false
When disabled, all required values must be explicitly provided. Missing keys raise descriptive validation errors.
✅ Singleton Manager
A global configuration object ensures consistent access across your application:
from jps_config_manager import ConfigManager
cfg = ConfigManager.instance()
✅ Typed Getters
Strongly-typed retrieval:
- get_str()
- get_int()
- get_float()
- get_bool()
- get_list()
- get_path()
- get_file()
- get_dir()
✅ YAML Loading + Validation
Includes robust YAML loading (safe_load) and validation of required config keys.
✅ Dotted-Path Access
Native support for hierarchical lookups:
cfg.get("pipeline.depth_metric")
📁 Example Project Integration
Project directory layout
project_a/
├── src/project_a/
│ ├── cli.py
│ ├── constants.py
│ ├── main.py
│ └── ...
├── conf/config.yaml
└── pyproject.toml
constants.py
DEFAULTS = {
"pipeline": {
"depth_metric": "median",
"trim_prop": 0.1,
},
"paths": {
"reference": "/opt/ref.fasta"
},
"behavior": {
"default_fallback": True,
}
}
CLI entrypoint (cli.py)
import typer
from jps_config_manager import ConfigManager
from project_a import constants
app = typer.Typer()
@app.command()
def run(config_file: str = typer.Option(None, "--config-file")):
ConfigManager.initialize(
project_defaults=constants.DEFAULTS,
default_config_file="conf/config.yaml",
user_config_file=config_file,
)
run_pipeline()
Using the configuration in the application
from jps_config_manager import ConfigManager
def run_pipeline():
cfg = ConfigManager.instance()
metric = cfg.get_str("pipeline.depth_metric")
trim = cfg.get_float("pipeline.trim_prop")
ref = cfg.get_file("paths.reference")
print("Using:", metric, trim, ref)
🧪 Example Usage (Minimal)
Using fallback (default)
pipeline:
depth_metric: trimmed_mean
Result configuration:
- depth_metric → "trimmed_mean"
- trim_prop → 0.1 (default)
- behavior.default_fallback → True
Disabling fallback
behavior:
default_fallback: false
pipeline:
depth_metric: trimmed_mean
Missing trim_prop will raise:
ValueError: Missing required configuration value at: pipeline.trim_prop
📦 Installation
pip install jps-config-manager
Or from source:
make install
🧪 Development
make fix && make format && make lint
make test
The test suite includes:
- YAML loader tests
- Deep merge tests
- Fallback logic tests
- Validation tests
- ConfigManager singleton tests
- Typed getter tests
- Path resolution tests
📜 License
MIT License © Jaideep Sundaram
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jps_config_manager-0.0.0.tar.gz.
File metadata
- Download URL: jps_config_manager-0.0.0.tar.gz
- Upload date:
- Size: 6.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fe611bac39f846f8da67d6fcfd862ba78fe99b61c8a86bc125c88a332aacab90
|
|
| MD5 |
c074481cfe388ee8b468a3433afa2a6d
|
|
| BLAKE2b-256 |
c38b82b3c02e1cc37c482a729e92f1a1e65690de39f14f4098839733511e35df
|
File details
Details for the file jps_config_manager-0.0.0-py3-none-any.whl.
File metadata
- Download URL: jps_config_manager-0.0.0-py3-none-any.whl
- Upload date:
- Size: 4.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d1421e10a6ce848e52df95e5e05a161d7387da973d73b0eacf84f975f264b548
|
|
| MD5 |
7e32cf8da2a085416507927e3350adb4
|
|
| BLAKE2b-256 |
e8198af07f90ce4c0b0eab5f9463099866e96b81024552c4008f67aed9917fba
|