Skip to main content

compose-pydantic

Parse Compose Specification YAML using Pydantic and PyYAML.

Description

This library works as a thin layer on top of pydantic. It's purpose is to convert YAML to Python objects. The python model is generated using datamodel-codegen and the Compose Specification JSON schema URI.

datamodel-codegen \
    --input-file-type jsonschema \
    --url https://raw.githubusercontent.com/compose-spec/compose-spec/master/schema/compose-spec.json \
    --output compose_pydantic/models.py

Getting Started

Dependencies

  • pydantic>=2.0.0
  • PyYAML>=6.0
  • mergedeep>=1.3.4

Installation

pip install compose-pydantic

Usage

Read multiple compose files

from compose_pydantic import ComposeSpecificationFactory

csf = ComposeSpecificationFactory()
compose = csf(source='tests/compose/docker-compose.yml', overrides=['tests/compose/docker-compose.override.yml'])

print(compose.__dict__)

Result:

{'version': '3.9', 'name': None, 'services': {'db': Service(deploy=None, build=None, blkio_config=None, cap_add=None, cap_drop=None, cgroup_parent=None, command=None, configs=None, container_name=None, cpu_count=None, cpu_percent=None, cpu_shares=None, cpu_quota=None, cpu_period=None, cpu_rt_period=None, cpu_rt_runtime=None, cpus=None, cpuset=None, credential_spec=None, depends_on=None, device_cgroup_rules=None, devices=None, dns=None, dns_opt=None, dns_search=None, domainname=None, entrypoint=None, env_file=None, environment=ListOrDict(__root__=['POSTGRES_NAME=devpostgres', 'POSTGRES_USER=devpostgres', 'POSTGRES_PASSWORD=devpostgres']), expose=None, extends=None, external_links=None, extra_hosts=None, group_add=None, healthcheck=None, hostname=None, image='postgres', init=None, ipc=None, isolation=None, labels=None, links=None, logging=None, mac_address=None, mem_limit=None, mem_reservation=None, mem_swappiness=None, memswap_limit=None, network_mode=None, networks=None, oom_kill_disable=None, oom_score_adj=None, pid=None, pids_limit=None, platform=None, ports=None, privileged=None, profiles=None, pull_policy=None, read_only=None, restart=None, runtime=None, scale=None, security_opt=None, shm_size=None, secrets=None, sysctls=None, stdin_open=None, stop_grace_period=None, stop_signal=None, storage_opt=None, tmpfs=None, tty=None, ulimits=None, user=None, userns_mode=None, volumes=['./data/db:/var/lib/postgresql/data'], volumes_from=None, working_dir=None), 'web': Service(deploy=None, build='.', blkio_config=None, cap_add=None, cap_drop=None, cgroup_parent=None, command='python manage.py runserver 0.0.0.0:8000', configs=None, container_name=None, cpu_count=None, cpu_percent=None, cpu_shares=None, cpu_quota=None, cpu_period=None, cpu_rt_period=None, cpu_rt_runtime=None, cpus=None, cpuset=None, credential_spec=None, depends_on=ListOfStrings(__root__=['db']), device_cgroup_rules=None, devices=None, dns=None, dns_opt=None, dns_search=None, domainname=None, entrypoint=None, env_file=None, environment=ListOrDict(__root__=['POSTGRES_NAME=devpostgres', 'POSTGRES_USER=devpostgres', 'POSTGRES_PASSWORD=devpostgres']), expose=None, extends=None, external_links=None, extra_hosts=None, group_add=None, healthcheck=None, hostname=None, image=None, init=None, ipc=None, isolation=None, labels=None, links=None, logging=None, mac_address=None, mem_limit=None, mem_reservation=None, mem_swappiness=None, memswap_limit=None, network_mode=None, networks=None, oom_kill_disable=None, oom_score_adj=None, pid=None, pids_limit=None, platform=None, ports=['8000:8000'], privileged=None, profiles=None, pull_policy=None, read_only=None, restart=None, runtime=None, scale=None, security_opt=None, shm_size=None, secrets=None, sysctls=None, stdin_open=None, stop_grace_period=None, stop_signal=None, storage_opt=None, tmpfs=None, tty=None, ulimits=None, user=None, userns_mode=None, volumes=['.:/code'], volumes_from=None, working_dir=None)}, 'networks': None, 'volumes': None, 'secrets': None, 'configs': None}

Tests

If you're working with a clone of this repository, you can run tests like this:

$ make init test

See also tests/test_lib.py for the different ways you may use the factory class to access compose spec data.

Authors

Alexandros Monastiriotis alexmondev@gmail.com

Version History

  • 0.2.2
    • Update for pydantic v2
  • 0.2.1
    • Updated layout + dependencies
  • 0.2.0
    • Change API
  • 0.1.1
    • Add missing dependency
  • 0.1.0
    • Initial Release

License

This project is licensed under the MIT License - see the LICENSE file for details

Acknowledgments

Inspiration, libraries, etc.

Release files for compose-pydantic 0.2.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for compose-pydantic 0.2.2
File Size Uploaded
compose_pydantic-0.2.2.tar.gz 10.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for compose-pydantic 0.2.2
File Interpreter ABI Platform
compose_pydantic-0.2.2-py3-none-any.whl Python 3 none any Details

Total release size:18.5 kB

Release files / compose_pydantic-0.2.2.tar.gz

Download URL compose_pydantic-0.2.2.tar.gz
Size 10.0 kB
Tags Source
SHA-256 checksum
How to use checksums
001213c9e24dfc98806a7562c6bc40a55210c1a963e115a21598e2b571d24171
BLAKE2b-256 checksum
How to use checksums
3ee99b85d67ac71746c5a80e300b83354bcbe22a3b9c7fb9f6e2adf9b80d68f2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / compose_pydantic-0.2.2-py3-none-any.whl

Download URL compose_pydantic-0.2.2-py3-none-any.whl
Size 8.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8f2ea6be02b78ae5722b184e0a499a9b1a3340e81b6f0964e02a16aa9c4115a3
BLAKE2b-256 checksum
How to use checksums
78cf4d7f6f5c257537f251aec7c1e2933fe2cabdbc2a9bd8796b0713684f1000
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

0.2.2 This release

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page