From 22a4e20dcef7df7269aa8248b8590013dc1f1407 Mon Sep 17 00:00:00 2001
From: Maximilian Moser <maximilian.moser@tuwien.ac.at>
Date: Mon, 10 Mar 2025 23:55:31 +0100
Subject: [PATCH] Update "drafts files remove" command to work with published
 drafts

---
 invenio_utilities_tuw/cli/drafts.py | 35 ++++++++++++++++++++---------
 1 file changed, 25 insertions(+), 10 deletions(-)

diff --git a/invenio_utilities_tuw/cli/drafts.py b/invenio_utilities_tuw/cli/drafts.py
index 13b0935..df940fc 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()
 
 
-- 
GitLab