https://github.com/arthurbook/configmate
Practical yet versatile configuration parsing
https://github.com/arthurbook/configmate
config configuration configuration-parser parser
Last synced: 3 months ago
JSON representation
Practical yet versatile configuration parsing
- Host: GitHub
- URL: https://github.com/arthurbook/configmate
- Owner: ArthurBook
- License: apache-2.0
- Created: 2023-09-24T17:06:57.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2024-02-17T00:47:55.000Z (almost 2 years ago)
- Last Synced: 2025-09-22T10:41:14.428Z (4 months ago)
- Topics: config, configuration, configuration-parser, parser
- Language: Python
- Homepage:
- Size: 1.01 MB
- Stars: 6
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
ConfigMate
Practical and versatile configuration parsing in Python
***
ConfigMate streamlines heavyweight config parsing into a sleek,
zero-boilerplate experience that lets you configure with confidence.
Key Features
-
Extensible file format support: Automatic detection &
parsing of all standard config file formats. -
Environment variable interpolation: Parse environment
variables while keeping defaults in your configuration file. -
Override files: Segregate base configuration management
such as DEV/STAG/PROD overrides in separate files. -
CLI support: Override configuration values with files
or values directly from an automatically generated command line interface. -
Type validation: Custom validation support, and seamless
extension for Pydantic's fantastic validation capabilities.
## Get started with ConfigMate
ConfigMate simplifies your configuration management. Get started with these easy steps:
### Installation
Install ConfigMate with all standard features:
```bash
pip install "configmate[standard]"
```
Alternatively, install with specific features (e.g., Pydantic):
```bash
pip install "configmate[pydantic]"
```
#### Set Up Configuration
1. Create a Configuration File:
In this example we will do YAML, but ConfigMate supports all standard config file formats(json, toml, ini - you name it):
```yaml
# config.yaml
Database configuration:
host: localhost
port: ${DB_PORT:8000}
```
2. Load your config in python:
Use ConfigMate to load and validate configuration in your script:
```python
# example.py
import configmate
import dataclasses
@dataclasses.dataclass
class DatabaseConfig:
host: str
port: int
config = configmate.get_config(
"config.yaml",
section='Database configuration',
validation=DatabaseConfig
)
print(config)
```
3. Run Your Script with Different Configurations
Execute your script, and override configurations using environment variables or command-line arguments:
```bash
# Default configuration
python example.py
>> DatabaseConfig(host='localhost', port=8000)
# Override port using an environment variable
DB_PORT=9000 python example.py
>> DatabaseConfig(host='localhost', port=9000)
# Override host using a command-line argument
python example.py ++host foreignhost
>> DatabaseConfig(host='foreignhost', port=8000)
```
## Quick comparison with other config parsers
| Feature / Package | ConfigMate | ConfigParser | File Parsers (TOML/YAML/...) | ArgParse | Pallets/Click | Google/Fire | OmegaConf | Hydra |
|---------------------------------------|:----------:|:------------:|:---------------------------:|:--------:|:-------------:|:-----------:|:---------:|:-----:|
| No Boilerplate | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ |
| Support for Multiple File Formats | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Hierarchical Configuration | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ |
| Command-line Interface (CLI) Support | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ |
| Type Validation | ✅ | ❌ | Partial | ❌ | ✅ | ❌ | Partial | Partial|
| Environment Variable Interpolation | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
| Dependency Count | Low | Low | Low | Low | Low | Low | Low | Moderate |