11import logging
2- from typing import cast
2+ from typing import Annotated , cast
33
44from aiohttp import web
5- from aiohttp .web import RouteTableDef
65from common_library .json_serialization import json_dumps
6+ from fastapi import APIRouter , Depends , FastAPI , Request
7+ from models_library .api_schemas_long_running_tasks .tasks import TaskGet
78from models_library .api_schemas_storage import FileMetaDataGet , FoldersBody
9+ from models_library .generics import Envelope
810from models_library .projects import ProjectID
911from models_library .utils .fastapi_encoders import jsonable_encoder
1012from servicelib .aiohttp import status
2022from servicelib .logging_utils import log_context
2123from settings_library .s3 import S3Settings
2224
23- from ..._meta import API_VTAG
2425from ...dsm import get_dsm_provider
2526from ...models import (
2627 DeleteFolderQueryParams ,
3435
3536_logger = logging .getLogger (__name__ )
3637
37- routes = RouteTableDef ()
38+ router = APIRouter (
39+ tags = [
40+ "simcore-s3" ,
41+ ],
42+ )
3843
3944
40- @routes .post (f"/{ API_VTAG } /simcore-s3:access" , name = "get_or_create_temporary_s3_access" )
41- async def get_or_create_temporary_s3_access (request : web .Request ) -> web .Response :
45+ @router .post ("/simcore-s3:access" , response_model = Envelope [S3Settings ])
46+ async def get_or_create_temporary_s3_access (
47+ query_params : Annotated [StorageQueryParamsBase , Depends ()],
48+ request : Request ,
49+ ):
4250 # NOTE: the name of the method is not accurate, these are not temporary at all
4351 # it returns the credentials of the s3 backend!
44- query_params : StorageQueryParamsBase = parse_request_query_parameters_as (
45- StorageQueryParamsBase , request
46- )
47- _logger .debug (
48- "received call to get_or_create_temporary_s3_access with %s" ,
49- f"{ query_params = } " ,
50- )
51-
5252 s3_settings : S3Settings = await sts .get_or_create_temporary_token_for_user (
5353 request .app , query_params .user_id
5454 )
55- return web . json_response ({ " data" : s3_settings . model_dump ()}, dumps = json_dumps )
55+ return Envelope [ S3Settings ]( data = s3_settings )
5656
5757
5858async def _copy_folders_from_project (
5959 task_progress : TaskProgress ,
6060 app : FastAPI ,
6161 query_params : StorageQueryParamsBase ,
6262 body : FoldersBody ,
63- ) -> web . Response :
63+ ) -> Envelope [ TaskGet ] :
6464 dsm = cast (
6565 SimcoreS3DataManager ,
6666 get_dsm_provider (app ).get (SimcoreS3DataManager .get_location_id ()),
@@ -85,7 +85,11 @@ async def _copy_folders_from_project(
8585 )
8686
8787
88- @routes .post (f"/{ API_VTAG } /simcore-s3/folders" , name = "copy_folders_from_project" )
88+ @router .post (
89+ "/simcore-s3/folders" ,
90+ response_model = Envelope [TaskGet ],
91+ status_code = status .HTTP_202_ACCEPTED ,
92+ )
8993async def copy_folders_from_project (request : web .Request ) -> web .Response :
9094 query_params : StorageQueryParamsBase = parse_request_query_parameters_as (
9195 StorageQueryParamsBase , request
@@ -105,8 +109,9 @@ async def copy_folders_from_project(request: web.Request) -> web.Response:
105109 )
106110
107111
108- @routes .delete (
109- f"/{ API_VTAG } /simcore-s3/folders/{{folder_id}}" , name = "delete_folders_of_project"
112+ @router .delete (
113+ "/simcore-s3/folders/{folder_id}" ,
114+ status_code = status .HTTP_204_NO_CONTENT ,
110115)
111116async def delete_folders_of_project (request : web .Request ) -> web .Response :
112117 query_params : DeleteFolderQueryParams = parse_request_query_parameters_as (
@@ -131,7 +136,10 @@ async def delete_folders_of_project(request: web.Request) -> web.Response:
131136 return web .json_response (status = status .HTTP_204_NO_CONTENT )
132137
133138
134- @routes .post (f"/{ API_VTAG } /simcore-s3/files/metadata:search" , name = "search_files" )
139+ @router .post (
140+ "/simcore-s3/files/metadata:search" ,
141+ response_model = Envelope [list [FileMetaDataGet ]],
142+ )
135143async def search_files (request : web .Request ) -> web .Response :
136144 query_params : SearchFilesQueryParams = parse_request_query_parameters_as (
137145 SearchFilesQueryParams , request
0 commit comments