feat(site-import): 抓取编排与内存任务表

crawler:BFS ≤10 页(深度 ≤2)+ 入口双重门(非 html 零页/SPA 空壳)+
薄子页跳过 + CSS/logo 15s 追抓(MIME+魔数双验 ≤2MB → base64 data URL)
+ 总文本 <1K 内容不足 + 主色默认 #066fc0 回退;logo 相对路径对入口绝对化。
task:(slug, task_id) 联合索引内存表 + 30 分钟惰性清理 + 强引用防 GC +
全平台并发 ≤2(复活同占名额)+ 频控 3 次/15min(新建与 retry 同计,
SlidingWindowCounter 同款独立实例)+ 7 分钟总超时兜底(生成段超时标
generate 可 retry=generate 复活不重抓)+ 内容不足三触发失败文案映射。
conftest 增 autouse 复位夹具(任务表/频控单例跨测试隔离)。

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
浅念
2026-10-20 20:57:50 +08:00
parent 2e40901d26
commit 8f2a73c5d4
4 changed files with 926 additions and 0 deletions
+11
View File
@@ -115,6 +115,17 @@ def _reset_test_endpoint_limiter():
_reset_test_limiter_for_test()
@pytest.fixture(autouse=True)
def _reset_site_import_tasks():
"""site-import Task 6: 导入任务表/频控器模块级单例前后复位——(slug,
task_id) 表与 15 分钟窗计数不隔离会串测试(前一脚打满的频控预算顶掉
后一脚的 start 断言);运行中后台 aio 任务一并防御性取消。"""
from app.platform.site_import.task import _reset_for_test
_reset_for_test()
yield
_reset_for_test()
# ---- Phase 2 Task 10: FakeAI 公共确定性桩(清理单 #1) --------------------------
# 收敛自四份拷贝(test_lead_email_trigger / test_cc_integration /
# test_channel_hygiene / test_lead_push_wiring,接口取超集: 前两份全量,