旧验收项目自动补齐Cookie资源

This commit is contained in:
2026-09-02 11:49:55 +08:00
parent 718f681bb3
commit fc51e2a7c9
2 changed files with 62 additions and 0 deletions

View File

@@ -1640,6 +1640,40 @@ def _task_dict(conn, task) -> dict[str, Any]:
FROM acceptance_task_resources WHERE task_id=? ORDER BY resource_order""", FROM acceptance_task_resources WHERE task_id=? ORDER BY resource_order""",
(task["id"],), (task["id"],),
).fetchall() ).fetchall()
has_custom_cookie = conn.execute(
"""SELECT 1 FROM acceptance_task_secrets
WHERE task_id=? AND secret_type='custom_cookie' LIMIT 1""",
(task["id"],),
).fetchone()
if (not task_resources and not has_custom_cookie
and task["scheduled_from_task_id"] is None
and task["acceptance_method"] in {"data-analysis", "combined"}):
try:
current_resources = get_wen_resources()
credential_ids = list(dict.fromkeys(
str(item).strip() for item in current_resources.get("credential_ids", [])
if str(item).strip()
))
conn.executemany(
"""INSERT OR IGNORE INTO acceptance_task_resources
(task_id,resource_type,resource_id,resource_order,created_at)
VALUES (?,'cookie',?,?,?)""",
[(task["id"], credential_id, index, now_iso())
for index, credential_id in enumerate(credential_ids)],
)
if credential_ids:
conn.execute(
"UPDATE acceptance_tasks SET cookie_count=?,updated_at=? WHERE id=?",
(len(credential_ids), now_iso(), task["id"]),
)
task_resources = conn.execute(
"""SELECT resource_type,resource_id,resource_order
FROM acceptance_task_resources WHERE task_id=? ORDER BY resource_order""",
(task["id"],),
).fetchall()
except Exception:
# 详情读取不能因为 Cookie 池短暂不可用而整体失败。
pass
cookie_attempts = conn.execute( cookie_attempts = conn.execute(
"""SELECT credential_id,keyword,status,attempt_number,error_message, """SELECT credential_id,keyword,status,attempt_number,error_message,
started_at,completed_at started_at,completed_at

View File

@@ -80,6 +80,34 @@ class AcceptanceCreationTest(unittest.TestCase):
self.assertEqual(task["schedule_start_time"], "20:00") self.assertEqual(task["schedule_start_time"], "20:00")
self.assertIsNotNone(task["next_run_at"]) self.assertIsNotNone(task["next_run_at"])
self.assertEqual(task["keyword_runs"], []) self.assertEqual(task["keyword_runs"], [])
self.assertEqual(
[item["resource_id"] for item in task["resource_progress"] if item["resource_type"] == "cookie"],
["c1", "c2"],
)
@patch("acceptance_service.get_wen_resources")
def test_legacy_root_task_backfills_current_cookie_pool(self, resources):
resources.return_value = {"cookie_count": 2, "device_count": 3, "credential_ids": ["pool-1", "pool-2"]}
now = now_iso()
with connection() as conn:
task_id = conn.execute(
"""INSERT INTO acceptance_tasks
(public_task_id,name,acceptance_method,status,progress_percent,device_count,
created_by_id,created_by_name,created_at,updated_at,cookie_count)
VALUES ('legacy-root','旧项目','combined','completed',100,3,'u','u',?,?,2)""",
(now, now),
).lastrowid
conn.execute(
"INSERT INTO acceptance_keywords(task_id,keyword_order,keyword,created_at) VALUES (?,0,'山姆会员卡',?)",
(task_id, now),
)
task = get_acceptance_task("legacy-root")
self.assertEqual(
[item["resource_id"] for item in task["resource_progress"] if item["resource_type"] == "cookie"],
["pool-1", "pool-2"],
)
@patch("acceptance_service.threading.Thread", _ThreadWithoutStart) @patch("acceptance_service.threading.Thread", _ThreadWithoutStart)
@patch("acceptance_service.sync_dashboard_acceptance_project") @patch("acceptance_service.sync_dashboard_acceptance_project")