Skip to content

route_rules.provider ¤

Modules:

Classes:

Behavior ¤

Bases: StrEnum

Attributes:

CLASSICAL class-attribute instance-attribute ¤

CLASSICAL = auto()

DOMAIN class-attribute instance-attribute ¤

DOMAIN = auto()

IPCIDR class-attribute instance-attribute ¤

IPCIDR = auto()

Format ¤

Bases: StrEnum

Attributes:

MRS class-attribute instance-attribute ¤

MRS = auto()

TEXT class-attribute instance-attribute ¤

TEXT = auto()

YAML class-attribute instance-attribute ¤

YAML = auto()

ext property ¤

ext: str

Provider ¤

Bases: ABC

Parameters:

  • name (str) –
  • download_url_template (str) –
  • preview_url_template (str, default: <dynamic> ) –

Methods:

Attributes:

download_url_template class-attribute instance-attribute ¤

download_url_template: str = field()

name class-attribute instance-attribute ¤

name: str = field()

preview_url_template class-attribute instance-attribute ¤

preview_url_template: str = field(
    default=Factory(
        _default_preview_url_template, takes_self=True
    )
)

download_url ¤

download_url(name: str) -> str
Source code in src/route_rules/provider/_abc.py
26
27
28
def download_url(self, name: str) -> str:
    name = urllib.parse.quote(name)
    return self.download_url_template.format(name=name)

load abstractmethod async ¤

load(name: str) -> RuleSet
Source code in src/route_rules/provider/_abc.py
30
31
32
@abc.abstractmethod
async def load(self, name: str) -> RuleSet:
    raise NotImplementedError

preview_url ¤

preview_url(name: str) -> str
Source code in src/route_rules/provider/_abc.py
34
35
36
def preview_url(self, name: str) -> str:
    name = urllib.parse.quote(name)
    return self.preview_url_template.format(name=name)

ProviderMihomo ¤

Bases: Provider

Parameters:

  • name (str) –
  • download_url_template (str) –
  • preview_url_template (str, default: <dynamic> ) –
  • behavior (Behavior) –
  • format (Format, default: <Format.YAML: 'yaml'> ) –

Methods:

Attributes:

behavior class-attribute instance-attribute ¤

behavior: Behavior = field(kw_only=True)

download_url_template class-attribute instance-attribute ¤

download_url_template: str = field()

format class-attribute instance-attribute ¤

format: Format = field(default=YAML, kw_only=True)

name class-attribute instance-attribute ¤

name: str = field()

preview_url_template class-attribute instance-attribute ¤

preview_url_template: str = field(
    default=Factory(
        _default_preview_url_template, takes_self=True
    )
)

download_url ¤

download_url(name: str) -> str
Source code in src/route_rules/provider/_abc.py
26
27
28
def download_url(self, name: str) -> str:
    name = urllib.parse.quote(name)
    return self.download_url_template.format(name=name)

load async ¤

load(name: str) -> RuleSet
Source code in src/route_rules/provider/mihomo/_provider.py
20
21
22
23
24
@override
@cta.cachedmethod(lambda self: self._cache)
async def load(self, name: str) -> RuleSet:
    response: httpx.Response = await utils.download(self.download_url(name))
    return decode(response.text, behavior=self.behavior, format=self.format)

preview_url ¤

preview_url(name: str) -> str
Source code in src/route_rules/provider/_abc.py
34
35
36
def preview_url(self, name: str) -> str:
    name = urllib.parse.quote(name)
    return self.preview_url_template.format(name=name)

ProviderRegistry ¤

Parameters:

  • registry (dict[str, Provider], default: <class 'dict'> ) –

    dict() -> new empty dictionary dict(mapping) -> new dictionary initialized from a mapping object's (key, value) pairs dict(iterable) -> new dictionary initialized as if via: d = {} for k, v in iterable: d[k] = v dict(**kwargs) -> new dictionary initialized with the name=value pairs in the keyword argument list. For example: dict(one=1, two=2)

Methods:

Attributes:

registry class-attribute instance-attribute ¤

registry: dict[str, Provider] = field(factory=dict)

download_url ¤

download_url(name: str) -> str
Source code in src/route_rules/provider/_registry.py
57
58
59
60
61
def download_url(self, name: str) -> str:
    provider: Provider
    ruleset_name: str
    provider, ruleset_name = self._parse_name(name)
    return provider.download_url(ruleset_name)

load async ¤

load(name: str) -> RuleSet
Source code in src/route_rules/provider/_registry.py
63
64
65
66
67
async def load(self, name: str) -> RuleSet:
    provider: Provider
    ruleset_name: str
    provider, ruleset_name = self._parse_name(name)
    return await provider.load(ruleset_name)

presets cached classmethod ¤

presets() -> Self
Source code in src/route_rules/provider/_registry.py
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
@classmethod
@functools.cache
def presets(cls) -> Self:
    self: Self = cls()
    self.register(
        ProviderMihomo(
            "blackmatrix7",
            "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/{name}/{name}.list",
            "https://github.com/blackmatrix7/ios_rule_script/tree/master/rule/Clash/{name}",
            behavior=Behavior.CLASSICAL,
            format=Format.TEXT,
        ),
        ProviderMihomo(
            "dler-io",
            "https://raw.githubusercontent.com/dler-io/Rules/main/Clash/Provider/{name}.yaml",
            "https://github.com/dler-io/Rules/blob/main/Clash/Provider/{name}.yaml",
            behavior=Behavior.CLASSICAL,
            format=Format.YAML,
        ),
        ProviderMihomo(
            "MetaCubeX/geosite",
            "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/{name}.yaml",
            "https://github.com/MetaCubeX/meta-rules-dat/blob/meta/geo/geosite/{name}.yaml",
            behavior=Behavior.DOMAIN,
            format=Format.YAML,
        ),
        ProviderMihomo(
            "SukkaW/classical",
            "https://ruleset.skk.moe/Clash/{name}.txt",
            behavior=Behavior.CLASSICAL,
            format=Format.TEXT,
        ),
        ProviderMihomo(
            "SukkaW/domain",
            "https://ruleset.skk.moe/Clash/{name}.txt",
            behavior=Behavior.DOMAIN,
            format=Format.TEXT,
        ),
    )
    return self

preview_url ¤

preview_url(name: str) -> str
Source code in src/route_rules/provider/_registry.py
69
70
71
72
73
def preview_url(self, name: str) -> str:
    provider: Provider
    ruleset_name: str
    provider, ruleset_name = self._parse_name(name)
    return provider.preview_url(ruleset_name)

register ¤

register(*providers: Provider) -> None
Source code in src/route_rules/provider/_registry.py
75
76
77
def register(self, *providers: Provider) -> None:
    for provider in providers:
        self.registry[provider.name] = provider