|
| 1 | +import functools |
1 | 2 | import logging |
2 | 3 | from typing import Any |
3 | 4 |
|
4 | 5 | from celery import Task |
5 | 6 | from models_library.api_schemas_storage.storage_schemas import FoldersBody |
| 7 | +from models_library.progress_bar import ProgressReport |
6 | 8 | from models_library.users import UserID |
7 | 9 | from servicelib.logging_utils import log_context |
| 10 | +from servicelib.progress_bar import ProgressBarData |
8 | 11 |
|
9 | 12 | from ...dsm import get_dsm_provider |
10 | | -from ...modules.celery.utils import get_fastapi_app |
| 13 | +from ...modules.celery.utils import get_celery_worker, get_fastapi_app |
11 | 14 | from ...simcore_s3_dsm import SimcoreS3DataManager |
12 | 15 |
|
13 | 16 | _logger = logging.getLogger(__name__) |
14 | 17 |
|
15 | 18 |
|
| 19 | +def _task_progress_cb(task: Task, task_id: str, report: ProgressReport) -> None: |
| 20 | + _logger.error("task_progress_cb %s %s", task.name, task_id) |
| 21 | + worker = get_celery_worker(task.app) |
| 22 | + assert task.name # nosec |
| 23 | + worker.set_task_progress( |
| 24 | + task_name=task.name, |
| 25 | + task_id=task_id, |
| 26 | + report=report, |
| 27 | + ) |
| 28 | + |
| 29 | + |
16 | 30 | async def deep_copy_files_from_project( |
17 | | - task: Task, user_id: UserID, body: FoldersBody |
| 31 | + task: Task, task_id: str, user_id: UserID, body: FoldersBody |
18 | 32 | ) -> dict[str, Any]: |
| 33 | + # _logger.error("%s", f"{task=}, {task.request.id=}, {task_id=}") |
19 | 34 | with log_context( |
20 | 35 | _logger, |
21 | 36 | logging.INFO, |
22 | | - msg=f"copying {body.source['uuid']} -> {body.destination['uuid']}", |
| 37 | + msg=f"copying {body.source['uuid']} -> {body.destination['uuid']} with {task.request.id}", |
23 | 38 | ): |
24 | 39 | dsm = get_dsm_provider(get_fastapi_app(task.app)).get( |
25 | 40 | SimcoreS3DataManager.get_location_id() |
26 | 41 | ) |
27 | 42 | assert isinstance(dsm, SimcoreS3DataManager) # nosec |
28 | | - await dsm.deep_copy_project_simcore_s3( |
29 | | - user_id, |
30 | | - body.source, |
31 | | - body.destination, |
32 | | - body.nodes_map, |
33 | | - task_progress=None, # TODO: fix by using a real progress bar |
34 | | - ) |
| 43 | + async with ProgressBarData( |
| 44 | + num_steps=1, |
| 45 | + description="copying files", |
| 46 | + progress_report_cb=functools.partial(_task_progress_cb, task, task_id), |
| 47 | + ) as task_progress: |
| 48 | + await dsm.deep_copy_project_simcore_s3( |
| 49 | + user_id, |
| 50 | + body.source, |
| 51 | + body.destination, |
| 52 | + body.nodes_map, |
| 53 | + task_progress=task_progress, |
| 54 | + ) |
35 | 55 |
|
36 | 56 | return body.destination |
0 commit comments