예제 #1
0
def solids_in_topological_order(container):
    check.inst_param(container, 'container', IContainSolids)
    _forward_edges, backward_edges = _create_adjacency_lists(
        container.solids, container.dependency_structure)

    order = toposort_flatten(backward_edges)
    return [container.solid_named(solid_name) for solid_name in order]
예제 #2
0
def solids_in_topological_order(pipeline):
    check.inst_param(pipeline, 'pipeline', PipelineDefinition)

    _forward_edges, backward_edges = _create_adjacency_lists(
        pipeline.solids, pipeline.dependency_structure
    )

    order = toposort_flatten(backward_edges)
    return [pipeline.solid_named(solid_name) for solid_name in order]
예제 #3
0
    def solid_names_in_topological_order(self) -> List[str]:
        upstream_outputs = {}

        for solid_invocation_snap in self.dep_structure_snapshot.solid_invocation_snaps:
            solid_name = solid_invocation_snap.solid_name
            upstream_outputs[solid_name] = {
                upstream_output_snap.solid_name
                for input_dep_snap in solid_invocation_snap.input_dep_snaps for
                upstream_output_snap in input_dep_snap.upstream_output_snaps
            }

        return toposort_flatten(upstream_outputs)
예제 #4
0
    def _solids_in_topological_order(self):
        _forward_edges, backward_edges = _create_adjacency_lists(
            self.solids, self.dependency_structure)

        try:
            order = toposort_flatten(backward_edges)
        except CircularDependencyError as err:
            six.raise_from(
                DagsterInvalidDefinitionError(str(err)),
                err,
            )

        return [self.solid_named(solid_name) for solid_name in order]