1919 AsyncJobNameData ,
2020)
2121from models_library .api_schemas_storage import STORAGE_RPC_NAMESPACE
22- from models_library .generics import Envelope
2322from pydantic import BaseModel
2423from servicelib .aiohttp import status
25- from servicelib .aiohttp .client_session import get_client_session
24+ from servicelib .aiohttp .long_running_tasks .server import (
25+ get_task_context ,
26+ get_tasks_manager ,
27+ )
2628from servicelib .aiohttp .requests_validation import (
2729 parse_request_path_parameters_as ,
2830)
3133
3234from .._meta import API_VTAG
3335from ..login .decorators import login_required
36+ from ..long_running_tasks import webserver_request_context_decorator
3437from ..models import RequestContext
3538from ..rabbitmq import get_rabbitmq_rpc_client
3639from ..security .decorators import permission_required
5154@login_required
5255@permission_required ("storage.files.*" )
5356@handle_export_data_exceptions
57+ @webserver_request_context_decorator
5458async def get_async_jobs (request : web .Request ) -> web .Response :
55- session = get_client_session (request .app )
56- async with session .request (
57- "GET" ,
58- request .url .with_path (str (request .app .router ["list_tasks" ].url_for ())),
59- cookies = request .cookies ,
60- ) as resp :
61- if resp .status != status .HTTP_200_OK :
62- return web .Response (
63- status = resp .status ,
64- body = await resp .read (),
65- content_type = resp .content_type ,
66- )
67- inprocess_tasks = (
68- Envelope [list [TaskGet ]].model_validate_json (await resp .text ()).data
69- )
70- assert inprocess_tasks is not None # nosec
59+ inprocess_task_manager = get_tasks_manager (request .app )
60+ inprocess_task_context = get_task_context (request )
61+ inprocess_tracked_tasks = inprocess_task_manager .list_tasks (inprocess_task_context )
7162
7263 _req_ctx = RequestContext .model_validate (request )
7364
@@ -92,7 +83,16 @@ async def get_async_jobs(request: web.Request) -> web.Response:
9283 )
9384 for job in user_async_jobs
9485 ]
95- + inprocess_tasks ,
86+ + [
87+ TaskGet (
88+ task_id = f"{ task .task_id } " ,
89+ task_name = task .task_name ,
90+ status_href = f"{ request .app .router ['get_task_status' ].url_for (task_id = task .task_id )} " ,
91+ abort_href = f"{ request .app .router ['cancel_and_delete_task' ].url_for (task_id = task .task_id )} " ,
92+ result_href = f"{ request .app .router ['get_task_result' ].url_for (task_id = task .task_id )} " ,
93+ )
94+ for task in inprocess_tracked_tasks
95+ ],
9696 status = status .HTTP_200_OK ,
9797 )
9898
0 commit comments