Coverage for src/dcm/spec.py: 100%
406 statements
« prev ^ index » next coverage.py v7.10.6, created at 2025-09-05 17:47 +0200
« prev ^ index » next coverage.py v7.10.6, created at 2025-09-05 17:47 +0200
1# generated by datamodel-codegen:
2# filename: compose-spec.json
3# timestamp: 2025-08-29T13:09:30+00:00
5from __future__ import annotations
7from datetime import timedelta
8from enum import Enum
9from typing import Any, Dict, List, Optional, Union
11from pydantic import BaseModel, ConfigDict, Field, RootModel
13# pylint: disable=invalid-name
16class Cgroup(Enum):
17 host = "host"
18 private = "private"
21class CredentialSpec(BaseModel):
22 model_config = ConfigDict(
23 extra="forbid",
24 )
25 config: Optional[str] = None
26 file: Optional[str] = None
27 registry: Optional[str] = None
30class Condition(Enum):
31 service_started = "service_started"
32 service_healthy = "service_healthy"
33 service_completed_successfully = "service_completed_successfully"
36class DependsOn(BaseModel):
37 model_config = ConfigDict(
38 extra="forbid",
39 )
40 restart: Optional[bool] = None
41 required: Optional[bool] = True
42 condition: Condition
45class Extends(BaseModel):
46 model_config = ConfigDict(
47 extra="forbid",
48 )
49 service: str
50 file: Optional[str] = None
53class Logging(BaseModel):
54 model_config = ConfigDict(
55 extra="forbid",
56 )
57 driver: Optional[str] = None
58 options: Optional[Dict[str, Optional[Union[str, float]]]] = None
61class Ports(BaseModel):
62 model_config = ConfigDict(
63 extra="forbid",
64 )
65 name: Optional[str] = None
66 mode: Optional[str] = None
67 host_ip: Optional[str] = None
68 target: Optional[int] = None
69 published: Optional[Union[str, int]] = None
70 protocol: Optional[str] = None
71 app_protocol: Optional[str] = None
74class PullPolicy(Enum):
75 always = "always"
76 never = "never"
77 if_not_present = "if_not_present"
78 build = "build"
79 missing = "missing"
82class Selinux(Enum):
83 z = "z"
84 Z = "Z"
87class Bind(BaseModel):
88 model_config = ConfigDict(
89 extra="forbid",
90 )
91 propagation: Optional[str] = None
92 create_host_path: Optional[bool] = None
93 selinux: Optional[Selinux] = None
96class Volume1(BaseModel):
97 model_config = ConfigDict(
98 extra="forbid",
99 )
100 nocopy: Optional[bool] = None
101 subpath: Optional[str] = None
104class Size(RootModel[int]):
105 root: int = Field(..., ge=0)
108class Tmpfs(BaseModel):
109 model_config = ConfigDict(
110 extra="forbid",
111 )
112 size: Optional[Union[Size, str]] = None
113 mode: Optional[float] = None
116class Volumes(BaseModel):
117 model_config = ConfigDict(
118 extra="forbid",
119 )
120 type: str
121 source: Optional[str] = None
122 target: Optional[str] = None
123 read_only: Optional[bool] = None
124 consistency: Optional[str] = None
125 bind: Optional[Bind] = None
126 volume: Optional[Volume1] = None
127 tmpfs: Optional[Tmpfs] = None
130class Healthcheck(BaseModel):
131 model_config = ConfigDict(
132 extra="forbid",
133 )
134 disable: Optional[bool] = None
135 interval: Optional[Union[str, timedelta]] = None
136 retries: Optional[float] = None
137 test: Optional[Union[str, List[str]]] = None
138 timeout: Optional[Union[str, timedelta]] = None
139 start_period: Optional[Union[str, timedelta]] = None
140 start_interval: Optional[Union[str, timedelta]] = None
143class Action(Enum):
144 rebuild = "rebuild"
145 sync = "sync"
146 sync_restart = "sync+restart"
149class WatchItem(BaseModel):
150 ignore: Optional[List[str]] = None
151 path: str
152 action: Action
153 target: Optional[str] = None
156class Development(BaseModel):
157 watch: Optional[List[WatchItem]] = None
160class Order(Enum):
161 start_first = "start-first"
162 stop_first = "stop-first"
165class RollbackConfig(BaseModel):
166 model_config = ConfigDict(
167 extra="forbid",
168 )
169 parallelism: Optional[int] = None
170 delay: Optional[timedelta] = None
171 failure_action: Optional[str] = None
172 monitor: Optional[timedelta] = None
173 max_failure_ratio: Optional[float] = None
174 order: Optional[Order] = None
177class UpdateConfig(BaseModel):
178 model_config = ConfigDict(
179 extra="forbid",
180 )
181 parallelism: Optional[int] = None
182 delay: Optional[timedelta] = None
183 failure_action: Optional[str] = None
184 monitor: Optional[timedelta] = None
185 max_failure_ratio: Optional[float] = None
186 order: Optional[Order] = None
189class Limits(BaseModel):
190 model_config = ConfigDict(
191 extra="forbid",
192 )
193 cpus: Optional[Union[float, str]] = None
194 memory: Optional[str] = None
195 pids: Optional[int] = None
198class RestartPolicy(BaseModel):
199 model_config = ConfigDict(
200 extra="forbid",
201 )
202 condition: Optional[str] = None
203 delay: Optional[timedelta] = None
204 max_attempts: Optional[int] = None
205 window: Optional[timedelta] = None
208class Preference(BaseModel):
209 model_config = ConfigDict(
210 extra="forbid",
211 )
212 spread: Optional[str] = None
215class Placement(BaseModel):
216 model_config = ConfigDict(
217 extra="forbid",
218 )
219 constraints: Optional[List[str]] = None
220 preferences: Optional[List[Preference]] = None
221 max_replicas_per_node: Optional[int] = None
224class DiscreteResourceSpec(BaseModel):
225 model_config = ConfigDict(
226 extra="forbid",
227 )
228 kind: Optional[str] = None
229 value: Optional[float] = None
232class GenericResource(BaseModel):
233 model_config = ConfigDict(
234 extra="forbid",
235 )
236 discrete_resource_spec: Optional[DiscreteResourceSpec] = None
239class GenericResources(RootModel[List[GenericResource]]):
240 root: List[GenericResource]
243class ConfigItem(BaseModel):
244 model_config = ConfigDict(
245 extra="forbid",
246 )
247 subnet: Optional[str] = None
248 ip_range: Optional[str] = None
249 gateway: Optional[str] = None
250 aux_addresses: Optional[Dict[str, str]] = None
253class Ipam(BaseModel):
254 model_config = ConfigDict(
255 extra="forbid",
256 )
257 driver: Optional[str] = None
258 config: Optional[List[ConfigItem]] = None
259 options: Optional[Dict[str, str]] = None
262class External(BaseModel):
263 model_config = ConfigDict(
264 extra="forbid",
265 )
266 name: Optional[str] = None
269class Command(RootModel[Optional[Union[str, List[str]]]]):
270 root: Optional[Union[str, List[str]]]
273class EnvFile1(BaseModel):
274 model_config = ConfigDict(
275 extra="forbid",
276 )
277 path: str
278 required: Optional[bool] = True
281class EnvFile(RootModel[Union[str, List[Union[str, EnvFile1]]]]):
282 root: Union[str, List[Union[str, EnvFile1]]]
285class ListOfStrings(RootModel[List[str]]):
286 root: List[str]
289class ListOrDict1(RootModel[List[str]]):
290 root: List[str]
293class ListOrDict(
294 RootModel[Union[Dict[str, Optional[Union[str, float, bool]]], ListOrDict1]]
295):
296 root: Union[Dict[str, Optional[Union[str, float, bool]]], ListOrDict1]
299class BlkioLimit(BaseModel):
300 model_config = ConfigDict(
301 extra="forbid",
302 )
303 path: Optional[str] = None
304 rate: Optional[Union[int, str]] = None
307class BlkioWeight(BaseModel):
308 model_config = ConfigDict(
309 extra="forbid",
310 )
311 path: Optional[str] = None
312 weight: Optional[int] = None
315class ServiceConfigOrSecret1(BaseModel):
316 model_config = ConfigDict(
317 extra="forbid",
318 )
319 source: Optional[str] = None
320 target: Optional[str] = None
321 uid: Optional[str] = None
322 gid: Optional[str] = None
323 mode: Optional[float] = None
326class ServiceConfigOrSecret(RootModel[List[Union[str, ServiceConfigOrSecret1]]]):
327 root: List[Union[str, ServiceConfigOrSecret1]]
330class Ulimits1(BaseModel):
331 model_config = ConfigDict(
332 extra="forbid",
333 )
334 hard: int
335 soft: int
338class Ulimits(RootModel[Dict[str, Union[int, Ulimits1]]]):
339 root: Dict[str, Union[int, Ulimits1]]
342class Constraints(RootModel[Any]):
343 root: Any
346class Build(BaseModel):
347 model_config = ConfigDict(
348 extra="forbid",
349 )
350 context: Optional[str] = None
351 dockerfile: Optional[str] = None
352 dockerfile_inline: Optional[str] = None
353 entitlements: Optional[List[str]] = None
354 args: Optional[ListOrDict] = None
355 ssh: Optional[ListOrDict] = None
356 labels: Optional[ListOrDict] = None
357 cache_from: Optional[List[str]] = None
358 cache_to: Optional[List[str]] = None
359 no_cache: Optional[bool] = None
360 additional_contexts: Optional[ListOrDict] = None
361 network: Optional[str] = None
362 pull: Optional[bool] = None
363 target: Optional[str] = None
364 shm_size: Optional[Union[int, str]] = None
365 extra_hosts: Optional[ListOrDict] = None
366 isolation: Optional[str] = None
367 privileged: Optional[bool] = None
368 secrets: Optional[ServiceConfigOrSecret] = None
369 tags: Optional[List[str]] = None
370 ulimits: Optional[Ulimits] = None
371 platforms: Optional[List[str]] = None
374class BlkioConfig(BaseModel):
375 model_config = ConfigDict(
376 extra="forbid",
377 )
378 device_read_bps: Optional[List[BlkioLimit]] = None
379 device_read_iops: Optional[List[BlkioLimit]] = None
380 device_write_bps: Optional[List[BlkioLimit]] = None
381 device_write_iops: Optional[List[BlkioLimit]] = None
382 weight: Optional[int] = None
383 weight_device: Optional[List[BlkioWeight]] = None
386class Networks(BaseModel):
387 model_config = ConfigDict(
388 extra="forbid",
389 )
390 aliases: Optional[ListOfStrings] = None
391 ipv4_address: Optional[str] = None
392 ipv6_address: Optional[str] = None
393 link_local_ips: Optional[ListOfStrings] = None
394 mac_address: Optional[str] = None
395 driver_opts: Optional[Dict[str, Union[str, float]]] = None
396 priority: Optional[float] = None
399class Device(BaseModel):
400 model_config = ConfigDict(
401 extra="forbid",
402 )
403 capabilities: Optional[ListOfStrings] = None
404 count: Optional[Union[str, int]] = None
405 device_ids: Optional[ListOfStrings] = None
406 driver: Optional[str] = None
407 options: Optional[ListOrDict] = None
410class Devices(RootModel[List[Device]]):
411 root: List[Device]
414class Network(BaseModel):
415 model_config = ConfigDict(
416 extra="forbid",
417 )
418 name: Optional[str] = None
419 driver: Optional[str] = None
420 driver_opts: Optional[Dict[str, Union[str, float]]] = None
421 ipam: Optional[Ipam] = None
422 external: Optional[Union[bool, External]] = None
423 internal: Optional[bool] = None
424 enable_ipv6: Optional[bool] = None
425 attachable: Optional[bool] = None
426 labels: Optional[ListOrDict] = None
429class Volume(BaseModel):
430 model_config = ConfigDict(
431 extra="forbid",
432 )
433 name: Optional[str] = None
434 driver: Optional[str] = None
435 driver_opts: Optional[Dict[str, Union[str, float]]] = None
436 external: Optional[Union[bool, External]] = None
437 labels: Optional[ListOrDict] = None
440class Secret(BaseModel):
441 model_config = ConfigDict(
442 extra="forbid",
443 )
444 name: Optional[str] = None
445 environment: Optional[str] = None
446 file: Optional[str] = None
447 external: Optional[Union[bool, External]] = None
448 labels: Optional[ListOrDict] = None
449 driver: Optional[str] = None
450 driver_opts: Optional[Dict[str, Union[str, float]]] = None
451 template_driver: Optional[str] = None
454class Config(BaseModel):
455 model_config = ConfigDict(
456 extra="forbid",
457 )
458 name: Optional[str] = None
459 content: Optional[str] = None
460 environment: Optional[str] = None
461 file: Optional[str] = None
462 external: Optional[Union[bool, External]] = None
463 labels: Optional[ListOrDict] = None
464 template_driver: Optional[str] = None
467class StringOrList(RootModel[Union[str, ListOfStrings]]):
468 root: Union[str, ListOfStrings]
471class Reservations(BaseModel):
472 model_config = ConfigDict(
473 extra="forbid",
474 )
475 cpus: Optional[Union[float, str]] = None
476 memory: Optional[str] = None
477 generic_resources: Optional[GenericResources] = None
478 devices: Optional[Devices] = None
481class Resources(BaseModel):
482 model_config = ConfigDict(
483 extra="forbid",
484 )
485 limits: Optional[Limits] = None
486 reservations: Optional[Reservations] = None
489class Deployment(BaseModel):
490 model_config = ConfigDict(
491 extra="forbid",
492 )
493 mode: Optional[str] = None
494 endpoint_mode: Optional[str] = None
495 replicas: Optional[int] = None
496 labels: Optional[ListOrDict] = None
497 rollback_config: Optional[RollbackConfig] = None
498 update_config: Optional[UpdateConfig] = None
499 resources: Optional[Resources] = None
500 restart_policy: Optional[RestartPolicy] = None
501 placement: Optional[Placement] = None
504class Include1(BaseModel):
505 model_config = ConfigDict(
506 extra="forbid",
507 )
508 path: Optional[StringOrList] = None
509 env_file: Optional[StringOrList] = None
510 project_directory: Optional[str] = None
513class Include(RootModel[Union[str, Include1]]):
514 root: Union[str, Include1]
517class Service(BaseModel):
518 model_config = ConfigDict(
519 extra="forbid",
520 )
521 develop: Optional[Development] = None
522 deploy: Optional[Deployment] = None
523 annotations: Optional[ListOrDict] = None
524 attach: Optional[bool] = None
525 build: Optional[Union[str, Build]] = None
526 blkio_config: Optional[BlkioConfig] = None
527 cap_add: Optional[List[str]] = None
528 cap_drop: Optional[List[str]] = None
529 cgroup: Optional[Cgroup] = None
530 cgroup_parent: Optional[str] = None
531 command: Optional[Command] = None
532 configs: Optional[ServiceConfigOrSecret] = None
533 container_name: Optional[str] = None
534 cpu_count: Optional[int] = Field(None, ge=0)
535 cpu_percent: Optional[int] = Field(None, ge=0, le=100)
536 cpu_shares: Optional[Union[float, str]] = None
537 cpu_quota: Optional[Union[float, str]] = None
538 cpu_period: Optional[Union[float, str]] = None
539 cpu_rt_period: Optional[Union[float, str]] = None
540 cpu_rt_runtime: Optional[Union[float, str]] = None
541 cpus: Optional[Union[float, str]] = None
542 cpuset: Optional[str] = None
543 credential_spec: Optional[CredentialSpec] = None
544 depends_on: Optional[Union[ListOfStrings, Dict[str, DependsOn]]] = None
545 device_cgroup_rules: Optional[ListOfStrings] = None
546 devices: Optional[List[str]] = None
547 dns: Optional[StringOrList] = None
548 dns_opt: Optional[List[str]] = None
549 dns_search: Optional[StringOrList] = None
550 domainname: Optional[str] = None
551 entrypoint: Optional[Command] = None
552 env_file: Optional[EnvFile] = None
553 environment: Optional[ListOrDict] = None
554 expose: Optional[List[Union[str, float]]] = None
555 extends: Optional[Union[str, Extends]] = None
556 external_links: Optional[List[str]] = None
557 extra_hosts: Optional[ListOrDict] = None
558 group_add: Optional[List[Union[str, float]]] = None
559 healthcheck: Optional[Healthcheck] = None
560 hostname: Optional[str] = None
561 image: Optional[str] = None
562 init: Optional[bool] = None
563 ipc: Optional[str] = None
564 isolation: Optional[str] = None
565 labels: Optional[ListOrDict] = None
566 links: Optional[List[str]] = None
567 logging: Optional[Logging] = None
568 mac_address: Optional[str] = None
569 mem_limit: Optional[Union[float, str]] = None
570 mem_reservation: Optional[Union[str, int]] = None
571 mem_swappiness: Optional[int] = None
572 memswap_limit: Optional[Union[float, str]] = None
573 network_mode: Optional[str] = None
574 networks: Optional[Union[ListOfStrings, Dict[str, Optional[Networks]]]] = None
575 oom_kill_disable: Optional[bool] = None
576 oom_score_adj: Optional[int] = Field(None, ge=-1000, le=1000)
577 pid: Optional[str] = None
578 pids_limit: Optional[Union[float, str]] = None
579 platform: Optional[str] = None
580 ports: Optional[List[Union[float, str, Ports]]] = None
581 privileged: Optional[bool] = None
582 profiles: Optional[ListOfStrings] = None
583 pull_policy: Optional[PullPolicy] = None
584 read_only: Optional[bool] = None
585 restart: Optional[str] = None
586 runtime: Optional[str] = None
587 scale: Optional[int] = None
588 security_opt: Optional[List[str]] = None
589 shm_size: Optional[Union[float, str]] = None
590 secrets: Optional[ServiceConfigOrSecret] = None
591 sysctls: Optional[ListOrDict] = None
592 stdin_open: Optional[bool] = None
593 stop_grace_period: Optional[timedelta] = None
594 stop_signal: Optional[str] = None
595 storage_opt: Optional[Dict[str, Any]] = None
596 tmpfs: Optional[StringOrList] = None
597 tty: Optional[bool] = None
598 ulimits: Optional[Ulimits] = None
599 user: Optional[str] = None
600 uts: Optional[str] = None
601 userns_mode: Optional[str] = None
602 volumes: Optional[List[Union[str, Volumes]]] = None
603 volumes_from: Optional[List[str]] = None
604 working_dir: Optional[str] = None
607class ComposeSpecification(BaseModel):
608 model_config = ConfigDict(
609 extra="forbid",
610 )
611 version: Optional[str] = Field(
612 None, description="declared for backward compatibility, ignored."
613 )
614 name: Optional[str] = Field(
615 None,
616 description="define the Compose project name, until user defines one explicitly.",
617 pattern="^[a-z0-9][a-z0-9_-]*$",
618 )
619 include: Optional[List[Include]] = Field(
620 None, description="compose sub-projects to be included."
621 )
622 services: Optional[Dict[str, Service]] = None
623 networks: Optional[Dict[str, Optional[Network]]] = None
624 volumes: Optional[Dict[str, Optional[Volume]]] = None
625 secrets: Optional[Dict[str, Secret]] = None
626 configs: Optional[Dict[str, Config]] = None