fix(indexer): normalize Audiences user levels (#7027)

This commit is contained in:
Opportunity
2026-10-16 22:08:02 +08:00
committed by GitHub
parent b6c3629b07
commit 5482415697
2 changed files with 39 additions and 3 deletions

View File

@@ -383,8 +383,11 @@ class NexusAudiencesSiteUserInfo(NexusPhpSiteUserInfo):
self.username = username.strip()
user_level = user_node.get("data-uploader-badge")
if user_level and user_level.strip():
self.user_level = user_level.strip()
if user_level:
# 站点组名仅用于展示,保留通用等级以与其他 NexusPHP 站点一致。
user_level = re.sub(r"^\([^)]*\)\s*", "", user_level.strip()).strip()
if user_level:
self.user_level = user_level # type: ignore[assignment]
def __parse_uploader_stats(self, stats_text: str):
"""

View File

@@ -1,4 +1,6 @@
# -*- coding: utf-8 -*-
import pytest
from app.foundation.size import parse_size
from app.modules.indexer.parser.nexus_audiences import NexusAudiencesSiteUserInfo
@@ -37,7 +39,7 @@ def test_audiences_userbar_metrics_override_generic_nexus_regex():
assert parser.userid == "18978"
assert parser.username == "jxxghp"
assert parser.user_level == "(江湖儿女)Elite User"
assert parser.user_level == "Elite User"
assert parser.upload == parse_size("10.150 TB")
assert parser.download == parse_size("3.624 TB")
assert parser.ratio == 2.801
@@ -46,6 +48,37 @@ def test_audiences_userbar_metrics_override_generic_nexus_regex():
assert parser.leeching == 7
@pytest.mark.parametrize("parse_method", ["_parse_user_traffic_info", "_parse_user_detail_info"])
@pytest.mark.parametrize("badge, expected", [
("(小鬼当家)User", "User"),
("(江湖儿女)Elite User", "Elite User"),
(" (江湖儿女) Elite User ", "Elite User"),
("Elite User", "Elite User"),
(" User ", "User"),
("(小鬼当家)", "Power User"),
(" ", "Power User"),
])
def test_audiences_user_level_omits_site_group(parse_method, badge, expected):
parser = NexusAudiencesSiteUserInfo(
site_name="Audiences",
url="https://audiences.me/",
site_cookie="",
apikey=None,
token=None,
)
parser.user_level = "Power User"
html_text = f"""
<html><body>
<a data-uploader-label="testuser" data-uploader-url="userdetails.php?id=123"
data-uploader-badge="{badge}">testuser</a>
</body></html>
"""
getattr(parser, parse_method)(html_text)
assert parser.user_level == expected
def test_audiences_inbox_total_unread_badge_uses_unread_part():
parser = NexusAudiencesSiteUserInfo(
site_name="Audiences",