62 lines
1.5 KiB
Python
62 lines
1.5 KiB
Python
from collections.abc import Iterable, Iterator
|
|
from dataclasses import dataclass
|
|
from typing import Self, final, override
|
|
|
|
from docker_compose.cfg.org import OrgData
|
|
from docker_compose.compose.net_yaml import NetArgsYaml, NetYaml
|
|
from docker_compose.compose.services import Service
|
|
|
|
|
|
@final
|
|
@dataclass(frozen=True, slots=True)
|
|
class NetArgs:
|
|
name: str
|
|
|
|
@property
|
|
def as_dict(self) -> NetArgsYaml:
|
|
yaml_dict = NetArgsYaml(
|
|
name=str(self),
|
|
)
|
|
if self.external:
|
|
yaml_dict["external"] = self.external
|
|
return yaml_dict
|
|
|
|
# @property
|
|
# def as_key_dict(self) -> tuple[str, NetArgsYaml]:
|
|
# return str(self), self.as_dict
|
|
|
|
@override
|
|
def __str__(self) -> str:
|
|
return f"{OrgData.org_app.old!s}_{self.name}"
|
|
|
|
@property
|
|
def external(self) -> bool:
|
|
return self.name == "proxy"
|
|
|
|
|
|
@final
|
|
@dataclass
|
|
class Net:
|
|
data: frozenset[NetArgs]
|
|
|
|
@classmethod
|
|
def from_service_list(cls, args: Iterable[Service]) -> Self:
|
|
return cls.from_list(
|
|
frozenset(net for service in args for net in service.networks)
|
|
)
|
|
|
|
@classmethod
|
|
def from_list(cls, args: frozenset[str]) -> Self:
|
|
return cls(frozenset(NetArgs(arg) for arg in args))
|
|
|
|
@property
|
|
def as_dict(self) -> NetYaml:
|
|
return {net.name: net.as_dict for net in self.data}
|
|
|
|
@property
|
|
def proxys(self) -> Iterator[str]:
|
|
for net in self.data:
|
|
if not net.external:
|
|
continue
|
|
yield str(net)[:-6]
|