From 713b55482a61195ce7163bd839b6eb257619fb03 Mon Sep 17 00:00:00 2001 From: juk0de Date: Sat, 2 Sep 2023 10:19:14 +0200 Subject: [PATCH] message: added rename_tags() function and test --- chatmastermind/message.py | 10 +++++++++- tests/test_message.py | 12 ++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/chatmastermind/message.py b/chatmastermind/message.py index 87de8e2..0fb949c 100644 --- a/chatmastermind/message.py +++ b/chatmastermind/message.py @@ -5,7 +5,7 @@ import pathlib import yaml from typing import Type, TypeVar, ClassVar, Optional, Any, Union, Final, Literal, Iterable from dataclasses import dataclass, asdict, field -from .tags import Tag, TagLine, TagError, match_tags +from .tags import Tag, TagLine, TagError, match_tags, rename_tags QuestionInst = TypeVar('QuestionInst', bound='Question') AnswerInst = TypeVar('AnswerInst', bound='Answer') @@ -499,6 +499,14 @@ class Message(): return False return True + def rename_tags(self, tags_rename: set[tuple[Tag, Tag]]) -> None: + """ + Renames the given tags. The first tuple element is the old name, + the second one is the new name. + """ + if self.tags: + self.tags = rename_tags(self.tags, tags_rename) + def msg_id(self) -> str: """ Returns an ID that is unique throughout all messages in the same (DB) directory. diff --git a/tests/test_message.py b/tests/test_message.py index e01de66..e860538 100644 --- a/tests/test_message.py +++ b/tests/test_message.py @@ -792,3 +792,15 @@ class MessageInTestCase(CmmTestCase): def test_message_in(self) -> None: self.assertTrue(message_in(self.message1, [self.message1])) self.assertFalse(message_in(self.message1, [self.message2])) + + +class MessageRenameTagsTestCase(CmmTestCase): + def setUp(self) -> None: + self.message = Message(Question('This is a question.'), + tags={Tag('atag1'), Tag('btag2')}, + file_path=pathlib.Path('/tmp/foo/bla')) + + def test_rename_tags(self) -> None: + self.message.rename_tags({(Tag('atag1'), Tag('atag2')), (Tag('btag2'), Tag('btag3'))}) + self.assertIsNotNone(self.message.tags) + self.assertSetEqual(self.message.tags, {Tag('atag2'), Tag('btag3')}) # type: ignore [arg-type]