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
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1134c6e21a6b212739dfb2fdf6440e11fb08c7aa55826ca3cd48dc7bf52ef67f |
|
MD5 | 90c49025eaf56faa31175d00305d39c4 |
|
BLAKE2b-256 | 711dd8e6f5984dfb0e863fa5a17d8a408b5c6292a952c7f718bfb9f622fab3b3 |
File details
Details for the file compose_pydantic-0.2.1-py3-none-any.whl
.
File metadata
- Download URL: compose_pydantic-0.2.1-py3-none-any.whl
- Upload date:
- Size: 8.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.10.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 58797f622e897335a717547e95dd7a2e415cc6430b432b553d2672240b0f8934 |
|
MD5 | 2912b37b4fe42a35c95e826442c2cc04 |
|
BLAKE2b-256 | e2ae029fc8f7e24103556656199ff4993872270c60e6d0d7c396d738561ab2e9 |