Skip to content

route_rules.core ¤

Classes:

RuleSet ¤

Bases: UserDict[str, set[str]]

.

References
  1. https://wiki.metacubex.one/en/config/rules/

Methods:

Attributes:

domain property ¤

domain: set[str]

domain_suffix property ¤

domain_suffix: set[str]

ip_cidr property ¤

ip_cidr: set[str]

__missing__ ¤

__missing__(key: str) -> set[str]
Source code in src/route_rules/core/_ruleset.py
21
22
23
def __missing__(self, key: str) -> set[str]:
    self[key] = set()
    return self[key]

__or__ ¤

__or__(other: Mapping[str, Set[str]]) -> Self
Source code in src/route_rules/core/_ruleset.py
14
15
16
17
18
19
@override
def __or__(self, other: Mapping[str, AbstractSet[str]], /) -> Self:  # pyright: ignore[reportIncompatibleMethodOverride]
    result: Self = type(self)()
    for typ in self.keys() | other.keys():
        result[typ] = self.get(typ, set()) | other.get(typ, set())
    return result

add ¤

add(typ: str, value: str) -> None
Source code in src/route_rules/core/_ruleset.py
37
38
39
40
41
def add(self, typ: str, value: str) -> None:
    # IP-CIDR and IP-CIDR6 have the same effect, with IP-CIDR6 being an alias.
    if typ == "IP-CIDR6":
        typ = "IP-CIDR"
    self[typ].add(value)

optimize ¤

optimize() -> Self
Source code in src/route_rules/core/_ruleset.py
43
44
45
def optimize(self) -> Self:
    # TODO: implement
    return self

union ¤

union(*others: Mapping[str, Set[str]]) -> Self
Source code in src/route_rules/core/_ruleset.py
47
48
49
50
51
52
53
def union(self, *others: Mapping[str, AbstractSet[str]]) -> Self:
    result: Self = type(self)()
    for typ in set(self.keys()).union(*(m.keys() for m in others)):
        result[typ] = self.get(typ, set()).union(
            *(m.get(typ, set()) for m in others)
        )
    return result