From 32519e878e8ef1ab4b4adabe7c471927cb32827f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20tom=20W=C3=B6rden?= <h.tomwoerden@indiscale.com> Date: Fri, 14 Apr 2023 13:02:04 +0200 Subject: [PATCH] FIX: allow deepcopy of _Messages --- src/caosdb/common/models.py | 5 +++ unittests/test_message.py | 68 ++++++++++++++++++------------------- 2 files changed, 39 insertions(+), 34 deletions(-) diff --git a/src/caosdb/common/models.py b/src/caosdb/common/models.py index d418ee59..e33147f3 100644 --- a/src/caosdb/common/models.py +++ b/src/caosdb/common/models.py @@ -2403,6 +2403,8 @@ class _Messages(list): (to be continued...) """ + _is_wrapped = False + def clear_server_messages(self): # TODO can we deprecate this and refer people to clear """Removes all error, warning and info messages.""" @@ -2579,6 +2581,9 @@ def donotuse(func): def _message_wrap_deprication(msg): """ function to allow deprecation of _Messages return values """ + if not msg._is_wrapped: + return msg + msg._is_wrapped = True msg.clear_server_messages = donotuse(msg.clear_server_messages) msg.__setitem__ = donotuse(msg.__setitem__) msg.__delitem__ = donotuse(msg.__delitem__) diff --git a/unittests/test_message.py b/unittests/test_message.py index 112004c2..feffb31b 100644 --- a/unittests/test_message.py +++ b/unittests/test_message.py @@ -81,40 +81,40 @@ def test_messages_dict_behavior(): assert msgs["HelloWorld"] == "Hello!" -# def test_deepcopy(): -# """Test whether deepcopy of _Messages objects doesn't mess up -# contained Messages objects. -# -# """ -# msgs = db.common.models._Messages() -# msg = db.Message(type="bla", code=1234, description="desc", body="blabla") -# msgs.append(msg) -# msg_copy = deepcopy(msgs)[0] -# -# # make sure type is string-like (formerly caused problems) -# assert hasattr(msg_copy.type, "lower") -# assert msg_copy.type == msg.type -# assert msg_copy.code == msg.code -# assert msg_copy.description == msg.description -# assert msg_copy.body == msg.body -# -# -# def test_deepcopy_clear_server(): -# -# msgs = db.common.models._Messages() -# msg = db.Message(type="bla", code=1234, description="desc", body="blabla") -# err_msg = db.Message(type="Error", code=1357, description="error") -# msgs.extend([msg, err_msg]) -# copied_msgs = deepcopy(msgs) -# -# assert len(copied_msgs) == 2 -# assert copied_msgs.get("Error", err_msg.code).code == err_msg.code -# assert copied_msgs.get("bla", msg.code).code == msg.code -# -# # Only the error should be removed -# copied_msgs.clear_server_messages() -# assert len(copied_msgs) == 1 -# assert copied_msgs[0].code == msg.code +def test_deepcopy(): + """Test whether deepcopy of _Messages objects doesn't mess up + contained Messages objects. + + """ + msgs = db.common.models._Messages() + msg = db.Message(type="bla", code=1234, description="desc", body="blabla") + msgs.append(msg) + msg_copy = deepcopy(msgs)[0] + + # make sure type is string-like (formerly caused problems) + assert hasattr(msg_copy.type, "lower") + assert msg_copy.type == msg.type + assert msg_copy.code == msg.code + assert msg_copy.description == msg.description + assert msg_copy.body == msg.body + + +def test_deepcopy_clear_server(): + + msgs = db.common.models._Messages() + msg = db.Message(type="bla", code=1234, description="desc", body="blabla") + err_msg = db.Message(type="Error", code=1357, description="error") + msgs.extend([msg, err_msg]) + copied_msgs = deepcopy(msgs) + + assert len(copied_msgs) == 2 + assert copied_msgs.get("Error", err_msg.code).code == err_msg.code + assert copied_msgs.get("bla", msg.code).code == msg.code + + # Only the error should be removed + copied_msgs.clear_server_messages() + assert len(copied_msgs) == 1 + assert copied_msgs[0].code == msg.code def test_deprecated_append_return(): -- GitLab