3232from starlette .responses import RedirectResponse
3333
3434from ...exceptions .service_errors_utils import DEFAULT_BACKEND_SERVICE_STATUS_CODES
35+ from ...models .domain .files import File as DomainFile
3536from ...models .pagination import Page , PaginationParams
3637from ...models .schemas .errors import ErrorGet
3738from ...models .schemas .files import (
3839 ClientFile ,
3940 ClientFileUploadData ,
40- File ,
41+ )
42+ from ...models .schemas .files import File as OutputFile
43+ from ...models .schemas .files import (
4144 FileUploadData ,
4245 UploadLinks ,
4346)
@@ -70,14 +73,14 @@ async def _get_file(
7073 file_id : UUID ,
7174 storage_client : StorageApi ,
7275 user_id : int ,
73- ):
76+ ) -> DomainFile :
7477 """Gets metadata for a given file resource"""
7578
7679 try :
77- stored_files : list [
78- StorageFileMetaData
79- ] = await storage_client . search_owned_files (
80- user_id = user_id , file_id = file_id , limit = 1
80+ stored_files : list [StorageFileMetaData ] = (
81+ await storage_client . search_owned_files (
82+ user_id = user_id , file_id = file_id , limit = 1
83+ )
8184 )
8285 if not stored_files :
8386 msg = "Not found in storage"
@@ -98,7 +101,7 @@ async def _get_file(
98101 ) from err
99102
100103
101- @router .get ("" , response_model = list [File ], responses = _FILE_STATUS_CODES )
104+ @router .get ("" , response_model = list [OutputFile ], responses = _FILE_STATUS_CODES )
102105async def list_files (
103106 storage_client : Annotated [StorageApi , Depends (get_api_client (StorageApi ))],
104107 user_id : Annotated [int , Depends (get_current_user_id )],
@@ -113,12 +116,12 @@ async def list_files(
113116 )
114117
115118 # Adapts storage API model to API model
116- all_files : list [File ] = []
119+ all_files : list [OutputFile ] = []
117120 for stored_file_meta in stored_files :
118121 try :
119122 assert stored_file_meta .file_id # nosec
120123
121- file_meta : File = to_file_api_model (stored_file_meta )
124+ file_meta = to_file_api_model (stored_file_meta )
122125
123126 except (ValidationError , ValueError , AttributeError ) as err :
124127 _logger .warning (
@@ -129,14 +132,14 @@ async def list_files(
129132 )
130133
131134 else :
132- all_files .append (file_meta )
135+ all_files .append (OutputFile . from_domain_model ( file_meta ) )
133136
134137 return all_files
135138
136139
137140@router .get (
138141 "/page" ,
139- response_model = Page [File ],
142+ response_model = Page [OutputFile ],
140143 include_in_schema = API_SERVER_DEV_FEATURES_ENABLED ,
141144 status_code = status .HTTP_501_NOT_IMPLEMENTED ,
142145)
@@ -161,7 +164,7 @@ def _get_spooled_file_size(file_io: IO) -> int:
161164
162165@router .put (
163166 "/content" ,
164- response_model = File ,
167+ response_model = OutputFile ,
165168 responses = _FILE_STATUS_CODES ,
166169)
167170@cancel_on_disconnect
@@ -187,7 +190,7 @@ async def upload_file(
187190 None , _get_spooled_file_size , file .file
188191 )
189192 # assign file_id.
190- file_meta : File = await File .create_from_uploaded (
193+ file_meta = await DomainFile .create_from_uploaded (
191194 file ,
192195 file_size = file_size ,
193196 created_at = datetime .datetime .now (datetime .UTC ).isoformat (),
@@ -216,7 +219,7 @@ async def upload_file(
216219 assert isinstance (upload_result , UploadedFile ) # nosec
217220
218221 file_meta .e_tag = upload_result .etag
219- return file_meta
222+ return OutputFile . from_domain_model ( file_meta )
220223
221224
222225# NOTE: MaG suggested a single function that can upload one or multiple files instead of having
@@ -244,7 +247,7 @@ async def get_upload_links(
244247):
245248 """Get upload links for uploading a file to storage"""
246249 assert request # nosec
247- file_meta : File = await File .create_from_client_file (
250+ file_meta = await DomainFile .create_from_client_file (
248251 client_file ,
249252 datetime .datetime .now (datetime .UTC ).isoformat (),
250253 )
@@ -275,7 +278,7 @@ async def get_upload_links(
275278
276279@router .get (
277280 "/{file_id}" ,
278- response_model = File ,
281+ response_model = OutputFile ,
279282 responses = _FILE_STATUS_CODES ,
280283)
281284async def get_file (
@@ -294,7 +297,7 @@ async def get_file(
294297
295298@router .get (
296299 ":search" ,
297- response_model = Page [File ],
300+ response_model = Page [OutputFile ],
298301 responses = _FILE_STATUS_CODES ,
299302)
300303async def search_files_page (
@@ -317,8 +320,11 @@ async def search_files_page(
317320 raise HTTPException (
318321 status_code = status .HTTP_404_NOT_FOUND , detail = "Not found in storage"
319322 )
323+ file_list = [
324+ OutputFile .from_domain_model (to_file_api_model (fmd )) for fmd in stored_files
325+ ]
320326 return create_page (
321- [ to_file_api_model ( fmd ) for fmd in stored_files ] ,
327+ file_list ,
322328 total = len (stored_files ),
323329 params = page_params ,
324330 )
@@ -333,7 +339,7 @@ async def delete_file(
333339 user_id : Annotated [int , Depends (get_current_user_id )],
334340 storage_client : Annotated [StorageApi , Depends (get_api_client (StorageApi ))],
335341):
336- file : File = await _get_file (
342+ file = await _get_file (
337343 file_id = file_id ,
338344 storage_client = storage_client ,
339345 user_id = user_id ,
@@ -356,7 +362,7 @@ async def abort_multipart_upload(
356362):
357363 assert request # nosec
358364 assert user_id # nosec
359- file : File = File (
365+ file = DomainFile (
360366 id = file_id ,
361367 filename = client_file .filename ,
362368 checksum = client_file .sha256_checksum ,
@@ -372,7 +378,7 @@ async def abort_multipart_upload(
372378
373379@router .post (
374380 "/{file_id}:complete" ,
375- response_model = File ,
381+ response_model = OutputFile ,
376382 responses = _FILE_STATUS_CODES ,
377383)
378384@cancel_on_disconnect
@@ -387,7 +393,7 @@ async def complete_multipart_upload(
387393 assert request # nosec
388394 assert user_id # nosec
389395
390- file : File = File (
396+ file = DomainFile (
391397 id = file_id ,
392398 filename = client_file .filename ,
393399 checksum = client_file .sha256_checksum ,
@@ -429,7 +435,7 @@ async def download_file(
429435):
430436 # NOTE: application/octet-stream is defined as "arbitrary binary data" in RFC 2046,
431437 # gets meta
432- file_meta : File = await get_file (file_id , storage_client , user_id )
438+ file_meta = await get_file (file_id , storage_client , user_id )
433439
434440 # download from S3 using pre-signed link
435441 presigned_download_link = await storage_client .get_download_link (
0 commit comments