fix: 删除 routers/websites 中残留的死代码函数 _build_rate_priority_map,并为 build_target_group_priority_map 引入严格的分组倍率解析,防止非法/缺失倍率的分组以 1.0 的降级值参与排序
This commit is contained in:
@@ -189,12 +189,6 @@ def _numeric_group_id(value: str | None) -> int | None:
|
||||
return None
|
||||
|
||||
|
||||
def _build_rate_priority_map(db: Session, upstream_ids: set[int]) -> dict[str, int]:
|
||||
"""根据上游分组倍率构建 group_id → priority 映射。
|
||||
|
||||
委托给 website_sync.build_rate_priority_map 避免逻辑重复。
|
||||
"""
|
||||
return build_rate_priority_map(db, upstream_ids)
|
||||
|
||||
|
||||
@router.get("/api/websites", response_model=List[WebsiteResponse])
|
||||
|
||||
@@ -220,6 +220,17 @@ def _snapshot_group_rate(group: dict) -> float:
|
||||
return 1.0
|
||||
|
||||
|
||||
def _strict_snapshot_group_rate(group: dict) -> float | None:
|
||||
"""从快照分组数据中严格提取倍率,若缺失或非数值则返回 None。"""
|
||||
raw = group.get("rate") or group.get("default_rate") or group.get("rate_multiplier")
|
||||
if raw is None or raw == "":
|
||||
return None
|
||||
try:
|
||||
return float(raw)
|
||||
except (TypeError, ValueError):
|
||||
return None
|
||||
|
||||
|
||||
def build_rate_priority_map(db: Session, upstream_ids: set[int]) -> dict[str, int]:
|
||||
"""根据上游分组倍率构建 f"{upstream_id}:{group_id}" → priority 映射。
|
||||
|
||||
@@ -465,8 +476,9 @@ def build_target_group_priority_map(
|
||||
groups = rate_maps.get(upstream_id) or {}
|
||||
g = groups.get(group_id)
|
||||
if isinstance(g, dict):
|
||||
rate = _snapshot_group_rate(g)
|
||||
rated_sources.append(((upstream_id, group_id), rate))
|
||||
rate = _strict_snapshot_group_rate(g)
|
||||
if rate is not None:
|
||||
rated_sources.append(((upstream_id, group_id), rate))
|
||||
|
||||
if not rated_sources:
|
||||
continue
|
||||
|
||||
Reference in New Issue
Block a user