コード例 #1
0
ファイル: api.py プロジェクト: beenje/quetz
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
コード例 #2
0
ファイル: api.py プロジェクト: beenje/quetz
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
コード例 #3
0
ファイル: api.py プロジェクト: beenje/quetz
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)
コード例 #4
0
ファイル: api.py プロジェクト: beenje/quetz
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)
コード例 #5
0
ファイル: api.py プロジェクト: stjordanis/quetz
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
コード例 #6
0
ファイル: api.py プロジェクト: stjordanis/quetz
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)
コード例 #7
0
ファイル: api.py プロジェクト: beenje/quetz
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()
コード例 #8
0
ファイル: api.py プロジェクト: beenje/quetz
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
コード例 #9
0
ファイル: api.py プロジェクト: stjordanis/quetz
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()