|
| 1 | +import logging |
1 | 2 | from typing import Any |
2 | 3 |
|
| 4 | +from common_library.error_codes import create_error_code |
| 5 | +from servicelib.logging_errors import create_troubleshotting_log_kwargs |
| 6 | + |
| 7 | +from .errors import TaskNotCompletedError, TaskNotFoundError |
3 | 8 | from .models import TaskBase, TaskId, TaskStatus |
4 | 9 | from .task import RegisteredTaskName, TaskContext, TasksManager |
5 | 10 |
|
| 11 | +_logger = logging.getLogger(__name__) |
| 12 | + |
6 | 13 |
|
7 | 14 | async def start_task( |
8 | 15 | tasks_manager: TasksManager, |
@@ -67,16 +74,30 @@ def get_task_status( |
67 | 74 | async def get_task_result( |
68 | 75 | tasks_manager: TasksManager, task_context: TaskContext | None, task_id: TaskId |
69 | 76 | ) -> Any: |
70 | | - """retruns the result of a task, which is directly whatever the remove hanlder returned""" |
71 | 77 | try: |
72 | | - return tasks_manager.get_task_result( |
73 | | - task_id=task_id, with_task_context=task_context |
| 78 | + task_result = tasks_manager.get_task_result( |
| 79 | + task_id, with_task_context=task_context |
| 80 | + ) |
| 81 | + await tasks_manager.remove_task( |
| 82 | + task_id, with_task_context=task_context, reraise_errors=False |
| 83 | + ) |
| 84 | + return task_result |
| 85 | + except (TaskNotFoundError, TaskNotCompletedError): |
| 86 | + raise |
| 87 | + except Exception as exc: |
| 88 | + _logger.exception( |
| 89 | + **create_troubleshotting_log_kwargs( |
| 90 | + user_error_msg=f"{task_id=} raised an exception", |
| 91 | + error=exc, |
| 92 | + error_code=create_error_code(exc), |
| 93 | + error_context={"task_context": task_context, "task_id": task_id}, |
| 94 | + ), |
74 | 95 | ) |
75 | | - finally: |
76 | | - # the task is always removed even if an error occurs |
| 96 | + # the task shall be removed in this case |
77 | 97 | await tasks_manager.remove_task( |
78 | 98 | task_id, with_task_context=task_context, reraise_errors=False |
79 | 99 | ) |
| 100 | + raise |
80 | 101 |
|
81 | 102 |
|
82 | 103 | async def remove_task( |
|
0 commit comments