コード例 #1
0
ファイル: schedules.py プロジェクト: Hedingber/mlrun
def create_schedule(
        project: str,
        schedule: schemas.ScheduleInput,
        auth_verifier: deps.AuthVerifierDep = Depends(deps.AuthVerifierDep),
        db_session: Session = Depends(deps.get_db_session),
):
    mlrun.api.utils.singletons.project_member.get_project_member(
    ).ensure_project(db_session, project, auth_info=auth_verifier.auth_info)
    mlrun.api.utils.clients.opa.Client().query_project_resource_permissions(
        mlrun.api.schemas.AuthorizationResourceTypes.schedule,
        project,
        schedule.name,
        mlrun.api.schemas.AuthorizationAction.create,
        auth_verifier.auth_info,
    )
    get_scheduler().create_schedule(
        db_session,
        auth_verifier.auth_info,
        project,
        schedule.name,
        schedule.kind,
        schedule.scheduled_object,
        schedule.cron_trigger,
        labels=schedule.labels,
        concurrency_limit=schedule.concurrency_limit,
    )
    return Response(status_code=HTTPStatus.CREATED.value)
コード例 #2
0
def create_schedule(
        project: str,
        schedule: schemas.ScheduleInput,
        auth_info: mlrun.api.schemas.AuthInfo = Depends(
            deps.authenticate_request),
        db_session: Session = Depends(deps.get_db_session),
):
    mlrun.api.utils.singletons.project_member.get_project_member(
    ).ensure_project(db_session, project, auth_info=auth_info)
    mlrun.api.utils.auth.verifier.AuthVerifier(
    ).query_project_resource_permissions(
        mlrun.api.schemas.AuthorizationResourceTypes.schedule,
        project,
        schedule.name,
        mlrun.api.schemas.AuthorizationAction.create,
        auth_info,
    )
    if not auth_info.access_key:
        auth_info.access_key = schedule.credentials.access_key
    get_scheduler().create_schedule(
        db_session,
        auth_info,
        project,
        schedule.name,
        schedule.kind,
        schedule.scheduled_object,
        schedule.cron_trigger,
        schedule.labels,
        schedule.concurrency_limit,
    )
    return Response(status_code=HTTPStatus.CREATED.value)
コード例 #3
0
def update_schedule(
        project: str,
        name: str,
        schedule: schemas.ScheduleUpdate,
        auth_info: mlrun.api.schemas.AuthInfo = Depends(
            deps.authenticate_request),
        db_session: Session = Depends(deps.get_db_session),
):
    mlrun.api.utils.auth.verifier.AuthVerifier(
    ).query_project_resource_permissions(
        mlrun.api.schemas.AuthorizationResourceTypes.schedule,
        project,
        name,
        mlrun.api.schemas.AuthorizationAction.update,
        auth_info,
    )
    if not auth_info.access_key:
        auth_info.access_key = schedule.credentials.access_key
    get_scheduler().update_schedule(
        db_session,
        auth_info,
        project,
        name,
        schedule.scheduled_object,
        schedule.cron_trigger,
        labels=schedule.labels,
    )
    return Response(status_code=HTTPStatus.OK.value)
コード例 #4
0
ファイル: schedules.py プロジェクト: omesser/mlrun
def delete_schedule(
        project: str,
        name: str,
        db_session: Session = Depends(deps.get_db_session),
):
    get_scheduler().delete_schedule(db_session, project, name)
    return Response(status_code=HTTPStatus.NO_CONTENT.value)
コード例 #5
0
ファイル: utils.py プロジェクト: michaelk-igz/mlrun
def _submit_run(db_session: Session, auth_info: mlrun.api.schemas.AuthInfo,
                data) -> typing.Tuple[str, str, str, typing.Dict]:
    """
    :return: Tuple with:
        1. str of the project of the run
        2. str of the kind of the function of the run
        3. str of the uid of the run that started execution (None when it was scheduled)
        4. dict of the response info
    """
    run_uid = None
    project = None
    try:
        fn, task = _parse_submit_run_body(db_session, auth_info, data)
        run_db = get_run_db_instance(db_session, auth_info.session)
        fn.set_db_connection(run_db, True)
        logger.info("Submitting run", function=fn.to_dict(), task=task)
        # fn.spec.rundb = "http://mlrun-api:8080"
        schedule = data.get("schedule")
        if schedule:
            cron_trigger = schedule
            if isinstance(cron_trigger, dict):
                cron_trigger = schemas.ScheduleCronTrigger(**cron_trigger)
            schedule_labels = task["metadata"].get("labels")
            get_scheduler().create_schedule(
                db_session,
                auth_info,
                task["metadata"]["project"],
                task["metadata"]["name"],
                schemas.ScheduleKinds.job,
                data,
                cron_trigger,
                schedule_labels,
            )
            project = task["metadata"]["project"]

            response = {
                "schedule": schedule,
                "project": task["metadata"]["project"],
                "name": task["metadata"]["name"],
            }
        else:
            run = fn.run(task, watch=False)
            run_uid = run.metadata.uid
            project = run.metadata.project
            if run:
                response = run.to_dict()

    except HTTPException:
        logger.error(traceback.format_exc())
        raise
    except mlrun.errors.MLRunHTTPStatusError:
        raise
    except Exception as err:
        logger.error(traceback.format_exc())
        log_and_raise(HTTPStatus.BAD_REQUEST.value,
                      reason=f"runtime error: {err}")

    logger.info("Run submission succeeded", response=response)
    return project, fn.kind, run_uid, {"data": response}
コード例 #6
0
ファイル: schedules.py プロジェクト: omesser/mlrun
def update_schedule(
        project: str,
        name: str,
        schedule: schemas.ScheduleUpdate,
        db_session: Session = Depends(deps.get_db_session),
):
    get_scheduler().update_schedule(
        db_session,
        project,
        name,
        schedule.scheduled_object,
        schedule.cron_trigger,
        labels=schedule.labels,
    )
    return Response(status_code=HTTPStatus.OK.value)
コード例 #7
0
ファイル: schedules.py プロジェクト: Hedingber/mlrun
def delete_schedule(
        project: str,
        name: str,
        auth_verifier: deps.AuthVerifierDep = Depends(deps.AuthVerifierDep),
        db_session: Session = Depends(deps.get_db_session),
):
    mlrun.api.utils.clients.opa.Client().query_project_resource_permissions(
        mlrun.api.schemas.AuthorizationResourceTypes.schedule,
        project,
        name,
        mlrun.api.schemas.AuthorizationAction.delete,
        auth_verifier.auth_info,
    )
    get_scheduler().delete_schedule(db_session, project, name)
    return Response(status_code=HTTPStatus.NO_CONTENT.value)
コード例 #8
0
def create_schedule(
    project: str,
    schedule: schemas.ScheduleInput,
    db_session: Session = Depends(deps.get_db_session),
):
    get_scheduler().create_schedule(
        db_session,
        project,
        schedule.name,
        schedule.kind,
        schedule.scheduled_object,
        schedule.cron_trigger,
        labels={label.name: label.value for label in schedule.labels},
    )
    return Response(status_code=HTTPStatus.CREATED.value)
コード例 #9
0
ファイル: schedules.py プロジェクト: Hedingber/mlrun
def list_schedules(
        project: str,
        name: str = None,
        labels: str = None,
        kind: schemas.ScheduleKinds = None,
        include_last_run: bool = False,
        auth_verifier: deps.AuthVerifierDep = Depends(deps.AuthVerifierDep),
        db_session: Session = Depends(deps.get_db_session),
):
    mlrun.api.utils.clients.opa.Client().query_project_permissions(
        project,
        mlrun.api.schemas.AuthorizationAction.read,
        auth_verifier.auth_info,
    )
    schedules = get_scheduler().list_schedules(
        db_session,
        project,
        name,
        kind,
        labels,
        include_last_run=include_last_run,
    )
    filtered_schedules = mlrun.api.utils.clients.opa.Client(
    ).filter_project_resources_by_permissions(
        mlrun.api.schemas.AuthorizationResourceTypes.schedule,
        schedules.schedules,
        lambda schedule: (
            schedule.project,
            schedule.name,
        ),
        auth_verifier.auth_info,
    )
    schedules.schedules = filtered_schedules
    return schedules
コード例 #10
0
def list_schedules(
        project: str,
        name: str = None,
        labels: str = None,
        kind: schemas.ScheduleKinds = None,
        include_last_run: bool = False,
        include_credentials: bool = fastapi.Query(False,
                                                  alias="include-credentials"),
        auth_info: mlrun.api.schemas.AuthInfo = Depends(
            deps.authenticate_request),
        db_session: Session = Depends(deps.get_db_session),
):
    mlrun.api.utils.auth.verifier.AuthVerifier().query_project_permissions(
        project,
        mlrun.api.schemas.AuthorizationAction.read,
        auth_info,
    )
    schedules = get_scheduler().list_schedules(db_session, project, name, kind,
                                               labels, include_last_run,
                                               include_credentials)
    filtered_schedules = mlrun.api.utils.auth.verifier.AuthVerifier(
    ).filter_project_resources_by_permissions(
        mlrun.api.schemas.AuthorizationResourceTypes.schedule,
        schedules.schedules,
        lambda schedule: (
            schedule.project,
            schedule.name,
        ),
        auth_info,
    )
    schedules.schedules = filtered_schedules
    return schedules
コード例 #11
0
def get_schedule(
    project: str,
    name: str,
    include_last_run: bool = False,
    db_session: Session = Depends(deps.get_db_session),
):
    return get_scheduler().get_schedule(
        db_session, project, name, include_last_run=include_last_run
    )
コード例 #12
0
ファイル: schedules.py プロジェクト: mlrun/mlrun
def create_schedule(
    project: str,
    schedule: schemas.ScheduleInput,
    auth_verifier: deps.AuthVerifier = Depends(deps.AuthVerifier),
    db_session: Session = Depends(deps.get_db_session),
):
    get_scheduler().create_schedule(
        db_session,
        auth_verifier.auth_info,
        project,
        schedule.name,
        schedule.kind,
        schedule.scheduled_object,
        schedule.cron_trigger,
        labels=schedule.labels,
        concurrency_limit=schedule.concurrency_limit,
    )
    return Response(status_code=HTTPStatus.CREATED.value)
コード例 #13
0
def list_schedules(
    project: str,
    name: str = None,
    labels: str = None,
    kind: schemas.ScheduleKinds = None,
    include_last_run: bool = False,
    db_session: Session = Depends(deps.get_db_session),
):
    return get_scheduler().list_schedules(
        db_session, project, name, labels, kind, include_last_run=include_last_run
    )
コード例 #14
0
def delete_schedules(
        project: str,
        auth_info: mlrun.api.schemas.AuthInfo = Depends(
            deps.authenticate_request),
        db_session: Session = Depends(deps.get_db_session),
):
    schedules = get_scheduler().list_schedules(
        db_session,
        project,
    )
    mlrun.api.utils.auth.verifier.AuthVerifier(
    ).query_project_resources_permissions(
        mlrun.api.schemas.AuthorizationResourceTypes.schedule,
        schedules.schedules,
        lambda schedule: (schedule.project, schedule.name),
        mlrun.api.schemas.AuthorizationAction.delete,
        auth_info,
    )
    get_scheduler().delete_schedules(db_session, project)
    return Response(status_code=HTTPStatus.NO_CONTENT.value)
コード例 #15
0
ファイル: schedules.py プロジェクト: Hedingber/mlrun
def update_schedule(
        project: str,
        name: str,
        schedule: schemas.ScheduleUpdate,
        auth_verifier: deps.AuthVerifierDep = Depends(deps.AuthVerifierDep),
        db_session: Session = Depends(deps.get_db_session),
):
    mlrun.api.utils.clients.opa.Client().query_project_resource_permissions(
        mlrun.api.schemas.AuthorizationResourceTypes.schedule,
        project,
        name,
        mlrun.api.schemas.AuthorizationAction.update,
        auth_verifier.auth_info,
    )
    get_scheduler().update_schedule(
        db_session,
        auth_verifier.auth_info,
        project,
        name,
        schedule.scheduled_object,
        schedule.cron_trigger,
        labels=schedule.labels,
    )
    return Response(status_code=HTTPStatus.OK.value)
コード例 #16
0
ファイル: schedules.py プロジェクト: Hedingber/mlrun
def get_schedule(
        project: str,
        name: str,
        include_last_run: bool = False,
        auth_verifier: deps.AuthVerifierDep = Depends(deps.AuthVerifierDep),
        db_session: Session = Depends(deps.get_db_session),
):
    schedule = get_scheduler().get_schedule(
        db_session,
        project,
        name,
        include_last_run=include_last_run,
    )
    mlrun.api.utils.clients.opa.Client().query_project_resource_permissions(
        mlrun.api.schemas.AuthorizationResourceTypes.schedule,
        project,
        name,
        mlrun.api.schemas.AuthorizationAction.read,
        auth_verifier.auth_info,
    )
    return schedule
コード例 #17
0
def get_schedule(
        project: str,
        name: str,
        include_last_run: bool = False,
        include_credentials: bool = fastapi.Query(False,
                                                  alias="include-credentials"),
        auth_info: mlrun.api.schemas.AuthInfo = Depends(
            deps.authenticate_request),
        db_session: Session = Depends(deps.get_db_session),
):
    schedule = get_scheduler().get_schedule(db_session, project, name,
                                            include_last_run,
                                            include_credentials)
    mlrun.api.utils.auth.verifier.AuthVerifier(
    ).query_project_resource_permissions(
        mlrun.api.schemas.AuthorizationResourceTypes.schedule,
        project,
        name,
        mlrun.api.schemas.AuthorizationAction.read,
        auth_info,
    )
    return schedule
コード例 #18
0
async def shutdown_event():
    if get_project_member():
        get_project_member().shutdown()
    cancel_all_periodic_functions()
    if get_scheduler():
        await get_scheduler().stop()