diff --git a/invenio_utilities_tuw/cli/drafts.py b/invenio_utilities_tuw/cli/drafts.py index 13b09358751d4b1c8304273bda473daecc4f3699..df940fc0e5a80930758a153506b21ef55a515c0f 100644 --- a/invenio_utilities_tuw/cli/drafts.py +++ b/invenio_utilities_tuw/cli/drafts.py @@ -364,19 +364,34 @@ def remove_files(filekeys, pid, pid_type, user): recid = convert_to_recid(pid, pid_type) identity = get_identity_for_user(user) file_service = service.draft_files + draft = service.read_draft(id_=recid, identity=identity)._record - for file_key in filekeys: - try: - file_service.delete_file(id_=recid, file_key=file_key, identity=identity) - click.secho(file_key, fg="red") + bucket_was_locked = draft.files.bucket.locked + draft.files.bucket.locked = False + uow = UnitOfWork(db.session) + try: + for file_key in filekeys: + try: + file_service.delete_file( + id_=recid, file_key=file_key, identity=identity, uow=uow + ) + click.secho(file_key, fg="red") - except KeyError as err: - click.secho(f"error: {err}", fg="yellow", err=True) + except KeyError as err: + click.secho(f"error: {err}", fg="yellow", err=True) - draft = service.read_draft(id_=recid, identity=identity)._record - if not draft.files.entries: - draft.files.enabled = False - draft.commit() + if not draft.files.entries: + draft.files.enabled = False + draft.commit() + + uow.commit() + + except Exception as e: + uow.rollback() + click.secho(f"aborted due to error: {e}", fg="red", err=True) + + finally: + draft.files.bucket.locked = bucket_was_locked db.session.commit()