def testGetTaskFromId(self): tui.addInputAnswers("y") t1 = dbutils.addTask("x", "t1", {}) task = dbutils.getTaskFromId(str(t1.id)) self.assertEqual(task, t1) task = dbutils.getTaskFromId(t1.id) self.assertEqual(task, t1) task = dbutils.getTaskFromId(t1.uuid) self.assertEqual(task, t1)
def _processVTodo(self, vTodo): if vTodo["UID"] in self.newTask: # This is a recent new task but remote ical calendar tool is not # aware of new Yokadi UID. Update it here to avoid duplicate new tasks print "update UID to avoid duplicate task" vTodo["UID"] = TASK_UID % self.newTask[vTodo["UID"]] if vTodo["UID"].startswith(UID_PREFIX): # This is a yokadi Task. if vTodo["LAST-MODIFIED"].dt > vTodo["CREATED"].dt: # Task has been modified print "Modified task: %s" % vTodo["UID"] result = TASK_RE.match(vTodo["UID"]) if result: id = result.group(1) task = dbutils.getTaskFromId(id) print "Task found in yokadi db: %s" % task.title updateTaskFromVTodo(task, vTodo) else: raise YokadiException("Task %s does exist in yokadi db " % id) else: # This is a new task print "New task %s (%s)" % (vTodo["summary"], vTodo["UID"]) keywordDict = {} task = dbutils.addTask(INBOX_PROJECT, vTodo["summary"], keywordDict, interactive=False) # Keep record of new task origin UID to avoid duplicate # if user update it right after creation without reloading the # yokadi UID # TODO: add purge for old UID self.newTask[vTodo["UID"]] = task.id
def do_t_add_keywords(self, line): """Add keywords to an existing task t_add_keywords <id> <@keyword1> <@keyword2>[=<value>]... """ tokens = parseutils.simplifySpaces(line).split(" ", 1) if len(tokens) < 2: raise YokadiException( "You should give at least two arguments: <task id> <keyword>") task = dbutils.getTaskFromId(tokens[0]) garbage, keywordFilters = parseutils.extractKeywords(tokens[1]) newKwDict = parseutils.keywordFiltersToDict(keywordFilters) if garbage: raise YokadiException( "Cannot parse line, got garbage (%s). Maybe you forgot to add @ before keyword ?" % garbage) if not dbutils.createMissingKeywords(list(newKwDict.keys())): # User cancel keyword creation return kwDict = task.getKeywordDict() kwDict.update(newKwDict) task.setKeywordDict(kwDict) self.session.merge(task) self.session.commit()
def applyChanges(project, oldList, newList, interactive=True): """ Modify a project so that its task list is newList @param project: the project name @param oldList: a list of Task instances @param newList: a list of MEditEntry @param interactive: whether to confirm creation of new keywords """ session = db.getSession() # Sanity check: all ids in newList should be in oldList oldIds = set([x.id for x in oldList]) newIds = set([x.id for x in newList if x.id is not None]) unknownIds = newIds.difference(oldIds) if unknownIds: idString = ", ".join([str(x) for x in unknownIds]) raise YokadiException("Unknown id(s): %s" % idString) # Check keywords for entry in newList: for name in entry.keywords: dbutils.getOrCreateKeyword(name, interactive=interactive) # Remove tasks whose lines have been deleted for id in oldIds.difference(newIds): task = dbutils.getTaskFromId(id) session.delete(task) # Update existing tasks, add new ones nbTasks = len(newList) for pos, newEntry in enumerate(newList): if newEntry.id: task = dbutils.getTaskFromId(newEntry.id) else: task = Task(creationDate=datetime.now().replace(second=0, microsecond=0), project=project) task.title = newEntry.title task.setKeywordDict(newEntry.keywords) task.setStatus(newEntry.status) task.urgency = nbTasks - pos if newEntry.id: session.merge(task) else: session.add(task)
def getTaskFromId(self, tid): if tid == '_': if self.lastTaskId is None: raise YokadiException("No previous task defined") tid = self.lastTaskId task = dbutils.getTaskFromId(tid) if tid != '_': self.lastTaskId = task.id return task
def testEdit(self): task = dbutils.addTask("prj", "bug", interactive=False) kwDict = dict(_severity=1, _likelihood=2, _bug=3) task.setKeywordDict(kwDict) self.session.commit() tui.addInputAnswers("bug edited", "2", "4", "6") self.cmd.do_bug_edit(str(task.id)) task = dbutils.getTaskFromId(task.id) self.assertEqual(task.title, "bug edited") kwDict = task.getKeywordDict() self.assertEqual(kwDict, dict(_severity=2, _likelihood=4, _bug=6))
def do_t_add_keywords(self, line): """Add keywords to an existing task t_add_keywords <id> <@keyword1> <@keyword2>[=<value>]... """ tokens = parseutils.simplifySpaces(line).split(" ", 1) if len(tokens) < 2: raise YokadiException("You should give at least two arguments: <task id> <keyword>") task = dbutils.getTaskFromId(tokens[0]) garbage, keywordFilters = parseutils.extractKeywords(tokens[1]) newKwDict = parseutils.keywordFiltersToDict(keywordFilters) if garbage: raise YokadiException("Cannot parse line, got garbage (%s). Maybe you forgot to add @ before keyword ?" % garbage) if not dbutils.createMissingKeywords(newKwDict.keys()): # User cancel keyword creation return kwDict = task.getKeywordDict() kwDict.update(newKwDict) task.setKeywordDict(kwDict)