This commit is contained in:
2025-12-14 18:14:07 -06:00
parent 9d45d5db88
commit a0b6e00a31
38 changed files with 969 additions and 932 deletions

52
src/compose/entity.py Normal file
View File

@@ -0,0 +1,52 @@
from dataclasses import asdict, dataclass
from typing import Literal, NotRequired, Self, TypedDict, final
from cfg.entity import CfgData
from net.entities import Net, NetTraefik, NetYaml
from service.entity import Service, ServiceYaml, TraefikService
from service.get import services_get_networks
from util import to_yaml
class ComposeYaml(TypedDict):
name: str
networks: NotRequired[NetYaml]
services: dict[str, ServiceYaml]
@final
@dataclass(frozen=True, slots=True)
class Compose:
cfg: CfgData
networks: Net | None
services: dict[str, Service]
@classmethod
def from_dict(cls, cfg: CfgData, data: ComposeYaml) -> Self:
# services = dict[str, ComposeService]()
services = dict(get_services_dict(data))
return cls(
cfg,
services_get_networks(services.values()),
services,
)
def as_yaml(self) -> str:
return to_yaml(asdict(self))
def get_services_dict(data: ComposeYaml):
for k, v in data["services"].items():
yield k, Service.from_dict(v)
@final
@dataclass(frozen=True, slots=True)
class TraefikCompose:
cfg: CfgData
networks: NetTraefik
services: dict[Literal["traefik"], TraefikService]
def as_yaml(self) -> str:
return to_yaml(asdict(self))