def get_job( dao: Dao = Depends(get_dao), auth: authorization.Rules = Depends(get_rules), job: job_db_models.Job = Depends(get_job_or_fail), ): auth.assert_jobs() return job
def create_job( job: JobBase, dao: Dao = Depends(get_dao), auth: authorization.Rules = Depends(get_rules), ): """create a new job""" user = auth.assert_user() auth.assert_jobs() new_job = dao.create_job(user, job.manifest, job.items_spec) return new_job
def get_jobs( dao: Dao = Depends(get_dao), auth: authorization.Rules = Depends(get_rules), status: List[JobStatus] = Query([JobStatus.pending, JobStatus.running]), skip: int = 0, limit: int = PAGINATION_LIMIT, ): # if this is merged https://github.com/tiangolo/fastapi/issues/2077 # we will be able to use non-exploded list, i.e., ?state=running,pending auth.assert_jobs() return dao.get_jobs(states=status, skip=skip, limit=limit)
def get_tasks( job_id: int, dao: Dao = Depends(get_dao), status: List[TaskStatus] = Query( [TaskStatus.created, TaskStatus.pending, TaskStatus.running]), auth: authorization.Rules = Depends(get_rules), skip: int = 0, limit: int = PAGINATION_LIMIT, ): auth.assert_jobs() return dao.get_tasks(job_id, status, skip, limit)
def create_job( job: JobBase, dao: Dao = Depends(get_dao), auth: authorization.Rules = Depends(get_rules), ): """create a new job""" user = auth.assert_user() # only admins can create jobs through /jobs API auth.assert_jobs(None) new_job = dao.create_job(user, job) return new_job
def get_tasks( job_id: int, dao: Dao = Depends(get_dao), status: List[TaskStatus] = Query( [TaskStatus.created, TaskStatus.pending, TaskStatus.running] ), auth: authorization.Rules = Depends(get_rules), skip: int = 0, limit: int = PAGINATION_LIMIT, job: job_db_models.Job = Depends(get_job_or_fail), ): auth.assert_jobs(owner_id=job.owner_id) return dao.get_tasks(job.id, status, skip, limit)
def update_job( job_data: JobUpdateModel, db=Depends(get_db), job: job_db_models.Job = Depends(get_job_or_fail), auth: authorization.Rules = Depends(get_rules), ): """refresh job (re-run on new packages)""" auth.assert_jobs() job.status = job_data.status # type: ignore # ignore tasks that have already been run if job_data.force: run_jobs(db, job_id=job.id, force=True) db.commit()
def get_job_or_fail( job_id: int, dao: Dao = Depends(get_dao), auth: authorization.Rules = Depends(get_rules), ) -> job_db_models.Job: auth.assert_jobs() job = dao.get_job(job_id) if not job: raise HTTPException( status_code=http_status.HTTP_404_NOT_FOUND, detail=f"Job with id {job_id} not found", ) return job
def update_job( job_data: JobUpdateModel, db=Depends(get_db), job: job_db_models.Job = Depends(get_job_or_fail), auth: authorization.Rules = Depends(get_rules), ): """refresh job (re-run on new packages)""" auth.assert_jobs(owner_id=job.owner_id) job.status = job_data.status # type: ignore if job_data.force and job.status in [ JobStatus.running, JobStatus.pending, ]: # restart tasks that have already been run for task in job.tasks: task.status = "skipped" db.commit()