feat: Implement result deduplication by email and enhance summary reporting to detail only failed accounts.
This commit is contained in:
37
utils.py
37
utils.py
@@ -203,6 +203,14 @@ def print_summary(results: list):
|
||||
Args:
|
||||
results: [{"team": "...", "email": "...", "status": "...", "crs_id": "..."}]
|
||||
"""
|
||||
# 去重 (按 email 去重,保留最后一条记录)
|
||||
seen = {}
|
||||
for r in results:
|
||||
email = r.get("email", "")
|
||||
if email:
|
||||
seen[email] = r
|
||||
results = list(seen.values())
|
||||
|
||||
log.separator("=", 60)
|
||||
log.header("执行摘要")
|
||||
log.separator("=", 60)
|
||||
@@ -212,30 +220,31 @@ def print_summary(results: list):
|
||||
|
||||
log.info(f"总计: {len(results)} 个账号")
|
||||
log.success(f"成功: {success_count}")
|
||||
log.error(f"失败: {failed_count}")
|
||||
if failed_count > 0:
|
||||
log.error(f"失败: {failed_count}")
|
||||
|
||||
# 按 Team 分组
|
||||
teams = {}
|
||||
for r in results:
|
||||
team = r.get("team", "Unknown")
|
||||
if team not in teams:
|
||||
teams[team] = {"success": 0, "failed": 0, "accounts": []}
|
||||
teams[team] = {"success": [], "failed": []}
|
||||
|
||||
if r.get("status") == "success":
|
||||
teams[team]["success"] += 1
|
||||
teams[team]["success"].append(r)
|
||||
else:
|
||||
teams[team]["failed"] += 1
|
||||
teams[team]["failed"].append(r)
|
||||
|
||||
teams[team]["accounts"].append(r)
|
||||
|
||||
log.info("按 Team 统计:")
|
||||
for team_name, data in teams.items():
|
||||
log.info(f"{team_name}: 成功 {data['success']}, 失败 {data['failed']}", icon="team")
|
||||
for acc in data["accounts"]:
|
||||
if acc.get("status") == "success":
|
||||
log.success(f"{acc.get('email', 'Unknown')}")
|
||||
else:
|
||||
log.error(f"{acc.get('email', 'Unknown')}")
|
||||
if teams:
|
||||
log.info("按 Team 统计:")
|
||||
for team_name, data in teams.items():
|
||||
success_list = data["success"]
|
||||
failed_list = data["failed"]
|
||||
log.info(f" {team_name}: 成功 {len(success_list)}, 失败 {len(failed_list)}")
|
||||
|
||||
# 只显示失败的账号详情
|
||||
for acc in failed_list:
|
||||
log.error(f" ✗ {acc.get('email', 'Unknown')}")
|
||||
|
||||
log.separator("=", 60)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user