|
|
@@ -219,7 +219,7 @@ async def import_project_dataset(
|
|
|
3. 保存到 uploads 目录
|
|
|
4. 写入 DatasetRecord 数据库
|
|
|
"""
|
|
|
- # 1. 请求导出
|
|
|
+ # 1. 请求导出(先尝试只导出已完成,若为空则回退导出全部)
|
|
|
export_data = await _request(
|
|
|
"POST",
|
|
|
f"/api/v1/open/projects/{project_id}/datasets/download",
|
|
|
@@ -230,6 +230,27 @@ async def import_project_dataset(
|
|
|
file_name = export_data.get("file_name", f"{project_id}_{format}.json")
|
|
|
total_exported = export_data.get("total_exported", 0)
|
|
|
|
|
|
+ logger.info(
|
|
|
+ f"Annotation export (completed_only=True): total_exported={total_exported}, "
|
|
|
+ f"file_url={file_url}, file_name={file_name}"
|
|
|
+ )
|
|
|
+
|
|
|
+ # 如果已完成数据为空,回退导出全部(包括未完成的)
|
|
|
+ if total_exported == 0 or not file_url:
|
|
|
+ logger.info(f"No completed items found, retrying with completed_only=False")
|
|
|
+ export_data = await _request(
|
|
|
+ "POST",
|
|
|
+ f"/api/v1/open/projects/{project_id}/datasets/download",
|
|
|
+ json={"format": format, "completed_only": False},
|
|
|
+ )
|
|
|
+ file_url = export_data.get("file_url", "")
|
|
|
+ file_name = export_data.get("file_name", f"{project_id}_{format}.json")
|
|
|
+ total_exported = export_data.get("total_exported", 0)
|
|
|
+ logger.info(
|
|
|
+ f"Annotation export (completed_only=False): total_exported={total_exported}, "
|
|
|
+ f"file_url={file_url}, file_name={file_name}"
|
|
|
+ )
|
|
|
+
|
|
|
if not file_url:
|
|
|
raise RuntimeError("标注平台未返回下载链接")
|
|
|
|
|
|
@@ -254,6 +275,11 @@ async def import_project_dataset(
|
|
|
resp.raise_for_status()
|
|
|
file_content = resp.content
|
|
|
|
|
|
+ logger.info(
|
|
|
+ f"Downloaded annotation file: {len(file_content)} bytes, "
|
|
|
+ f"content_type={resp.headers.get('content-type', 'unknown')}"
|
|
|
+ )
|
|
|
+
|
|
|
# 4. 保存到 uploads 目录
|
|
|
upload_dir = settings.uploads_dir
|
|
|
upload_dir.mkdir(parents=True, exist_ok=True)
|
|
|
@@ -269,6 +295,8 @@ async def import_project_dataset(
|
|
|
jsonl_path = _convert_to_jsonl(file_path)
|
|
|
record_count = _count_records(jsonl_path, "jsonl")
|
|
|
|
|
|
+ logger.info(f"Annotation file converted: {jsonl_path.name}, record_count={record_count}")
|
|
|
+
|
|
|
# 6. 写入数据库(格式统一为 jsonl)
|
|
|
record_id = str(uuid.uuid4())
|
|
|
record = DatasetRecord(
|