Skip to content

Commit fd1cae6

Browse files
author
Andrei Neagu
committed
replaced TasksManager with BaseLongRunningManager in lrt_api
1 parent cb90c9e commit fd1cae6

File tree

15 files changed

+340
-192
lines changed

15 files changed

+340
-192
lines changed

packages/service-library/src/servicelib/aiohttp/long_running_tasks/_routes.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ async def list_tasks(request: web.Request) -> web.Response:
2929
abort_href=f"{request.app.router['cancel_and_delete_task'].url_for(task_id=t.task_id)}",
3030
)
3131
for t in await lrt_api.list_tasks(
32-
long_running_manager.tasks_manager,
32+
long_running_manager,
3333
long_running_manager.get_task_context(request),
3434
)
3535
]
@@ -42,7 +42,7 @@ async def get_task_status(request: web.Request) -> web.Response:
4242
long_running_manager = get_long_running_manager(request.app)
4343

4444
task_status = await lrt_api.get_task_status(
45-
long_running_manager.tasks_manager,
45+
long_running_manager,
4646
long_running_manager.get_task_context(request),
4747
path_params.task_id,
4848
)
@@ -56,19 +56,19 @@ async def get_task_result(request: web.Request) -> web.Response | Any:
5656

5757
# NOTE: this might raise an exception that will be catched by the _error_handlers
5858
return await lrt_api.get_task_result(
59-
long_running_manager.tasks_manager,
59+
long_running_manager,
6060
long_running_manager.get_task_context(request),
6161
path_params.task_id,
6262
)
6363

6464

65-
@routes.delete("/{task_id}", name="cancel_and_delete_task")
66-
async def cancel_and_delete_task(request: web.Request) -> web.Response:
65+
@routes.delete("/{task_id}", name="remove_task")
66+
async def remove_task(request: web.Request) -> web.Response:
6767
path_params = parse_request_path_parameters_as(_PathParam, request)
6868
long_running_manager = get_long_running_manager(request.app)
6969

7070
await lrt_api.remove_task(
71-
long_running_manager.tasks_manager,
71+
long_running_manager,
7272
long_running_manager.get_task_context(request),
7373
path_params.task_id,
7474
)

packages/service-library/src/servicelib/aiohttp/long_running_tasks/_server.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ async def start_long_running_task(
6363
task_id = None
6464
try:
6565
task_id = await lrt_api.start_task(
66-
long_running_manager.tasks_manager,
66+
long_running_manager,
6767
registerd_task_name,
6868
fire_and_forget=fire_and_forget,
6969
task_context=task_context,
@@ -97,9 +97,7 @@ async def start_long_running_task(
9797
except asyncio.CancelledError:
9898
# remove the task, the client was disconnected
9999
if task_id:
100-
await lrt_api.remove_task(
101-
long_running_manager.tasks_manager, task_context, task_id
102-
)
100+
await lrt_api.remove_task(long_running_manager, task_context, task_id)
103101
raise
104102

105103

packages/service-library/src/servicelib/fastapi/long_running_tasks/_routes.py

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,7 @@ async def list_tasks(
2929
request.url_for("cancel_and_delete_task", task_id=t.task_id)
3030
),
3131
)
32-
for t in await lrt_api.list_tasks(
33-
long_running_manager.tasks_manager, task_context={}
34-
)
32+
for t in await lrt_api.list_tasks(long_running_manager, task_context={})
3533
]
3634

3735

@@ -52,7 +50,7 @@ async def get_task_status(
5250
) -> TaskStatus:
5351
assert request # nosec
5452
return await lrt_api.get_task_status(
55-
long_running_manager.tasks_manager, task_context={}, task_id=task_id
53+
long_running_manager, task_context={}, task_id=task_id
5654
)
5755

5856

@@ -75,28 +73,26 @@ async def get_task_result(
7573
) -> TaskResult | Any:
7674
assert request # nosec
7775
return await lrt_api.get_task_result(
78-
long_running_manager.tasks_manager, task_context={}, task_id=task_id
76+
long_running_manager, task_context={}, task_id=task_id
7977
)
8078

8179

8280
@router.delete(
8381
"/{task_id}",
84-
summary="Cancel and deletes a task",
82+
summary="Cancels and removes a task",
8583
response_model=None,
8684
status_code=status.HTTP_204_NO_CONTENT,
8785
responses={
8886
status.HTTP_404_NOT_FOUND: {"description": "Task does not exist"},
8987
},
9088
)
9189
@cancel_on_disconnect
92-
async def cancel_and_delete_task(
90+
async def remove_task(
9391
request: Request,
9492
task_id: TaskId,
9593
long_running_manager: Annotated[
9694
FastAPILongRunningManager, Depends(get_long_running_manager)
9795
],
9896
) -> None:
9997
assert request # nosec
100-
await lrt_api.remove_task(
101-
long_running_manager.tasks_manager, task_context={}, task_id=task_id
102-
)
98+
await lrt_api.remove_task(long_running_manager, task_context={}, task_id=task_id)

packages/service-library/src/servicelib/long_running_tasks/lrt_api.py

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,16 @@
44
from common_library.error_codes import create_error_code
55

66
from ..logging_errors import create_troubleshootting_log_kwargs
7+
from .base_long_running_manager import BaseLongRunningManager
78
from .errors import TaskNotCompletedError, TaskNotFoundError
89
from .models import TaskBase, TaskContext, TaskId, TaskStatus
9-
from .task import RegisteredTaskName, TasksManager
10+
from .task import RegisteredTaskName
1011

1112
_logger = logging.getLogger(__name__)
1213

1314

1415
async def start_task(
15-
tasks_manager: TasksManager,
16+
long_running_manager: BaseLongRunningManager,
1617
registered_task_name: RegisteredTaskName,
1718
*,
1819
unique: bool = False,
@@ -46,7 +47,7 @@ async def start_task(
4647
Returns:
4748
TaskId: the task unique identifier
4849
"""
49-
return await tasks_manager.start_task(
50+
return await long_running_manager.tasks_manager.start_task(
5051
registered_task_name,
5152
unique=unique,
5253
task_context=task_context,
@@ -57,28 +58,34 @@ async def start_task(
5758

5859

5960
async def list_tasks(
60-
tasks_manager: TasksManager, task_context: TaskContext
61+
long_running_manager: BaseLongRunningManager, task_context: TaskContext
6162
) -> list[TaskBase]:
62-
return await tasks_manager.list_tasks(with_task_context=task_context)
63+
return await long_running_manager.tasks_manager.list_tasks(
64+
with_task_context=task_context
65+
)
6366

6467

6568
async def get_task_status(
66-
tasks_manager: TasksManager, task_context: TaskContext, task_id: TaskId
69+
long_running_manager: BaseLongRunningManager,
70+
task_context: TaskContext,
71+
task_id: TaskId,
6772
) -> TaskStatus:
6873
"""returns the status of a task"""
69-
return await tasks_manager.get_task_status(
74+
return await long_running_manager.tasks_manager.get_task_status(
7075
task_id=task_id, with_task_context=task_context
7176
)
7277

7378

7479
async def get_task_result(
75-
tasks_manager: TasksManager, task_context: TaskContext, task_id: TaskId
80+
long_running_manager: BaseLongRunningManager,
81+
task_context: TaskContext,
82+
task_id: TaskId,
7683
) -> Any:
7784
try:
78-
task_result = await tasks_manager.get_task_result(
85+
task_result = await long_running_manager.tasks_manager.get_task_result(
7986
task_id, with_task_context=task_context
8087
)
81-
await tasks_manager.remove_task(
88+
await long_running_manager.tasks_manager.remove_task(
8289
task_id, with_task_context=task_context, reraise_errors=False
8390
)
8491
return task_result
@@ -94,14 +101,18 @@ async def get_task_result(
94101
),
95102
)
96103
# the task shall be removed in this case
97-
await tasks_manager.remove_task(
104+
await long_running_manager.tasks_manager.remove_task(
98105
task_id, with_task_context=task_context, reraise_errors=False
99106
)
100107
raise
101108

102109

103110
async def remove_task(
104-
tasks_manager: TasksManager, task_context: TaskContext, task_id: TaskId
111+
long_running_manager: BaseLongRunningManager,
112+
task_context: TaskContext,
113+
task_id: TaskId,
105114
) -> None:
106115
"""cancels and removes the task"""
107-
await tasks_manager.remove_task(task_id, with_task_context=task_context)
116+
await long_running_manager.tasks_manager.remove_task(
117+
task_id, with_task_context=task_context
118+
)

packages/service-library/tests/aiohttp/long_running_tasks/test_long_running_tasks.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ async def test_workflow(
127127
[
128128
("GET", "get_task_status"),
129129
("GET", "get_task_result"),
130-
("DELETE", "cancel_and_delete_task"),
130+
("DELETE", "remove_task"),
131131
],
132132
)
133133
async def test_get_task_wrong_task_id_raises_not_found(
@@ -188,7 +188,7 @@ async def test_cancel_task(
188188
task_id = await start_long_running_task(client)
189189

190190
# cancel the task
191-
delete_url = client.app.router["cancel_and_delete_task"].url_for(task_id=task_id)
191+
delete_url = client.app.router["remove_task"].url_for(task_id=task_id)
192192
result = await client.delete(f"{delete_url}")
193193
data, error = await assert_status(result, status.HTTP_204_NO_CONTENT)
194194
assert not data

packages/service-library/tests/fastapi/long_running_tasks/test_long_running_tasks.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ async def create_string_list_task(
8181
fail: bool = False,
8282
) -> TaskId:
8383
return await lrt_api.start_task(
84-
long_running_manager.tasks_manager,
84+
long_running_manager,
8585
_string_list_task.__name__,
8686
num_strings=num_strings,
8787
sleep_time=sleep_time,
@@ -205,7 +205,7 @@ async def test_workflow(
205205
[
206206
("GET", "get_task_status"),
207207
("GET", "get_task_result"),
208-
("DELETE", "cancel_and_delete_task"),
208+
("DELETE", "remove_task"),
209209
],
210210
)
211211
async def test_get_task_wrong_task_id_raises_not_found(
@@ -254,7 +254,7 @@ async def test_cancel_task(
254254
task_id = await start_long_running_task(app, client)
255255

256256
# cancel the task
257-
delete_url = app.url_path_for("cancel_and_delete_task", task_id=task_id)
257+
delete_url = app.url_path_for("remove_task", task_id=task_id)
258258
result = await client.delete(f"{delete_url}")
259259
assert result.status_code == status.HTTP_204_NO_CONTENT
260260

packages/service-library/tests/fastapi/long_running_tasks/test_long_running_tasks_context_manager.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,7 @@ async def create_task_user_defined_route(
7171
FastAPILongRunningManager, Depends(get_long_running_manager)
7272
],
7373
) -> TaskId:
74-
return await lrt_api.start_task(
75-
long_running_manager.tasks_manager, a_test_task.__name__
76-
)
74+
return await lrt_api.start_task(long_running_manager, a_test_task.__name__)
7775

7876
@router.get("/api/failing", status_code=status.HTTP_200_OK)
7977
async def create_task_which_fails(
@@ -82,7 +80,7 @@ async def create_task_which_fails(
8280
],
8381
) -> TaskId:
8482
return await lrt_api.start_task(
85-
long_running_manager.tasks_manager, a_failing_test_task.__name__
83+
long_running_manager, a_failing_test_task.__name__
8684
)
8785

8886
return router

packages/service-library/tests/long_running_tasks/conftest.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
TasksManager,
1414
)
1515
from settings_library.redis import RedisSettings
16-
from utils import TEST_CHECK_STALE_INTERVAL_S
16+
from utils import TEST_CHECK_STALE_INTERVAL_S, NoWebAppLongRunningManager
1717

1818
_logger = logging.getLogger(__name__)
1919

@@ -54,3 +54,20 @@ async def _(
5454
for manager in managers:
5555
with log_catch(_logger, reraise=False):
5656
await manager.teardown()
57+
58+
59+
@pytest.fixture
60+
def get_long_running_manager(
61+
get_tasks_manager: Callable[
62+
[RedisSettings, RedisNamespace | None], Awaitable[TasksManager]
63+
],
64+
) -> Callable[
65+
[RedisSettings, RedisNamespace | None], Awaitable[NoWebAppLongRunningManager]
66+
]:
67+
async def _(
68+
redis_settings: RedisSettings, namespace: RedisNamespace | None
69+
) -> NoWebAppLongRunningManager:
70+
tasks_manager = await get_tasks_manager(redis_settings, namespace)
71+
return NoWebAppLongRunningManager(tasks_manager)
72+
73+
return _

packages/service-library/tests/long_running_tasks/test_long_running_tasks__rabbit.py

Whitespace-only changes.

0 commit comments

Comments
 (0)