Skip to main content

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 @dataclass or Pydantic models
  • Nested structures supported automatically
  • Optional .env merging 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

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

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
)

config = loader.load()

print(config.redis.host)
print(config.application.admin_id)

Environment Variable Override Behavior

  • Values from .env are injected only if the YAML value is null
  • Nested overrides use __ as separator:
    • For application.tokenAPPLICATION__TOKEN
    • For redis.portREDIS__PORT

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ymlmaster-0.0.2.tar.gz (6.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ymlmaster-0.0.2-py3-none-any.whl (6.9 kB view details)

Uploaded Python 3

File details

Details for the file ymlmaster-0.0.2.tar.gz.

File metadata

  • Download URL: ymlmaster-0.0.2.tar.gz
  • Upload date:
  • Size: 6.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for ymlmaster-0.0.2.tar.gz
Algorithm Hash digest
SHA256 37c1319df1b5c8176ce9714d4a5ce459e349d22e472ff6066467c1f651ed4b4c
MD5 1668a530d703b773b6f7dde5cdc632fe
BLAKE2b-256 e2fd13944c5638f6525de4562d1779742dd1e0fafe099960b31b7b37d371bc71

See more details on using hashes here.

File details

Details for the file ymlmaster-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: ymlmaster-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 6.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for ymlmaster-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 e2453b0dd6f3f691bec94c8b164ed6c26571218cee450524c69aefc54b5c8315
MD5 5285200089c7dc34af0ffdeb90360ea3
BLAKE2b-256 1c904589b86325f2aba8e69fd48b9bff85b97c140d7640b9139b14946771a088

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page