diff --git a/invenio_utilities_tuw/utils.py b/invenio_utilities_tuw/utils.py index 7a84f6e66359fe57c87456d2fe2f504c537da914..27b28b4f9972f7e962e19f88e40a9ce672f5cfbe 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)