refactor: 统一代码格式,调整多行代码换行风格
对多个文件进行代码格式化调整,将长行参数拆分为多行书写,提升代码可读性,包括: - 调整函数定义、调用的多行换行格式 - 优化列表、元组、字典的多行排版 - 新增README.md项目说明文档
This commit is contained in:
+44
-13
@@ -57,30 +57,44 @@ def _get_task_manager() -> IngestTaskManager:
|
||||
except Exception:
|
||||
logger.warning("Redis 缓存不可用,入库任务状态仅保留在内存", exc_info=True)
|
||||
redis = None
|
||||
_task_manager = IngestTaskManager(ingester=_get_ingester(), redis=redis, settings=Settings())
|
||||
_task_manager = IngestTaskManager(
|
||||
ingester=_get_ingester(), redis=redis, settings=Settings()
|
||||
)
|
||||
return _task_manager
|
||||
|
||||
|
||||
def _allowed_extensions() -> set[str]:
|
||||
"""解析 settings.upload_allowed_extensions 逗号分隔字符串为扩展名集合(全小写、含点号)"""
|
||||
return {ext.strip().lower() for ext in settings.upload_allowed_extensions.split(",") if ext.strip()}
|
||||
return {
|
||||
ext.strip().lower()
|
||||
for ext in settings.upload_allowed_extensions.split(",")
|
||||
if ext.strip()
|
||||
}
|
||||
|
||||
|
||||
@router.post("/documents")
|
||||
async def ingest_document(doc: DocumentInput, user: AuthUser = Depends(get_current_user)) -> JSONResponse:
|
||||
async def ingest_document(
|
||||
doc: DocumentInput, user: AuthUser = Depends(get_current_user)
|
||||
) -> JSONResponse:
|
||||
"""文档入库入口:登记异步任务并返回 202 + task_id,入库结果经任务查询端点获取"""
|
||||
if not doc.text.strip():
|
||||
raise ApiError(1001, "文档内容不能为空")
|
||||
task_id = await _get_task_manager().submit(doc)
|
||||
return JSONResponse(status_code=202, content=ok({"task_id": task_id, "status": "pending"}))
|
||||
return JSONResponse(
|
||||
status_code=202, content=ok({"task_id": task_id, "status": "pending"})
|
||||
)
|
||||
|
||||
|
||||
@router.post("/documents/upload")
|
||||
async def upload_document(
|
||||
file: UploadFile = File(..., description="上传的文件(.txt/.md/.html/.htm/.pdf/.docx)"),
|
||||
file: UploadFile = File(
|
||||
..., description="上传的文件(.txt/.md/.html/.htm/.pdf/.docx)"
|
||||
),
|
||||
title: str = Form(default="", description="可选标题,默认取原文件名去扩展"),
|
||||
source: str = Form(default="", description="可选来源标识,默认 file:{原文件名}"),
|
||||
metadata: str = Form(default="", description='可选元数据 JSON 字符串,如 \'{"author":"x"}\''),
|
||||
metadata: str = Form(
|
||||
default="", description='可选元数据 JSON 字符串,如 \'{"author":"x"}\''
|
||||
),
|
||||
user: AuthUser = Depends(get_current_user),
|
||||
) -> JSONResponse:
|
||||
"""文件上传入库入口:校验 → 提取文本 → 落盘 → 提交异步入库流水线
|
||||
@@ -129,9 +143,16 @@ async def upload_document(
|
||||
"original_size_bytes": str(len(content)),
|
||||
}
|
||||
)
|
||||
logger.info("上传文件已落盘", doc_id=doc_id, saved_path=saved_path, size=len(content))
|
||||
logger.info(
|
||||
"上传文件已落盘", doc_id=doc_id, saved_path=saved_path, size=len(content)
|
||||
)
|
||||
except Exception:
|
||||
logger.warning("上传文件落盘失败,仅做文本入库", doc_id=doc_id, filename=original_filename, exc_info=True)
|
||||
logger.warning(
|
||||
"上传文件落盘失败,仅做文本入库",
|
||||
doc_id=doc_id,
|
||||
filename=original_filename,
|
||||
exc_info=True,
|
||||
)
|
||||
|
||||
# 5. 合并用户传入的 metadata(落盘元数据优先级更高,不与用户键冲突)
|
||||
if metadata.strip():
|
||||
@@ -150,7 +171,9 @@ async def upload_document(
|
||||
source = f"file:{original_filename}"
|
||||
|
||||
# 7. 提交入库流水线
|
||||
doc_input = DocumentInput(text=text, title=title, source=source, metadata=metadata_dict)
|
||||
doc_input = DocumentInput(
|
||||
text=text, title=title, source=source, metadata=metadata_dict
|
||||
)
|
||||
task_id = await _get_task_manager().submit(doc_input)
|
||||
|
||||
return JSONResponse(
|
||||
@@ -160,7 +183,9 @@ async def upload_document(
|
||||
|
||||
|
||||
@router.get("/documents/tasks/{task_id}")
|
||||
async def get_ingest_task(task_id: str, user: AuthUser = Depends(get_current_user)) -> dict[str, Any]:
|
||||
async def get_ingest_task(
|
||||
task_id: str, user: AuthUser = Depends(get_current_user)
|
||||
) -> dict[str, Any]:
|
||||
"""查询入库任务状态:含 task_id/status/created_at/updated_at,done 附 result,failed 附 error"""
|
||||
task = await _get_task_manager().get(task_id)
|
||||
if task is None:
|
||||
@@ -184,7 +209,9 @@ async def list_documents(
|
||||
|
||||
|
||||
@router.get("/documents/{doc_id}")
|
||||
async def get_document(doc_id: str, user: AuthUser = Depends(get_current_user)) -> dict[str, Any]:
|
||||
async def get_document(
|
||||
doc_id: str, user: AuthUser = Depends(get_current_user)
|
||||
) -> dict[str, Any]:
|
||||
"""获取文档详情:L1 记录 + L2/L3 节点 + chunks 数量"""
|
||||
try:
|
||||
detail = await _get_qdrant().get_doc_detail(doc_id)
|
||||
@@ -197,11 +224,15 @@ async def get_document(doc_id: str, user: AuthUser = Depends(get_current_user))
|
||||
|
||||
|
||||
@router.delete("/documents/{doc_id}")
|
||||
async def delete_document(doc_id: str, user: AuthUser = Depends(require_admin)) -> dict[str, Any]:
|
||||
async def delete_document(
|
||||
doc_id: str, user: AuthUser = Depends(require_admin)
|
||||
) -> dict[str, Any]:
|
||||
"""删除文档:四层集合中该 doc_id 的所有点;幂等,不存在也返回成功(删除数全 0)"""
|
||||
try:
|
||||
deleted = await _get_qdrant().delete_by_doc_id(doc_id)
|
||||
except Exception as exc:
|
||||
logger.error("文档删除失败", doc_id=doc_id, error=str(exc))
|
||||
raise ApiError(2000, f"文档删除失败: {exc}") from exc
|
||||
return ok({"doc_id": doc_id, "deleted": deleted, "deleted_total": sum(deleted.values())})
|
||||
return ok(
|
||||
{"doc_id": doc_id, "deleted": deleted, "deleted_total": sum(deleted.values())}
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user