code: def register_task(self, input, deps=None, manager=None, task_class=None, append=False):
          
          # append True is much easier to use. In principle should be the default behaviour
          # but this would break the previous API so ...
          if not append:
              work = Work(manager=manager)
          else:
              if not self.works:
                  work = Work(manager=manager)
                  append = False
              else:
                  work = self.works[-1]
  
          task = work.register(input, deps=deps, task_class=task_class)
          if not append: self.register_work(work)
  
          return work
docs: Utility function that generates a `Work` made of a single task
  
          Args:
              input: :class:`AbinitInput`
              deps: List of :class:`Dependency` objects specifying the dependency of this node.
                    An empy list of deps implies that this node has no dependencies.
              manager: The :class:`TaskManager` responsible for the submission of the task.
                       If manager is None, we use the :class:`TaskManager` specified during the creation of the work.
              task_class: Task subclass to instantiate. Default: :class:`AbinitTask`
              append: If true, the task is added to the last work (a new Work is created if flow is empty)
  
          Returns:
              The generated :class:`Work` for the task, work[0] is the actual task.