1313from flask_login import current_user
1414from marshmallow import ValidationError
1515from sqlalchemy .exc import IntegrityError
16+ from sqlalchemy .orm .exc import ObjectDeletedError
1617
1718from mergin .sync .tasks import remove_transaction_chunks
1819
@@ -301,6 +302,7 @@ def create_project_version(id):
301302 upload .clear ()
302303 return DataSyncError (failed_files = errors ).response (422 )
303304
305+ upload_deleted = False
304306 try :
305307 pv = ProjectVersion (
306308 project ,
@@ -329,15 +331,20 @@ def create_project_version(id):
329331 remove_transaction_chunks .delay (chunks_ids )
330332
331333 logging .info (
332- f"Push finished for project: { project .id } , project version: { v_next_version } , upload id: { upload . id } ."
334+ f"Push finished for project: { project .id } , project version: { v_next_version } ."
333335 )
334336 project_version_created .send (pv )
335337 push_finished .send (pv )
336- except (psycopg2 .Error , FileNotFoundError , IntegrityError ) as err :
338+ except (
339+ psycopg2 .Error ,
340+ FileNotFoundError ,
341+ IntegrityError ,
342+ ObjectDeletedError ,
343+ ) as err :
337344 db .session .rollback ()
345+ upload_deleted = isinstance (err , ObjectDeletedError )
338346 logging .exception (
339- f"Failed to finish push for project: { project .id } , project version: { v_next_version } , "
340- f"upload id: { upload .id } .: { str (err )} "
347+ f"Failed to finish push for project: { project .id } , project version: { v_next_version } : { str (err )} "
341348 )
342349 if (
343350 os .path .exists (version_dir )
@@ -359,8 +366,9 @@ def create_project_version(id):
359366 move_to_tmp (version_dir )
360367 raise
361368 finally :
362- # remove artifacts
363- upload .clear ()
369+ # remove artifacts only if upload object is still valid
370+ if not upload_deleted :
371+ upload .clear ()
364372
365373 result = ProjectSchemaV2 ().dump (project )
366374 result ["files" ] = ProjectFileSchema (
0 commit comments