models.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. from __future__ import annotations
  2. from dataclasses import dataclass, field
  3. from datetime import datetime
  4. from typing import Any
  5. @dataclass(frozen=True)
  6. class IngestionJobSpec:
  7. source_uid: str
  8. job_type: str
  9. parser_version: str
  10. artifact_uid: str | None = None
  11. parameters: dict[str, Any] = field(default_factory=dict)
  12. force_rerun: bool = False
  13. @dataclass(frozen=True)
  14. class IngestionJobRecord:
  15. uid: str
  16. source_uid: str
  17. job_type: str
  18. parser_version: str
  19. idempotency_key: str
  20. actor_uid: str | None
  21. artifact_uid: str | None = None
  22. parameters: dict[str, Any] = field(default_factory=dict)
  23. status: str = "created"
  24. statistics: dict[str, Any] = field(default_factory=dict)
  25. last_error: str | None = None
  26. attempt_count: int = 0
  27. failure_stage: str | None = None
  28. force_rerun: bool = False
  29. created_at: datetime | None = None
  30. updated_at: datetime | None = None
  31. started_at: datetime | None = None
  32. finished_at: datetime | None = None
  33. @dataclass(frozen=True)
  34. class JobTransition:
  35. source_status: str
  36. target_status: str