the_conf
A Python configuration management library that merges values from multiple sources (files, command line, environment variables) with schema validation and configurable priority ordering.
Installation
pip install the_conf
# or
poetry add the_conf
Quick Start
1. Define a Meta Configuration (Schema)
Create a YAML file defining your configuration schema (myapp.meta.yml):
source_order: ['env', 'files', 'cmd'] # Priority order (first wins)
config_files: ['config.yml']
parameters:
- database_url:
type: str
required: true
help_txt: Database connection string
- debug:
type: bool
default: false
- max_connections:
type: int
default: 10
among: [5, 10, 20, 50] # Valid choices
- nested:
- timeout:
type: int
default: 30
2. Load Configuration
from the_conf import TheConf
# Load meta configuration and gather values from all sources
conf = TheConf('myapp.meta.yml')
# Access values
print(conf.database_url)
print(conf.debug)
print(conf.nested.timeout)
# Modify values (writes to main config file)
conf.max_connections = 20
conf.write()
3. Provide Values from Different Sources
From environment variables:
export DATABASE_URL="postgresql://localhost/mydb"
export NESTED_TIMEOUT="60"
From config file (config.yml):
database_url: postgresql://localhost/mydb
debug: true
nested:
timeout: 45
From command line:
python myapp.py --database-url postgresql://localhost/mydb --debug --nested-timeout 60
Source Priority System
The source_order defines which source takes precedence when the same parameter is provided from multiple sources. The first source in the list wins - later sources do not overwrite values from earlier sources.
Default order: ["cmd", "files", "env"] (command line > files > environment)
Example with source_order: ["env", "files", "cmd"]:
- If
DEBUGis set in environment variables, the value from config files or command line will be ignored - This is useful when you want environment variables (e.g., in containers) to always take precedence
Parameter Options
type:str,int,bool,list,dictdefault: Default value (cannot be combined withrequired)required: Must be provided from at least one sourceamong: List of valid choicesread_only: Prevents modification after initial loadno_cmd: Exclude this parameter from command line parsingno_env: Exclude this parameter from environment variable parsingcmd_line_opt: Override the auto-generated command line flaghelp_txt: Help text for documentation and CLI
List Parameters
Simple Lists
parameters:
- allowed_ips:
type: list
allowed_ips: {type: str}
From environment:
export ALLOWED_IPS_0="192.168.1.1"
export ALLOWED_IPS_1="192.168.1.2"
From file:
allowed_ips:
- 192.168.1.1
- 192.168.1.2
In Python:
conf.allowed_ips.append("192.168.1.3")
print(conf.allowed_ips[0]) # 192.168.1.1
Complex Lists (Lists of Dicts)
parameters:
- servers:
type: list
servers:
- host: {type: str}
- port: {type: int}
From environment:
export SERVERS_0_HOST="localhost"
export SERVERS_0_PORT="8080"
export SERVERS_1_HOST="remote.host"
export SERVERS_1_PORT="8081"
From file:
servers:
- host: localhost
port: 8080
- host: remote.host
port: 8081
In Python:
print(conf.servers[0].host) # localhost
print(conf.servers[0].port) # 8080
Note: List parameters are not available via command line arguments due to technical limitations.
File Encryption
the_conf supports encrypted configuration files using AES encryption:
# Save encrypted config
conf = TheConf('myapp.meta.yml')
conf.database_password = "secret"
conf.write('config.yml', passkey='my-encryption-key')
# Load encrypted config
conf = TheConf('myapp.meta.yml', passkey='my-encryption-key')
Or via command line/environment:
python myapp.py --passkey my-encryption-key
# or
export THECONF_PASSKEY="my-encryption-key"
Nested Configuration
Create hierarchical configuration structures:
parameters:
- database:
- host: {type: str, default: localhost}
- port: {type: int, default: 5432}
- credentials:
- username: {type: str}
- password: {type: str}
Access with dot notation:
conf.database.host
conf.database.credentials.username
Interactive Configuration Generation
Use the interactive mode to generate configuration files:
conf = TheConf('myapp.meta.yml', prompt_values=True)
# Prompts user for required values and generates config file
Design Philosophy
From this article, a good configuration library should:
- Provide a standardized API to define parameters via a data schema
- Generate command line and environment variable parsers from the schema
- Generate validators from the schema
- Separate program configuration from user parameters
- Support read-only settings and permissions
- Load settings from compatible sources (database, files, APIs, services)
- Support configuration hierarchies with cascading value retrieval
- Be simple enough for small scripts yet powerful for complex applications
- Auto-document settings
Terminology
- Meta Configuration: The schema file (YAML/JSON) that defines parameter names, types, defaults, and validators
- User Configuration: The actual values loaded from files, command line, or environment variables
Development
# Run tests
make test
# Run linters
make lint
# Build package
make build
License
GPLv3 - See LICENSE file for details
Metadata
Release files for the_conf 1.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| the_conf-1.1.2.tar.gz | 23.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| the_conf-1.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 47.9 kB
Release files / the_conf-1.1.2.tar.gz
| Download URL | the_conf-1.1.2.tar.gz |
|---|---|
| Size | 23.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c6e26ae40705f23ac0e7498399f57c949dd725791645b2f17eb149eb11b100a8
|
|
BLAKE2b-256 checksum How to use checksums |
125f8bd86ee89a300a36ae193aca3cc9169479f30d5633a6aae460e9fbdd9290
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.3.2 CPython/3.14.3 Linux/6.18.12-200.fc43.x86_64
|
Release files / the_conf-1.1.2-py3-none-any.whl
| Download URL | the_conf-1.1.2-py3-none-any.whl |
|---|---|
| Size | 24.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9e482eb281e1dbf330bd9ce08c8a1e8de5e87b461da984a3a5a2e82f8db0e4a2
|
|
BLAKE2b-256 checksum How to use checksums |
909905ecb0f6bc9f7a290afc3491465e82fd8ba546e85e06dd41fa5876cb8d3a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.3.2 CPython/3.14.3 Linux/6.18.12-200.fc43.x86_64
|