Skip to main content

Parse Compose Specification data using Pydantic

Project description

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==1.9.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.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.

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

compose_pydantic-0.2.1.tar.gz (9.7 kB view details)

Uploaded Source

Built Distribution

compose_pydantic-0.2.1-py3-none-any.whl (8.4 kB view details)

Uploaded Python 3

File details

Details for the file compose_pydantic-0.2.1.tar.gz.

File metadata

  • Download URL: compose_pydantic-0.2.1.tar.gz
  • Upload date:
  • Size: 9.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.10.2

File hashes

Hashes for compose_pydantic-0.2.1.tar.gz
Algorithm Hash digest
SHA256 1134c6e21a6b212739dfb2fdf6440e11fb08c7aa55826ca3cd48dc7bf52ef67f
MD5 90c49025eaf56faa31175d00305d39c4
BLAKE2b-256 711dd8e6f5984dfb0e863fa5a17d8a408b5c6292a952c7f718bfb9f622fab3b3

See more details on using hashes here.

File details

Details for the file compose_pydantic-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for compose_pydantic-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 58797f622e897335a717547e95dd7a2e415cc6430b432b553d2672240b0f8934
MD5 2912b37b4fe42a35c95e826442c2cc04
BLAKE2b-256 e2ae029fc8f7e24103556656199ff4993872270c60e6d0d7c396d738561ab2e9

See more details on using hashes here.

Supported by

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