Exemple #1
0
    def create_valid_pipeline(self):
        p = Pipeline(family=PipelineFamily())
        self.add_inputs(p, self.create_input(datatypes.STR_PK, dataset_idx=1))
        m = Method()
        m.method = m
        self.add_inputs(m, self.create_input(datatypes.STR_PK, dataset_idx=1))
        self.add_outputs(m, self.create_output(datatypes.STR_PK,
                                               dataset_idx=1))

        step1 = PipelineStep(pipeline=p, transformation=m, step_num=1)
        p.steps.add(step1)

        cable = PipelineStepInputCable(pipelinestep=step1,
                                       source_step=0,
                                       source=p.inputs.all()[0],
                                       dest=m.inputs.all()[0])
        cable.pipelinestepinputcable = cable
        step1.cables_in.add(cable)

        outcable = PipelineOutputCable(pipeline=p,
                                       output_idx=1,
                                       source_step=1,
                                       source=m.outputs.all()[0],
                                       output_cdt=m.outputs.all()[0].get_cdt())
        p.outcables.add(outcable)

        yield p
Exemple #2
0
    def test_pipeline_many_valid_inputs_clean(self):
        """A Pipeline with multiple, properly indexed inputs is clean."""
        p = Pipeline(family=PipelineFamily())
        self.add_inputs(p, TransformationInput(dataset_idx=2),
                        TransformationInput(dataset_idx=1),
                        TransformationInput(dataset_idx=3))

        p.clean()
Exemple #3
0
    def test_pipeline_one_invalid_input_clean(self):
        """A Pipeline with one input not numbered "1" is not clean."""
        p = Pipeline(family=PipelineFamily())
        self.add_inputs(p, TransformationInput(dataset_idx=4))

        error = "Inputs are not consecutively numbered starting from 1"
        self.assertRaisesRegexp(ValidationError, error, p.clean)
        self.assertRaisesRegexp(ValidationError, error, p.complete_clean)
Exemple #4
0
    def test_pipeline_no_inputs_no_steps(self):
        """A Pipeline with no inputs and no steps is clean but not complete."""
        p = Pipeline(family=PipelineFamily())

        p.clean()

        self.assertRaisesRegexp(
            ValidationError, re.escape("Pipeline {} has no steps".format(p)),
            p.complete_clean)
Exemple #5
0
    def test_pipeline_many_invalid_inputs_clean(self):
        """A Pipeline with multiple, badly indexed inputs is not clean."""
        p = Pipeline(family=PipelineFamily())
        self.add_inputs(p, TransformationInput(dataset_idx=2),
                        TransformationInput(dataset_idx=3),
                        TransformationInput(dataset_idx=4))

        self.assertRaisesRegexp(
            ValidationError,
            "Inputs are not consecutively numbered starting from 1", p.clean)
Exemple #6
0
    def test_pipeline_one_valid_input_no_steps(self):
        """A Pipeline with one valid input, but no steps, is clean but not complete."""
        p = Pipeline(family=PipelineFamily())
        self.add_inputs(p, TransformationInput(dataset_idx=1))

        p.clean()

        self.assertRaisesRegexp(
            ValidationError, re.escape("Pipeline {} has no steps".format(p)),
            p.complete_clean)
Exemple #7
0
    def __init__(self, *args, **kwargs):
        super(PipelineSerializer, self).__init__(*args, **kwargs)
        # Set the querysets of the related model fields.
        curr_user = self.context["request"].user
        # LOGGER.debug("PL SERIALIZER INIT %s" % self.context.get("only_is_published", False))

        revision_parent_field = self.fields["revision_parent"]
        revision_parent_field.queryset = Pipeline.filter_by_user(curr_user)

        family_field = self.fields["family"]
        family_field.queryset = PipelineFamily.filter_by_user(curr_user)
Exemple #8
0
    def test_pipeline_many_valid_steps_clean(self):
        """Test step index check, well-indexed multi-step case."""
        p = Pipeline(family=PipelineFamily())
        self.add_inputs(p, TransformationInput(dataset_idx=1))
        m = Method()
        self.add_inputs(m, TransformationInput(dataset_idx=1))
        p.steps.add(PipelineStep(pipeline=p, transformation=m, step_num=2))
        p.steps.add(PipelineStep(pipeline=p, transformation=m, step_num=1))
        p.steps.add(PipelineStep(pipeline=p, transformation=m, step_num=3))

        p.clean()
Exemple #9
0
    def test_pipeline_many_invalid_steps_clean(self):
        """Test step index check, badly-indexed multi-step case."""
        p = Pipeline(family=PipelineFamily())
        self.add_inputs(p, TransformationInput(dataset_idx=1))
        m = Method()
        self.add_inputs(m, TransformationInput(dataset_idx=1))
        p.steps.add(PipelineStep(pipeline=p, transformation=m, step_num=1))
        p.steps.add(PipelineStep(pipeline=p, transformation=m, step_num=4))
        p.steps.add(PipelineStep(pipeline=p, transformation=m, step_num=5))

        self.assertRaisesRegexp(
            ValidationError,
            "Steps are not consecutively numbered starting from 1", p.clean)
Exemple #10
0
    def test_build_removal_plan_for_used_image(self):
        image = DockerImage(id=99, name='doomed')
        method = image.methods.create(transformation_ptr_id=100)
        step = method.pipelinesteps.create(id=101)
        step.pipeline = Pipeline(transformation_ptr_id=102)
        step.pipeline.family = PipelineFamily()

        expected_plan = empty_removal_plan()
        expected_plan['DockerImages'].add(image)
        expected_plan['Methods'].add(method)
        expected_plan['Pipelines'].add(step.pipeline)

        plan = image.build_removal_plan()

        self.assertEqual(expected_plan, plan)
Exemple #11
0
    def test_pipeline_oneStep_invalid_cabling_incorrect_cdt_clean(self):
        """Bad cabling: input is of wrong CompoundDatatype."""
        p = Pipeline(family=PipelineFamily())
        self.add_inputs(p, self.create_input(datatypes.INT_PK, dataset_idx=1))
        m = Method()
        self.add_inputs(m, self.create_input(datatypes.STR_PK, dataset_idx=1))

        step1 = PipelineStep(pipeline=p, transformation=m, step_num=1)
        p.steps.add(step1)

        cable = PipelineStepInputCable(pipelinestep=step1,
                                       source_step=0,
                                       source=p.inputs.all()[0],
                                       dest=m.inputs.all()[0])
        cable.pipelinestepinputcable = cable
        step1.cables_in.add(cable)

        cable.clean()
        self.assertRaisesRegexp(
            ValidationError,
            'Custom wiring required for cable "{}"'.format(cable),
            cable.clean_and_completely_wired)