Make everything keyword only

This commit is contained in:
LilyRose2798 2024-04-28 19:16:26 +10:00
parent 0257a5a721
commit 88d3a13dc6
1 changed files with 22 additions and 22 deletions

View File

@ -25,8 +25,8 @@ from cattrs.errors import ClassValidationError, IterableValidationError
camelize = lambda name: sub(r"_([a-z])", lambda x: x.group(1).upper(), name) camelize = lambda name: sub(r"_([a-z])", lambda x: x.group(1).upper(), name)
woven_config_converter = Converter() woven_config_converter = Converter()
for cls in (IPv4Address, IPv6Address, IPv4Interface, IPv6Interface, IPv4Network, IPv6Network): for cls in (IPv4Address, IPv6Address, IPv4Interface, IPv6Interface, IPv4Network, IPv6Network):
woven_config_converter.register_structure_hook(cls, cls) woven_config_converter.register_structure_hook(cls, lambda a, t: t(a))
woven_config_converter.register_unstructure_hook(cls, str) woven_config_converter.register_unstructure_hook(cls, lambda a: str(a))
override_dict = lambda cls: { a.name: override(rename = camelize(a.name)) for a in fields(cls) } override_dict = lambda cls: { a.name: override(rename = camelize(a.name)) for a in fields(cls) }
woven_config_converter.register_structure_hook_factory(has, lambda cls: make_dict_structure_fn(cls, woven_config_converter, **override_dict(cls))) woven_config_converter.register_structure_hook_factory(has, lambda cls: make_dict_structure_fn(cls, woven_config_converter, **override_dict(cls)))
woven_config_converter.register_unstructure_hook_factory(has, lambda cls: make_dict_unstructure_fn(cls, woven_config_converter, _cattrs_omit_if_default = True, **override_dict(cls))) woven_config_converter.register_unstructure_hook_factory(has, lambda cls: make_dict_unstructure_fn(cls, woven_config_converter, _cattrs_omit_if_default = True, **override_dict(cls)))
@ -52,29 +52,29 @@ def validator_range(min_value: T, max_value: T) -> Callable[[T], T]:
@define @define
class WovenMeshNode: class WovenMeshNode:
address: IPv4Address | IPv6Address = field(converter = ip_address) address: IPv4Address | IPv6Address = field(converter = ip_address, kw_only = True)
gateway: IPv4Address | IPv6Address = field(converter = ip_address) gateway: IPv4Address | IPv6Address = field(converter = ip_address, kw_only = True)
interface: str interface: str = field(kw_only = True)
ipv4_ranges: list[IPv4Network] = field(factory = list, converter = list_of_ipv4_networks) ipv4_ranges: list[IPv4Network] = field(factory = list, converter = list_of_ipv4_networks, kw_only = True)
ipv6_ranges: list[IPv6Network] = field(factory = list, converter = list_of_ipv6_networks) ipv6_ranges: list[IPv6Network] = field(factory = list, converter = list_of_ipv6_networks, kw_only = True)
@define @define
class WovenConfig: class WovenConfig:
min_port: int = field(validator = validator_range(0, 0xFFFF)) min_port: int = field(validator = validator_range(0, 0xFFFF), kw_only = True)
max_port: int = field(validator = validator_range(0, 0xFFFF)) max_port: int = field(validator = validator_range(0, 0xFFFF), kw_only = True)
ptp_ipv4_range: IPv4Network = field(converter = IPv4Network) ptp_ipv4_range: IPv4Network = field(converter = IPv4Network, kw_only = True)
ptp_ipv6_range: IPv6Network = field(converter = IPv6Network) ptp_ipv6_range: IPv6Network = field(converter = IPv6Network, kw_only = True)
ptp_ipv4_prefix: int = field(default = 30, validator = validator_range(0, 32)) ptp_ipv4_prefix: int = field(default = 30, validator = validator_range(0, 32), kw_only = True)
ptp_ipv6_prefix: int = field(default = 64, validator = validator_range(0, 128)) ptp_ipv6_prefix: int = field(default = 64, validator = validator_range(0, 128), kw_only = True)
tunnel_prefix: str = field(default = "") tunnel_prefix: str = field(default = "", kw_only = True)
tunnel_suffix: str = field(default = "loop") tunnel_suffix: str = field(default = "loop", kw_only = True)
tunnel_separator: str = field(default = "-") tunnel_separator: str = field(default = "-", kw_only = True)
wireguard_dir: Path = field(default = Path("/etc/wireguard"), converter = Path) wireguard_dir: Path = field(default = Path("/etc/wireguard"), converter = Path, kw_only = True)
wireguard_config_ext: str = field(default = "conf", converter = lambda x: str(x).lstrip(".")) wireguard_config_ext: str = field(default = "conf", converter = lambda x: str(x).lstrip("."), kw_only = True)
table: Literal["auto", "off"] = field(default = "off", validator = validator_in(["auto", "off"])) table: Literal["auto", "off"] = field(default = "off", validator = validator_in(["auto", "off"]), kw_only = True)
allowed_ips: list[str] = field(factory = lambda: ["0.0.0.0/0", "::/0"]) allowed_ips: list[str] = field(factory = lambda: ["0.0.0.0/0", "::/0"], kw_only = True)
keep_alive: int = field(default = 20, validator = validator_range(0, 1 << 31 - 1)) keep_alive: int = field(default = 20, validator = validator_range(0, 1 << 31 - 1), kw_only = True)
mesh_nodes: dict[str, WovenMeshNode] = field(factory = dict) mesh_nodes: dict[str, WovenMeshNode] = field(kw_only = True)
def _surround(self, val: str) -> str: def _surround(self, val: str) -> str:
prefix_str = f"{self.tunnel_prefix}{self.tunnel_separator}" if self.tunnel_prefix else "" prefix_str = f"{self.tunnel_prefix}{self.tunnel_separator}" if self.tunnel_prefix else ""