code: def to_vobject(self, project=None, uid=None):
          
          self._update()
          vtodos = iCalendar()
  
          if uid:
              uid = uid.split('@')[0]
              if not project:
                  for p in self._tasks:
                      if uid in self._tasks[p]:
                          project = p
                          break
              self._gen_vtodo(self._tasks[basename(project)][uid], vtodos.add('vtodo'))
          elif project:
              for task in self._tasks[basename(project)].values():
                  self._gen_vtodo(task, vtodos.add('vtodo'))
          else:
              for project in self._tasks:
                  for task in self._tasks[project].values():
                      self._gen_vtodo(task, vtodos.add('vtodo'))
  
          return vtodos
docs: Return vObject object of Taskwarrior tasks
          If filename and UID are specified, the vObject only contains that task.
          If only a filename is specified, the vObject contains all events in the project.
          Otherwise the vObject contains all all objects of all files associated with the IcsTask object.
  
          project -- the Taskwarrior project
          uid -- the UID of the task