From eaeea6f07c58cbe50257f691b1b6df259e6e23f0 Mon Sep 17 00:00:00 2001
From: Maximilian Moser <maximilian.moser@tuwien.ac.at>
Date: Mon, 10 Mar 2025 23:03:26 +0100
Subject: [PATCH] Implement "files fix-state" command for drafts and records

---
 invenio_utilities_tuw/cli/drafts.py  | 14 ++++++++++++++
 invenio_utilities_tuw/cli/records.py | 15 +++++++++++++++
 2 files changed, 29 insertions(+)

diff --git a/invenio_utilities_tuw/cli/drafts.py b/invenio_utilities_tuw/cli/drafts.py
index df940fc..393b9d8 100644
--- a/invenio_utilities_tuw/cli/drafts.py
+++ b/invenio_utilities_tuw/cli/drafts.py
@@ -447,6 +447,20 @@ def verify_files(pid, pid_type):
         sys.exit(1)
 
 
+@files.command("fix-state")
+@option_pid_value
+@option_pid_type
+@with_appcontext
+def fix_state(pid, pid_type):
+    """Fix the draft's file manager state and lock the bucket."""
+    recid = convert_to_recid(pid, pid_type)
+    draft = service.read_draft(id_=recid, identity=system_identity)._record
+    draft.files.lock()
+    draft.files.enabled = bool(draft.files.entries)
+    draft.commit()
+    db.session.commit()
+
+
 @drafts.command("list-stale")
 @click.option(
     "--days",
diff --git a/invenio_utilities_tuw/cli/records.py b/invenio_utilities_tuw/cli/records.py
index 69978b3..143f56e 100644
--- a/invenio_utilities_tuw/cli/records.py
+++ b/invenio_utilities_tuw/cli/records.py
@@ -13,6 +13,7 @@ import sys
 
 import click
 from flask.cli import with_appcontext
+from invenio_access.permissions import system_identity
 from invenio_db import db
 from invenio_rdm_records.proxies import current_rdm_records_service as service
 from invenio_records_resources.services.errors import PermissionDeniedError
@@ -229,6 +230,20 @@ def verify_files(pid, pid_type, user):
         sys.exit(1)
 
 
+@files.command("fix-state")
+@option_pid_value
+@option_pid_type
+@with_appcontext
+def fix_state(pid, pid_type):
+    """Fix the record's file manager state and lock the bucket."""
+    recid = convert_to_recid(pid, pid_type)
+    record = service.read(id_=recid, identity=system_identity)._record
+    record.files.lock()
+    record.files.enabled = bool(record.files.entries)
+    record.commit()
+    db.session.commit()
+
+
 @records.command("reindex")
 @option_pid_values
 @option_pid_type
-- 
GitLab