2020 FileUploadCompleteFutureResponse ,
2121 FileUploadCompleteResponse ,
2222 FileUploadCompleteState ,
23+ FileUploadCompletionBody ,
2324 FileUploadSchema ,
2425 LinkType ,
2526 PresignedLink ,
27+ UploadedPart ,
2628)
2729from models_library .basic_types import SHA256Str
2830from models_library .generics import Envelope
@@ -200,11 +202,14 @@ async def get_file_upload_links(
200202 return enveloped_data .data
201203
202204 @_exception_mapper (http_status_map = {})
203- async def complete_file_upload (self , * , user_id : int , file : File ) -> ETag :
205+ async def complete_file_upload (
206+ self , * , user_id : int , file : File , uploaded_parts : list [UploadedPart ]
207+ ) -> ETag :
204208
205209 response = await self .client .post (
206210 f"/locations/{ self .SIMCORE_S3_ID } /files/{ file .quoted_storage_file_id } :complete" ,
207211 params = {"user_id" : f"{ user_id } " },
212+ json = jsonable_encoder (FileUploadCompletionBody (parts = uploaded_parts )),
208213 )
209214 response .raise_for_status ()
210215 file_upload_complete_response = Envelope [
@@ -228,7 +233,6 @@ async def complete_file_upload(self, *, user_id: int, file: File) -> ETag:
228233 ].model_validate_json (resp .text )
229234 assert future_enveloped .data # nosec
230235 if future_enveloped .data .state == FileUploadCompleteState .NOK :
231- msg = "upload not ready yet"
232236 raise TryAgain ()
233237
234238 assert future_enveloped .data .e_tag # nosec
@@ -240,6 +244,7 @@ async def complete_file_upload(self, *, user_id: int, file: File) -> ETag:
240244 return future_enveloped .data .e_tag
241245 except TryAgain as exc :
242246 raise BackendTimeoutError () from exc
247+ raise BackendTimeoutError ()
243248
244249 @_exception_mapper (http_status_map = {})
245250 async def abort_file_upload (self , * , user_id : int , file : File ) -> None :
0 commit comments