Skip to content

Commit 1c76f4e

Browse files
committed
copy with progress bar
1 parent 54e93b9 commit 1c76f4e

File tree

1 file changed

+30
-10
lines changed
  • services/storage/src/simcore_service_storage/api/_worker_tasks

1 file changed

+30
-10
lines changed
Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,56 @@
1+
import functools
12
import logging
23
from typing import Any
34

45
from celery import Task
56
from models_library.api_schemas_storage.storage_schemas import FoldersBody
7+
from models_library.progress_bar import ProgressReport
68
from models_library.users import UserID
79
from servicelib.logging_utils import log_context
10+
from servicelib.progress_bar import ProgressBarData
811

912
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
1114
from ...simcore_s3_dsm import SimcoreS3DataManager
1215

1316
_logger = logging.getLogger(__name__)
1417

1518

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+
1630
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
1832
) -> dict[str, Any]:
33+
# _logger.error("%s", f"{task=}, {task.request.id=}, {task_id=}")
1934
with log_context(
2035
_logger,
2136
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}",
2338
):
2439
dsm = get_dsm_provider(get_fastapi_app(task.app)).get(
2540
SimcoreS3DataManager.get_location_id()
2641
)
2742
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+
)
3555

3656
return body.destination

0 commit comments

Comments
 (0)