diff --git a/scanpipe/pipelines/__init__.py b/scanpipe/pipelines/__init__.py index 7bf84bdd4..5dfc3444a 100644 --- a/scanpipe/pipelines/__init__.py +++ b/scanpipe/pipelines/__init__.py @@ -70,6 +70,17 @@ def get_graph(cls): """ return [{"name": step.__name__, "doc": getdoc(step)} for step in cls.steps] + @classmethod + def get_info(cls): + """ + Return a dict of combined data about this Pipeline. + """ + return { + "name": cls.get_name(), + "description": cls.get_doc(), + "steps": cls.get_graph(), + } + def log(self, message): """ Log the `message` to this module logger and to the Run instance. diff --git a/scanpipe/templates/scanpipe/project_form.html b/scanpipe/templates/scanpipe/project_form.html index 75a8304df..8f6fd3426 100644 --- a/scanpipe/templates/scanpipe/project_form.html +++ b/scanpipe/templates/scanpipe/project_form.html @@ -75,35 +75,35 @@

Pipelines:

- {% for pipeline in pipelines %} + {% for pipeline_key, pipeline_info in pipelines.items %}
- - {{ pipeline.name }} + + {{ pipeline_key }} - - {{ pipeline.description }} + {{ pipeline_info.description }}
{% endfor %}
diff --git a/scanpipe/tests/test_pipelines.py b/scanpipe/tests/test_pipelines.py index 1c6873677..c160f6ef0 100644 --- a/scanpipe/tests/test_pipelines.py +++ b/scanpipe/tests/test_pipelines.py @@ -68,6 +68,17 @@ def test_scanpipe_pipelines_class_get_doc(self): self.assertEqual(expected, pipeline_class.get_doc()) self.assertEqual(expected, pipeline_instance.get_doc()) + def test_scanpipe_pipelines_class_get_info(self): + expected = { + "name": "DoNothing", + "description": "A pipeline that does nothing, in 2 steps.", + "steps": [ + {"name": "step1", "doc": "Step1 doc."}, + {"name": "step2", "doc": "Step2 doc."}, + ], + } + self.assertEqual(expected, DoNothing.get_info()) + def test_scanpipe_pipeline_class_log(self): project1 = Project.objects.create(name="Analysis") run = project1.add_pipeline("do_nothing") diff --git a/scanpipe/views.py b/scanpipe/views.py index 19c3b6cfa..ae1e3e746 100644 --- a/scanpipe/views.py +++ b/scanpipe/views.py @@ -76,14 +76,10 @@ class ProjectCreateView(generic.CreateView): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) - context["pipelines"] = [ - { - "name": name, - "description": pipeline_class.get_doc(), - "steps": pipeline_class.get_graph(), - } - for name, pipeline_class in scanpipe_app_config.pipelines.items() - ] + context["pipelines"] = { + key: pipeline_class.get_info() + for key, pipeline_class in scanpipe_app_config.pipelines.items() + } return context def get_success_url(self):