diff --git a/packages/domain/classification.py b/packages/domain/classification.py index f79475e8c..c424aac31 100644 --- a/packages/domain/classification.py +++ b/packages/domain/classification.py @@ -19,6 +19,7 @@ from uuid import uuid4 class AssetLibraryKind(StrEnum): VIDEO = "video" VOICE = "voice" + IMAGE = "image" class IngestJobStatus(StrEnum): @@ -34,6 +35,27 @@ class ClassificationJobStatus(StrEnum): COMPLETED = "completed" FAILED = "failed" + @classmethod + def _missing_(cls, value: object) -> "ClassificationJobStatus": + """兼容历史数据,避免枚举转换失败导致500。 + + - done → COMPLETED(早期版本用 done 表示完成) + - 其他未知值 → PENDING(兜底,不阻塞业务) + """ + if isinstance(value, str): + normalized = value.strip().lower() + if normalized in ("done", "success", "finished", "complete"): + return cls.COMPLETED + if normalized in ("fail", "error", "err"): + return cls.FAILED + if normalized in ("process", "processing", "running", "run"): + return cls.PROCESSING + return cls.PENDING + + +# 向后兼容别名 +ClassificationStatus = ClassificationJobStatus + class AssetClassification(StrEnum): """Asset classification categories.""" diff --git a/packages/domain/entities.py b/packages/domain/entities.py index 079fc3af1..4df342e4d 100755 --- a/packages/domain/entities.py +++ b/packages/domain/entities.py @@ -16,18 +16,12 @@ else: from typing import Any from uuid import uuid4 - -class AssetLibraryKind(StrEnum): - VIDEO = "video" - VOICE = "voice" - IMAGE = "image" - - -class IngestJobStatus(StrEnum): - PENDING = "pending" - PROCESSING = "processing" - COMPLETED = "completed" - FAILED = "failed" +# 枚举统一从 classification 模块导入,消除重复定义 +from packages.domain.classification import ( + AssetLibraryKind, + ClassificationStatus, + IngestJobStatus, +) @dataclass(slots=True) @@ -160,30 +154,6 @@ class AssetStatus(StrEnum): return cls.READY -class ClassificationStatus(StrEnum): - PENDING = "pending" - PROCESSING = "processing" - COMPLETED = "completed" - FAILED = "failed" - - @classmethod - def _missing_(cls, value: object) -> "ClassificationStatus": - """兼容历史数据,避免枚举转换失败导致500。 - - - done → COMPLETED(早期版本用 done 表示完成) - - 其他未知值 → PENDING(兜底,不阻塞业务) - """ - if isinstance(value, str): - normalized = value.strip().lower() - if normalized in ("done", "success", "finished", "complete"): - return cls.COMPLETED - if normalized in ("fail", "error", "err"): - return cls.FAILED - if normalized in ("process", "processing", "running", "run"): - return cls.PROCESSING - return cls.PENDING - - @dataclass(slots=True) class Asset: id: str