From 13afd5b35a2ac460a27ec05510fa2d2100ab536f Mon Sep 17 00:00:00 2001 From: sanderegg <35365065+sanderegg@users.noreply.github.com> Date: Tue, 30 Aug 2022 09:23:18 +0200 Subject: [PATCH] migrate to new long running task --- .../long_running_tasks.py | 35 +----------------- .../projects/projects_handlers_crud.py | 37 +++++-------------- 2 files changed, 11 insertions(+), 61 deletions(-) diff --git a/services/web/server/src/simcore_service_webserver/long_running_tasks.py b/services/web/server/src/simcore_service_webserver/long_running_tasks.py index 65955c820fa8..c9871b91420d 100644 --- a/services/web/server/src/simcore_service_webserver/long_running_tasks.py +++ b/services/web/server/src/simcore_service_webserver/long_running_tasks.py @@ -1,5 +1,4 @@ from functools import wraps -from typing import Any from aiohttp import web from models_library.users import UserID @@ -8,14 +7,7 @@ from servicelib.aiohttp.long_running_tasks._server import ( RQT_LONG_RUNNING_TASKS_CONTEXT_KEY, ) -from servicelib.aiohttp.long_running_tasks.server import ( - TaskGet, - TaskProtocol, - create_task_name_from_request, - get_tasks_manager, - setup, - start_task, -) +from servicelib.aiohttp.long_running_tasks.server import setup from servicelib.aiohttp.typing_extension import Handler from ._constants import RQ_PRODUCT_KEY @@ -28,31 +20,6 @@ class _RequestContext(BaseModel): product_name: str = Field(..., alias=RQ_PRODUCT_KEY) -def start_task_with_context( - request: web.Request, task: TaskProtocol, **task_kwargs: Any -) -> TaskGet: - req_ctx = _RequestContext.parse_obj(request) - task_manager = get_tasks_manager(request.app) - task_name = create_task_name_from_request(request) - task_id = start_task( - task_manager, - task, - task_context=jsonable_encoder(req_ctx), - task_name=task_name, - **task_kwargs, - ) - status_url = request.app.router["get_task_status"].url_for(task_id=task_id) - result_url = request.app.router["get_task_result"].url_for(task_id=task_id) - abort_url = request.app.router["cancel_and_delete_task"].url_for(task_id=task_id) - return TaskGet( - task_id=task_id, - task_name=task_name, - status_href=f"{status_url}", - result_href=f"{result_url}", - abort_href=f"{abort_url}", - ) - - def _webserver_request_context_decorator(handler: Handler): @wraps(handler) async def _test_task_context_decorator( diff --git a/services/web/server/src/simcore_service_webserver/projects/projects_handlers_crud.py b/services/web/server/src/simcore_service_webserver/projects/projects_handlers_crud.py index a934662ffefe..e9b8e8606b0b 100644 --- a/services/web/server/src/simcore_service_webserver/projects/projects_handlers_crud.py +++ b/services/web/server/src/simcore_service_webserver/projects/projects_handlers_crud.py @@ -21,9 +21,8 @@ from models_library.utils.fastapi_encoders import jsonable_encoder from pydantic import BaseModel, Extra, Field, NonNegativeInt, parse_obj_as from servicelib.aiohttp.long_running_tasks.server import ( - TaskGet, TaskProgress, - get_tasks_manager, + start_long_running_task, ) from servicelib.aiohttp.requests_validation import ( parse_request_path_parameters_as, @@ -39,7 +38,6 @@ from .._meta import api_version_prefix as VTAG from ..application_settings import get_settings from ..login.decorators import RQT_USERID_KEY, login_required -from ..long_running_tasks import start_task_with_context from ..resource_manager.websocket_manager import PROJECT_ID_KEY, managed_resource from ..rest_constants import RESPONSE_MODEL_POLICY from ..security_api import check_permission @@ -132,30 +130,15 @@ async def create_projects(request: web.Request): if query_params.as_template: # create template from await check_permission(request, "project.template.create") - task_get: Optional[TaskGet] = None - try: - task_get = start_task_with_context( - request, - _create_projects, - app=request.app, - query_params=query_params, - user_id=req_ctx.user_id, - predefined_project=predefined_project, - ) - - return web.json_response( - data={"data": task_get}, - status=web.HTTPAccepted.status_code, - dumps=json_dumps, - ) - except asyncio.CancelledError: - # cancel the task, the client has disconnected - if task_get: - task_manager = get_tasks_manager(request.app) - await task_manager.cancel_task( - task_get.task_id, with_task_context=jsonable_encoder(req_ctx) - ) - raise + return start_long_running_task( + request, + _create_projects, + task_context=jsonable_encoder(req_ctx), + app=request.app, + query_params=query_params, + user_id=req_ctx.user_id, + predefined_project=predefined_project, + ) async def _init_project_from_request(