feat(ui): add routed operator workflows
This commit is contained in:
@@ -337,6 +337,15 @@ class JobInput(BaseModel):
|
||||
allow_empty: bool = False
|
||||
|
||||
|
||||
class JobPatch(BaseModel):
|
||||
name: str | None = Field(default=None, min_length=1, max_length=255)
|
||||
requested_mode: str | None = None
|
||||
exclusions: list[str] | None = None
|
||||
retention: dict[str, Any] | None = None
|
||||
enabled: bool | None = None
|
||||
allow_empty: bool | None = None
|
||||
|
||||
|
||||
class TokenInput(BaseModel):
|
||||
scopes: list[str] = Field(min_length=1)
|
||||
expires_at: datetime | None = None
|
||||
@@ -1152,6 +1161,40 @@ def create_app(settings: Settings) -> FastAPI:
|
||||
"state": job.state,
|
||||
}
|
||||
|
||||
@app.patch("/api/v2/jobs/{job_id}")
|
||||
async def patch_job(
|
||||
job_id: str,
|
||||
input_: JobPatch,
|
||||
request: Request,
|
||||
db: Annotated[AsyncSession, Depends(session)],
|
||||
identity: Annotated[tuple[User, set[str], bool], Depends(require)],
|
||||
) -> dict[str, Any]:
|
||||
job = await db.get(Job, job_id)
|
||||
if job is None or job.state != "active":
|
||||
raise Problem(404, "resource_not_found", "Job was not found.")
|
||||
changes = input_.model_dump(exclude_unset=True)
|
||||
if not changes:
|
||||
raise Problem(422, "validation_failed", "No mutable fields supplied.")
|
||||
if changes.get("requested_mode") not in {None, "full", "incremental"}:
|
||||
raise Problem(422, "validation_failed", "Invalid requested mode.")
|
||||
for field, value in changes.items():
|
||||
setattr(job, field, value)
|
||||
await audit(db, request, "update", "job", job.id, "success", identity[0].id)
|
||||
await db.commit()
|
||||
await db.refresh(job)
|
||||
return {
|
||||
"id": job.id,
|
||||
"name": job.name,
|
||||
"source_id": job.source_id,
|
||||
"repository_id": job.repository_id,
|
||||
"requested_mode": job.requested_mode,
|
||||
"exclusions": job.exclusions,
|
||||
"retention": job.retention,
|
||||
"enabled": job.enabled,
|
||||
"allow_empty": job.allow_empty,
|
||||
"state": job.state,
|
||||
}
|
||||
|
||||
@app.post("/api/v2/jobs/{job_id}/schedule", status_code=201)
|
||||
async def create_schedule(
|
||||
job_id: str,
|
||||
|
||||
Reference in New Issue
Block a user