Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
The server only has to return a `TaskId` in the handler creating the long
running task.
"""

from ...long_running_tasks._errors import TaskAlreadyRunningError, TaskCancelledError
from ...long_running_tasks._models import ProgressMessage, ProgressPercent
from ...long_running_tasks._task import (
Expand All @@ -14,12 +15,17 @@
TasksManager,
TaskStatus,
)
from ._dependencies import create_task_name_from_request, get_tasks_manager
from ._dependencies import (
create_task_name_from_request,
get_task_context,
get_tasks_manager,
)
from ._routes import TaskGet
from ._server import setup, start_long_running_task

__all__: tuple[str, ...] = (
"create_task_name_from_request",
"get_task_context",
"get_tasks_manager",
"ProgressMessage",
"ProgressPercent",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from .models import RequestContext


def _webserver_request_context_decorator(handler: Handler):
def webserver_request_context_decorator(handler: Handler):
@wraps(handler)
async def _test_task_context_decorator(
request: web.Request,
Expand All @@ -31,5 +31,5 @@ def setup_long_running_tasks(app: web.Application) -> None:
app,
router_prefix=f"/{API_VTAG}/tasks-legacy",
handler_check_decorator=login_required,
task_request_context_decorator=_webserver_request_context_decorator,
task_request_context_decorator=webserver_request_context_decorator,
)
38 changes: 19 additions & 19 deletions services/web/server/src/simcore_service_webserver/tasks/_rest.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,12 @@
AsyncJobNameData,
)
from models_library.api_schemas_storage import STORAGE_RPC_NAMESPACE
from models_library.generics import Envelope
from pydantic import BaseModel
from servicelib.aiohttp import status
from servicelib.aiohttp.client_session import get_client_session
from servicelib.aiohttp.long_running_tasks.server import (
get_task_context,
get_tasks_manager,
)
from servicelib.aiohttp.requests_validation import (
parse_request_path_parameters_as,
)
Expand All @@ -31,6 +33,7 @@

from .._meta import API_VTAG
from ..login.decorators import login_required
from ..long_running_tasks import webserver_request_context_decorator
from ..models import RequestContext
from ..rabbitmq import get_rabbitmq_rpc_client
from ..security.decorators import permission_required
Expand All @@ -51,23 +54,11 @@
@login_required
@permission_required("storage.files.*")
@handle_export_data_exceptions
@webserver_request_context_decorator
async def get_async_jobs(request: web.Request) -> web.Response:
session = get_client_session(request.app)
async with session.request(
"GET",
request.url.with_path(str(request.app.router["list_tasks"].url_for())),
cookies=request.cookies,
) as resp:
if resp.status != status.HTTP_200_OK:
return web.Response(
status=resp.status,
body=await resp.read(),
content_type=resp.content_type,
)
inprocess_tasks = (
Envelope[list[TaskGet]].model_validate_json(await resp.text()).data
)
assert inprocess_tasks is not None # nosec
inprocess_task_manager = get_tasks_manager(request.app)
inprocess_task_context = get_task_context(request)
inprocess_tracked_tasks = inprocess_task_manager.list_tasks(inprocess_task_context)

_req_ctx = RequestContext.model_validate(request)

Expand All @@ -92,7 +83,16 @@ async def get_async_jobs(request: web.Request) -> web.Response:
)
for job in user_async_jobs
]
+ inprocess_tasks,
+ [
TaskGet(
task_id=f"{task.task_id}",
task_name=task.task_name,
status_href=f"{request.app.router['get_task_status'].url_for(task_id=task.task_id)}",
abort_href=f"{request.app.router['cancel_and_delete_task'].url_for(task_id=task.task_id)}",
result_href=f"{request.app.router['get_task_result'].url_for(task_id=task.task_id)}",
)
for task in inprocess_tracked_tasks
],
status=status.HTTP_200_OK,
)

Expand Down
Loading