From cd67d49c6919a8ac2f1b24e95a83d9e1eabc315d Mon Sep 17 00:00:00 2001
From: Maximilian Moser <maximilian.moser@tuwien.ac.at>
Date: Mon, 10 Mar 2025 00:25:14 +0100
Subject: [PATCH] Implement context manager for temporarily monkey-patching
 methods

---
 invenio_utilities_tuw/utils.py | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/invenio_utilities_tuw/utils.py b/invenio_utilities_tuw/utils.py
index 7a84f6e..27b28b4 100644
--- a/invenio_utilities_tuw/utils.py
+++ b/invenio_utilities_tuw/utils.py
@@ -8,6 +8,7 @@
 
 """Utility functions for Invenio-Utilities-TUW."""
 
+from contextlib import contextmanager
 from difflib import SequenceMatcher
 
 from invenio_access.permissions import any_user, system_identity
@@ -54,3 +55,12 @@ def get_identity_for_user(user):
 def similarity(a: str, b: str) -> float:
     """Calculate the similarity between two strings."""
     return SequenceMatcher(None, a, b).ratio()
+
+
+@contextmanager
+def monkey_patch_temp(object_, method_name, new_method):
+    """Temporarily monkey patch an object's method."""
+    x = getattr(object_, method_name)
+    setattr(object_, method_name, new_method.__get__(object_, type(object_)))
+    yield object_
+    setattr(object_, method_name, x)
-- 
GitLab