feat: 实现 Skills 跨榜去重与首日 baseline 模式判定
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -8,7 +8,7 @@ from datetime import datetime, timedelta
|
||||
from pathlib import Path
|
||||
from typing import Any, Callable
|
||||
|
||||
from daily.config import OUTPUT_DIR, env_int
|
||||
from daily.config import OUTPUT_DIR, delta_baseline_fallback, env_int, wecom_mode
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -311,3 +311,40 @@ def build_movement_context(
|
||||
"skills_stable": not skills_trending_all and not skills_hot_all,
|
||||
"github_stable": not github_trending_all and not github_emerging_all and not github_topic_all,
|
||||
}
|
||||
|
||||
|
||||
def effective_wecom_mode(*, date_str: str, configured_mode: str | None = None) -> str:
|
||||
mode = configured_mode or wecom_mode()
|
||||
if mode != "delta":
|
||||
return "full"
|
||||
if find_previous_data(date_str) is None and delta_baseline_fallback() == "full":
|
||||
return "full"
|
||||
return "delta"
|
||||
|
||||
|
||||
def partition_skill_moves_for_wecom(
|
||||
trending_moves: list[dict[str, Any]],
|
||||
hot_moves: list[dict[str, Any]],
|
||||
) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
|
||||
hot_by_id = {skill_id(m): m for m in hot_moves if skill_id(m)}
|
||||
trending_out: list[dict[str, Any]] = []
|
||||
consumed_hot: set[str] = set()
|
||||
for move in trending_moves:
|
||||
sid = skill_id(move)
|
||||
copy = dict(move)
|
||||
badges = [f"Trending #{move.get('rank', '?')}"]
|
||||
hot_match = hot_by_id.get(sid)
|
||||
if hot_match:
|
||||
badges.append(f"Hot #{hot_match.get('rank', '?')}")
|
||||
consumed_hot.add(sid)
|
||||
copy["badge"] = " · ".join(badges)
|
||||
trending_out.append(copy)
|
||||
hot_out: list[dict[str, Any]] = []
|
||||
for move in hot_moves:
|
||||
sid = skill_id(move)
|
||||
if sid in consumed_hot:
|
||||
continue
|
||||
copy = dict(move)
|
||||
copy["badge"] = f"Hot #{move.get('rank', '?')}"
|
||||
hot_out.append(copy)
|
||||
return trending_out, hot_out
|
||||
|
||||
Reference in New Issue
Block a user