Skip to content

route_rules.provider.mihomo ¤

Classes:

Functions:

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

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)

decode ¤

decode(
    data: str | bytes, behavior: Behavior, format: Format
) -> RuleSet
Source code in src/route_rules/provider/mihomo/_decode.py
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
def decode(data: str | bytes, behavior: Behavior, format: Format) -> RuleSet:  # noqa: A002
    payload: list[str]
    match format:
        case Format.YAML:
            payload = _decode_yaml(data)
        case Format.TEXT:
            payload = _decode_text(data)
        case _:
            raise DecodeError(behavior=behavior, format=format)
    match behavior:
        case Behavior.DOMAIN:
            return _decode_domain(payload)
        case Behavior.CLASSICAL:
            return _decode_classical(payload)
        case _:
            raise DecodeError(behavior=behavior, format=format)