'Return a flatten node list ordered by the hierarchy of the nodes in the workflow'

@property
def node_list(self):

    def flatten(nodes):
        flat = []
        if (type(nodes) == list):
            for node in nodes:
                flat.extend(flatten(node))
        else:
            flat.append(nodes)
        return flat
    def from_iterable(iterables):
        for it in iterables:
            for element in it:
                (yield element)
    return list(chain(from_iterable([flatten(row) for row in self.get_hierarchy()])))
