59 lines
1.3 KiB
Python
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
|