Let the pipe flow
        :return:

def run(self):
        """
        Let the pipe flow
        :return:
        """
        assert len(self.elements) >= 2, "In order flow, pipe needs 2 or more elements"
        in_pipe = self.elements[0]
        other_pipes = self.elements[1:-1]
        out_pipe = self.elements[-1]

        self.make_assertions(in_pipe, other_pipes, out_pipe)

        for data in in_pipe.grasp():
            write = True

            for element in other_pipes:
                if isinstance(element, elements.DataPypElement):
                    data = element.extend(data)
                elif isinstance(element, elements.FilterPypElement):
                    if not element.stay(data):
                        write = False
                        break
            if write:
                out_pipe.extract(data)