diff --git a/api/handlers/listhandler.py b/api/handlers/listhandler.py index eb2822a5a1b6e32790a0cacf91a4bd1b6d00aade..5f731a7e9add3343aab95942c6c73a7d0c9e2b93 100644 --- a/api/handlers/listhandler.py +++ b/api/handlers/listhandler.py @@ -16,7 +16,7 @@ from ..auth import listauth, always_ok from ..dao import noop from ..dao import liststorage from ..dao import containerutil -from ..web.errors import APIStorageException +from ..web.errors import APIStorageException, APIPermissionException from ..web.request import AccessType @@ -573,7 +573,8 @@ class FileListHandler(ListHandler): analyses = containerutil.get_referring_analyses(cont_name, _id, filename=filename) if analyses: analysis_ids = [str(a['_id']) for a in analyses] - self.abort(400, 'Cannot delete file {} referenced by analyses {}'.format(filename, analysis_ids)) + raise APIPermissionException('Cannot delete file {} referenced by analyses {}'.format(filename, analysis_ids), + errors={'reason': 'analysis_conflict'}) self.log_user_access(AccessType.delete_file, cont_name=cont_name, cont_id=_id, filename=filename) try: diff --git a/tests/integration_tests/python/test_containers.py b/tests/integration_tests/python/test_containers.py index 9b807de69e96ddacc6c7952ffea6ff48a14db5bf..792481a7d774886485b2bb558beff080269c958e 100644 --- a/tests/integration_tests/python/test_containers.py +++ b/tests/integration_tests/python/test_containers.py @@ -1326,7 +1326,8 @@ def test_container_delete_tag(data_builder, default_payload, as_root, as_admin, # try to delete acquisition file referenced by analysis r = as_admin.delete('/acquisitions/' + acquisition + '/files/test.csv') - assert r.status_code == 400 + assert r.status_code == 403 + assert r.json()['reason'] == 'analysis_conflict' # verify that a non-referenced file _can_ be deleted from the same acquisition assert as_admin.delete('/acquisitions/' + acquisition + '/files/test2.csv').ok