Files
compose_gen/src/docker_compose/cfg/org.py
2026-01-10 14:26:03 -06:00

59 lines
1.3 KiB
Python

from collections.abc import Iterator
from dataclasses import dataclass
from typing import Callable, Self, final, override
from docker_compose.cfg.org_yaml import OrgDataYaml
from docker_compose.cfg.replace import ReplaceDynamic, ReplaceStatic
@final
@dataclass(frozen=True, slots=True)
class Org(ReplaceStatic):
src = ReplaceDynamic("org")
@final
@dataclass(frozen=True, slots=True)
class App(ReplaceStatic):
src = ReplaceDynamic("name")
@final
@dataclass(frozen=True, slots=True)
class Url(ReplaceStatic):
src = ReplaceDynamic("url")
@override
def __str__(self) -> str:
val = super(Url, self).__str__()
if not val:
return val
return ".".join((val, "ccamper7", "net"))
@final
@dataclass(frozen=True, slots=True)
class OrgData:
org_app = Org.src.build_placeholder(App.src)
app: App
org: Org
url: Url
@classmethod
def from_dict(cls, app: str, org: str, data: OrgDataYaml) -> Self:
return cls(
App(app),
Org(org),
Url(data.get("url")),
)
@property
def render_funcs(self) -> Iterator[Callable[[str], str]]:
yield self.app
yield self.org
yield self.url
@property
def pre_render_funcs(self) -> Iterator[Callable[[str], str]]:
yield self.org_app