Exemplo n.º 1
0
    def test_save_tasks(self):
        storage = Storage(TimeDouble())

        task = Task("Task1", "Task1Description word\nMultiline", 10001)
        task.id = 1
        task.state = "Blocked"
        task.blocked_reason = "BlockedReason"
        storage.tasks.append(task)

        task = Task("Task2", "Task2Description", 10002)
        task.id = 2
        task.close(10003, "Test Reason")
        task.set_due_date(10004.1)
        task.time_spent = 100
        storage.tasks.append(task)

        openDouble.reset()
        fileDouble = FileDouble()
        openDouble.add_file(fileDouble)

        storage.save('test_file')
        self.assertEqual('test_file', openDouble.filename[0])
        self.assertEqual('w+', openDouble.mode[0])
        self.assertEqual("""#### Task
## State: Blocked
## Blocked Reason
BlockedReason
## Closed Reason
## Id: 1
## Date Created: 10001
## Date Closed:
## Date Due:
## Time Estimate: 0
## Time Spent: 0
## Summary
Task1
## Description
Task1Description word
Multiline
#### Task
## State: Closed
## Blocked Reason
## Closed Reason
Test Reason
## Id: 2
## Date Created: 10002
## Date Closed: 10003
## Date Due: 10004
## Time Estimate: 0
## Time Spent: 100
## Summary
Task2
## Description
Task2Description
""", fileDouble.written_data)
Exemplo n.º 2
0
    def load(self, filename):
        f = open(filename, 'r')
        f = FileWrapper(f)
        state = "Start"
        newtask = None
        newpomo = None

        skip_read = False
        while True:
            if not skip_read:
                line = f.readline()
            skip_read = False
            if line == "":
                break
            if state == "Start":
                if re.match("#### Task", line):
                    newtask = Task("", "")
                    state = "Task_State"
                    skip_read = True
                if re.match("#### Pomodoro", line):
                    newpomo = Pomo()
                    state = "Pomo_Remaining"

            elif state == "Task_State":

                found, val = self._loadField(f, 'State', hasfield=True)
                if not found:
                    return False
                newtask.state = val

                found, val = self._loadField(f, 'Blocked Reason', hasfield=True, multiline=True)
                if not found:
                    return False
                if val is not None:
                    newtask.blocked_reason = "".join(val).strip()

                found, val = self._loadField(f, 'Closed Reason', hasfield=True, multiline=True)
                if not found:
                    return False
                if val is not None:
                    newtask.closed_reason = "".join(val).strip()

                found, val = self._loadField(f, 'Id', hasfield=True)
                if not found:
                    return False
                if val is not None:
                    newtask.id = int(val)

                found, val = self._loadField(f, 'Date Created', hasfield=True)
                if not found:
                    return False
                if val is not None:
                    newtask.date_created = int(val)

                found, val = self._loadField(f, 'Date Closed', hasfield=True)
                if not found:
                    return False
                if val is not None:
                    newtask.date_closed = int(val)

                found, val = self._loadField(f, 'Date Due', hasfield=True)
                if not found:
                    return False
                if val is not None:
                    newtask.date_due = int(val)

                found, val = self._loadField(f, 'Time Estimate', hasfield=True)
                if not found:
                    return False
                if val is not None:
                    newtask.time_estimate = int(val)

                found, val = self._loadField(f, 'Time Spent', hasfield=True)
                if not found:
                    return False
                if val is not None:
                    newtask.time_spent = int(val)

                found, val = self._loadField(f, 'Summary', hasfield=True, multiline=True)
                if not found:
                    return False
                if val is not None:
                    newtask.summary = "".join(val).strip()

                found, val = self._loadField(f, 'Description', hasfield=True, multiline=True)
                if not found:
                    return False
                if val is not None:
                    newtask.description = "".join(val).strip()

                self.tasks.append(newtask)
                state = "End"

            elif state == "End":
                if re.match("#### Task", line) or re.match("#### Pomodoro", line):
                    if re.match("#### Task", line):
                        state = "Task_State"
                        skip_read = True
                        newtask = Task("", "")
                    else:
                        state = "Pomo_Remaining"
                        newpomo = Pomo()
            elif state == "Pomo_Remaining":
                mo = re.match("## Time Remaining: (.*)", line)
                if mo:
                    remainingTime = float(mo.group(1))
                    newpomo.set_remaining_time(remainingTime)
                    self.pomo = newpomo
                    state = "Pomo_Running"
            elif state == "Pomo_Running":
                mo = re.match("## Running: (.*)", line)
                if mo:
                    if mo.group(1) == "true":
                        state = "Pomo_SaveDate"
                    else:
                        state = "Start"
            elif state == "Pomo_SaveDate":
                mo = re.match("## Save Date: (.*)", line)
                if mo:
                    saveDateUtc = float(mo.group(1))
                    elapsedSinceSave = self.time.time() - saveDateUtc
                    remainingTime = newpomo.get_remaining_time(self.time.time()) - elapsedSinceSave
                    newpomo.set_remaining_time( remainingTime if remainingTime > 0 else 0)
                    newpomo.start(self.time.time())
                    state = "Start"

        if state == "End":
            state = "Start"

        f.close()
        return state == "Start"