Bug fixes for file_backend, api changes, etc
authorEd Page <eopage@byu.net>
Sat, 18 Apr 2009 21:07:41 +0000 (16:07 -0500)
committerEd Page <eopage@byu.net>
Sat, 18 Apr 2009 21:07:41 +0000 (16:07 -0500)
src/cache_backend.py
src/file_backend.py
src/rtm_view.py
support/builddeb.py

index 1bee9e8..bc0d6be 100644 (file)
@@ -1,4 +1,9 @@
-class CacheBackend(object):
+"""
+@todo Write and eager cache which will then, combined with file_backend, will be the basis of sync
+"""
+
+
+class LazyCacheBackend(object):
 
        def __init__(self, backend):
                self._backend = backend
@@ -15,8 +20,9 @@ class CacheBackend(object):
                self._backend.load()
 
        def add_project(self, name):
-               self._backend.add_project(name)
+               projId = self._backend.add_project(name)
                self._invalidate_projects()
+               return projId
 
        def set_project_name(self, projId, name):
                self._backend.set_project_name(projId, name)
@@ -61,9 +67,10 @@ class CacheBackend(object):
                return self._items[projId][taskId]
 
        def add_task(self, projId, taskName):
-               self._backend.add_task(projId, taskName)
+               taskId = self._backend.add_task(projId, taskName)
                self._invalidate_projects_tasks(projId)
                self._invalidate_metaprojects_tasks()
+               return taskId
 
        def set_project(self, taskId, newProjId):
                self._backend.set_project(taskId, newProjId)
@@ -89,8 +96,9 @@ class CacheBackend(object):
                self._invalidate_task(taskId)
 
        def add_note(self, taskId, noteTitle, noteBody):
-               self._backend.add_note(taskId, noteTitle, noteBody)
+               noteId = self._backend.add_note(taskId, noteTitle, noteBody)
                self._invalidate_task(taskId)
+               return noteId
 
        def update_note(self, noteId, noteTitle, noteBody):
                self._backend.update_note(noteId, noteTitle, noteBody)
index 7ff2627..e846f98 100644 (file)
@@ -37,6 +37,9 @@ class FileBackend(object):
                }
                assert projId not in self._projects, "How did uuid %r repeat?" % projId
                self._projects[projId] = projDetails
+               if projId not in self._items:
+                       self._items[projId] = {}
+               return projId
 
        def set_project_name(self, projId, name):
                projDetails = self._projects[projId]
@@ -44,7 +47,7 @@ class FileBackend(object):
 
        def set_project_visibility(self, projId, visibility):
                projDetails = self._projects[projId]
-               projDetails["isVisible"] = False
+               projDetails["isVisible"] = visibility
 
        def get_projects(self):
                return self._projects.itervalues()
@@ -68,17 +71,15 @@ class FileBackend(object):
                return self._locations.itervalues()
 
        def get_tasks_with_details(self, projId):
-               return (
-                       taskDetails
-                       for taskDetails in self._items
-                               if taskDetails["projId"] == projId
-               )
+               return self._items[projId]
 
        def get_task_details(self, taskId):
-               return self._items[taskId]
+               projId, partialTaskId = self._unpack_ids(taskId)
+               return self._items[projId][taskId]
 
        def add_task(self, projId, taskName):
-               taskId = uuid.uuid4().hex
+               partialTaskId = uuid.uuid4().hex
+               taskId = self._pack_ids(projId, partialTaskId)
                assert taskId not in self._items, "How did uuid %r repeat?" % taskId
                taskDetails = {
                        "id": taskId,
@@ -93,30 +94,37 @@ class FileBackend(object):
                        "estimate": toolbox.Optional(),
                        "notes": {},
                }
-               self._items[taskId] = taskDetails
+               self._items[projId][taskId] = taskDetails
+               return taskId
 
        def set_project(self, taskId, newProjId):
-               taskDetails = self._items[taskId]
+               projId, partialTaskId = self._unpack_ids(taskId)
+               taskDetails = self._items[projId][taskId]
                taskDetails["projId"] = newProjId
 
        def set_name(self, taskId, name):
-               taskDetails = self._items[taskId]
+               projId, partialTaskId = self._unpack_ids(taskId)
+               taskDetails = self._items[projId][taskId]
                taskDetails["name"] = name
 
        def set_duedate(self, taskId, dueDate):
-               taskDetails = self._items[taskId]
+               projId, partialTaskId = self._unpack_ids(taskId)
+               taskDetails = self._items[projId][taskId]
                taskDetails["dueDate"] = dueDate
 
        def set_priority(self, taskId, priority):
-               taskDetails = self._items[taskId]
+               projId, partialTaskId = self._unpack_ids(taskId)
+               taskDetails = self._items[projId][taskId]
                taskDetails["priority"] = priority
 
        def complete_task(self, taskId):
-               taskDetails = self._items[taskId]
+               projId, partialTaskId = self._unpack_ids(taskId)
+               taskDetails = self._items[projId][taskId]
                taskDetails["isCompleted"] = True
                taskDetails["completionDate"] = toolbox.Optional(datetime.datetime.now())
 
        def add_note(self, taskId, noteTitle, noteBody):
+               projId, partialTaskId = self._unpack_ids(taskId)
                partialNoteId = uuid.uuid4().hex
                noteId = self._pack_ids(taskId, partialNoteId)
                note = {
@@ -124,17 +132,20 @@ class FileBackend(object):
                        "title": noteTitle,
                        "body": noteBody,
                }
-               assert noteId not in self._items[taskId]["notes"]
-               self._items[taskId]["notes"][noteId] = note
+               assert noteId not in self._items[projId][taskId]["notes"]
+               self._items[projId][taskId]["notes"][noteId] = note
+               return noteId
 
        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
+               projId, partialTaskId = self._unpack_ids(taskId)
+               self._items[projId][taskId]["notes"][noteId]["title"] = noteTitle
+               self._items[projId][taskId]["notes"][noteId]["body"] = noteBody
 
        def delete_note(self, noteId):
                taskId, partialNoteId = self._unpack_ids(noteId)
-               del self._items[taskId]["notes"][noteId]
+               projId, partialTaskId = self._unpack_ids(taskId)
+               del self._items[projId][taskId]["notes"][noteId]
 
        @staticmethod
        def _pack_ids(*ids):
index 7fad71f..158e569 100644 (file)
@@ -487,7 +487,7 @@ class GtkRtMilk(object):
                while True:
                        try:
                                self._manager = rtm_backend.RtmBackend(*credentials)
-                               self._manager = cache_backend.CacheBackend(self._manager)
+                               self._manager = cache_backend.LazyCacheBackend(self._manager)
                                self._credentials = credentials
                                return # Login succeeded
                        except rtm_api.AuthStateMachine.NoData:
index 77ff514..148f3c1 100755 (executable)
@@ -13,6 +13,7 @@ __changelog__ = '''\
 0.3.1
  * Fixed bug where if you had no backend enabled, you couldn't enable a backend (Now hit "Connect" in the "File" menu)
  * Fixed some polish bugs with the popup calendar
+ * Caching added to RTM backend
 
 0.3.0
  * Initial Release