Powerful and clean YAML-based configuration library for Python 3.11+
Project description
ymlmaster
ymlmaster is a configuration loading utility for Python 3.11+. It provides a unified interface for loading deeply structured YAML configuration files (optionally combined with .env overrides) into statically typed Python classes using either dataclass or pydantic.
Features
- Schema generation from YAML into
@dataclassorPydanticmodels - Nested structures supported automatically
- Optional
.envmerging with environment variable fallback - Profile support (e.g.,
dev,release) - CLI generator for schema models
Installation
Installation is done in the project using pip or poetry:
pip install ymlmaster
poetry add ymlmaster
Model Generation CLI
To generate data models from a YAML configuration file:
poetry run generate-schema
--settings settings.yml
--output settings_model.py
--type dataclass # or --type pydantic, default: dataclass
--profile dev # or custom name block, default: dev
--url-fields postgresql redis # added url services
This will generate Python code like:
@dataclass
class Postgresql:
host: Optional[str] = None
user: Optional[str] = None
password: Optional[str] = None
port: Optional[str] = None
db: Optional[str] = None
@dataclass
class Redis:
host: Optional[str] = None
port: Optional[str] = None
@dataclass
class Application:
token: Optional[str] = None
admin_id: Optional[str] = None
@dataclass
class Settings:
postgresql: Postgresql = None
redis: Redis = None
application: Application = None
postgresql_url: Optional[str] = None
redis_url: Optional[str] = None
Using the Loader
You can then load values from settings.yml and .env into your model:
from pathlib import Path
from ymlmaster import SettingsLoader
from <settings-model> import Settings
loader = SettingsLoader(
settings_path=Path("settings.yml"),
env_path=Path(".env"),
model_class=Settings,
use_release=False, # true - release block, false - dev
profile=None, # specify the exact loading block
url_templates={
"postgresql": "postgresql+asyncpg",
"redis": "redis",
"nats": "nats"
} # url generation instructions <block name>:<circuit name>
)
config = loader.load()
print(config.redis.host)
print(config.application.admin_id)
Environment Variable Override Behavior
- Values from
.envare injected only if the YAML value isnull - Nested overrides use
__as separator:- For
application.token→APPLICATION__TOKEN - For
redis.port→REDIS__PORT
- For
If the key ends with port and is an integer, a default IP of 127.0.0.1: is prepended unless already present.
This separation helps to use sensitive data in Dockerfile/DockerCompose and in your project at once
Example docker-compose.yml:
services:
q3s2j0pj0fuj:
image: "postgres:17"
container_name: "q3s2j0pj0fuj"
environment:
POSTGRES_DB: ${POSTGRESQL__DB}
POSTGRES_USER: ${POSTGRESQL__USER}
POSTGRES_PASSWORD: ${POSTGRESQL__PASSWORD}
ports:
- "${POSTGRESQL__PORT}:5432"
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
networks:
- Network
restart: always
MIT LICENSE
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 ymlmaster-0.0.2.1.tar.gz.
File metadata
- Download URL: ymlmaster-0.0.2.1.tar.gz
- Upload date:
- Size: 6.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
32efaabfc17ac7def2fec3a27f7425fd32070de55863f64a4dd348d0aea30a77
|
|
| MD5 |
b36f6924fe6d55811e2cd4bcd10cffca
|
|
| BLAKE2b-256 |
ab245a8bfa7d0616ea76ae245db48998934285bc241b8120b1b81bd30d46540a
|
File details
Details for the file ymlmaster-0.0.2.1-py3-none-any.whl.
File metadata
- Download URL: ymlmaster-0.0.2.1-py3-none-any.whl
- Upload date:
- Size: 7.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
503f3318807c0cee21442748b11d9ab3d85e5dd5a483b59802c4d0540da410fc
|
|
| MD5 |
75b6100508cc83a5838084f1a7f99dda
|
|
| BLAKE2b-256 |
88f60319d6fb8a8ddf9a4bde631dd473f641ea4feae641b0bd1c6fe3ba8c95fe
|