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