Compare commits

..

2 Commits

Author SHA1 Message Date
420423b36e hist_cmd: added module 'test_hist_cmd.py' 2023-09-29 18:53:12 +02:00
811b2e6830 hist_cmd: implemented '--convert' option 2023-09-29 18:53:12 +02:00
2 changed files with 63 additions and 1 deletions

View File

@ -12,7 +12,7 @@ msg_suffix = Message.file_suffix_write # currently '.msg'
def convert_messages(args: argparse.Namespace, config: Config) -> None: def convert_messages(args: argparse.Namespace, config: Config) -> None:
""" """
Convert messages to a new format. Also used to change old suffixes Convert messages to a new format. Also used to change old suffixes
('.txt' and '.yaml')to the latest default message file suffix ('.msg'). ('.txt', '.yaml') to the latest default message file suffix ('.msg').
""" """
chat = ChatDB.from_dir(Path(config.cache), chat = ChatDB.from_dir(Path(config.cache),
Path(config.db)) Path(config.db))
@ -22,6 +22,11 @@ def convert_messages(args: argparse.Namespace, config: Config) -> None:
msg_ids = set([m.msg_id() for m in msgs]) msg_ids = set([m.msg_id() for m in msgs])
# set requested format and write all messages # set requested format and write all messages
chat.set_msg_format(args.convert) chat.set_msg_format(args.convert)
# delete the current suffix
# -> a new one will automatically be created
for m in msgs:
if m.file_path:
m.file_path = m.file_path.with_suffix('')
chat.msg_write(msgs) chat.msg_write(msgs)
# read all messages with the current default suffix # read all messages with the current default suffix
msgs = chat.msg_gather(loc='disk', glob='*{msg_suffix}') msgs = chat.msg_gather(loc='disk', glob='*{msg_suffix}')

57
tests/test_hist_cmd.py Normal file
View File

@ -0,0 +1,57 @@
import unittest
import argparse
import tempfile
import yaml
from pathlib import Path
from chatmastermind.message import Message, Question
from chatmastermind.chat import ChatDB
from chatmastermind.configuration import Config
from chatmastermind.commands.hist import convert_messages
msg_suffix = Message.file_suffix_write
class TestConvertMessages(unittest.TestCase):
def setUp(self) -> None:
self.db_dir = tempfile.TemporaryDirectory()
self.cache_dir = tempfile.TemporaryDirectory()
self.db_path = Path(self.db_dir.name)
self.cache_path = Path(self.cache_dir.name)
self.args = argparse.Namespace()
self.config = Config()
self.config.cache = self.cache_dir.name
self.config.db = self.db_dir.name
self.args.convert = 'yaml'
# Prepare some messages
self.chat = ChatDB.from_dir(Path(self.cache_path),
Path(self.db_path))
self.messages = [Message(Question(f'Question {i}')) for i in range(1, 6)]
self.chat.db_write(self.messages[0:2])
self.chat.cache_write(self.messages[3:])
# Change some of the suffixes
assert self.messages[0].file_path
assert self.messages[1].file_path
self.messages[0].file_path.rename(self.messages[0].file_path.with_suffix('.txt'))
self.messages[1].file_path.rename(self.messages[1].file_path.with_suffix('.yaml'))
def tearDown(self) -> None:
self.db_dir.cleanup()
self.cache_dir.cleanup()
def test_convert_messages(self) -> None:
convert_messages(self.args, self.config)
msgs = self.chat.msg_gather(loc='disk', glob='*.*')
# Check if the number of messages is the same as before
self.assertEqual(len(msgs), len(self.messages))
# Check if all messages have the requested suffix
for msg in msgs:
assert msg.file_path
self.assertEqual(msg.file_path.suffix, msg_suffix)
# Check if the message IDs are correctly maintained
for m_new, m_old in zip(msgs, self.messages):
self.assertEqual(m_new.msg_id(), m_old.msg_id())
# check if all messages have the new format
for m in msgs:
with open(str(m.file_path), "r") as fd:
yaml.load(fd, Loader=yaml.FullLoader)