def do_t_medit(self, line): """Mass edit tasks of a project. t_medit <project_name> Starts a text editor with the task list, you can then: - edit tasks text and keywords - mark tasks as done or started - add new tasks - adjust urgency - delete tasks """ if not line: raise BadUsageException("Missing parameters") projectName = parseutils.parseOneWordName(line) projectName = self._realProjectName(projectName) project = dbutils.getOrCreateProject(projectName) if not project: return oldList = massedit.createEntriesForProject(project) oldText = massedit.createMEditText(oldList) newText = oldText while True: newText = tui.editText(newText, suffix=".medit") if newText == oldText: print("No changes") return try: newList = massedit.parseMEditText(newText) except massedit.ParseError as exc: print(exc) print() if tui.confirm("Modify text and try again"): lst = newText.splitlines() lst.insert(exc.lineNumber, "# ^ " + exc.message) newText = "\n".join(lst) continue else: return try: massedit.applyChanges(project, oldList, newList) self.session.commit() break except YokadiException as exc: print(exc) print() if not tui.confirm("Modify text and try again"): return
def do_p_add(self, line): """Add new project. p_add <projectName>""" if not line: print("Missing project name.") return projectName = parseutils.parseOneWordName(line) session = db.getSession() try: project = Project(name=projectName) session.add(project) session.commit() except IntegrityError: session.rollback() raise YokadiException("A project named %s already exists. Please find another name" % projectName) print("Added project '%s'" % projectName)
def do_a_edit_name(self, line): """Edit the name of an alias. a_edit_name <alias name>""" session = db.getSession() name = line if not name in self.aliases: raise YokadiException("There is no alias named {}".format(name)) newName = tui.editLine(name) newName = parseutils.parseOneWordName(newName) if newName in self.aliases: raise YokadiException("There is already an alias named {}.".format(newName)) session = db.getSession() db.Alias.rename(session, name, newName) session.commit() self._updateAliasDict()
def do_p_edit(self, line): """Edit a project. p_edit <project name>""" session = db.getSession() project = dbutils.getOrCreateProject(line, createIfNeeded=False) if not project: raise YokadiException("Project does not exist.") # Edit line = tui.editLine(project.name) # Update project projectName = parseutils.parseOneWordName(line) try: project.name = projectName session.commit() except IntegrityError: session.rollback() raise YokadiException("A project named %s already exists. Please find another name" % projectName)