Skip to content

Commit 6f23903

Browse files
committed
added async task for completing upload of file
1 parent fb2ccf3 commit 6f23903

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import logging
2+
3+
from celery import Task # type: ignore[import-untyped]
4+
from models_library.api_schemas_storage.storage_schemas import (
5+
ETag,
6+
FileUploadCompletionBody,
7+
)
8+
from models_library.projects_nodes_io import LocationID, StorageFileID
9+
from models_library.users import UserID
10+
from servicelib.logging_utils import log_context
11+
12+
from ...dsm import get_dsm_provider
13+
from ...modules.celery.utils import get_fastapi_app
14+
15+
_logger = logging.getLogger(__name__)
16+
17+
18+
async def complete_upload_file(
19+
task: Task,
20+
user_id: UserID,
21+
location_id: LocationID,
22+
file_id: StorageFileID,
23+
body: FileUploadCompletionBody,
24+
) -> ETag | None:
25+
with log_context(
26+
_logger,
27+
logging.INFO,
28+
msg=f"completing upload of file {user_id=}, {location_id=}, {file_id=}",
29+
):
30+
dsm = get_dsm_provider(get_fastapi_app(task.app)).get(location_id)
31+
# NOTE: completing a multipart upload on AWS can take up to several minutes
32+
# if it returns slow we return a 202 - Accepted, the client will have to check later
33+
# for completeness
34+
file_meta_data = await dsm.complete_file_upload(file_id, user_id, body.parts)
35+
36+
return file_meta_data.entity_tag

services/storage/src/simcore_service_storage/api/_worker_tasks/tasks.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from ...modules.celery._celery_types import register_celery_types
77
from ...modules.celery._task import define_task
88
from ...modules.celery.tasks import export_data
9+
from ._files import complete_upload_file
910
from ._paths import compute_path_size
1011

1112
_logger = logging.getLogger(__name__)
@@ -20,3 +21,4 @@ def setup_worker_tasks(app: Celery) -> None:
2021
):
2122
define_task(app, export_data)
2223
define_task(app, compute_path_size)
24+
define_task(app, complete_upload_file)

0 commit comments

Comments
 (0)