acquisition_runner.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. """Pipeline adapter for the acquisition stage."""
  2. from __future__ import annotations
  3. from dataclasses import dataclass
  4. from typing import Any
  5. from uuid import UUID
  6. from acquisition.repositories.base import AcquisitionRepository
  7. from acquisition.runner import RunBatchResult, run_batch
  8. from core.config import Settings
  9. from pipeline.models import PipelineJob, PipelineRun
  10. from pipeline.repository import PipelineRepository
  11. @dataclass(frozen=True)
  12. class AcquisitionStageResult:
  13. pipeline_job: PipelineJob | None
  14. acquisition: RunBatchResult
  15. def run_acquisition_stage(
  16. *,
  17. acquisition_repo: AcquisitionRepository,
  18. batch_id: UUID,
  19. settings: Settings,
  20. pipeline_repo: PipelineRepository | None = None,
  21. pipeline_run: PipelineRun | None = None,
  22. **kwargs: Any,
  23. ) -> AcquisitionStageResult:
  24. job = None
  25. if pipeline_repo and pipeline_run and pipeline_run.id:
  26. job = pipeline_repo.save_pipeline_job(
  27. run_id=pipeline_run.id,
  28. stage="search",
  29. target_id=batch_id,
  30. status="running",
  31. metadata={"batch_id": str(batch_id)},
  32. )
  33. try:
  34. result = run_batch(acquisition_repo, batch_id=batch_id, settings=settings, **kwargs)
  35. if pipeline_repo and job and job.id:
  36. job = pipeline_repo.mark_job_status(
  37. job.id,
  38. status="done" if result.failed == 0 else "partial",
  39. metadata=result.__dict__,
  40. )
  41. return AcquisitionStageResult(pipeline_job=job, acquisition=result)
  42. except Exception as exc:
  43. if pipeline_repo and job and job.id:
  44. pipeline_repo.mark_job_status(job.id, status="failed", error_message=str(exc)[:300])
  45. raise