From ad6f2efb5de355f580222433cdd9cccdf51e7804 Mon Sep 17 00:00:00 2001 From: tdruez <489057+tdruez@users.noreply.github.com> Date: Thu, 23 Jan 2025 17:51:34 +0900 Subject: [PATCH] Handle the exception when the policies.yml is not valid #1560 (#1561) Signed-off-by: tdruez --- scanpipe/policies.py | 2 +- scanpipe/templates/scanpipe/project_detail.html | 2 +- scanpipe/tests/data/policies/broken_policies.yml | 1 + scanpipe/tests/test_views.py | 10 ++++++++++ scanpipe/views.py | 7 +++++++ 5 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 scanpipe/tests/data/policies/broken_policies.yml diff --git a/scanpipe/policies.py b/scanpipe/policies.py index beebf9bd8..d0ea94e5c 100644 --- a/scanpipe/policies.py +++ b/scanpipe/policies.py @@ -30,7 +30,7 @@ def load_policies_yaml(policies_yaml): try: return saneyaml.load(policies_yaml) except saneyaml.YAMLError as e: - raise ValidationError(f"Policies format error: {e}") + raise ValidationError(f"Policies file format error: {e}") def load_policies_file(policies_file, validate=True): diff --git a/scanpipe/templates/scanpipe/project_detail.html b/scanpipe/templates/scanpipe/project_detail.html index 63a3ff54c..89cad4436 100644 --- a/scanpipe/templates/scanpipe/project_detail.html +++ b/scanpipe/templates/scanpipe/project_detail.html @@ -107,7 +107,7 @@
- {% if project.policies_enabled %} + {% if policies_enabled %}
diff --git a/scanpipe/tests/data/policies/broken_policies.yml b/scanpipe/tests/data/policies/broken_policies.yml new file mode 100644 index 000000000..7eb4fb2d1 --- /dev/null +++ b/scanpipe/tests/data/policies/broken_policies.yml @@ -0,0 +1 @@ +[broken \ No newline at end of file diff --git a/scanpipe/tests/test_views.py b/scanpipe/tests/test_views.py index 0f27599da..76081ad5e 100644 --- a/scanpipe/tests/test_views.py +++ b/scanpipe/tests/test_views.py @@ -1286,3 +1286,13 @@ def test_scanpipe_views_project_dependency_tree(self): response = self.client.get(url) self.assertTrue(response.context["recursion_error"]) self.assertContains(response, "The dependency tree cannot be rendered") + + def test_scanpipe_policies_broken_policies_project_details(self): + broken_policies = self.data / "policies" / "broken_policies.yml" + project1 = make_project() + shutil.copyfile(broken_policies, project1.input_path / "policies.yml") + + url = project1.get_absolute_url() + response = self.client.get(url) + self.assertEqual(200, response.status_code) + self.assertContains(response, "Policies file format error") diff --git a/scanpipe/views.py b/scanpipe/views.py index 5cd240866..a2362484e 100644 --- a/scanpipe/views.py +++ b/scanpipe/views.py @@ -747,6 +747,12 @@ def get_context_data(self, **kwargs): pipeline_runs = project.runs.all() self.check_run_scancode_version(pipeline_runs) + policies_enabled = False + try: + policies_enabled = project.policies_enabled + except ValidationError as e: + messages.error(self.request, str(e)) + context.update( { "input_sources": project.get_inputs_with_source(), @@ -763,6 +769,7 @@ def get_context_data(self, **kwargs): "pipeline_runs": pipeline_runs, "codebase_root": codebase_root, "file_filter": self.request.GET.get("file-filter", "all"), + "policies_enabled": policies_enabled, } )