fix: guard against empty YAML and missing proxy name in expander
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+2
-2
@@ -14,13 +14,13 @@ def filter_proxy(proxy: dict) -> dict:
|
|||||||
|
|
||||||
|
|
||||||
def expand_config(base_yaml: str, provider_proxies: dict[str, list[dict]]) -> str:
|
def expand_config(base_yaml: str, provider_proxies: dict[str, list[dict]]) -> str:
|
||||||
cfg = yaml.safe_load(base_yaml)
|
cfg = yaml.safe_load(base_yaml) or {}
|
||||||
|
|
||||||
all_proxies = list(cfg.get("proxies") or [])
|
all_proxies = list(cfg.get("proxies") or [])
|
||||||
provider_to_names: dict[str, list[str]] = {}
|
provider_to_names: dict[str, list[str]] = {}
|
||||||
|
|
||||||
for provider_name, proxies in provider_proxies.items():
|
for provider_name, proxies in provider_proxies.items():
|
||||||
filtered = [filter_proxy(p) for p in proxies]
|
filtered = [filter_proxy(p) for p in proxies if "name" in p]
|
||||||
provider_to_names[provider_name] = [p["name"] for p in filtered]
|
provider_to_names[provider_name] = [p["name"] for p in filtered]
|
||||||
all_proxies.extend(filtered)
|
all_proxies.extend(filtered)
|
||||||
|
|
||||||
|
|||||||
@@ -149,3 +149,27 @@ def test_build_mihomo_config_no_providers():
|
|||||||
result = build_mihomo_config(["proxies: []"], "s")
|
result = build_mihomo_config(["proxies: []"], "s")
|
||||||
cfg = yaml.safe_load(result)
|
cfg = yaml.safe_load(result)
|
||||||
assert "proxy-providers" not in cfg
|
assert "proxy-providers" not in cfg
|
||||||
|
|
||||||
|
|
||||||
|
def test_expand_config_skips_proxies_without_name():
|
||||||
|
result = expand_config(BASE_YAML, {"provider1": [
|
||||||
|
{"type": "ss", "server": "1.2.3.4", "port": 443}, # no "name"
|
||||||
|
{"name": "valid-node", "type": "ss", "server": "5.6.7.8", "port": 443},
|
||||||
|
]})
|
||||||
|
cfg = yaml.safe_load(result)
|
||||||
|
names = [p["name"] for p in cfg["proxies"]]
|
||||||
|
assert "valid-node" in names
|
||||||
|
assert len(names) == 1
|
||||||
|
|
||||||
|
|
||||||
|
def test_build_mihomo_config_skips_malformed_yaml():
|
||||||
|
valid_yaml = """
|
||||||
|
proxy-providers:
|
||||||
|
p1:
|
||||||
|
type: http
|
||||||
|
url: https://example.com/sub
|
||||||
|
interval: 3600
|
||||||
|
"""
|
||||||
|
result = build_mihomo_config([valid_yaml, ":: invalid yaml ::: {{{"], "s")
|
||||||
|
cfg = yaml.safe_load(result)
|
||||||
|
assert "p1" in cfg["proxy-providers"]
|
||||||
|
|||||||
Reference in New Issue
Block a user