mock_external_projects.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. """
  2. Mock external projects script.
  3. Creates 4 external source projects with cat images for testing.
  4. """
  5. import sys
  6. import os
  7. import uuid
  8. import json
  9. # Add parent directory to path
  10. sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
  11. from database import get_db_connection
  12. # 猫猫图片 URL (使用支持跨域的图片)
  13. # 使用 picsum.photos 提供的随机图片服务,支持 CORS
  14. CAT_IMAGE_URL = "https://picsum.photos/id/40/800/600" # 一张猫的图片
  15. # 4 个外部项目的配置
  16. MOCK_PROJECTS = [
  17. {
  18. "name": "猫咪品种分类项目",
  19. "description": "对猫咪图片进行品种分类标注,包括英短、美短、布偶、橘猫等常见品种",
  20. "external_id": "ext_cat_breed_001",
  21. "task_type": "image_classification",
  22. "task_count": 5,
  23. },
  24. {
  25. "name": "猫咪目标检测项目",
  26. "description": "检测图片中猫咪的位置,使用矩形框标注猫咪的头部、身体等部位",
  27. "external_id": "ext_cat_detection_002",
  28. "task_type": "object_detection",
  29. "task_count": 8,
  30. },
  31. {
  32. "name": "猫咪情绪识别项目",
  33. "description": "识别猫咪的情绪状态,如开心、生气、困倦、好奇等",
  34. "external_id": "ext_cat_emotion_003",
  35. "task_type": "image_classification",
  36. "task_count": 6,
  37. },
  38. {
  39. "name": "猫咪姿态标注项目",
  40. "description": "标注猫咪的姿态,包括站立、坐着、躺着、跳跃等动作",
  41. "external_id": "ext_cat_pose_004",
  42. "task_type": "image_classification",
  43. "task_count": 4,
  44. },
  45. ]
  46. def create_mock_projects():
  47. """Create mock external projects with tasks."""
  48. with get_db_connection() as conn:
  49. cursor = conn.cursor()
  50. created_projects = []
  51. for project_info in MOCK_PROJECTS:
  52. # Generate project ID
  53. project_id = f"proj_{uuid.uuid4().hex[:12]}"
  54. # Insert project (draft status, external source, no config)
  55. cursor.execute("""
  56. INSERT INTO projects (id, name, description, config, status, source, task_type, external_id)
  57. VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
  58. """, (
  59. project_id,
  60. project_info["name"],
  61. project_info["description"],
  62. "", # 空配置,未配置状态
  63. "draft", # 草稿状态
  64. "external", # 外部来源
  65. project_info["task_type"],
  66. project_info["external_id"],
  67. ))
  68. # Create tasks for this project
  69. for i in range(project_info["task_count"]):
  70. task_id = f"task_{uuid.uuid4().hex[:12]}"
  71. task_name = f"{project_info['name']} - 任务 {i + 1}"
  72. # Task data with cat image
  73. task_data = {
  74. "image": CAT_IMAGE_URL,
  75. "meta": {
  76. "source": "external_api",
  77. "index": i + 1,
  78. "total": project_info["task_count"],
  79. }
  80. }
  81. cursor.execute("""
  82. INSERT INTO tasks (id, project_id, name, data, status, assigned_to)
  83. VALUES (%s, %s, %s, %s, %s, %s)
  84. """, (
  85. task_id,
  86. project_id,
  87. task_name,
  88. json.dumps(task_data, ensure_ascii=False),
  89. "pending", # 待处理状态
  90. None, # 未分配
  91. ))
  92. created_projects.append({
  93. "id": project_id,
  94. "name": project_info["name"],
  95. "task_count": project_info["task_count"],
  96. })
  97. print(f"✓ 创建项目: {project_info['name']} (ID: {project_id}, 任务数: {project_info['task_count']})")
  98. print(f"\n共创建 {len(created_projects)} 个外部项目")
  99. return created_projects
  100. if __name__ == "__main__":
  101. print("=" * 60)
  102. print("Mock 外部项目创建脚本")
  103. print("=" * 60)
  104. print(f"图片 URL: {CAT_IMAGE_URL}")
  105. print("-" * 60)
  106. try:
  107. projects = create_mock_projects()
  108. print("\n" + "=" * 60)
  109. print("创建完成!")
  110. print("=" * 60)
  111. except Exception as e:
  112. print(f"\n错误: {e}")
  113. import traceback
  114. traceback.print_exc()
  115. sys.exit(1)