def set_gtg(self, todo: iCalendar, task: Task, namespace: str = None) -> None: remote_tags = [self.to_tag(categ) for categ in self.get_dav(todo)] local_tags = set(tag_name for tag_name in super().get_gtg(task)) for to_add in set(remote_tags).difference(local_tags): task.add_tag(to_add) for to_delete in local_tags.difference(remote_tags): task.remove_tag(to_delete) task.tags.sort(key=remote_tags.index)
def fill_task(cls, todo: iCalendar, task: Task, namespace: str): nmspc = {'namespace': namespace} with DisabledSyncCtx(task): for field in cls.fields: field.set_gtg(todo, task, **nmspc) task.set_attribute("url", str(todo.url), **nmspc) task.set_attribute("calendar_url", str(todo.parent.url), **nmspc) task.set_attribute("calendar_name", todo.parent.name, **nmspc) if not CATEGORIES.has_calendar_tag(task, todo.parent): task.add_tag(CATEGORIES.get_calendar_tag(todo.parent)) return task