Ejemplo n.º 1
0
 def __add__(self, other):
     """ a + b means TaskGroup([a, b])
     """
     if isiterable(other) and not isinstance(other, AbstractDAG):
         return TaskGroup([self] + list(other))
     else:
         return TaskGroup((self, other))
Ejemplo n.º 2
0
Archivo: dag.py Proyecto: cxz/ploomber
    def _add_edge(self, task_from, task_to, group_name=None):
        """Add an edge between two tasks

        Parameters
        ----------
        group_name : str
            Pass a string to group this edge, upon rendering, upstream
            products are available via task[group_name][tas_name]
        """
        attrs = {} if group_name is None else {'group_name': group_name}

        # when adding a task group (but not a dag)
        if isiterable(task_from) and not isinstance(task_from, DAG):
            # if iterable, add all components as separate upstream tasks
            for a_task_from in task_from:

                # this happens when the task was originally declared in
                # another dag...
                if a_task_from.name not in self._G:
                    self._G.add_node(a_task_from.name, task=a_task_from)

                self._G.add_edge(a_task_from.name, task_to.name, **attrs)

        else:
            # this happens when the task was originally declared in
            # another dag...
            if task_from.name not in self._G:
                self._G.add_node(task_from.name, task=task_from)

            # DAGs are treated like a single task
            self._G.add_edge(task_from.name, task_to.name, **attrs)
Ejemplo n.º 3
0
    def _add_edge(self, task_from, task_to):
        """Add an edge between two tasks
        """
        # if a new task is added, rendering is required again
        self._did_render = False

        if isiterable(task_from) and not isinstance(task_from, DAG):
            # if iterable, add all components as separate upstream tasks
            for a_task_from in task_from:

                # this happens when the task was originally declared in
                # another dag...
                if a_task_from.name not in self._G:
                    self._G.add_node(a_task_from.name, task=a_task_from)

                self._G.add_edge(a_task_from.name, task_to.name)

        else:
            # this happens when the task was originally declared in
            # another dag...
            if task_from.name not in self._G:
                self._G.add_node(task_from.name, task=task_from)

            # DAGs are treated like a single task
            self._G.add_edge(task_from.name, task_to.name)
Ejemplo n.º 4
0
 def set_upstream(self, other):
     if isiterable(other):
         for t in self.tasks:
             for o in other:
                 t.set_upstream(other)
     else:
         for t in self.tasks:
             t.set_upstream(other)
Ejemplo n.º 5
0
 def set_upstream(self, other):
     # if self.treat_as_single_task:
     #     if isiterable(other):
     #         for o in other:
     #             self.dag._add_edge(o, self)
     #     else:
     #         self.dag._add_edge(other, self)
     # else:
     if isiterable(other):
         for t in self.tasks:
             for o in other:
                 t.set_upstream(other)
     else:
         for t in self.tasks:
             t.set_upstream(other)
Ejemplo n.º 6
0
 def __radd__(self, other):
     if isiterable(other):
         return TaskGroup(list(other) + list(self.tasks))
     else:
         return TaskGroup([other] + list(self.tasks))