diff --git a/src/packagedcode/models.py b/src/packagedcode/models.py index 1b65497e590..16faf847f18 100644 --- a/src/packagedcode/models.py +++ b/src/packagedcode/models.py @@ -741,6 +741,15 @@ def from_data(cls, package_data, package_only=False): return package_data + @property + def can_assemble(self): + from packagedcode import HANDLER_BY_DATASOURCE_ID + handler = HANDLER_BY_DATASOURCE_ID.get(self.datasource_id) + if issubclass(handler, NonAssemblableDatafileHandler): + return False + + return True + def normalize_extracted_license_statement(self): """ Normalizes the extracted license statement to a readable diff --git a/tests/packagedcode/test_package_models.py b/tests/packagedcode/test_package_models.py index 62369a9c115..d518bd60f84 100644 --- a/tests/packagedcode/test_package_models.py +++ b/tests/packagedcode/test_package_models.py @@ -90,6 +90,17 @@ def test_Package_simple(self): expected_loc = 'models/simple-expected.json' self.check_package_data(package_data, expected_loc, regen=REGEN_TEST_FIXTURES) + def test_PackageData_model_can_assemble(self): + package_jar = models.PackageData( + type='maven', name='this', version='23', datasource_id="java_jar", + ) + package_pom = models.PackageData( + type='maven', name='this', version='23', datasource_id="maven_pom", + ) + + assert not package_jar.can_assemble + assert package_pom.can_assemble + def test_Package_model_qualifiers_are_serialized_as_mappings(self): package = models.PackageData( type='maven', name='this', version='23', qualifiers=dict(this='that')