async def handle_delete_runs( project_id: str, deployment_id: str, run_id: str, session: Session = Depends(database.session_scope), kubeflow_userid: Optional[str] = Header(database.DB_TENANT), ): """ Handles DELETE requests to /<run_id>. Parameters ---------- project_id : str deployment_id : str run_id : str session : sqlalchemy.orm.session.Session kubeflow_userid : fastapi.Header Returns ------- str """ 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) run_controller = RunController(session) run = run_controller.terminate_run(deployment_id=deployment_id) return run
async def handle_post_responses(project_id: str, deployment_id: str, body: dict = Body(...), session: Session = Depends(session_scope)): """ Handles POST requests to /. Parameters ---------- project_id : str deployment_id : str body : fastapi.body session : sqlalchemy.orm.session.Session Returns ------- fastapi.responses.JSONResponse """ 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) response_controller = ResponseController(session) response_controller.create_response(project_id=project_id, deployment_id=deployment_id, body=body) return JSONResponse( status_code=200, content={"message": "OK"}, )
async def handle_patch_comparisons( project_id: str, comparison_id: str, comparison: projects.schemas.comparison.ComparisonUpdate, session: Session = Depends(database.session_scope), kubeflow_userid: Optional[str] = Header(database.DB_TENANT), ): """ Handles PATCH requests to /<comparison_id>. Parameters ---------- project_id : str comparison_id : str comparison : projects.schemas.comparison.ComparisonUpdate session : sqlalchemy.orm.session.Session kubeflow_userid : fastapi.Header Returns ------- projects.schemas.comparison.Comparison """ project_controller = ProjectController(session, kubeflow_userid=kubeflow_userid) project_controller.raise_if_project_does_not_exist(project_id) comparison_controller = ComparisonController(session) comparison = comparison_controller.update_comparison( comparison_id=comparison_id, project_id=project_id, comparison=comparison, ) return comparison
async def handle_delete_monitorings(project_id: str, deployment_id: str, monitoring_id: str, session: Session = Depends(session_scope)): """ Handles DELETE requests to /<monitoring_id>. Parameters ---------- project_id : str deployment_id : str monitoring_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) deployment_controller = DeploymentController(session) deployment_controller.raise_if_deployment_does_not_exist(deployment_id) monitoring_controller = MonitoringController(session) response = monitoring_controller.delete_monitoring( uuid=monitoring_id, project_id=project_id, deployment_id=deployment_id) return response
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
async def handle_post_monitorings( project_id: str, deployment_id: str, monitoring: projects.schemas.monitoring.MonitoringCreate, background_tasks: BackgroundTasks, session: Session = Depends(database.session_scope), kubeflow_userid: Optional[str] = Header(database.DB_TENANT), ): """ Handles POST requests to /. Parameters ---------- project_id : str deployment_id : str monitoring : projects.schemas.monitoring.MonitoringCreate background_tasks : fastapi.BackgroundTasks session : sqlalchemy.orm.session.Session kubeflow_userid : fastapi.Header Returns ------- projects.schemas.monitoring.Monitoring """ 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) monitoring_controller = MonitoringController(session, background_tasks) monitoring = monitoring_controller.create_monitoring( deployment_id=deployment_id, monitoring=monitoring ) return monitoring
async def handle_get_run(project_id: str, experiment_id: str, run_id: str, session: Session = Depends(session_scope)): """ Handles GET requests to /<run_id>. Parameters ---------- project_id : str experiment_id : str run_id : str session : sqlalchemy.orm.session.Session Returns ------- projects.schemas.run.Run """ 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) run_controller = RunController(session) run = run_controller.get_run(project_id=project_id, experiment_id=experiment_id, run_id=run_id) return run
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
async def handle_delete_deployment( project_id: str, deployment_id: str, background_tasks: BackgroundTasks, session: Session = Depends(database.session_scope), kubeflow_userid: Optional[str] = Header(database.DB_TENANT), ): """ Handles DELETE requests to /<deployment_id>. Parameters ---------- project_id : str deployment_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) deployment_controller = DeploymentController( session, background_tasks, kubeflow_userid=kubeflow_userid) deployment = deployment_controller.delete_deployment( deployment_id=deployment_id, project_id=project_id) return deployment
async def handle_get_run(session, project_id: str, deployment_id: str, run_id: str): """ Handles GET requests to /<run_id>. Parameters ---------- project_id : str deployment_id : str run_id : str session : sqlalchemy.orm.session.Session Returns ------- str """ 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) run_controller = RunController(session) run = run_controller.get_run(project_id=project_id, deployment_id=deployment_id, run_id=run_id) return run
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
async def handle_post_runs(project_id: str, deployment_id: str, background_tasks: BackgroundTasks, session: Session = Depends(session_scope)): """ Handles POST requests to /. Parameters ---------- project_id : str deployment_id : str session : sqlalchemy.orm.session.Session Returns ------- str """ 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) run_controller = RunController(session, background_tasks) run = run_controller.create_run(project_id=project_id, deployment_id=deployment_id) return run
async def handle_list_runs(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 ------- str """ 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) run_controller = RunController(session) runs = run_controller.list_runs(project_id=project_id, deployment_id=deployment_id) return runs
async def handle_post_runs( project_id: str, deployment_id: str, background_tasks: BackgroundTasks, session: Session = Depends(database.session_scope), kubeflow_userid: Optional[str] = Header(database.DB_TENANT), ): """ Handles POST requests to /. Parameters ---------- project_id : str deployment_id : str background_tasks : fastapi.BackgroundTasks session : sqlalchemy.orm.session.Session kubeflow_userid : fastapi.Header Returns ------- str """ 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) run_controller = RunController(session) run = run_controller.create_run(deployment_id=deployment_id) return run
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
async def handle_post_deployments( project_id: str, deployment: projects.schemas.deployment.DeploymentCreate, background_tasks: BackgroundTasks, session: Session = Depends(database.session_scope), kubeflow_userid: Optional[str] = Header(database.DB_TENANT), ): """ Handles POST requests to /. Parameters ---------- project_id : str session : sqlalchemy.orm.session.Session kubeflow_userid : fastapi.Header Returns ------- projects.schemas.deployment.Deployment """ project_controller = ProjectController(session, kubeflow_userid=kubeflow_userid) project_controller.raise_if_project_does_not_exist(project_id) deployment_controller = DeploymentController( session, background_tasks, kubeflow_userid=kubeflow_userid) deployments = deployment_controller.create_deployment( project_id=project_id, deployment=deployment) return deployments
async def handle_list_monitorings( 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.monitoring.MonitoringList """ 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) monitoring_controller = MonitoringController(session) monitorings = monitoring_controller.list_monitorings(deployment_id=deployment_id) return monitorings
async def handle_get_deployment( project_id: str, deployment_id: str, session: Session = Depends(database.session_scope), kubeflow_userid: Optional[str] = Header(database.DB_TENANT), ): """ Handles GET requests to /<deployment_id>. Parameters ---------- project_id : str deployment_id : str session : sqlalchemy.orm.session.Session kubeflow_userid : fastapi.Header Returns ------- projects.schemas.deployment.Deployment """ project_controller = ProjectController(session, kubeflow_userid=kubeflow_userid) project_controller.raise_if_project_does_not_exist(project_id) deployment_controller = DeploymentController( session, kubeflow_userid=kubeflow_userid) deployment = deployment_controller.get_deployment( deployment_id=deployment_id) return deployment
async def handle_delete_monitorings( project_id: str, deployment_id: str, monitoring_id: str, session: Session = Depends(database.session_scope), kubeflow_userid: Optional[str] = Header(database.DB_TENANT), ): """ Handles DELETE requests to /<monitoring_id>. Parameters ---------- project_id : str deployment_id : str monitoring_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) deployment_controller = DeploymentController(session) deployment_controller.raise_if_deployment_does_not_exist(deployment_id) monitoring_controller = MonitoringController(session) response = monitoring_controller.delete_monitoring(uuid=monitoring_id) return response
async def handle_patch_comparisons(project_id: str, comparison_id: str, comparison: projects.schemas.comparison.ComparisonUpdate, session: Session = Depends(session_scope)): """ Handles PATCH requests to /<comparison_id>. Parameters ---------- project_id : str comparison_id : str comparison : projects.schemas.comparison.ComparisonUpdate session : sqlalchemy.orm.session.Session Returns ------- projects.schemas.comparison.Comparison """ project_controller = ProjectController(session) project_controller.raise_if_project_does_not_exist(project_id) comparison_controller = ComparisonController(session) comparison = comparison_controller.update_comparison( comparison_id=comparison_id, project_id=project_id, comparison=comparison, ) return comparison
async def handle_post_monitorings( project_id: str, deployment_id: str, monitoring: projects.schemas.monitoring.MonitoringCreate, session: Session = Depends(session_scope)): """ Handles POST requests to /. Parameters ---------- project_id : str deployment_id : str monitoring : projects.schemas.monitoring.MonitoringCreate session : sqlalchemy.orm.session.Session Returns ------- projects.schemas.monitoring.Monitoring """ 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) monitoring_controller = MonitoringController(session) monitoring = monitoring_controller.create_monitoring( project_id=project_id, deployment_id=deployment_id, monitoring=monitoring) return monitoring
async def handle_delete_comparisons(project_id: str, comparison_id: str, session: Session = Depends(session_scope)): """ Handles DELETE requests to /<comparison_id>. Parameters ---------- project_id : str comparison_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) comparison_controller = ComparisonController(session) comparison = comparison_controller.delete_comparison( comparison_id=comparison_id, project_id=project_id, ) return comparison
async def handle_list_logs( project_id: str, deployment_id: str, run_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 run_id : str session : sqlalchemy.orm.session.Session kubeflow_userid : fastapi.Header Returns ------- str """ 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) log_controller = LogController() logs = log_controller.list_logs(project_id=project_id, deployment_id=deployment_id, run_id=run_id) return logs
async def handle_list_projects(request: Request, session: Session = Depends(session_scope)): """ Handles GET requests to /. Parameters ---------- request : fastapi.Request session : sqlalchemy.orm.session.Session Returns ------- projects.schemas.project.ProjectList """ project_controller = ProjectController(session) filters = format_query_params(str(request.query_params)) order_by = filters.pop("order", None) page = filters.pop("page", 1) if page: page = int(page) page_size = filters.pop("page_size", 10) if page_size: page_size = int(page_size) projects = project_controller.list_projects(page=page, page_size=page_size, order_by=order_by, **filters) return projects
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
async def handle_post_prediction(project_id: str, deployment_id: str, file: UploadFile = File(...), session: Session = Depends(session_scope)): """ Handles POST request to /. Parameters ------- project_id : str deployment_id : str session : sqlalchemy.orm.session.Session Returns ------- dict """ 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) prediction_controller = PredictionController(session) prediction = prediction_controller.create_prediction( project_id=project_id, deployment_id=deployment_id, file=file.file) return prediction
async def handle_list_comparisons( project_id: str, session: Session = Depends(database.session_scope), kubeflow_userid: Optional[str] = Header(database.DB_TENANT), ): """ Handles GET requests to /. Parameters ---------- project_id : str session : sqlalchemy.orm.session.Session kubeflow_userid : fastapi.Header Returns ------- projects.schemas.comparison.ComparisonList """ project_controller = ProjectController(session, kubeflow_userid=kubeflow_userid) project_controller.raise_if_project_does_not_exist(project_id) comparison_controller = ComparisonController(session) comparisons = comparison_controller.list_comparisons(project_id=project_id) return comparisons
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
async def handle_list_metrics(project_id: str, experiment_id: str, run_id: str, operator_id: str, session: Session = Depends(session_scope)): """ Handles GET requests to /. Parameters ---------- project_id : str experiment_id : str run_id : str operator_id : str session : sqlalchemy.orm.session.Session Returns ------- list """ 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) run_controller = RunController(session) run_controller.raise_if_run_does_not_exist(run_id, experiment_id) metric_controller = MetricController(session) metrics = metric_controller.list_metrics(project_id=project_id, experiment_id=experiment_id, operator_id=operator_id, run_id=run_id) return metrics
async def handle_patch_deployment(project_id: str, deployment_id: str, deployment: projects.schemas.deployment.DeploymentUpdate, session: Session = Depends(session_scope)): """ Handles PATCH requests to /<deployment_id>. Parameters ---------- project_id : str deployment_id : str session : sqlalchemy.orm.session.Session Returns ------- projects.schemas.deployment.Deployment """ project_controller = ProjectController(session) project_controller.raise_if_project_does_not_exist(project_id) deployment_controller = DeploymentController(session) deployment = deployment_controller.update_deployment(deployment_id=deployment_id, project_id=project_id, deployment=deployment) return deployment