working
This commit is contained in:
81
src/docker_compose/cfg/dest_path.py
Normal file
81
src/docker_compose/cfg/dest_path.py
Normal file
@@ -0,0 +1,81 @@
|
||||
from collections.abc import Callable, Iterator
|
||||
from dataclasses import dataclass, field
|
||||
from os import sep
|
||||
from pathlib import Path
|
||||
from typing import Self, final
|
||||
|
||||
from docker_compose.cfg import DATA_ROOT
|
||||
from docker_compose.cfg.org import AppVal, OrgData, OrgVal
|
||||
from docker_compose.cfg.record import Record, RecordName
|
||||
|
||||
|
||||
@final
|
||||
@dataclass(frozen=True, slots=True)
|
||||
class ComposeFileRendered:
|
||||
path: Path
|
||||
|
||||
def write(self, data: str) -> None:
|
||||
print(self.path)
|
||||
self.path.parent.mkdir(parents=True, exist_ok=True)
|
||||
with self.path.open("wt") as f:
|
||||
_ = f.write(data)
|
||||
|
||||
|
||||
# @final
|
||||
# @dataclass(frozen=True, slots=True)
|
||||
# class DataDirReplace(RecordCls[Path]):
|
||||
# old = RecordName("data")
|
||||
#
|
||||
#
|
||||
# @final
|
||||
# @dataclass(frozen=True, slots=True)
|
||||
# class DataDir:
|
||||
# val: Path
|
||||
# replace: DataDirReplace = field(init=False)
|
||||
#
|
||||
# def __post_init__(self) -> None:
|
||||
# setter = super().__setattr__
|
||||
# setter("replace", DataDirReplace(self.val))
|
||||
#
|
||||
# @classmethod
|
||||
# def from_org(cls, org: OrgData) -> Self:
|
||||
# cls(DATA_ROOT.joinpath(org.org.val, org.app.val))
|
||||
@final
|
||||
@dataclass(frozen=True, slots=True)
|
||||
class DestPaths:
|
||||
data_root = Record[RecordName, Path](RecordName("data_root"), DATA_ROOT)
|
||||
data_path = Record[RecordName, str](
|
||||
RecordName("data"),
|
||||
sep.join((str(data_root.old), str(OrgVal.old), str(AppVal.old))),
|
||||
)
|
||||
data_dir: Path
|
||||
env_file: Path = field(init=False)
|
||||
compose_file: ComposeFileRendered = field(init=False)
|
||||
|
||||
def __post_init__(self) -> None:
|
||||
setter = super(DestPaths, self).__setattr__
|
||||
path_join = self.data_dir.joinpath
|
||||
setter("env_file", path_join(".env"))
|
||||
setter("compose_file", ComposeFileRendered(path_join("docker-compose.yml")))
|
||||
|
||||
@classmethod
|
||||
def from_org(cls, org: OrgData) -> Self:
|
||||
return cls.from_path(DATA_ROOT.joinpath(org.org.val, org.app.val))
|
||||
|
||||
@classmethod
|
||||
def from_path(cls, path: Path) -> Self:
|
||||
return cls(path)
|
||||
|
||||
# def mk_compose_dir(self) -> None:
|
||||
# folder = self.data_dir
|
||||
# if folder.exists():
|
||||
# return
|
||||
# folder.mkdir(parents=True)
|
||||
|
||||
@property
|
||||
def pre_render_funcs(self) -> Iterator[Callable[[str], str]]:
|
||||
yield self.data_path
|
||||
|
||||
@property
|
||||
def render_funcs(self) -> Iterator[Callable[[str], str]]:
|
||||
yield self.data_root
|
||||
Reference in New Issue
Block a user