-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
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)
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)
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)
}
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]
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()
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,
"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 = {
"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):