Esempio n. 1
0
    def test_complex(self):
        td = TagDict()
        td.add('tag')

        rl = RecordList()
        dt = datetime(year=2021, month=1, day=15, hour=21, minute=13)
        rl.append(Record(dt, note='test'))

        ws = WordSet()
        with self.assertRaises(Exception):
            ws.check_note('test')
        ws.check_note('test', update=True)

        self.assertEqual('0) tag', str(td))
        self.assertEqual('[15.01.2021 21:13:00] <tag> test', str(rl))
        ws.check_note('test')

        db.save()
        db.clear()
        self.assertEqual('', str(td))
        self.assertEqual('', str(rl))
        with self.assertRaises(Exception):
            ws.check_note('test')

        db.load()
        self.assertEqual('0) tag', str(td))
        self.assertEqual('[15.01.2021 21:13:00] <tag> test', str(rl))
        ws.check_note('test')
Esempio n. 2
0
class DiaryManager:
    def __init__(self):
        self.tag_dict = TagDict()
        self.word_set = WordSet()
        self.record_list = RecordList()

    def add_record(
        self,
        dt: Optional[datetime] = None,
        tag: str = '',
        is_active: Optional[bool] = None,
        note: str = '',
        update: bool = False,
    ):
        tag_id = self._tag_to_tag_id(tag)
        self.word_set.check_note(note, update)
        self.record_list.append(Record(dt, tag_id, is_active, note))

    def update_record(
        self,
        index: int,
        dt: Optional[datetime],
        tag: str,
        is_active: Optional[bool],
        note: str,
        update: bool = False,
    ):
        tag_id = self._tag_to_tag_id(tag)
        self.word_set.check_note(note, update)
        self.record_list[index] = Record(dt, tag_id, is_active, note)

    def _tag_to_tag_id(self, tag) -> int:
        return self.tag_dict.get_id(tag)

    def tag_stat(self) -> str:
        tag_id_stat = self.record_list.get_tag_id_stat()
        for tag_id in self.tag_dict:
            if tag_id not in tag_id_stat:
                tag_id_stat[tag_id] = 0
        result = [(v, self.tag_dict[k]) for k, v in tag_id_stat.items()]
        result.sort(reverse=True)
        return '\n'.join(f'{item[0]} {item[1]}' for item in result)

    def set_tag_id(self, new_id: int, tag: str):
        old_id = self.tag_dict.set_id(new_id, tag)
        self.record_list.swap_tag_id(old_id, new_id)

    def tag_filter(self,
                   tag: Optional[str] = None) -> Tuple[List[int], List[str]]:
        if tag is None:
            return (
                list(range(len(self.record_list))),
                [str(record) for record in self.record_list],
            )
        else:
            return self.record_list.filter_record(
                tag_id=self.tag_dict.get_id(tag))
Esempio n. 3
0
 def __init__(self):
     self.tag_dict = TagDict()
     self.word_set = WordSet()
     self.record_list = RecordList()
Esempio n. 4
0
 def setUp(self) -> None:
     db.load()
     self._tag_dict = TagDict()
     self._diary_manager = DiaryManager()
Esempio n. 5
0
class TestDiaryManager(unittest.TestCase):
    def setUp(self) -> None:
        db.load()
        self._tag_dict = TagDict()
        self._diary_manager = DiaryManager()

    def test_add_record(self):
        self._diary_manager.add_record()
        self.assertEqual(
            '<KeyError: -1>', str(self._diary_manager.record_list)[22:])

    def test_add_record_dt(self):
        dt = datetime(year=2021, month=1, day=21, hour=21, minute=15)
        self._diary_manager.add_record(dt)
        self.assertEqual(
            '[21.01.2021 21:15:00] <KeyError: -1>',
            str(self._diary_manager.record_list),
        )

    def test_add_record_tag(self):
        self._tag_dict.add('tag')
        dt = datetime(year=2021, month=1, day=25, hour=12, minute=37)
        self._diary_manager.add_record(dt, 'tag')
        self.assertEqual(
            '[25.01.2021 12:37:00] <tag>',
            str(self._diary_manager.record_list),
        )

    def test_add_record_is_active(self):
        self._tag_dict.add('tag')
        dt = datetime(year=2021, month=1, day=25, hour=15, minute=34)
        self._diary_manager.add_record(dt, 'tag', is_active=True)
        dt = datetime(year=2021, month=1, day=25, hour=15, minute=37)
        self._diary_manager.add_record(dt, 'tag', is_active=False)
        self.assertEqual(
            '[25.01.2021 15:34:00] <tag: start>\n'
            '[25.01.2021 15:37:00] <tag: end>',
            str(self._diary_manager.record_list),
        )

    def test_add_record_note(self):
        self._tag_dict.add('tag')
        dt = datetime(year=2021, month=1, day=25, hour=12, minute=39)
        with self.assertRaises(Exception):
            self._diary_manager.add_record(dt, 'tag', note='test note')

        self._diary_manager.add_record(
            dt, 'tag', note='test note', update=True)
        self.assertEqual(
            '[25.01.2021 12:39:00] <tag> test note',
            str(self._diary_manager.record_list),
        )

    def test_update_record(self):
        self._diary_manager.add_record()

        self._tag_dict.add('tag')
        dt = datetime(year=2021, month=2, day=1, hour=8, minute=57)
        self._diary_manager.update_record(
            0, dt, 'tag', is_active=True, note='test', update=True)

        self.assertEqual(
            '[01.02.2021 08:57:00] <tag: start> test',
            str(self._diary_manager.record_list),
        )

    def test_tag_stat(self):
        self.assertEqual('', self._diary_manager.tag_stat())

        self._tag_dict.add('no tag')
        self.assertEqual(
            '0 no tag',
            self._diary_manager.tag_stat(),
        )
        self._diary_manager.add_record(tag='no tag')
        self.assertEqual(
            '1 no tag',
            self._diary_manager.tag_stat(),
        )
        self._tag_dict.add('test tag')
        self.assertEqual(
            '1 no tag\n'
            '0 test tag',
            self._diary_manager.tag_stat(),
        )
        self._diary_manager.add_record(tag='test tag')
        self._diary_manager.add_record(tag='test tag')
        self.assertEqual(
            '2 test tag\n'
            '1 no tag',
            self._diary_manager.tag_stat(),
        )
        self._tag_dict.add('"ten" tag')
        for _ in range(10):
            self._diary_manager.add_record(tag='"ten" tag')
        self.assertEqual(
            '10 "ten" tag\n'
            '2 test tag\n'
            '1 no tag',
            self._diary_manager.tag_stat(),
        )

    def test_set_tag_id(self):
        dt = datetime(year=2021, month=1, day=27, hour=21, minute=15)
        self._tag_dict.add('tag B')
        self._diary_manager.add_record(
            dt, tag='tag B', note='note B', update=True)
        self._tag_dict.add('tag A')
        self._diary_manager.add_record(
            dt, tag='tag A', note='note A', update=True)

        self.assertEqual(
            '1) tag A\n'
            '0) tag B',
            str(self._diary_manager.tag_dict),
        )
        self._diary_manager.set_tag_id(0, 'tag A')
        self.assertEqual(
            '0) tag A\n'
            '1) tag B',
            str(self._diary_manager.tag_dict),
        )
        self._diary_manager.set_tag_id(3, 'tag A')
        self.assertEqual(
            '3) tag A\n'
            '1) tag B',
            str(self._diary_manager.tag_dict),
        )
        self._diary_manager.set_tag_id(3, 'tag B')
        self.assertEqual(
            '1) tag A\n'
            '3) tag B',
            str(self._diary_manager.tag_dict),
        )
        self._diary_manager.set_tag_id(2, 'tag B')
        self.assertEqual(
            '1) tag A\n'
            '2) tag B',
            str(self._diary_manager.tag_dict),
        )

        self.assertEqual(
            '[27.01.2021 21:15:00] <tag B> note B\n'
            '[27.01.2021 21:15:00] <tag A> note A',
            str(self._diary_manager.record_list),
        )

    def test_tag_filter(self):
        self._tag_dict.add('first tag')
        self._tag_dict.add('second tag')
        dt = datetime(year=2021, month=1, day=27, hour=12, minute=52)
        self._diary_manager.add_record(
            dt, 'first tag', note='first note', update=True)
        self._diary_manager.add_record(
            dt, 'second tag', note='second note', update=True)
        self._diary_manager.add_record(
            dt, 'first tag', note='third note', update=True)
        self._diary_manager.add_record(
            dt, 'second tag', note='fourth note', update=True)

        indexes, str_records = self._diary_manager.tag_filter()
        self.assertEqual([0, 1, 2, 3], indexes)
        self.assertEqual([
            '[27.01.2021 12:52:00] <first tag> first note',
            '[27.01.2021 12:52:00] <second tag> second note',
            '[27.01.2021 12:52:00] <first tag> third note',
            '[27.01.2021 12:52:00] <second tag> fourth note',
        ], str_records)
        indexes, str_records = self._diary_manager.tag_filter('first tag')
        self.assertEqual([0, 2], indexes)
        self.assertEqual([
            '[27.01.2021 12:52:00] <first tag> first note',
            '[27.01.2021 12:52:00] <first tag> third note',
        ], str_records)
        indexes, str_records = self._diary_manager.tag_filter('second tag')
        self.assertEqual([1, 3], indexes)
        self.assertEqual([
            '[27.01.2021 12:52:00] <second tag> second note',
            '[27.01.2021 12:52:00] <second tag> fourth note',
        ], str_records)

    def tearDown(self) -> None:
        db.clear()
        db.save()
Esempio n. 6
0
 def setUp(self) -> None:
     db.load()
     self._tag_dict = TagDict()
Esempio n. 7
0
class TestTagDict(unittest.TestCase):
    def setUp(self) -> None:
        db.load()
        self._tag_dict = TagDict()

    def test_getitem(self):
        self.assertEqual('KeyError: 0', self._tag_dict[0])

    def test_add(self):
        self.assertEqual(0, self._tag_dict.add('no tag'))
        self.assertEqual(1, self._tag_dict.add('test tag'))
        self.assertEqual('no tag', self._tag_dict[0])
        self.assertEqual('test tag', self._tag_dict[1])

    def test_add_the_same(self):
        self.assertEqual(0, self._tag_dict.add('no tag'))
        self.assertEqual(0, self._tag_dict.add('no tag'))
        self.assertEqual('no tag', self._tag_dict[0])
        self.assertEqual('KeyError: 1', self._tag_dict[1])

    def test_delete(self):
        self.assertEqual(0, self._tag_dict.add('no tag'))
        self.assertEqual(1, self._tag_dict.add('test tag'))

        self.assertEqual('test tag', self._tag_dict[1])
        self._tag_dict.delete('test tag')
        self.assertEqual('KeyError: 1', self._tag_dict[1])

    def test_add_after_delete(self):
        self.assertEqual(0, self._tag_dict.add('no tag'))
        self.assertEqual(1, self._tag_dict.add('first tag'))
        self.assertEqual(2, self._tag_dict.add('second tag'))

        self._tag_dict.delete('first tag')
        self.assertEqual(1, self._tag_dict.add('third tag'))

    def test_get_id(self):
        self.assertEqual(-1, self._tag_dict.get_id('no tag'))
        self.assertEqual(-1, self._tag_dict.get_id('test tag'))
        self.assertEqual(0, self._tag_dict.add('no tag'))
        self.assertEqual(1, self._tag_dict.add('test tag'))
        self.assertEqual(0, self._tag_dict.get_id('no tag'))
        self.assertEqual(1, self._tag_dict.get_id('test tag'))

    def test_set_id(self):
        # id isn't used, tag isn't exist
        self.assertEqual(0, self._tag_dict.set_id(10, 'first tag'))
        self.assertEqual('first tag', self._tag_dict[10])

        # id isn't used, tag is exist
        self.assertEqual(10, self._tag_dict.set_id(20, 'first tag'))
        self.assertEqual('KeyError: 10', self._tag_dict[10])
        self.assertEqual('first tag', self._tag_dict[20])

        # id is used, tag isn't exist
        self.assertEqual(0, self._tag_dict.set_id(20, 'second tag'))
        self.assertEqual('second tag', self._tag_dict[20])
        self.assertEqual('first tag', self._tag_dict[0])

        # id is used, tag is exist
        self.assertEqual(0, self._tag_dict.set_id(20, 'first tag'))
        self.assertEqual('first tag', self._tag_dict[20])
        self.assertEqual('second tag', self._tag_dict[0])

    def test_rename(self):
        self.assertEqual(0, self._tag_dict.add('no tag'))
        self._tag_dict.rename('no tag', 'No tag!')
        self.assertEqual(0, self._tag_dict.get_id('No tag!'))

    def test_str(self):
        self._tag_dict.add('tag C')
        self._tag_dict.add('tag b')
        self._tag_dict.add('tag A')
        self.assertEqual(
            '2) tag A\n'
            '1) tag b\n'
            '0) tag C',
            str(self._tag_dict),
        )

    def tearDown(self) -> None:
        db.clear()
        db.save()
Esempio n. 8
0
 def setUp(self) -> None:
     db.load()
     td = TagDict()
     td.add('no tag')
     td.add('test tag')
     self._record_list = RecordList()
Esempio n. 9
0
 def setUp(self) -> None:
     db.load()
     td = TagDict()
     td.add('no tag')
     td.add('test tag')
Esempio n. 10
0
from datetime import datetime
from typing import Optional

from tagdict import TagDict
from datetime_format import datetime_to_str

tag_dict = TagDict()


class Record:
    def __init__(
        self,
        dt: Optional[datetime] = None,
        tag_id: int = 0,
        is_active: Optional[bool] = None,
        note: str = '',
    ):
        self._dt = dt if dt else datetime.now()
        self._tag_id = tag_id
        self._note = note
        self._is_active = is_active

    def __eq__(self, other):
        return (self._dt == other.get_dt()
                and self._tag_id == other.get_tag_id()
                and self._note == other.get_note())

    def __str__(self):
        result = '[' + datetime_to_str(self._dt) + ']'
        result += ' <' + self._tag_id_and_is_active_to_str() + '>'
        if self._note: