Skip to content

Commit 311ba29

Browse files
committed
add user id to data export endpoint
1 parent e19eea7 commit 311ba29

File tree

3 files changed

+20
-4
lines changed

3 files changed

+20
-4
lines changed

packages/models-library/src/models_library/api_schemas_storage/data_export_async_jobs.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33

44
from common_library.errors_classes import OsparcErrorMixin
55
from models_library.projects_nodes_io import LocationID
6+
from models_library.users import UserID
67
from pydantic import BaseModel, Field
78

89

910
class DataExportTaskStartInput(BaseModel):
11+
user_id: UserID
1012
location_id: LocationID
1113
paths: list[Path] = Field(..., min_length=1)
1214

packages/models-library/src/models_library/storage_schemas.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -385,8 +385,12 @@ class SoftCopyBody(BaseModel):
385385
class DataExportPost(BaseModel):
386386
paths: list[Path]
387387

388-
def to_storage_model(self, location_id: LocationID) -> DataExportTaskStartInput:
389-
return DataExportTaskStartInput(paths=self.paths, location_id=location_id)
388+
def to_storage_model(
389+
self, user_id: UserID, location_id: LocationID
390+
) -> DataExportTaskStartInput:
391+
return DataExportTaskStartInput(
392+
paths=self.paths, user_id=user_id, location_id=location_id
393+
)
390394

391395

392396
class AsyncJobGet(BaseModel):

services/web/server/src/simcore_service_webserver/storage/_handlers.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from aiohttp import ClientTimeout, web
1212
from models_library.api_schemas_storage import STORAGE_RPC_NAMESPACE
1313
from models_library.projects_nodes_io import LocationID
14+
from models_library.rest_base import RequestParameters
1415
from models_library.storage_schemas import (
1516
AsyncJobGet,
1617
AsyncJobResult,
@@ -21,8 +22,9 @@
2122
FileUploadSchema,
2223
LinkType,
2324
)
25+
from models_library.users import UserID
2426
from models_library.utils.fastapi_encoders import jsonable_encoder
25-
from pydantic import AnyUrl, BaseModel, ByteSize, TypeAdapter
27+
from pydantic import AnyUrl, BaseModel, ByteSize, Field, TypeAdapter
2628
from servicelib.aiohttp import status
2729
from servicelib.aiohttp.client_session import get_client_session
2830
from servicelib.aiohttp.requests_validation import (
@@ -40,6 +42,7 @@
4042
from servicelib.rabbitmq.rpc_interfaces.storage.data_export import start_data_export
4143
from servicelib.request_keys import RQT_USERID_KEY
4244
from servicelib.rest_responses import unwrap_envelope
45+
from simcore_service_webserver.products._api import RQ_PRODUCT_KEY
4346
from simcore_service_webserver.rabbitmq import get_rabbitmq_rpc_client
4447
from yarl import URL
4548

@@ -385,17 +388,24 @@ class _PathParams(BaseModel):
385388
@permission_required("storage.files.*")
386389
@handle_data_export_exceptions
387390
async def export_data(request: web.Request) -> web.Response:
391+
class _RequestContext(RequestParameters):
392+
user_id: UserID = Field(..., alias=RQT_USERID_KEY) # type: ignore[literal-required]
393+
product_name: str = Field(..., alias=RQ_PRODUCT_KEY) # type: ignore[literal-required]
394+
388395
class _PathParams(BaseModel):
389396
location_id: LocationID
390397

391398
rabbitmq_rpc_client = get_rabbitmq_rpc_client(request.app)
399+
_req_ctx = _RequestContext.model_validate(request)
392400
_path_params = parse_request_path_parameters_as(_PathParams, request)
393401
data_export_post = await parse_request_body_as(
394402
model_schema_cls=DataExportPost, request=request
395403
)
396404
async_job_rpc_get = await start_data_export(
397405
rabbitmq_rpc_client=rabbitmq_rpc_client,
398-
paths=data_export_post.to_storage_model(location_id=_path_params.location_id),
406+
paths=data_export_post.to_storage_model(
407+
user_id=_req_ctx.user_id, location_id=_path_params.location_id
408+
),
399409
)
400410
return create_data_response(
401411
AsyncJobGet.from_async_job_rpc_get(async_job_rpc_get),

0 commit comments

Comments
 (0)