This commit is contained in:
2026-01-10 14:26:03 -06:00
parent 377e481803
commit 0ef6530f92
9 changed files with 156 additions and 243 deletions

View File

@@ -1,107 +1,40 @@
from collections.abc import Iterator
from dataclasses import dataclass
from typing import Callable, ClassVar, Self, final, override
from typing import Callable, Self, final, override
from docker_compose.cfg.org_yaml import OrgDataYaml
from docker_compose.cfg.replace import ReplaceDynamic, RecordCls
#
# _ORG = "org"
# _APP = "name"
# Org = partial(Record, ORG)
# App = partial(Record, APP)
from docker_compose.cfg.replace import ReplaceDynamic, ReplaceStatic
@final
@dataclass(frozen=True, slots=True)
class Org(RecordCls):
rep: ClassVar[str] = "org"
class Org(ReplaceStatic):
src = ReplaceDynamic("org")
@final
@dataclass(frozen=True, slots=True)
class App(RecordCls):
rep: ClassVar[str] = "name"
class App(ReplaceStatic):
src = ReplaceDynamic("name")
@final
@dataclass(frozen=True, slots=True)
class Url(RecordCls):
rep: ClassVar[str] = "url"
class Url(ReplaceStatic):
src = ReplaceDynamic("url")
@override
@classmethod
def from_str(cls, string: str | None) -> Self:
return super(Url, cls).from_str(".".join((string, "ccamper7", "net")) if string else "")
# return Record("url", ".".join((val, "ccamper7", "net")) if val else "")
#
# @final
# @dataclass(frozen=True, slots=True)
# class Org:
# val: str
# replace: Record = field(init=False)
#
# def __post_init__(self) -> None:
# setter = super(Org, self).__setattr__
# setter("replace", OrgVal(self.val))
# @final
# @dataclass(frozen=True, slots=True)
# class AppVal(RecordCls[str]):
# old: ClassVar[RecordName] = RecordName("name")
#
#
# @final
# @dataclass(frozen=True, slots=True)
# class App:
# val: str
# replace: AppVal = field(init=False)
#
# def __post_init__(self) -> None:
# setter = super(App, self).__setattr__
# setter("replace", AppVal(self.val))
# @final
# @dataclass(frozen=True, slots=True)
# class UrlValNew:
# val: str | None
#
# @override
# def __str__(self) -> str:
# if not self.val:
# return ""
# return ".".join((self.val, "ccamper7", "net"))
#
#
# @final
# @dataclass(frozen=True, slots=True)
# class UrlVal(RecordCls[UrlValNew]):
# old = RecordName("url")
#
#
# @final
# @dataclass(frozen=True, slots=True)
# class Url:
# val: str | None
# replace: UrlVal = field(init=False)
#
# def __post_init__(self) -> None:
# setter = super(Url, self).__setattr__
# setter("replace", UrlVal(UrlValNew(self.val)))
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 = ReplaceDynamic(
f"${Org.rep.upper()}_{Org.rep.upper()}",
f"{ReplaceDynamic.get_format(Org.rep)}_{ReplaceDynamic.get_format(App.rep)}",
)
org_app = Org.src.build_placeholder(App.src)
app: App
org: Org
url: Url
@@ -109,9 +42,9 @@ class OrgData:
@classmethod
def from_dict(cls, app: str, org: str, data: OrgDataYaml) -> Self:
return cls(
App.from_str(app),
Org.from_str(org),
Url.from_str(data.get("url")),
App(app),
Org(org),
Url(data.get("url")),
)
@property
@@ -123,8 +56,3 @@ class OrgData:
@property
def pre_render_funcs(self) -> Iterator[Callable[[str], str]]:
yield self.org_app
# def render_yaml(self, yaml: str) -> str:
# for func in self.render_funcs:
# yaml = func(yaml)
# return yaml