Parse Compose Specification data using Pydantic and OpenAPI 3
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(['tests/compose/docker-compose.yml', '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}
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.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
Built Distribution
File details
Details for the file compose-pydantic-0.1.1.tar.gz
.
File metadata
- Download URL: compose-pydantic-0.1.1.tar.gz
- Upload date:
- Size: 8.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.63.1 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/1.5.0 colorama/0.4.4 CPython/3.9.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f6d8db19c2cabfc243bcd7cdbefdf255d7b6d622b55361c0b74cb80497fad061 |
|
MD5 | 3043f071c0fdbaddbc4a4daaf123f25d |
|
BLAKE2b-256 | ee3dd2217fab627770f010c0ff0bc3c31104a0efe23337c448471188d8991b73 |
File details
Details for the file compose_pydantic-0.1.1-py3-none-any.whl
.
File metadata
- Download URL: compose_pydantic-0.1.1-py3-none-any.whl
- Upload date:
- Size: 8.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.63.1 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/1.5.0 colorama/0.4.4 CPython/3.9.10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e5aa1bb902e750ea8aa9423884e1d0a19e743ea916c36987f4f33ec1580cae0e |
|
MD5 | cbb49a720a0bec48c7304b09407f91bd |
|
BLAKE2b-256 | 3d2a8e31d900f446cc22fbe9dff0144793986611171736b99b0c695a7d2ca566 |