mirror of
https://github.com/borbann-platform/backend-api.git
synced 2025-12-18 20:24:05 +01:00
76 lines
1.7 KiB
Python
76 lines
1.7 KiB
Python
"""
|
||
In‐memory stores for pipelines and runs.
|
||
"""
|
||
|
||
from typing import Dict, List, Optional
|
||
from uuid import UUID, uuid4
|
||
from datetime import datetime
|
||
|
||
import models
|
||
|
||
# In‐memory storage
|
||
pipelines: Dict[UUID, models.Pipeline] = {}
|
||
runs: Dict[UUID, models.RunResult] = {}
|
||
|
||
|
||
def create_pipeline(pipeline_in: models.PipelineCreate) -> models.Pipeline:
|
||
"""
|
||
Create and store a new pipeline.
|
||
"""
|
||
pipeline_id = uuid4()
|
||
now = datetime.utcnow()
|
||
pipeline = models.Pipeline(
|
||
id=pipeline_id,
|
||
name=pipeline_in.name,
|
||
sources=pipeline_in.sources,
|
||
created_at=now,
|
||
)
|
||
pipelines[pipeline_id] = pipeline
|
||
return pipeline
|
||
|
||
|
||
def get_pipeline(pipeline_id: UUID) -> Optional[models.Pipeline]:
|
||
"""
|
||
Retrieve a pipeline by its ID.
|
||
"""
|
||
return pipelines.get(pipeline_id)
|
||
|
||
|
||
def list_pipelines() -> List[models.Pipeline]:
|
||
"""
|
||
List all registered pipelines.
|
||
"""
|
||
return list(pipelines.values())
|
||
|
||
|
||
def create_run(pipeline_id: UUID) -> models.RunResult:
|
||
"""
|
||
Create and store a new run for a given pipeline.
|
||
"""
|
||
run_id = uuid4()
|
||
now = datetime.utcnow()
|
||
run = models.RunResult(
|
||
id=run_id,
|
||
pipeline_id=pipeline_id,
|
||
status='PENDING',
|
||
started_at=now,
|
||
finished_at=None,
|
||
results=None,
|
||
error=None,
|
||
)
|
||
runs[run_id] = run
|
||
return run
|
||
|
||
|
||
def get_run(run_id: UUID) -> Optional[models.RunResult]:
|
||
"""
|
||
Retrieve a run by its ID.
|
||
"""
|
||
return runs.get(run_id)
|
||
|
||
|
||
def list_runs_for_pipeline(pipeline_id: UUID) -> List[models.RunResult]:
|
||
"""
|
||
List all runs for a specific pipeline.
|
||
"""
|
||
return [r for r in runs.values() if r.pipeline_id == pipeline_id] |