From 51eb7e80e7c20af6738c915569bd1f6a521bef7c46f54b4e9e60b55d5ac5f3eb Mon Sep 17 00:00:00 2001 From: ccamper7 Date: Sun, 14 Dec 2025 20:56:52 -0600 Subject: [PATCH] sync --- src/cfg/get.py | 20 -------------- src/{main.py => compose/__init__.py} | 20 +++++++------- src/{ => compose}/cfg/__init__.py | 0 src/{ => compose}/cfg/entity.py | 8 +++--- src/{ => compose}/cfg/factory.py | 10 +++---- src/compose/cfg/get.py | 26 ++++++++++++++++++ src/compose/{ => compose}/entity.py | 10 +++---- src/compose/compose/factory.py | 36 +++++++++++++++++++++++++ src/compose/{ => compose}/get.py | 4 +-- src/{ => compose}/dest_path/entity.py | 0 src/{ => compose}/dest_path/factory.py | 6 ++--- src/compose/factory.py | 37 -------------------------- src/{ => compose}/net/entities.py | 0 src/{ => compose}/net/factory.py | 4 +-- src/{ => compose}/rendered/entity.py | 6 ++--- src/{ => compose}/rendered/factory.py | 8 +++--- src/{ => compose}/rendered/get.py | 6 ++--- src/{ => compose}/rendered/util.py | 2 +- src/{ => compose}/service/entity.py | 10 +++---- src/compose/service/factory.py | 10 +++++++ src/{ => compose}/service/get.py | 6 ++--- src/{ => compose}/src_path/entity.py | 0 src/{ => compose}/src_path/get.py | 4 +-- src/{ => compose}/template/entity.py | 4 +-- src/{ => compose}/template/factory.py | 12 ++++----- src/{ => compose}/template/get.py | 4 +-- src/{ => compose}/template/val_obj.py | 2 +- src/{ => compose}/util.py | 3 +-- src/service/factory.py | 10 ------- 29 files changed, 137 insertions(+), 131 deletions(-) delete mode 100644 src/cfg/get.py rename src/{main.py => compose/__init__.py} (54%) rename src/{ => compose}/cfg/__init__.py (100%) rename src/{ => compose}/cfg/entity.py (79%) rename src/{ => compose}/cfg/factory.py (56%) create mode 100644 src/compose/cfg/get.py rename src/compose/{ => compose}/entity.py (80%) create mode 100644 src/compose/compose/factory.py rename src/compose/{ => compose}/get.py (86%) rename src/{ => compose}/dest_path/entity.py (100%) rename src/{ => compose}/dest_path/factory.py (73%) delete mode 100644 src/compose/factory.py rename src/{ => compose}/net/entities.py (100%) rename src/{ => compose}/net/factory.py (85%) rename src/{ => compose}/rendered/entity.py (68%) rename src/{ => compose}/rendered/factory.py (71%) rename src/{ => compose}/rendered/get.py (68%) rename src/{ => compose}/rendered/util.py (95%) rename src/{ => compose}/service/entity.py (95%) create mode 100644 src/compose/service/factory.py rename src/{ => compose}/service/get.py (81%) rename src/{ => compose}/src_path/entity.py (100%) rename src/{ => compose}/src_path/get.py (62%) rename src/{ => compose}/template/entity.py (82%) rename src/{ => compose}/template/factory.py (76%) rename src/{ => compose}/template/get.py (91%) rename src/{ => compose}/template/val_obj.py (97%) rename src/{ => compose}/util.py (95%) delete mode 100644 src/service/factory.py diff --git a/src/cfg/get.py b/src/cfg/get.py deleted file mode 100644 index 13e8371..0000000 --- a/src/cfg/get.py +++ /dev/null @@ -1,20 +0,0 @@ -from collections.abc import Iterator -from typing import cast - -from cfg.entity import CfgData, CfgDataYaml, OrgData -from service.entity import Service, ServiceYaml -from util import read_yml - - -def cfg_get_orgs(data: CfgDataYaml) -> Iterator[OrgData]: - for org_data in data["orgs"]: - yield OrgData( - org_data.get("org"), - org_data.get("url"), - ) - - -def cfg_get_services(cfg_data: CfgData) -> Iterator[tuple[str, Service]]: - for path in cfg_data.files: - _dict = cast(ServiceYaml, read_yml(path)) - yield path.stem, Service.from_dict(_dict) diff --git a/src/main.py b/src/compose/__init__.py similarity index 54% rename from src/main.py rename to src/compose/__init__.py index 76e145b..1329af5 100644 --- a/src/main.py +++ b/src/compose/__init__.py @@ -1,13 +1,13 @@ from collections.abc import Iterable, Iterator -from cfg import CFG_ROOT -from cfg.factory import cfg_data_factory -from compose.factory import compose_factory, traefik_compose_factory -from rendered.entity import Rendered -from rendered.factory import rendered_factory -from rendered.util import write -from src_path.entity import src_paths_factory -from template.factory import template_factory +from compose.cfg import CFG_ROOT, TRAEFIK_PATH +from compose.cfg.factory import cfg_data_factory +from compose.compose.factory import compose_factory +from compose.rendered.entity import Rendered +from compose.rendered.factory import rendered_factory +from compose.rendered.util import write +from compose.src_path.entity import src_paths_factory +from compose.template.factory import template_factory def load_all() -> Iterable[Rendered]: @@ -27,7 +27,9 @@ def render_all() -> Iterator[Rendered]: if __name__ == "__main__": renders = render_all() - traefik = traefik_compose_factory(renders) + src_paths = src_paths_factory(TRAEFIK_PATH) + cfg_data = cfg_data_factory(src_paths) + traefik = compose_factory(cfg_data) for template in template_factory(traefik): rendered = rendered_factory(template) write(rendered) diff --git a/src/cfg/__init__.py b/src/compose/cfg/__init__.py similarity index 100% rename from src/cfg/__init__.py rename to src/compose/cfg/__init__.py diff --git a/src/cfg/entity.py b/src/compose/cfg/entity.py similarity index 79% rename from src/cfg/entity.py rename to src/compose/cfg/entity.py index abe635e..be362a9 100644 --- a/src/cfg/entity.py +++ b/src/compose/cfg/entity.py @@ -2,11 +2,11 @@ from dataclasses import dataclass from pathlib import Path from typing import NotRequired, TypedDict, final -from src_path.entity import SrcPaths +from compose.src_path.entity import SrcPaths class OrgDataYaml(TypedDict): - org: NotRequired[str] + org: str url: NotRequired[str] @@ -19,7 +19,7 @@ class CfgDataYaml(TypedDict): @final @dataclass(frozen=True, slots=True) class OrgData: - org: str | None + org: str url: str | None @@ -29,4 +29,4 @@ class CfgData: src_paths: SrcPaths name: str files: frozenset[Path] - orgs: frozenset[OrgData] | None + orgs: frozenset[OrgData] diff --git a/src/cfg/factory.py b/src/compose/cfg/factory.py similarity index 56% rename from src/cfg/factory.py rename to src/compose/cfg/factory.py index 9f9fa8a..7ad9dfd 100644 --- a/src/cfg/factory.py +++ b/src/compose/cfg/factory.py @@ -1,10 +1,10 @@ from typing import cast -from cfg.entity import CfgData, CfgDataYaml -from cfg.get import cfg_get_orgs -from src_path.entity import SrcPaths -from src_path.get import src_path_get_files -from util import read_yml +from compose.cfg.entity import CfgData, CfgDataYaml +from compose.cfg.get import cfg_get_orgs +from compose.src_path.entity import SrcPaths +from compose.src_path.get import src_path_get_files +from compose.util import read_yml def cfg_data_factory(cfg_dir: SrcPaths) -> CfgData: diff --git a/src/compose/cfg/get.py b/src/compose/cfg/get.py new file mode 100644 index 0000000..e5fd940 --- /dev/null +++ b/src/compose/cfg/get.py @@ -0,0 +1,26 @@ +from collections.abc import Iterator +from typing import cast + +from compose.cfg.entity import CfgData, CfgDataYaml, OrgData +from compose.service.entity import Service, ServiceYaml +from compose.util import read_yml + + +def cfg_get_orgs(data: CfgDataYaml) -> Iterator[OrgData]: + # orgs = data.get("orgs") + # if orgs is None: + # yield OrgData( + # org_data.get("org"), + # org_data.get("url"), + # ) + for org_data in data["orgs"]: + yield OrgData( + org_data["org"], + org_data.get("url"), + ) + + +def cfg_get_services(cfg_data: CfgData) -> Iterator[tuple[str, Service]]: + for path in cfg_data.files: + _dict = cast(ServiceYaml, read_yml(path)) + yield path.stem, Service.from_dict(_dict) \ No newline at end of file diff --git a/src/compose/entity.py b/src/compose/compose/entity.py similarity index 80% rename from src/compose/entity.py rename to src/compose/compose/entity.py index 8e23cef..8a8b2fc 100644 --- a/src/compose/entity.py +++ b/src/compose/compose/entity.py @@ -1,11 +1,11 @@ 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 +from compose.cfg.entity import CfgData +from compose.net.entities import Net, NetTraefik, NetYaml +from compose.service.entity import Service, ServiceYaml, TraefikService +from compose.service.get import services_get_networks +from compose.util import to_yaml class ComposeYaml(TypedDict): diff --git a/src/compose/compose/factory.py b/src/compose/compose/factory.py new file mode 100644 index 0000000..44c249f --- /dev/null +++ b/src/compose/compose/factory.py @@ -0,0 +1,36 @@ + +from compose.cfg.entity import CfgData +from compose.cfg.get import cfg_get_services +from compose.compose.entity import Compose + +# from compose.service.factory import get_traefik_service +from compose.service.get import services_get_networks + + +def compose_factory(cfg_data: CfgData) -> Compose: + services = dict(cfg_get_services(cfg_data)) + return Compose( + cfg_data, + services_get_networks(services.values()), + services, + ) + + +# def traefik_compose_factory(renders: Iterable[Rendered]) -> TraefikCompose: +# src_paths = src_paths_factory(TRAEFIK_PATH) +# cfg = cfg_data_factory(src_paths) +# # cfg = CfgData( +# # src_paths, +# # 'traefik', +# # frozenset((TRAEFIK_PATH.joinpath('traefik'),)), +# # None, +# # ) +# service = get_traefik_service() +# nets: NetTraefik = dict(rendered_get_nets(renders)) +# service["networks"] = list(nets.keys()) + +# return TraefikCompose( +# cfg, +# nets, +# {"traefik": TraefikService.from_dict(service)}, +# ) diff --git a/src/compose/get.py b/src/compose/compose/get.py similarity index 86% rename from src/compose/get.py rename to src/compose/compose/get.py index 73edcb5..521b037 100644 --- a/src/compose/get.py +++ b/src/compose/compose/get.py @@ -1,7 +1,7 @@ from collections.abc import Iterator -from compose.entity import Compose, TraefikCompose -from util import get_replace_name +from compose.compose.entity import Compose, TraefikCompose +from compose.util import get_replace_name def compose_get_volumes(compose: Compose | TraefikCompose) -> Iterator[str]: diff --git a/src/dest_path/entity.py b/src/compose/dest_path/entity.py similarity index 100% rename from src/dest_path/entity.py rename to src/compose/dest_path/entity.py diff --git a/src/dest_path/factory.py b/src/compose/dest_path/factory.py similarity index 73% rename from src/dest_path/factory.py rename to src/compose/dest_path/factory.py index b873dab..b7f96a1 100644 --- a/src/dest_path/factory.py +++ b/src/compose/dest_path/factory.py @@ -1,6 +1,6 @@ -from cfg import DATA_ROOT -from dest_path.entity import DestPaths -from template.entity import Template +from compose.cfg import DATA_ROOT +from compose.dest_path.entity import DestPaths +from compose.template.entity import Template def dest_paths_factory(template: Template) -> DestPaths: diff --git a/src/compose/factory.py b/src/compose/factory.py deleted file mode 100644 index d998fa9..0000000 --- a/src/compose/factory.py +++ /dev/null @@ -1,37 +0,0 @@ -from collections.abc import Iterable - -from cfg import TRAEFIK_PATH -from cfg.entity import CfgData -from cfg.factory import cfg_data_factory -from cfg.get import cfg_get_services -from compose.entity import Compose, TraefikCompose -from net.entities import NetTraefik -from rendered.entity import Rendered -from rendered.get import rendered_get_nets -from service.entity import TraefikService -from service.factory import get_traefik_service -from service.get import services_get_networks -from src_path.entity import src_paths_factory - - -def compose_factory(cfg_data: CfgData) -> Compose: - services = dict(cfg_get_services(cfg_data)) - return Compose( - cfg_data, - services_get_networks(services.values()), - services, - ) - - -def traefik_compose_factory(renders: Iterable[Rendered]) -> TraefikCompose: - src_paths = src_paths_factory(TRAEFIK_PATH) - cfg = cfg_data_factory(src_paths) - service = get_traefik_service() - nets: NetTraefik = dict(rendered_get_nets(renders)) - service["networks"] = list(nets.keys()) - - return TraefikCompose( - cfg, - nets, - {"traefik": TraefikService.from_dict(service)}, - ) diff --git a/src/net/entities.py b/src/compose/net/entities.py similarity index 100% rename from src/net/entities.py rename to src/compose/net/entities.py diff --git a/src/net/factory.py b/src/compose/net/factory.py similarity index 85% rename from src/net/factory.py rename to src/compose/net/factory.py index 26e7e29..5850725 100644 --- a/src/net/factory.py +++ b/src/compose/net/factory.py @@ -1,5 +1,5 @@ -from net.entities import Net, NetArgs -from util import get_replace_name +from compose.net.entities import Net, NetArgs +from compose.util import get_replace_name def net_args_factory(name: str, external: bool | None = None) -> NetArgs: diff --git a/src/rendered/entity.py b/src/compose/rendered/entity.py similarity index 68% rename from src/rendered/entity.py rename to src/compose/rendered/entity.py index 55225a5..133424f 100644 --- a/src/rendered/entity.py +++ b/src/compose/rendered/entity.py @@ -2,9 +2,9 @@ from dataclasses import dataclass from pathlib import Path from typing import final -from dest_path.entity import DestPaths -from src_path.entity import SrcPaths -from template.entity import Template +from compose.dest_path.entity import DestPaths +from compose.src_path.entity import SrcPaths +from compose.template.entity import Template @final diff --git a/src/rendered/factory.py b/src/compose/rendered/factory.py similarity index 71% rename from src/rendered/factory.py rename to src/compose/rendered/factory.py index 599f511..e3f9ac0 100644 --- a/src/rendered/factory.py +++ b/src/compose/rendered/factory.py @@ -1,9 +1,9 @@ from functools import reduce -from dest_path.factory import dest_paths_factory -from rendered.entity import Rendered -from template.entity import Template -from template.get import template_get_proxy, template_get_vols +from compose.dest_path.factory import dest_paths_factory +from compose.rendered.entity import Rendered +from compose.template.entity import Template +from compose.template.get import template_get_proxy, template_get_vols def rendered_factory(template: Template) -> Rendered: diff --git a/src/rendered/get.py b/src/compose/rendered/get.py similarity index 68% rename from src/rendered/get.py rename to src/compose/rendered/get.py index 5e2fa82..3494c97 100644 --- a/src/rendered/get.py +++ b/src/compose/rendered/get.py @@ -1,8 +1,8 @@ from collections.abc import Iterable, Iterator -from net.entities import NetArgs -from net.factory import net_args_factory -from rendered.entity import Rendered +from compose.net.entities import NetArgs +from compose.net.factory import net_args_factory +from compose.rendered.entity import Rendered def rendered_get_nets(renders: Iterable[Rendered]) -> Iterator[tuple[str, NetArgs]]: diff --git a/src/rendered/util.py b/src/compose/rendered/util.py similarity index 95% rename from src/rendered/util.py rename to src/compose/rendered/util.py index f961b8a..9adee6c 100644 --- a/src/rendered/util.py +++ b/src/compose/rendered/util.py @@ -1,7 +1,7 @@ from pathlib import Path from shutil import copyfile -from rendered.entity import Rendered +from compose.rendered.entity import Rendered def _mk_dir(path: Path) -> None: diff --git a/src/service/entity.py b/src/compose/service/entity.py similarity index 95% rename from src/service/entity.py rename to src/compose/service/entity.py index 2b61c12..cdb6d84 100644 --- a/src/service/entity.py +++ b/src/compose/service/entity.py @@ -1,9 +1,9 @@ -from abc import ABC, abstractmethod +from abc import ABCMeta, abstractmethod from dataclasses import dataclass from typing import Literal, NotRequired, Self, TypedDict, TypeVar, overload, override -from cfg import T_Primitive -from util import get_replace_name +from compose.cfg import T_Primitive +from compose.util import get_replace_name type T_NetAbc = str | Literal["proxy", "internal"] TCo_NetABC = TypeVar("TCo_NetABC", bound=T_NetAbc, covariant=True) @@ -43,7 +43,7 @@ type T_Compose = ServiceYaml | TraefikServiceYaml @dataclass(frozen=True, slots=True) -class ServiceAbc[T_net: T_NetAbc, T_Yaml: T_Compose](ABC): +class ServiceAbc[T_net: T_NetAbc, T_Yaml: T_Compose](metaclass=ABCMeta): command: tuple[str, ...] | None container_name: str entrypoint: tuple[str, ...] @@ -83,8 +83,8 @@ class ServiceAbc[T_net: T_NetAbc, T_Yaml: T_Compose](ABC): return False return True - @abstractmethod @staticmethod + @abstractmethod def get_nets(data: T_Yaml) -> frozenset[T_net] | None: pass # return self._get_nets(data) diff --git a/src/compose/service/factory.py b/src/compose/service/factory.py new file mode 100644 index 0000000..a44bfb6 --- /dev/null +++ b/src/compose/service/factory.py @@ -0,0 +1,10 @@ +# from typing import cast + +# from compose.cfg import TRAEFIK_PATH +# from compose.service.entity import TraefikServiceYaml +# from compose.util import read_yml + + +# def get_traefik_service(): +# path = TRAEFIK_PATH.joinpath("service.yml") +# return cast(TraefikServiceYaml, read_yml(path)) diff --git a/src/service/get.py b/src/compose/service/get.py similarity index 81% rename from src/service/get.py rename to src/compose/service/get.py index 52b08e2..c0469f1 100644 --- a/src/service/get.py +++ b/src/compose/service/get.py @@ -1,9 +1,9 @@ from collections.abc import Iterable, Iterator from typing import Literal -from net.entities import Net -from net.factory import net_factory_re -from service.entity import Service +from compose.net.entities import Net +from compose.net.factory import net_factory_re +from compose.service.entity import Service def _networks_sub( diff --git a/src/src_path/entity.py b/src/compose/src_path/entity.py similarity index 100% rename from src/src_path/entity.py rename to src/compose/src_path/entity.py diff --git a/src/src_path/get.py b/src/compose/src_path/get.py similarity index 62% rename from src/src_path/get.py rename to src/compose/src_path/get.py index 0bb0d58..b780078 100644 --- a/src/src_path/get.py +++ b/src/compose/src_path/get.py @@ -1,5 +1,5 @@ -from cfg.entity import CfgDataYaml -from src_path.entity import SrcPaths +from compose.cfg.entity import CfgDataYaml +from compose.src_path.entity import SrcPaths def src_path_get_files(src_paths: SrcPaths, data: CfgDataYaml): diff --git a/src/template/entity.py b/src/compose/template/entity.py similarity index 82% rename from src/template/entity.py rename to src/compose/template/entity.py index 980a360..f1b2e1b 100644 --- a/src/template/entity.py +++ b/src/compose/template/entity.py @@ -1,8 +1,8 @@ from dataclasses import dataclass from typing import final -from compose.entity import Compose, TraefikCompose -from template.val_obj import DataDir, NameVal, OrgVal, RecordCls, Url +from compose.compose.entity import Compose, TraefikCompose +from compose.template.val_obj import DataDir, NameVal, OrgVal, RecordCls, Url @final diff --git a/src/template/factory.py b/src/compose/template/factory.py similarity index 76% rename from src/template/factory.py rename to src/compose/template/factory.py index 72c1c22..13de4b3 100644 --- a/src/template/factory.py +++ b/src/compose/template/factory.py @@ -1,11 +1,11 @@ from collections.abc import Iterator -from cfg import DATA_ROOT -from cfg.entity import CfgData, OrgData -from compose.entity import Compose, TraefikCompose -from compose.get import compose_get_volumes -from template.entity import ReplaceArgs, Template -from template.val_obj import DataDir, NameVal, OrgVal, Record, Url +from compose.cfg import DATA_ROOT +from compose.cfg.entity import CfgData, OrgData +from compose.compose.entity import Compose, TraefikCompose +from compose.compose.get import compose_get_volumes +from compose.template.entity import ReplaceArgs, Template +from compose.template.val_obj import DataDir, NameVal, OrgVal, Record, Url def replace_args_factory(cfg_data: CfgData, org_data: OrgData) -> ReplaceArgs: diff --git a/src/template/get.py b/src/compose/template/get.py similarity index 91% rename from src/template/get.py rename to src/compose/template/get.py index 61bc903..239d046 100644 --- a/src/template/get.py +++ b/src/compose/template/get.py @@ -1,8 +1,8 @@ from collections.abc import Iterable from pathlib import Path -from net.entities import Net -from template.entity import Template +from compose.net.entities import Net +from compose.template.entity import Template def template_get_vols(template: Template) -> Iterable[Path]: diff --git a/src/template/val_obj.py b/src/compose/template/val_obj.py similarity index 97% rename from src/template/val_obj.py rename to src/compose/template/val_obj.py index ff2a291..b301609 100644 --- a/src/template/val_obj.py +++ b/src/compose/template/val_obj.py @@ -3,7 +3,7 @@ from dataclasses import dataclass from pathlib import Path from typing import TypeVar, final, override -from util import get_replace_name +from compose.util import get_replace_name class RecordVal(ABC): diff --git a/src/util.py b/src/compose/util.py similarity index 95% rename from src/util.py rename to src/compose/util.py index 402ca15..08c4abe 100644 --- a/src/util.py +++ b/src/compose/util.py @@ -5,7 +5,7 @@ from typing import Any, cast, override import yaml -from cfg import T_PrimDict, T_Primitive, T_PrimVal, T_YamlDict +from compose.cfg import T_PrimDict, T_Primitive, T_PrimVal, T_YamlDict class VerboseSafeDumper(yaml.SafeDumper): @@ -40,7 +40,6 @@ def read_yml(path: Path) -> T_YamlDict: with path.open("rt") as f: return cast(T_YamlDict, yaml.safe_load(f)) - def to_yaml(data: T_YamlDict) -> str: _yaml = yaml.dump(data, Dumper=VerboseSafeDumper) return re.sub(r"(^\s*-)", r" \g<1>", _yaml, flags=re.MULTILINE) diff --git a/src/service/factory.py b/src/service/factory.py deleted file mode 100644 index 0cddff1..0000000 --- a/src/service/factory.py +++ /dev/null @@ -1,10 +0,0 @@ -from typing import cast - -from cfg import TRAEFIK_PATH -from service.entity import TraefikServiceYaml -from util import read_yml - - -def get_traefik_service(): - path = TRAEFIK_PATH.joinpath("service.yml") - return cast(TraefikServiceYaml, read_yml(path))