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)
| File | Size | Uploaded | |
|---|---|---|---|
| compose_pydantic-0.2.2.tar.gz | 10.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|