Ejemplo n.º 1
0
    def test_save_two_tasks(self):
        test_file = "test_tasks.xml"
        expected_string = '<tasks><task date_added="2018-10-25 00:00:00" date_finished="None" ' \
                          'date_to_finish="2018-10-25 00:00:00" description="unknown" name="task1" priority="unknown" ' \
                          'reminder="0" status="not_done" type="unknown">none</task><task date_added="2018-10-25 00:00:00" ' \
                          'date_finished="None" date_to_finish="2018-10-25 00:00:00" description="unknown" name="task ' \
                          'drugi" priority="unknown" reminder="0" status="not_done" type="unknown">none</task></tasks>'
        t = TaskLoaderXml(test_file)

        if os.path.isfile(test_file):
            try:
                os.remove(test_file)
            except OSError as e:
                print("Error: %s - %s." % (e.filename, e.strerror))

        t.save([
            TaskFactory.get_task(name='task1',
                                 date_added="2018-10-25 00:00:00",
                                 date_to_finish="2018-10-25 00:00:00"),
            TaskFactory.get_task(name='task drugi',
                                 date_added="2018-10-25 00:00:00",
                                 date_to_finish="2018-10-25 00:00:00")
        ])
        with open(test_file, 'r') as file:
            data = file.read()
            self.assertEqual(''.join(expected_string.split()),
                             ''.join(data.split()))

        try:
            os.remove(test_file)
        except OSError as e:
            print("Error: %s - %s." % (e.filename, e.strerror))
Ejemplo n.º 2
0
    def test_get_tasks_from_file_with_two_tasks(self):
        test_file = "test_tasks.xml"
        if os.path.isfile(test_file):
            try:
                os.remove(test_file)
            except OSError as e:
                print("Error: %s - %s." % (e.filename, e.strerror))
        with open(test_file, 'w') as file:
            file.write(
                '<tasks><task date_added="2018-10-25 00:00:00" date_to_finish="2018-10-25 00:00:00" '
                'description="unknown" name="task1" priority="unknown" reminder="0" status="not_done" type="unknown">'
                'none</task><task date_added="2018-10-26 00:00:00" date_to_finish="2018-10-26 00:00:00" '
                'description="unknown" name="task drugi" priority="unknown" reminder="0" status="not_done" type="unknown">'
                'none</task></tasks>')

        t = TaskLoaderXml(test_file)
        returned_list = t.get()
        t1 = TaskFactory.get_task(name='task1',
                                  date_added="2018-10-25 00:00:00",
                                  date_to_finish="2018-10-25 00:00:00")
        t2 = TaskFactory.get_task(name='task drugi',
                                  date_added="2018-10-26 00:00:00",
                                  date_to_finish="2018-10-26 00:00:00")
        self.assertEqual(len(returned_list), 2)
        self.assertTrue(t1 == returned_list[0])
        self.assertTrue(t2 == returned_list[1])

        try:
            os.remove(test_file)
        except OSError as e:
            print("Error: %s - %s." % (e.filename, e.strerror))
Ejemplo n.º 3
0
 def get_list_next_occurrence(self):
     return_tasks = []
     for periodic_task in self.task_loader.get():
         return_tasks.append(TaskFactory().get_task(
             name=periodic_task.name,
             date_to_finish=periodic_task.get_next_occurrence_as_date(),
             task_type=periodic_task.task_type,
             reminder=periodic_task.reminder,
         ))
     return return_tasks
Ejemplo n.º 4
0
 def test_get_task_empty(self):
     t = TaskFactory.get_task()
     self.assertEqual(t.name, 'unknown')
     self.assertEqual(t.description, 'unknown')
     self.assertEqual(t.date_added, DateHelper.get_today_long())
     self.assertEqual(t.date_to_finish, None)
     self.assertEqual(t.date_finished, None)
     self.assertEqual(t.priority, TaskPriority['unknown'])
     self.assertEqual(t.type, TaskType['unknown'])
     self.assertEqual(t.status, TaskStatus['not_done'])
     self.assertEqual(t.reminder, 0)
Ejemplo n.º 5
0
 def get_tasks(self, time_delta=0):
     return_tasks = []
     target_day = DateHelper.get_today_short(time_delta)
     for periodic_task in self.task_loader.get():
         if periodic_task.is_to_be_reminded(target_day):
             return_tasks.append(TaskFactory().get_task(
                 name=periodic_task.name,
                 date_to_finish=periodic_task.get_next_occurrence_as_date(
                     time_delta),
                 task_type=periodic_task.task_type,
                 reminder=periodic_task.reminder,
             ))
     return return_tasks
Ejemplo n.º 6
0
 def __command_add(self, args):
     if len(args) < 1:
         return MumjolandiaResponseObject(
             status=MumjolandiaReturnValue.task_name_not_given)
     else:
         name = ' '.join(args[0:])
         try:
             self.tasks.append(
                 TaskFactory.get_task(
                     name,
                     date_to_finish=str(DateHelper.get_today_long()),
                 ))
         except IncorrectDateFormatException:
             logging.warning("Task '" + name +
                             "' not added - incorrect date format")
             return MumjolandiaResponseObject(
                 status=MumjolandiaReturnValue.task_incorrect_date_format)
         logging.debug("Added task '" + name + "'")
         self.__save_if_allowed()
         return MumjolandiaResponseObject(
             status=MumjolandiaReturnValue.task_added,
             arguments=[name, len(self.tasks) - 1])
Ejemplo n.º 7
0
 def __command_edit(self, args):
     try:
         task_id = int(args[0])
     except IndexError:  # first argument not given
         return MumjolandiaResponseObject(
             status=MumjolandiaReturnValue.task_edit_wrong_index,
             arguments=['None'])
     try:
         if len(args) < 2:
             raise IndexError
         new_task = TaskFactory.get_task(name=' '.join(args[1:]),
                                         date_to_finish=self.tasks[int(
                                             args[0])].date_to_finish)
         self.tasks[task_id] = new_task
         self.__save_if_allowed()
         return MumjolandiaResponseObject(
             status=MumjolandiaReturnValue.task_edit_ok,
             arguments=[str(task_id)])
     except IndexError:
         return MumjolandiaResponseObject(
             status=MumjolandiaReturnValue.task_edit_wrong_index,
             arguments=[str(task_id)])
Ejemplo n.º 8
0
 def test_get_task_with_parameters(self):
     test_date_added = datetime.datetime.strptime("2018-10-25 00:00:00", '%Y-%m-%d %H:%M:%S')
     test_date_to_finish = datetime.datetime.strptime("2019-10-26 00:00:00", '%Y-%m-%d %H:%M:%S')
     test_date_finished = datetime.datetime.strptime("2015-10-27 00:00:00", '%Y-%m-%d %H:%M:%S')
     t = TaskFactory.get_task(name='żółć xD',
                              description='brak',
                              date_added="2018-10-25 00:00:00",
                              date_to_finish="2019-10-26 00:00:00",
                              date_finished="2015-10-27 00:00:00",
                              priority=TaskPriority.ez,
                              task_type=TaskType.normal,
                              status=TaskStatus.not_done,
                              reminder=5,
                              )
     self.assertEqual(t.name, 'żółć xD')
     self.assertEqual(t.description, 'brak')
     self.assertEqual(t.date_added, test_date_added)
     self.assertEqual(t.date_to_finish, test_date_to_finish)
     self.assertEqual(t.date_finished, test_date_finished)
     self.assertEqual(t.priority, TaskPriority.ez)
     self.assertEqual(t.type, TaskType.normal)
     self.assertEqual(t.status, TaskStatus.not_done)
     self.assertEqual(t.reminder, 5)
Ejemplo n.º 9
0
 def __init__(self, task_file_name):
     self.task_file = task_file_name
     self.task_factory = TaskFactory()
Ejemplo n.º 10
0
class TaskLoaderXml:
    def __init__(self, task_file_name):
        self.task_file = task_file_name
        self.task_factory = TaskFactory()

    def get(self):
        tasks = []
        broken_file_flag = False
        try:
            tree = ET.parse(self.task_file)
            root_element = tree.getroot()
            for child in root_element:
                name = child.get('name')
                description = child.get('description')
                date_added = datetime.datetime.strptime(
                    child.get('date_added'), '%Y-%m-%d %H:%M:%S')
                if child.get('date_to_finish') == 'None':
                    date_to_finish = None
                else:
                    date_to_finish = datetime.datetime.strptime(
                        child.get('date_to_finish'), '%Y-%m-%d %H:%M:%S')
                # 'date finished' is added to interface, so additional check for None is included (because file does not
                # contain 'date_finished' in it's tree)
                if child.get('date_finished'
                             ) == 'None' or child.get('date_finished') is None:
                    date_finished = None
                else:
                    date_finished = datetime.datetime.strptime(
                        child.get('date_finished'), '%Y-%m-%d %H:%M:%S')
                priority = TaskPriority[child.get('priority')]
                task_type = TaskType[child.get('type')]
                status = TaskStatus[child.get('status')]
                try:
                    reminder = child.get('reminder')
                except KeyError:
                    reminder = 0
                if name is None:
                    broken_file_flag = True
                    name = 'error'
                if description is None:
                    broken_file_flag = True
                    description = 'error'
                if date_added is None:
                    broken_file_flag = True
                    date_added = 'error'
                if priority is None:
                    broken_file_flag = True
                    priority = TaskPriority.unknown
                if task_type is None:
                    broken_file_flag = True
                    task_type = TaskType.unknown
                if status is None:
                    broken_file_flag = True
                    status = TaskStatus.unknown
                tasks.append(
                    self.task_factory.get_task(name, description, date_added,
                                               date_to_finish, date_finished,
                                               priority, task_type, status,
                                               reminder))
        except FileNotFoundError:
            raise FileNotFoundError
        except ET.ParseError:
            raise TaskFileBrokenException(tasks)
        if broken_file_flag:
            raise TaskFileBrokenException(tasks)
        return tasks

    def save(self, tasks):
        root_element = ET.Element("tasks")
        for t in tasks:
            if t.date_to_finish is None:
                date_to_finish = 'None'
            else:
                date_to_finish = t.date_to_finish.strftime("%Y-%m-%d %H:%M:%S")
            if t.date_finished is None:
                date_finished = 'None'
            else:
                date_finished = t.date_finished.strftime("%Y-%m-%d %H:%M:%S")
            ET.SubElement(
                root_element,
                "task",
                name=t.name,
                description=t.description,
                date_added=t.date_added.strftime("%Y-%m-%d %H:%M:%S"),
                date_to_finish=date_to_finish,
                date_finished=date_finished,
                priority=str(t.priority.name),
                type=str(t.type.name),
                status=str(t.status.name),
                reminder=str(t.reminder),
            ).text = "none"

        self.__indent(root_element)
        tree = ET.ElementTree(root_element)
        tree.write(self.task_file)

    def __indent(self, elem, level=0):
        i = "\n" + level * "  "
        if len(elem):
            if not elem.text or not elem.text.strip():
                elem.text = i + "  "
            if not elem.tail or not elem.tail.strip():
                elem.tail = i
            for elem in elem:
                self.__indent(elem, level + 1)
            if not elem.tail or not elem.tail.strip():
                elem.tail = i
        else:
            if level and (not elem.tail or not elem.tail.strip()):
                elem.tail = i
Ejemplo n.º 11
0
 def test_incorrect_date_format_exception_raised(self):
     with self.assertRaises(IncorrectDateFormatException):
         TaskFactory.get_task(date_added="12.11.2018")
Ejemplo n.º 12
0
 def test_should_be_reminded_true_ok(self):
     date1 = DateHelper.get_today_short(3)
     task = TaskFactory.get_task(date_to_finish=DateHelper.get_today_short(5), reminder=2)
     self.assertTrue(TaskReminder.should_be_reminded(task, date1))
Ejemplo n.º 13
0
 def test_should_be_reminded_default_date_false_ok(self):
     task = TaskFactory.get_task(date_to_finish=DateHelper.get_today_short(3), reminder=2)
     self.assertFalse(TaskReminder.should_be_reminded(task))