示例#1
0
async def handle_patch_operator(project_id: str,
                                deployment_id: str,
                                operator_id: str,
                                operator: projects.schemas.operator.OperatorUpdate,
                                session: Session = Depends(session_scope)):
    """
    Handles PATCH requests to /<deployment_id>/operators/<operator_id>.

    Parameters
    ----------
    project_id : str
    deployment_id : str
    operator_id : str
    session : sqlalchemy.orm.session.Session

    Returns
    -------
    projects.schemas.operator.Operator
    """
    project_controller = ProjectController(session)
    project_controller.raise_if_project_does_not_exist(project_id)

    deployment_controller = DeploymentController(session)
    deployment_controller.raise_if_deployment_does_not_exist(deployment_id)

    operator_controller = OperatorController(session)
    operator = operator_controller.update_operator(operator_id=operator_id,
                                                   project_id=project_id,
                                                   deployment_id=deployment_id,
                                                   operator=operator)
    return operator
示例#2
0
async def handle_delete_operator(project_id: str,
                                 experiment_id: str,
                                 operator_id: str,
                                 session: Session = Depends(session_scope)):
    """
    Handles DELETE requests to /<operator_id>.

    Parameters
    ----------
    project_id : str
    experiment_id : str
    operator_id : str
    session : sqlalchemy.orm.session.Session

    Returns
    -------
    projects.schemas.message.Message
    """
    project_controller = ProjectController(session)
    project_controller.raise_if_project_does_not_exist(project_id)

    experiment_controller = ExperimentController(session)
    experiment_controller.raise_if_experiment_does_not_exist(experiment_id)

    operator_controller = OperatorController(session)
    operator = operator_controller.delete_operator(operator_id=operator_id,
                                                   project_id=project_id,
                                                   experiment_id=experiment_id)
    return operator
示例#3
0
async def handle_list_operators(project_id: str,
                                deployment_id: str,
                                session: Session = Depends(session_scope)):
    """
    Handles GET requests to /.

    Parameters
    ----------
    project_id : str
    deployment_id : str
    session : sqlalchemy.orm.session.Session

    Returns
    -------
    projects.schemas.operator.OperatorList
    """
    project_controller = ProjectController(session)
    project_controller.raise_if_project_does_not_exist(project_id)

    deployment_controller = DeploymentController(session)
    deployment_controller.raise_if_deployment_does_not_exist(deployment_id)

    operator_controller = OperatorController(session)
    operators = operator_controller.list_operators(project_id=project_id,
                                                   deployment_id=deployment_id)
    return operators
示例#4
0
async def handle_post_operator(
    project_id: str,
    experiment_id: str,
    operator: projects.schemas.operator.OperatorCreate,
    session: Session = Depends(session_scope)):
    """
    Handles POST requests to /.

    Parameters
    ----------
    project_id : str
    experiment_id : str
    operator : projects.schemas.operator.OperatorCreate
    session : sqlalchemy.orm.session.Session

    Returns
    -------
    projects.schemas.operator.Operator
    """
    project_controller = ProjectController(session)
    project_controller.raise_if_project_does_not_exist(project_id)

    experiment_controller = ExperimentController(session)
    experiment_controller.raise_if_experiment_does_not_exist(experiment_id)

    operator_controller = OperatorController(session)
    operator = operator_controller.create_operator(project_id=project_id,
                                                   experiment_id=experiment_id,
                                                   operator=operator)
    return operator
示例#5
0
async def handle_post_operator(
        project_id: str,
        experiment_id: str,
        operator: projects.schemas.operator.OperatorCreate,
        session: Session = Depends(database.session_scope),
        kubeflow_userid: Optional[str] = Header(database.DB_TENANT),
):
    """
    Handles POST requests to /.

    Parameters
    ----------
    project_id : str
    experiment_id : str
    operator : projects.schemas.operator.OperatorCreate
    session : sqlalchemy.orm.session.Session
    kubeflow_userid : fastapi.Header

    Returns
    -------
    projects.schemas.operator.Operator
    """
    project_controller = ProjectController(session,
                                           kubeflow_userid=kubeflow_userid)
    project_controller.raise_if_project_does_not_exist(project_id)

    experiment_controller = ExperimentController(session)
    experiment_controller.raise_if_experiment_does_not_exist(experiment_id)

    operator_controller = OperatorController(session)
    operator = operator_controller.create_operator(project_id=project_id,
                                                   experiment_id=experiment_id,
                                                   operator=operator)
    return operator
示例#6
0
async def handle_delete_operator(
        project_id: str,
        experiment_id: str,
        operator_id: str,
        session: Session = Depends(database.session_scope),
        kubeflow_userid: Optional[str] = Header(database.DB_TENANT),
):
    """
    Handles DELETE requests to /<operator_id>.

    Parameters
    ----------
    project_id : str
    experiment_id : str
    operator_id : str
    session : sqlalchemy.orm.session.Session
    kubeflow_userid : fastapi.Header

    Returns
    -------
    projects.schemas.message.Message
    """
    project_controller = ProjectController(session,
                                           kubeflow_userid=kubeflow_userid)
    project_controller.raise_if_project_does_not_exist(project_id)

    experiment_controller = ExperimentController(session)
    experiment_controller.raise_if_experiment_does_not_exist(experiment_id)

    operator_controller = OperatorController(session)
    operator = operator_controller.delete_operator(operator_id=operator_id,
                                                   project_id=project_id,
                                                   experiment_id=experiment_id)
    return operator
示例#7
0
async def handle_list_operators(
        project_id: str,
        deployment_id: str,
        session: Session = Depends(database.session_scope),
        kubeflow_userid: Optional[str] = Header(database.DB_TENANT),
):
    """
    Handles GET requests to /.

    Parameters
    ----------
    project_id : str
    deployment_id : str
    session : sqlalchemy.orm.session.Session
    kubeflow_userid : fastapi.Header

    Returns
    -------
    projects.schemas.operator.OperatorList
    """
    project_controller = ProjectController(session,
                                           kubeflow_userid=kubeflow_userid)
    project_controller.raise_if_project_does_not_exist(project_id)

    deployment_controller = DeploymentController(session)
    deployment_controller.raise_if_deployment_does_not_exist(deployment_id)

    operator_controller = OperatorController(session)
    operators = operator_controller.list_operators(project_id=project_id,
                                                   deployment_id=deployment_id)
    return operators
示例#8
0
async def handle_get_dataset(
        project_id: str,
        experiment_id: str,
        run_id: str,
        operator_id: str,
        page: Optional[int] = 1,
        page_size: Optional[int] = 10,
        accept: Optional[str] = Header(None),
        session: Session = Depends(database.session_scope),
        kubeflow_userid: Optional[str] = Header(database.DB_TENANT),
):
    """
    Handles GET requests to /.

    Parameters
    ----------
    project_id : str
    experiment_id : str
    run_id : str
    operator_id : str
    session : sqlalchemy.orm.session.Session
    kubeflow_userid : fastapi.Header

    Returns
    -------
    List
    """
    project_controller = ProjectController(session,
                                           kubeflow_userid=kubeflow_userid)
    project_controller.raise_if_project_does_not_exist(project_id)

    experiment_controller = ExperimentController(session)
    experiment_controller.raise_if_experiment_does_not_exist(experiment_id)

    operator_controller = OperatorController(session)
    operator_controller.raise_if_operator_does_not_exist(operator_id)

    run_controller = RunController(session)
    run_controller.raise_if_run_does_not_exist(run_id, experiment_id)

    dataset_controller = DatasetController(session)
    datasets = dataset_controller.get_dataset(
        project_id=project_id,
        experiment_id=experiment_id,
        run_id=run_id,
        operator_id=operator_id,
        page=page,
        page_size=page_size,
        accept=accept,
    )
    return datasets
示例#9
0
async def handle_get_operator_results(
        project_id: str,
        experiment_id: str,
        run_id: str,
        operator_id: str,
        session: Session = Depends(database.session_scope),
        kubeflow_userid: Optional[str] = Header(database.DB_TENANT),
):
    """
    Handles GET requests to /operators/<operator_id>/results.

    Parameters
    ----------
    project_id : str
    experiment_id : str
    run_id: str
    operator_id: str
    session : sqlalchemy.orm.session.Session
    kubeflow_userid : fastapi.Header

    Returns
    -------
    starlette.responses.StreamingResponse]
        ZipFile of the operator_results
    """
    project_controller = ProjectController(session,
                                           kubeflow_userid=kubeflow_userid)
    project_controller.raise_if_project_does_not_exist(project_id)

    experiment_controller = ExperimentController(session)
    experiment_controller.raise_if_experiment_does_not_exist(experiment_id)

    operator_controller = OperatorController(session)
    operator_controller.raise_if_operator_does_not_exist(operator_id)

    run_controller = RunController(session)
    run_controller.raise_if_run_does_not_exist(run_id, experiment_id)

    result_controller = ResultController(session)
    results = result_controller.get_results(experiment_id=experiment_id,
                                            run_id=run_id,
                                            operator_id=operator_id)

    response = StreamingResponse(results,
                                 media_type="application/x-zip-compressed")
    response.headers[
        "Content-Disposition"] = "attachment; filename=results.zip"
    return response
示例#10
0
async def handle_experiment_operator_stream(experiment_id: str,
                                            session: Session = Depends(
                                                database.session_scope)):
    """
    Handle event source requests to /eventsource.

    Parameters
    ----------
    experiment_id : str
    session : sqlalchemy.orm.session.Session

    Returns
    -------
    EventSourceResponse
    """
    controller = OperatorController(session)
    stream = controller.watch_operator(experiment_id=experiment_id)

    return EventSourceResponse(stream)
示例#11
0
async def handle_patch_operator(
        project_id: str,
        deployment_id: str,
        operator_id: str,
        operator: projects.schemas.operator.OperatorUpdate,
        session: Session = Depends(database.session_scope),
        kubeflow_userid: Optional[str] = Header(database.DB_TENANT),
):
    """
    Handles PATCH requests to /<deployment_id>/operators/<operator_id>.

    Parameters
    ----------
    project_id : str
    deployment_id : str
    operator_id : str
    session : sqlalchemy.orm.session.Session
    kubeflow_userid : fastapi.Header

    Returns
    -------
    projects.schemas.operator.Operator
    """
    project_controller = ProjectController(session,
                                           kubeflow_userid=kubeflow_userid)
    project_controller.raise_if_project_does_not_exist(project_id)

    deployment_controller = DeploymentController(session)
    deployment_controller.raise_if_deployment_does_not_exist(deployment_id)

    operator_controller = OperatorController(session)
    operator = operator_controller.update_operator(
        operator_id=operator_id,
        project_id=project_id,
        deployment_id=deployment_id,
        operator=operator,
    )
    return operator
示例#12
0
async def handle_patch_parameter(
    project_id: str,
    experiment_id: str,
    operator_id: str,
    name: str,
    parameter: projects.schemas.operator.ParameterUpdate,
    session: Session = Depends(session_scope)):
    """
    Handles PATCH requests to /{name}.

    Parameters
    ----------
    project_id : str
    experiment_id : str
    operator_id : str
    name : str
    parameter : projects.schemas.Operator.ParameterUpdate
    session : sqlalchemy.orm.session.Session

    Returns
    -------
    projects.schemas.operator.Operator
    """
    project_controller = ProjectController(session)
    project_controller.raise_if_project_does_not_exist(project_id)

    experiment_controller = ExperimentController(session)
    experiment_controller.raise_if_experiment_does_not_exist(experiment_id)

    operator_controller = OperatorController(session)
    operator_controller.raise_if_operator_does_not_exist(operator_id)

    parameter_controller = OperatorParameterController(session)
    operator = parameter_controller.update_parameter(name=name,
                                                     operator_id=operator_id,
                                                     parameter=parameter)
    return operator