refactor: 统一代码格式,调整多行代码换行风格
对多个文件进行代码格式化调整,将长行参数拆分为多行书写,提升代码可读性,包括: - 调整函数定义、调用的多行换行格式 - 优化列表、元组、字典的多行排版 - 新增README.md项目说明文档
This commit is contained in:
@@ -102,7 +102,9 @@ def _parse_pdf(content: bytes) -> str:
|
||||
if not settings.pdf_ocr_enabled:
|
||||
return ""
|
||||
|
||||
ocr_text = _ocr_pdf(content, max_pages=settings.pdf_ocr_max_pages, dpi=settings.pdf_ocr_dpi)
|
||||
ocr_text = _ocr_pdf(
|
||||
content, max_pages=settings.pdf_ocr_max_pages, dpi=settings.pdf_ocr_dpi
|
||||
)
|
||||
return ocr_text
|
||||
|
||||
|
||||
@@ -143,7 +145,9 @@ def _ocr_pdf(content: bytes, max_pages: int, dpi: int) -> str:
|
||||
result, _ = _ocr_engine(pil_image)
|
||||
if result:
|
||||
# result: [[box, text, score], ...],按行拼接
|
||||
lines = [item[1] for item in result if item and len(item) >= 2 and item[1]]
|
||||
lines = [
|
||||
item[1] for item in result if item and len(item) >= 2 and item[1]
|
||||
]
|
||||
if lines:
|
||||
page_texts.append("\n".join(lines))
|
||||
pdf.close()
|
||||
|
||||
+44
-12
@@ -43,7 +43,9 @@ class IngestTaskStatus(StrEnum):
|
||||
|
||||
|
||||
# 终态集合
|
||||
TERMINAL_STATUSES: frozenset[str] = frozenset({IngestTaskStatus.DONE, IngestTaskStatus.FAILED})
|
||||
TERMINAL_STATUSES: frozenset[str] = frozenset(
|
||||
{IngestTaskStatus.DONE, IngestTaskStatus.FAILED}
|
||||
)
|
||||
|
||||
|
||||
def _utc_now_iso() -> str:
|
||||
@@ -54,7 +56,9 @@ def _utc_now_iso() -> str:
|
||||
class IngestTaskManager:
|
||||
"""入库异步任务管理器:登记、后台执行、状态查询与 Redis 持久镜像"""
|
||||
|
||||
def __init__(self, ingester: Ingester, redis: RedisCache | None, settings: Settings) -> None:
|
||||
def __init__(
|
||||
self, ingester: Ingester, redis: RedisCache | None, settings: Settings
|
||||
) -> None:
|
||||
self._ingester = ingester
|
||||
self._redis = redis
|
||||
self._settings = settings
|
||||
@@ -123,7 +127,11 @@ class IngestTaskManager:
|
||||
try:
|
||||
return await self._redis.get_json(f"{REDIS_KEY_PREFIX}{task_id}")
|
||||
except Exception:
|
||||
logger.warning("入库任务状态读取 Redis 失败,降级为未命中", task_id=task_id, exc_info=True)
|
||||
logger.warning(
|
||||
"入库任务状态读取 Redis 失败,降级为未命中",
|
||||
task_id=task_id,
|
||||
exc_info=True,
|
||||
)
|
||||
return None
|
||||
|
||||
async def wait_done(self, task_id: str, timeout: float = 30.0) -> dict[str, Any]:
|
||||
@@ -147,7 +155,9 @@ class IngestTaskManager:
|
||||
"""后台执行入库:并发限流 + 阶段状态推进 + 结果/错误落账 + 去重记录写入"""
|
||||
async with self._semaphore:
|
||||
try:
|
||||
result = await self._ingester.ingest(doc, progress_cb=lambda stage: self._on_progress(task_id, stage))
|
||||
result = await self._ingester.ingest(
|
||||
doc, progress_cb=lambda stage: self._on_progress(task_id, stage)
|
||||
)
|
||||
except IngestionError as exc:
|
||||
# 入库已知失败:透传阶段与已产出的部分总结
|
||||
self._finish_failed(
|
||||
@@ -155,11 +165,18 @@ class IngestTaskManager:
|
||||
{
|
||||
"stage": exc.stage,
|
||||
"message": str(exc),
|
||||
"partial_summary": exc.summary.model_dump(mode="json") if exc.summary is not None else None,
|
||||
"partial_summary": (
|
||||
exc.summary.model_dump(mode="json")
|
||||
if exc.summary is not None
|
||||
else None
|
||||
),
|
||||
},
|
||||
)
|
||||
except Exception as exc:
|
||||
self._finish_failed(task_id, {"stage": "unknown", "message": str(exc), "partial_summary": None})
|
||||
self._finish_failed(
|
||||
task_id,
|
||||
{"stage": "unknown", "message": str(exc), "partial_summary": None},
|
||||
)
|
||||
else:
|
||||
result_dict = result.model_dump(mode="json")
|
||||
self._tasks[task_id].update(
|
||||
@@ -178,7 +195,9 @@ class IngestTaskManager:
|
||||
try:
|
||||
return await self._redis.get_json(f"{DEDUP_KEY_PREFIX}{text_hash}")
|
||||
except Exception:
|
||||
logger.warning("去重记录查询失败,降级为未命中", text_hash=text_hash, exc_info=True)
|
||||
logger.warning(
|
||||
"去重记录查询失败,降级为未命中", text_hash=text_hash, exc_info=True
|
||||
)
|
||||
return None
|
||||
|
||||
async def _record_dedup(self, text_hash: str, result_dict: dict[str, Any]) -> None:
|
||||
@@ -196,9 +215,16 @@ class IngestTaskManager:
|
||||
|
||||
def _finish_failed(self, task_id: str, error: dict[str, Any]) -> None:
|
||||
"""将任务置为 failed 并记录错误信息"""
|
||||
self._tasks[task_id].update(status=IngestTaskStatus.FAILED, updated_at=_utc_now_iso(), error=error)
|
||||
self._tasks[task_id].update(
|
||||
status=IngestTaskStatus.FAILED, updated_at=_utc_now_iso(), error=error
|
||||
)
|
||||
self._schedule_mirror(task_id)
|
||||
logger.error("入库任务失败", task_id=task_id, stage=error["stage"], error=error["message"])
|
||||
logger.error(
|
||||
"入库任务失败",
|
||||
task_id=task_id,
|
||||
stage=error["stage"],
|
||||
error=error["message"],
|
||||
)
|
||||
|
||||
def _on_progress(self, task_id: str, stage: str) -> None:
|
||||
"""Ingester 阶段回调:推进任务状态并同步镜像(同步函数,供 progress_cb 使用)"""
|
||||
@@ -213,7 +239,9 @@ class IngestTaskManager:
|
||||
"""将当前任务状态快照异步镜像到 Redis(同步上下文也可调用)"""
|
||||
if self._redis is None:
|
||||
return
|
||||
mirror = asyncio.create_task(self._mirror_to_redis(task_id, dict(self._tasks[task_id])))
|
||||
mirror = asyncio.create_task(
|
||||
self._mirror_to_redis(task_id, dict(self._tasks[task_id]))
|
||||
)
|
||||
self._mirror_tasks.add(mirror)
|
||||
mirror.add_done_callback(self._mirror_tasks.discard)
|
||||
|
||||
@@ -225,6 +253,10 @@ class IngestTaskManager:
|
||||
else self._settings.ingest_task_ttl_done
|
||||
)
|
||||
try:
|
||||
await self._redis.set_json(f"{REDIS_KEY_PREFIX}{task_id}", snapshot, ttl=ttl)
|
||||
await self._redis.set_json(
|
||||
f"{REDIS_KEY_PREFIX}{task_id}", snapshot, ttl=ttl
|
||||
)
|
||||
except Exception:
|
||||
logger.warning("入库任务状态镜像 Redis 失败", task_id=task_id, exc_info=True)
|
||||
logger.warning(
|
||||
"入库任务状态镜像 Redis 失败", task_id=task_id, exc_info=True
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user