From c0803fda0953fefb233196564b712026059d4f07 Mon Sep 17 00:00:00 2001 From: Monal Reddy Date: Tue, 10 Mar 2026 17:20:29 +0000 Subject: [PATCH 1/5] Fix #1802: normalize boolean string values in _clean_package_data and add regression test Signed-off-by: Monal Reddy --- scanpipe/pipes/__init__.py | 14 ++++++++++++++ scanpipe/tests/pipes/test_pipes.py | 15 +++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/scanpipe/pipes/__init__.py b/scanpipe/pipes/__init__.py index 7fd885c36f..f1cb46c629 100644 --- a/scanpipe/pipes/__init__.py +++ b/scanpipe/pipes/__init__.py @@ -171,6 +171,20 @@ def update_or_create_resource(project, resource_data): def _clean_package_data(package_data): """Clean provided `package_data` to make it compatible with the model.""" package_data = package_data.copy() + boolean_fields = { + field.name + for field in DiscoveredPackage._meta.fields + if field.get_internal_type() == "BooleanField" + } + + for key in boolean_fields: + value = package_data.get(key) + if isinstance(value, str): + lower = value.lower() + if lower == "true": + package_data[key] = True + elif lower == "false": + package_data[key] = False if release_date := package_data.get("release_date"): if type(release_date) is str: release_date = release_date.removesuffix("Z") diff --git a/scanpipe/tests/pipes/test_pipes.py b/scanpipe/tests/pipes/test_pipes.py index ee0ab3a88f..f8234b07ce 100644 --- a/scanpipe/tests/pipes/test_pipes.py +++ b/scanpipe/tests/pipes/test_pipes.py @@ -448,3 +448,18 @@ def test_scanpipe_pipes_collect_and_create_codebase_resources(self): self.assertEqual("from", from_resource.tag) to_resource = p1.codebaseresources.get(path="to/a.txt") self.assertEqual("to", to_resource.tag) + + def test_clean_package_data_normalizes_boolean_strings(): + from scanpipe.pipes import _clean_package_data + + package_data = { + "type": "npm", + "name": "react", + "version": "1.0", + "is_virtual": "true", + } + + cleaned = _clean_package_data(package_data) + + assert cleaned["is_virtual"] is True + From 72679c159ccf6322801283a9c08f50af8963dba5 Mon Sep 17 00:00:00 2001 From: Monal-Reddy Date: Tue, 10 Mar 2026 23:59:49 +0530 Subject: [PATCH 2/5] Fix indentation and import location for boolean normalization test Signed-off-by: Monal-Reddy --- scanpipe/tests/pipes/test_pipes.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/scanpipe/tests/pipes/test_pipes.py b/scanpipe/tests/pipes/test_pipes.py index f8234b07ce..19376d788f 100644 --- a/scanpipe/tests/pipes/test_pipes.py +++ b/scanpipe/tests/pipes/test_pipes.py @@ -45,6 +45,7 @@ from scanpipe.tests import mocked_now from scanpipe.tests import package_data1 from scanpipe.tests import resource_data1 +from scanpipe.pipes import _clean_package_data class ScanPipePipesTest(TestCase): @@ -448,18 +449,20 @@ def test_scanpipe_pipes_collect_and_create_codebase_resources(self): self.assertEqual("from", from_resource.tag) to_resource = p1.codebaseresources.get(path="to/a.txt") self.assertEqual("to", to_resource.tag) - + def test_clean_package_data_normalizes_boolean_strings(): - from scanpipe.pipes import _clean_package_data + package_data = { + "type": "npm", + "name": "react", + "version": "1.0", + "is_virtual": "true", + } + cleaned = _clean_package_data(package_data) + assert cleaned["is_virtual"] is True + + + - package_data = { - "type": "npm", - "name": "react", - "version": "1.0", - "is_virtual": "true", - } - cleaned = _clean_package_data(package_data) - assert cleaned["is_virtual"] is True From 827dc188df30f9863709503a9bc5cb932bbe6ea4 Mon Sep 17 00:00:00 2001 From: Monal-Reddy Date: Wed, 11 Mar 2026 00:10:02 +0530 Subject: [PATCH 3/5] Fix lint issues in boolean normalization test Signed-off-by: Monal-Reddy --- scanpipe/tests/pipes/test_pipes.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/scanpipe/tests/pipes/test_pipes.py b/scanpipe/tests/pipes/test_pipes.py index 19376d788f..97aec8bf0d 100644 --- a/scanpipe/tests/pipes/test_pipes.py +++ b/scanpipe/tests/pipes/test_pipes.py @@ -37,6 +37,7 @@ from scanpipe.pipes import get_resource_diff_ratio from scanpipe.pipes import get_text_str_diff_ratio from scanpipe.pipes import scancode +from scanpipe.pipes import _clean_package_data from scanpipe.pipes.input import copy_input from scanpipe.pipes.input import copy_inputs from scanpipe.tests import dependency_data1 @@ -45,7 +46,6 @@ from scanpipe.tests import mocked_now from scanpipe.tests import package_data1 from scanpipe.tests import resource_data1 -from scanpipe.pipes import _clean_package_data class ScanPipePipesTest(TestCase): @@ -449,16 +449,18 @@ def test_scanpipe_pipes_collect_and_create_codebase_resources(self): self.assertEqual("from", from_resource.tag) to_resource = p1.codebaseresources.get(path="to/a.txt") self.assertEqual("to", to_resource.tag) - - def test_clean_package_data_normalizes_boolean_strings(): + + def test_clean_package_data_normalizes_boolean_strings(self): package_data = { "type": "npm", "name": "react", "version": "1.0", "is_virtual": "true", } + cleaned = _clean_package_data(package_data) - assert cleaned["is_virtual"] is True + + self.assertTrue(cleaned["is_virtual"]) From bd63fb1adb13e15d36cca6662f914356f93a7af7 Mon Sep 17 00:00:00 2001 From: Monal-Reddy Date: Wed, 11 Mar 2026 00:18:27 +0530 Subject: [PATCH 4/5] Fix import ordering for Ruff Signed-off-by: Monal-Reddy --- scanpipe/tests/pipes/test_pipes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scanpipe/tests/pipes/test_pipes.py b/scanpipe/tests/pipes/test_pipes.py index 97aec8bf0d..73ae942382 100644 --- a/scanpipe/tests/pipes/test_pipes.py +++ b/scanpipe/tests/pipes/test_pipes.py @@ -33,11 +33,11 @@ from scanpipe.models import CodebaseResource from scanpipe.models import DiscoveredPackage from scanpipe.models import Project +from scanpipe.pipes import _clean_package_data from scanpipe.pipes import flag from scanpipe.pipes import get_resource_diff_ratio from scanpipe.pipes import get_text_str_diff_ratio from scanpipe.pipes import scancode -from scanpipe.pipes import _clean_package_data from scanpipe.pipes.input import copy_input from scanpipe.pipes.input import copy_inputs from scanpipe.tests import dependency_data1 From 02ca58148c3a748cd8c3f39c120287b6c2d636b2 Mon Sep 17 00:00:00 2001 From: Monal-Reddy Date: Wed, 11 Mar 2026 00:26:42 +0530 Subject: [PATCH 5/5] Apply Ruff formatting to test file Signed-off-by: Monal-Reddy --- scanpipe/tests/pipes/test_pipes.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/scanpipe/tests/pipes/test_pipes.py b/scanpipe/tests/pipes/test_pipes.py index 73ae942382..167f346cb6 100644 --- a/scanpipe/tests/pipes/test_pipes.py +++ b/scanpipe/tests/pipes/test_pipes.py @@ -461,10 +461,3 @@ def test_clean_package_data_normalizes_boolean_strings(self): cleaned = _clean_package_data(package_data) self.assertTrue(cleaned["is_virtual"]) - - - - - - -