working
This commit is contained in:
61
src/docker_compose/compose/net.py
Normal file
61
src/docker_compose/compose/net.py
Normal file
@@ -0,0 +1,61 @@
|
||||
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]
|
||||
Reference in New Issue
Block a user