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

1# generated by datamodel-codegen: 

2# filename: compose-spec.json 

3# timestamp: 2025-08-29T13:09:30+00:00 

4 

5from __future__ import annotations 

6 

7from datetime import timedelta 

8from enum import Enum 

9from typing import Any, Dict, List, Optional, Union 

10 

11from pydantic import BaseModel, ConfigDict, Field, RootModel 

12 

13# pylint: disable=invalid-name 

14 

15 

16class Cgroup(Enum): 

17 host = "host" 

18 private = "private" 

19 

20 

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 

28 

29 

30class Condition(Enum): 

31 service_started = "service_started" 

32 service_healthy = "service_healthy" 

33 service_completed_successfully = "service_completed_successfully" 

34 

35 

36class DependsOn(BaseModel): 

37 model_config = ConfigDict( 

38 extra="forbid", 

39 ) 

40 restart: Optional[bool] = None 

41 required: Optional[bool] = True 

42 condition: Condition 

43 

44 

45class Extends(BaseModel): 

46 model_config = ConfigDict( 

47 extra="forbid", 

48 ) 

49 service: str 

50 file: Optional[str] = None 

51 

52 

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 

59 

60 

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 

72 

73 

74class PullPolicy(Enum): 

75 always = "always" 

76 never = "never" 

77 if_not_present = "if_not_present" 

78 build = "build" 

79 missing = "missing" 

80 

81 

82class Selinux(Enum): 

83 z = "z" 

84 Z = "Z" 

85 

86 

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 

94 

95 

96class Volume1(BaseModel): 

97 model_config = ConfigDict( 

98 extra="forbid", 

99 ) 

100 nocopy: Optional[bool] = None 

101 subpath: Optional[str] = None 

102 

103 

104class Size(RootModel[int]): 

105 root: int = Field(..., ge=0) 

106 

107 

108class Tmpfs(BaseModel): 

109 model_config = ConfigDict( 

110 extra="forbid", 

111 ) 

112 size: Optional[Union[Size, str]] = None 

113 mode: Optional[float] = None 

114 

115 

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 

128 

129 

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 

141 

142 

143class Action(Enum): 

144 rebuild = "rebuild" 

145 sync = "sync" 

146 sync_restart = "sync+restart" 

147 

148 

149class WatchItem(BaseModel): 

150 ignore: Optional[List[str]] = None 

151 path: str 

152 action: Action 

153 target: Optional[str] = None 

154 

155 

156class Development(BaseModel): 

157 watch: Optional[List[WatchItem]] = None 

158 

159 

160class Order(Enum): 

161 start_first = "start-first" 

162 stop_first = "stop-first" 

163 

164 

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 

175 

176 

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 

187 

188 

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 

196 

197 

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 

206 

207 

208class Preference(BaseModel): 

209 model_config = ConfigDict( 

210 extra="forbid", 

211 ) 

212 spread: Optional[str] = None 

213 

214 

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 

222 

223 

224class DiscreteResourceSpec(BaseModel): 

225 model_config = ConfigDict( 

226 extra="forbid", 

227 ) 

228 kind: Optional[str] = None 

229 value: Optional[float] = None 

230 

231 

232class GenericResource(BaseModel): 

233 model_config = ConfigDict( 

234 extra="forbid", 

235 ) 

236 discrete_resource_spec: Optional[DiscreteResourceSpec] = None 

237 

238 

239class GenericResources(RootModel[List[GenericResource]]): 

240 root: List[GenericResource] 

241 

242 

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 

251 

252 

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 

260 

261 

262class External(BaseModel): 

263 model_config = ConfigDict( 

264 extra="forbid", 

265 ) 

266 name: Optional[str] = None 

267 

268 

269class Command(RootModel[Optional[Union[str, List[str]]]]): 

270 root: Optional[Union[str, List[str]]] 

271 

272 

273class EnvFile1(BaseModel): 

274 model_config = ConfigDict( 

275 extra="forbid", 

276 ) 

277 path: str 

278 required: Optional[bool] = True 

279 

280 

281class EnvFile(RootModel[Union[str, List[Union[str, EnvFile1]]]]): 

282 root: Union[str, List[Union[str, EnvFile1]]] 

283 

284 

285class ListOfStrings(RootModel[List[str]]): 

286 root: List[str] 

287 

288 

289class ListOrDict1(RootModel[List[str]]): 

290 root: List[str] 

291 

292 

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] 

297 

298 

299class BlkioLimit(BaseModel): 

300 model_config = ConfigDict( 

301 extra="forbid", 

302 ) 

303 path: Optional[str] = None 

304 rate: Optional[Union[int, str]] = None 

305 

306 

307class BlkioWeight(BaseModel): 

308 model_config = ConfigDict( 

309 extra="forbid", 

310 ) 

311 path: Optional[str] = None 

312 weight: Optional[int] = None 

313 

314 

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 

324 

325 

326class ServiceConfigOrSecret(RootModel[List[Union[str, ServiceConfigOrSecret1]]]): 

327 root: List[Union[str, ServiceConfigOrSecret1]] 

328 

329 

330class Ulimits1(BaseModel): 

331 model_config = ConfigDict( 

332 extra="forbid", 

333 ) 

334 hard: int 

335 soft: int 

336 

337 

338class Ulimits(RootModel[Dict[str, Union[int, Ulimits1]]]): 

339 root: Dict[str, Union[int, Ulimits1]] 

340 

341 

342class Constraints(RootModel[Any]): 

343 root: Any 

344 

345 

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 

372 

373 

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 

384 

385 

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 

397 

398 

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 

408 

409 

410class Devices(RootModel[List[Device]]): 

411 root: List[Device] 

412 

413 

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 

427 

428 

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 

438 

439 

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 

452 

453 

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 

465 

466 

467class StringOrList(RootModel[Union[str, ListOfStrings]]): 

468 root: Union[str, ListOfStrings] 

469 

470 

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 

479 

480 

481class Resources(BaseModel): 

482 model_config = ConfigDict( 

483 extra="forbid", 

484 ) 

485 limits: Optional[Limits] = None 

486 reservations: Optional[Reservations] = None 

487 

488 

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 

502 

503 

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 

511 

512 

513class Include(RootModel[Union[str, Include1]]): 

514 root: Union[str, Include1] 

515 

516 

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 

605 

606 

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