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
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 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
|