-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)
def get_tasks_with_details(self, projId):
self._populate_tasks(projId)
- return self._items[projId]
+ return self._items[projId].itervalues()
def get_task_details(self, taskId):
projId = self._taskIdToProjId[taskId]
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()
+ self._taskIdToProjId[taskId] = projId
+ 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)
def _populate_projects(self):
if self._projects:
+ print "SAVED BY THE CACHE"
return
self._projects = dict((
(proj["id"], proj)
def _populate_tasks(self, projId):
if projId in self._items:
+ print "SAVED BY THE CACHE"
return
self._items[projId] = dict((
(task["id"], task)
- for task in self.get_tasks_with_details(projId)
+ for task in self._backend.get_tasks_with_details(projId)
))
for taskId, task in self._items[projId].iteritems():
self._taskIdToProjId[taskId] = task["projId"]
- for noteId, note in task.notes.iteritems():
+ for noteId, note in task["notes"].iteritems():
self._noteIdToTaskId[noteId] = taskId
def _populate_locations(self):
if self._locations:
+ print "SAVED BY THE CACHE"
return
self._locations = dict((
(loc["id"], loc)
self._invalidate_metaprojects_tasks()
def _invalidate_projects_tasks(self, projId):
- del self._items[projId]
+ if projId in self._items:
+ del self._items[projId]
def _invalidate_metaprojects_tasks(self):
- for projId in self._get_metalists():
- self._invalidate_projects_tasks(projId)
+ for proj in self._get_metalists():
+ self._invalidate_projects_tasks(proj["id"])
def _get_metalists(self):
return (