models.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. """
  2. Database models and data structures.
  3. Defines the core data models for projects, tasks, annotations, and users.
  4. """
  5. from datetime import datetime
  6. from typing import Optional
  7. class User:
  8. """User model representing a system user."""
  9. def __init__(
  10. self,
  11. id: str,
  12. username: str,
  13. email: str,
  14. password_hash: str,
  15. role: str,
  16. oauth_provider: Optional[str],
  17. oauth_id: Optional[str],
  18. created_at: datetime
  19. ):
  20. self.id = id
  21. self.username = username
  22. self.email = email
  23. self.password_hash = password_hash
  24. self.role = role
  25. self.oauth_provider = oauth_provider # 预留 OAuth
  26. self.oauth_id = oauth_id # 预留 OAuth
  27. self.created_at = created_at
  28. @classmethod
  29. def from_row(cls, row):
  30. """Create User instance from database row."""
  31. return cls(
  32. id=row["id"],
  33. username=row["username"],
  34. email=row["email"],
  35. password_hash=row["password_hash"],
  36. role=row["role"],
  37. oauth_provider=row["oauth_provider"] if "oauth_provider" in row.keys() else None,
  38. oauth_id=row["oauth_id"] if "oauth_id" in row.keys() else None,
  39. created_at=row["created_at"]
  40. )
  41. class Project:
  42. """Project model representing a labeling project."""
  43. def __init__(
  44. self,
  45. id: str,
  46. name: str,
  47. description: str,
  48. config: str,
  49. created_at: datetime
  50. ):
  51. self.id = id
  52. self.name = name
  53. self.description = description
  54. self.config = config
  55. self.created_at = created_at
  56. @classmethod
  57. def from_row(cls, row):
  58. """Create Project instance from database row."""
  59. return cls(
  60. id=row["id"],
  61. name=row["name"],
  62. description=row["description"],
  63. config=row["config"],
  64. created_at=row["created_at"]
  65. )
  66. class Task:
  67. """Task model representing a labeling task."""
  68. def __init__(
  69. self,
  70. id: str,
  71. project_id: str,
  72. name: str,
  73. data: str,
  74. status: str,
  75. assigned_to: Optional[str],
  76. created_at: datetime
  77. ):
  78. self.id = id
  79. self.project_id = project_id
  80. self.name = name
  81. self.data = data
  82. self.status = status
  83. self.assigned_to = assigned_to
  84. self.created_at = created_at
  85. @classmethod
  86. def from_row(cls, row):
  87. """Create Task instance from database row."""
  88. return cls(
  89. id=row["id"],
  90. project_id=row["project_id"],
  91. name=row["name"],
  92. data=row["data"],
  93. status=row["status"],
  94. assigned_to=row["assigned_to"],
  95. created_at=row["created_at"]
  96. )
  97. class Annotation:
  98. """Annotation model representing a labeling result."""
  99. def __init__(
  100. self,
  101. id: str,
  102. task_id: str,
  103. user_id: str,
  104. result: str,
  105. created_at: datetime,
  106. updated_at: datetime
  107. ):
  108. self.id = id
  109. self.task_id = task_id
  110. self.user_id = user_id
  111. self.result = result
  112. self.created_at = created_at
  113. self.updated_at = updated_at
  114. @classmethod
  115. def from_row(cls, row):
  116. """Create Annotation instance from database row."""
  117. return cls(
  118. id=row["id"],
  119. task_id=row["task_id"],
  120. user_id=row["user_id"],
  121. result=row["result"],
  122. created_at=row["created_at"],
  123. updated_at=row["updated_at"]
  124. )