Adding the start of the work done on the file backend
authorEd Page <eopage@byu.net>
Sat, 18 Apr 2009 01:02:55 +0000 (20:02 -0500)
committerEd Page <eopage@byu.net>
Sat, 18 Apr 2009 01:02:55 +0000 (20:02 -0500)
src/file_backend.py [new file with mode: 0644]

diff --git a/src/file_backend.py b/src/file_backend.py
new file mode 100644 (file)
index 0000000..3cd2510
--- /dev/null
@@ -0,0 +1,113 @@
+import uuid
+import datetime
+
+import toolbox
+
+
+class FileManager(object):
+
+       def __init__(self):
+               self._projects = {}
+               self._items = {}
+               self._locations = {}
+
+       def get_projects(self):
+               return (projectDetails for projectDetails in self._projects.itervalues())
+
+       def get_project(self, projId):
+               return self._projects[projId]
+
+       def get_project_names(self):
+               return (projectDetails["name"] for projectDetails in self._projects.itervalues())
+
+       def lookup_project(self, projName):
+               """
+               From a project's name, returns the project's details
+               """
+               todoList = [
+                       projectDetails
+                       for projectDetails in self._projects.itervalues()
+                               if projectDetails["name"] == projName
+               ]
+               assert len(todoList) == 1, "Wrong number of lists found for %s, in %r" % (projName, todoList)
+               return todoList[0]
+
+       def get_locations(self):
+               return (locDetails for locDetails in self._locations.itervalues())
+
+       def get_tasks_with_details(self, projId):
+               return (
+                       taskDetails
+                       for taskDetails in self._items
+                               if taskDetails["projId"] == projId
+               )
+
+       def get_task_details(self, taskId):
+               return self._items[taskId]
+
+       def add_task(self, projId, taskName):
+               taskId = uuid.uuid4()
+               assert taskId not in self._items, "How did uuid %r repeat?" % taskId
+               taskDetails = {
+                       "id": taskId,
+                       "projId": projId,
+                       "name": taskName,
+                       "url": "",
+                       "locationId": toolbox.Optional(),
+                       "dueDate": toolbox.Optional(),
+                       "isCompleted": False,
+                       "completedDate": toolbox.Optional(),
+                       "priority": toolbox.Optional(),
+                       "estimate": toolbox.Optional(),
+                       "notes": {},
+               }
+               self._items[taskId] = taskDetails
+
+       def set_project(self, taskId, newProjId):
+               taskDetails = self._items[taskId]
+               taskDetails["projId"] = newProjId
+
+       def set_name(self, taskId, name):
+               taskDetails = self._items[taskId]
+               taskDetails["name"] = name
+
+       def set_duedate(self, taskId, dueDate):
+               taskDetails = self._items[taskId]
+               taskDetails["dueDate"] = dueDate
+
+       def set_priority(self, taskId, priority):
+               taskDetails = self._items[taskId]
+               taskDetails["priority"] = priority
+
+       def complete_task(self, taskId):
+               taskDetails = self._items[taskId]
+               taskDetails["isCompleted"] = True
+               taskDetails["completionDate"] = toolbox.Optional(datetime.datetime.now())
+
+       def add_note(self, taskId, noteTitle, noteBody):
+               partialNoteId = uuid.uuid4()
+               noteId = self._pack_ids(taskId, partialNoteId)
+               note = {
+                       "id": noteId,
+                       "title": noteTitle,
+                       "body": noteBody,
+               }
+               assert noteId not in self._items[taskId]["notes"]
+               self._items[taskId]["notes"][noteId] = note
+
+       def update_note(self, noteId, noteTitle, noteBody):
+               taskId, partialNoteId = self._unpack_ids(noteId)
+               self._items[taskId]["notes"][noteId]["title"] = noteTitle
+               self._items[taskId]["notes"][noteId]["body"] = noteBody
+
+       def delete_note(self, noteId):
+               taskId, partialNoteId = self._unpack_ids(noteId)
+               del self._items[taskId]["notes"][noteId]
+
+       @staticmethod
+       def _pack_ids(*ids):
+               return "-".join((str(id) for id in ids))
+
+       @staticmethod
+       def _unpack_ids(ids):
+               return ids.split("-")