def createVTodoFromTask(task): """Create a VTodo object from a yokadi task @param task: yokadi task (db.Task object) @return: ical VTODO (icalendar.Calendar.Todo object)""" vTodo = icalendar.Todo() vTodo["uid"] = TASK_UID % task.id vTodo["related-to"] = PROJECT_UID % task.project.id # Add standard attribute for yokadiAttribute, icalAttribute in list(YOKADI_ICAL_ATT_MAPPING.items()): attr = getattr(task, yokadiAttribute) if attr: if yokadiAttribute == "urgency": attr = icalutils.yokadiUrgencyToIcalPriority(attr) if yokadiAttribute == "title": attr += " (%s)" % task.id vTodo.add(icalAttribute, attr) # Add categories from keywords categories = [] if task.taskKeywords: for name, value in list(task.getKeywordDict().items()): if value: categories.append("%s=%s" % (name, value)) else: categories.append(name) vTodo.add("categories", categories) return vTodo
def createVTodoFromTask(task): """Create a VTodo object from a yokadi task @param task: yokadi task (db.Task object) @return: ical VTODO (icalendar.Calendar.Todo object)""" vTodo = icalendar.Todo() vTodo["uid"] = TASK_UID % task.id vTodo["related-to"] = PROJECT_UID % task.project.id # Add standard attribute for yokadiAttribute, icalAttribute in YOKADI_ICAL_ATT_MAPPING.items(): attr = getattr(task, yokadiAttribute) if attr: if yokadiAttribute == "urgency": attr = icalutils.yokadiUrgencyToIcalPriority(attr) if yokadiAttribute == "title": attr += " (%s)" % task.id vTodo.add(icalAttribute, attr) # Add categories from keywords categories = [] if task.keywords: for name, value in task.getKeywordDict().items(): if value: categories.append("%s=%s" % (name, value)) else: categories.append(name) vTodo.add("categories", categories) return vTodo
def updateTaskFromVTodo(task, vTodo): """Update a yokadi task with an ical VTODO object @param task: yokadi task (db.Task object) @param vTodo: ical VTODO (icalendar.Calendar.Todo object)""" for yokadiAttribute, icalAttribute in list( YOKADI_ICAL_ATT_MAPPING.items()): attr = vTodo.get(icalAttribute) if attr: # Convert ical type (vDates, vInt..) to sql alchemy understandable type (datetime, int...) attr = icalutils.convertIcalType(attr) if yokadiAttribute == "title": # Remove (id) attr = re.sub("\s?\(%s\)" % task.id, "", attr) if yokadiAttribute == "doneDate": # A done date defined indicate that task is done task.status = "done" # BUG: Done date is UTC, we must compute local time for yokadi if yokadiAttribute == "urgency": if attr == icalutils.yokadiUrgencyToIcalPriority(task.urgency): # Priority does not change - don't update it continue else: # Priority has changed, we need to update urgency attr = icalutils.icalPriorityToYokadiUrgency(int(attr)) # Update attribute setattr(task, yokadiAttribute, attr) # Update keywords from categories if vTodo.get("categories"): if isinstance(vTodo.get("categories"), (list)): categories = vTodo.get("categories") else: categories = vTodo.get("categories").split(",") keywords = ["@%s" % k for k in categories] garbage, keywordFilters = parseutils.extractKeywords( " ".join(keywords)) newKwDict = parseutils.keywordFiltersToDict(keywordFilters) if garbage: print("Got garbage while parsing categories: %s" % garbage) dbutils.createMissingKeywords(list(newKwDict.keys()), interactive=False) task.setKeywordDict(newKwDict)
def updateTaskFromVTodo(task, vTodo): """Update a yokadi task with an ical VTODO object @param task: yokadi task (db.Task object) @param vTodo: ical VTODO (icalendar.Calendar.Todo object)""" for yokadiAttribute, icalAttribute in YOKADI_ICAL_ATT_MAPPING.items(): attr = vTodo.get(icalAttribute) if attr: # Convert ical type (vDates, vInt..) to sqlobjectunderstandable type (datetime, int...) attr = icalutils.convertIcalType(attr) if yokadiAttribute == "title": # Remove (id) attr = re.sub("\s?\(%s\)" % task.id, "", attr) if yokadiAttribute == "doneDate": # A done date defined indicate that task is done task.status = "done" # BUG: Done date is UTC, we must compute local time for yokadi if yokadiAttribute == "urgency": if attr == icalutils.yokadiUrgencyToIcalPriority(task.urgency): # Priority does not change - don't update it continue else: # Priority has changed, we need to update urgency attr = icalutils.icalPriorityToYokadiUrgency(int(attr)) # Update attribute setattr(task, yokadiAttribute, attr) # Update keywords from categories if vTodo.get("categories"): if isinstance(vTodo.get("categories"), (list)): categories = vTodo.get("categories") else: categories = vTodo.get("categories").split(",") keywords = ["@%s" % k for k in categories] garbage, keywordFilters = parseutils.extractKeywords(" ".join(keywords)) newKwDict = parseutils.keywordFiltersToDict(keywordFilters) if garbage: print "Got garbage while parsing categories: %s" % garbage dbutils.createMissingKeywords(newKwDict.keys(), interactive=False) task.setKeywordDict(newKwDict)