sync
This commit is contained in:
52
src/compose/entity.py
Normal file
52
src/compose/entity.py
Normal 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))
|
||||
Reference in New Issue
Block a user