sync
This commit is contained in:
@@ -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)
|
||||
@@ -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)
|
||||
@@ -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]
|
||||
@@ -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:
|
||||
26
src/compose/cfg/get.py
Normal file
26
src/compose/cfg/get.py
Normal file
@@ -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)
|
||||
@@ -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):
|
||||
36
src/compose/compose/factory.py
Normal file
36
src/compose/compose/factory.py
Normal file
@@ -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)},
|
||||
# )
|
||||
@@ -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]:
|
||||
@@ -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:
|
||||
@@ -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)},
|
||||
)
|
||||
@@ -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:
|
||||
@@ -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
|
||||
@@ -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:
|
||||
@@ -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]]:
|
||||
@@ -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:
|
||||
@@ -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)
|
||||
10
src/compose/service/factory.py
Normal file
10
src/compose/service/factory.py
Normal file
@@ -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))
|
||||
@@ -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(
|
||||
@@ -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):
|
||||
@@ -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
|
||||
@@ -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:
|
||||
@@ -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]:
|
||||
@@ -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):
|
||||
@@ -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)
|
||||
@@ -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))
|
||||
Reference in New Issue
Block a user