From 4ef592e877e6bbd0565c5db534c63d260a85dfeb Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Thu, 4 May 2023 19:23:37 +0400 Subject: [PATCH 01/53] Upgrade ScanCode-toolkit to v32.0.0rc4 #569 Signed-off-by: Thomas Druez --- setup.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.cfg b/setup.cfg index 328182a8a4..b203410b64 100644 --- a/setup.cfg +++ b/setup.cfg @@ -71,7 +71,7 @@ install_requires = # Docker container-inspector==32.0.1 # ScanCode-toolkit - scancode-toolkit[packages]==31.2.6 + scancode-toolkit[packages]==v32.0.0rc4 extractcode[full]==31.0.0 commoncode==31.0.2 # FetchCode From 1756c3acd233642b9aa1db9d0fc80a5e0cfaa5cc Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Fri, 5 May 2023 11:02:25 +0400 Subject: [PATCH 02/53] Migrate DiscoveredPackage model to toolkit v32 changes #569 Signed-off-by: Thomas Druez --- scanpipe/api/serializers.py | 4 +- scanpipe/filters.py | 8 +- ...0030_scancode_toolkit_v32_model_updates.py | 106 ++++++++++++++++++ scanpipe/models.py | 83 ++++++++++++-- scanpipe/pipes/output.py | 2 +- scanpipe/pipes/resolve.py | 33 ++++-- scanpipe/pipes/windows.py | 7 +- .../templates/scanpipe/project_charts.html | 2 +- scanpipe/tests/__init__.py | 4 +- .../data/manifests/package.expected.json | 4 +- scanpipe/tests/pipes/test_resolve.py | 28 +++-- scanpipe/tests/test_models.py | 30 ++++- scanpipe/tests/test_pipelines.py | 22 ++-- scanpipe/views.py | 17 +-- 14 files changed, 287 insertions(+), 63 deletions(-) create mode 100644 scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py diff --git a/scanpipe/api/serializers.py b/scanpipe/api/serializers.py index f8c9e359f0..6482e915e5 100644 --- a/scanpipe/api/serializers.py +++ b/scanpipe/api/serializers.py @@ -297,8 +297,8 @@ class Meta: "sha256", "sha512", "copyright", - "license_expression", - "declared_license", + "declared_license_expression", + "extracted_license_statement", "notice_text", "source_packages", "extra_data", diff --git a/scanpipe/filters.py b/scanpipe/filters.py index 91ce82f31c..f5e0c64f8c 100644 --- a/scanpipe/filters.py +++ b/scanpipe/filters.py @@ -414,7 +414,8 @@ class PackageFilterSet(FilterSetUtilsMixin, django_filters.FilterSet): sort = django_filters.OrderingFilter( label="Sort", fields=[ - "license_expression", + "declared_license_expression", + "other_license_expression", "copyright", "primary_language", ], @@ -444,8 +445,9 @@ class Meta: "code_view_url", "vcs_url", "type", - "license_expression", - "declared_license", + "declared_license_expression", + "other_license_expression", + "extracted_license_statement", "copyright", "manifest_path", "contains_source_code", diff --git a/scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py b/scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py new file mode 100644 index 0000000000..1c2471ad9a --- /dev/null +++ b/scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py @@ -0,0 +1,106 @@ +# Generated by Django 4.2 on 2023-05-05 06:52 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("scanpipe", "0029_codebaseresource_scanpipe_co_type_ea1dd7_idx_and_more"), + ] + + operations = [ + migrations.RemoveIndex( + model_name="discoveredpackage", + name="scanpipe_di_license_e8ce32_idx", + ), + migrations.RenameField( + model_name="discoveredpackage", + old_name="license_expression", + new_name="declared_license_expression", + ), + migrations.AlterField( + model_name="discoveredpackage", + name="declared_license_expression", + field=models.TextField( + blank=True, + help_text="The license expression for this package typically derived from its extracted_license_statement or from some other type-specific routine or convention.", + ), + ), + migrations.RenameField( + model_name="discoveredpackage", + old_name="declared_license", + new_name="extracted_license_statement", + ), + migrations.AlterField( + model_name="discoveredpackage", + name="extracted_license_statement", + field=models.TextField( + blank=True, + help_text="The license statement mention, tag or text as found in a package manifest and extracted. This can be a string, a list or dict of strings possibly nested, as found originally in the manifest.", + ), + ), + migrations.AddField( + model_name="discoveredpackage", + name="declared_license_expression_spdx", + field=models.TextField( + blank=True, + help_text="The SPDX license expression for this package converted from its declared_license_expression.", + ), + ), + migrations.AddField( + model_name="discoveredpackage", + name="holder", + field=models.TextField( + blank=True, + help_text="Holders for this package. Typically one per line.", + ), + ), + migrations.AddField( + model_name="discoveredpackage", + name="license_detections", + field=models.JSONField( + blank=True, + default=dict, + help_text="A list of LicenseDetection mappings typically derived from its extracted_license_statement or from some other type-specific routine or convention.", + ), + ), + migrations.AddField( + model_name="discoveredpackage", + name="other_license_detections", + field=models.JSONField( + blank=True, + default=dict, + help_text="A list of LicenseDetection mappings which is different from the declared_license_expression, (i.e. not the primary license) These are detections for the detection for the license expressions in other_license_expression. ", + ), + ), + migrations.AddField( + model_name="discoveredpackage", + name="other_license_expression", + field=models.TextField( + blank=True, + help_text="The license expression for this package which is different from the declared_license_expression, (i.e. not the primary license) routine or convention.", + ), + ), + migrations.AddField( + model_name="discoveredpackage", + name="other_license_expression_spdx", + field=models.TextField( + blank=True, + help_text="The other SPDX license expression for this package converted from its other_license_expression.", + ), + ), + migrations.AddIndex( + model_name="discoveredpackage", + index=models.Index( + fields=["declared_license_expression"], + name="scanpipe_di_declare_4b8499_idx", + ), + ), + migrations.AddIndex( + model_name="discoveredpackage", + index=models.Index( + fields=["other_license_expression"], + name="scanpipe_di_other_l_1f1616_idx", + ), + ), + ] diff --git a/scanpipe/models.py b/scanpipe/models.py index 14af02ef56..eb70083040 100644 --- a/scanpipe/models.py +++ b/scanpipe/models.py @@ -2101,18 +2101,86 @@ class AbstractPackage(models.Model): blank=True, help_text=_("Copyright statements for this package. Typically one per line."), ) - license_expression = models.TextField( + # The data structure of license attributes in package_data and the codebase + # level packages has been updated accordingly: + # + # There is a new license_detections attribute for the primary, top-level + # declared licenses of a package and an other_license_detections attribute + # for the other secondary detections. + # + # The license_expression is replaced by the declared_license_expression + # and other_license_expression attributes with their SPDX counterparts + # declared_license_expression_spdx and other_license_expression_spdx. + # These expressions are parallel to detections. + # + # The declared_license attribute is renamed extracted_license_statement + # and is now a YAML-encoded string. + # + # See license updates documentation + # _ + # for examples and details. + holder = models.TextField( + blank=True, + help_text=_("Holders for this package. Typically one per line."), + ) + # TODO: Replaces license_expression + declared_license_expression = models.TextField( + blank=True, + help_text=_( + "The license expression for this package typically derived " + "from its extracted_license_statement or from some other type-specific " + "routine or convention." + ), + ) + declared_license_expression_spdx = models.TextField( + blank=True, + help_text=_( + "The SPDX license expression for this package converted " + "from its declared_license_expression." + ), + ) + license_detections = models.JSONField( + default=dict, + blank=True, + help_text=_( + "A list of LicenseDetection mappings typically derived " + "from its extracted_license_statement or from some other type-specific " + "routine or convention." + ), + ) + other_license_expression = models.TextField( + blank=True, + help_text=_( + "The license expression for this package which is different from the " + "declared_license_expression, (i.e. not the primary license) " + "routine or convention." + ), + ) + other_license_expression_spdx = models.TextField( + blank=True, + help_text=_( + "The other SPDX license expression for this package converted " + "from its other_license_expression." + ), + ) + other_license_detections = models.JSONField( + default=dict, blank=True, help_text=_( - "The normalized license expression for this package as derived " - "from its declared license." + "A list of LicenseDetection mappings which is different from the " + "declared_license_expression, (i.e. not the primary license) " + "These are detections for the detection for the license expressions " + "in other_license_expression. " ), ) - declared_license = models.TextField( + # TODO: Replaces declared_license + extracted_license_statement = models.TextField( blank=True, help_text=_( - "The declared license mention or tag or text as found in a " - "package manifest." + "The license statement mention, tag or text as found in a " + "package manifest and extracted. This can be a string, a list or dict of " + "strings possibly nested, as found originally in the manifest." ), ) notice_text = models.TextField( @@ -2200,7 +2268,8 @@ class Meta: models.Index(fields=["name"]), models.Index(fields=["filename"]), models.Index(fields=["primary_language"]), - models.Index(fields=["license_expression"]), + models.Index(fields=["declared_license_expression"]), + models.Index(fields=["other_license_expression"]), models.Index(fields=["size"]), models.Index(fields=["md5"]), models.Index(fields=["sha1"]), diff --git a/scanpipe/pipes/output.py b/scanpipe/pipes/output.py index 2666dc95e3..c97a2db7e8 100644 --- a/scanpipe/pipes/output.py +++ b/scanpipe/pipes/output.py @@ -443,7 +443,7 @@ def to_xlsx(project): exceed the limits of what can be stored in a cell. """ output_file = project.get_output_file_path("results", "xlsx") - exclude_fields = ["licenses", "extra_data", "declared_license"] + exclude_fields = ["licenses", "extra_data", "extracted_license_statement"] if not scanpipe_app.policies_enabled: exclude_fields.append("compliance_alert") diff --git a/scanpipe/pipes/resolve.py b/scanpipe/pipes/resolve.py index 67b08e190f..541e24abba 100644 --- a/scanpipe/pipes/resolve.py +++ b/scanpipe/pipes/resolve.py @@ -29,7 +29,9 @@ from attributecode.model import About from licensedcode.match_spdx_lid import get_spdx_expression from packagedcode import APPLICATION_PACKAGE_DATAFILE_HANDLERS -from packagedcode.licensing import get_normalized_expression + +# https://github.com/nexB/scancode-toolkit/commit/539ebedd700d7c6bb9596ca1274f0fd86624926d +# from packagedcode.licensing import get_normalized_expression from packageurl import PackageURL from python_inspector.resolve_cli import resolver_api from scancode.api import get_package_data @@ -113,8 +115,11 @@ def spdx_package_to_discovered_package_data(spdx_package): package_data = { "name": spdx_package.name, "download_url": spdx_package.download_location, - "declared_license": spdx_package.license_declared, - "license_expression": get_spdx_expression(spdx_package.license_concluded or ""), + # TODO: Likely not relevant with model changes + "extracted_license_statement": spdx_package.license_declared, + "declared_license_expression": get_spdx_expression( + spdx_package.license_concluded or "" + ), "copyright": spdx_package.copyright_text, "version": spdx_package.version, "homepage_url": spdx_package.homepage, @@ -167,7 +172,7 @@ def cyclonedx_component_to_package_data(component_data): package_data = { "name": component.name, - "declared_license": declared_license, + "extracted_license_statement": declared_license, "copyright": component.copyright, "version": component.version, "description": component.description, @@ -236,20 +241,24 @@ def set_license_expression(package_data): Set the license expression from a detected license dict/str in provided `package_data`. """ - declared_license = package_data.get("declared_license") - license_expression = package_data.get("license_expression") + extracted_license_statement = package_data.get("extracted_license_statement") + declared_license_expression = package_data.get("declared_license_expression") - if declared_license and not license_expression: + if extracted_license_statement and not declared_license_expression: license_str = "" - if isinstance(declared_license, dict): - license_str = declared_license.get("license") + if isinstance(extracted_license_statement, dict): + license_str = extracted_license_statement.get("license") if not license_str: - license_str = repr(declared_license) + license_str = repr(extracted_license_statement) + + from packagedcode import licensing - license_expression = get_normalized_expression(query_string=license_str) + license_expression = licensing.get_normalized_expression( + query_string=license_str + ) if license_expression: - package_data["license_expression"] = license_expression + package_data["declared_license_expression"] = declared_license_expression return package_data diff --git a/scanpipe/pipes/windows.py b/scanpipe/pipes/windows.py index 5192b28610..390b69e373 100644 --- a/scanpipe/pipes/windows.py +++ b/scanpipe/pipes/windows.py @@ -148,11 +148,14 @@ def _tag_python_software(project): q_objects = [~Q(rootfs_path__icontains="site-packages")] for python_path, python_version in python_versions_by_path.items(): + # TODO: test_scanpipe_pipes_windows_tag_known_software + # TypeError: Package.__init__() got an unexpected keyword argument + # 'license_expression' python_package = Package( type="windows-program", name="Python", version=python_version, - license_expression="python", + # license_expression="python", copyright="Copyright (c) Python Software Foundation", homepage_url="https://www.python.org/", ) @@ -197,7 +200,7 @@ def _tag_openjdk_software(project): type="windows-program", name="OpenJDK", version=openjdk_version, - license_expression="gpl-2.0 WITH oracle-openjdk-classpath-exception-2.0", + # license_expression="gpl-2.0 WITH oracle-openjdk-classpath-exception-2.0", copyright="Copyright (c) Oracle and/or its affiliates", homepage_url="http://openjdk.java.net/", ) diff --git a/scanpipe/templates/scanpipe/project_charts.html b/scanpipe/templates/scanpipe/project_charts.html index 85c9656ce9..b248f2913a 100644 --- a/scanpipe/templates/scanpipe/project_charts.html +++ b/scanpipe/templates/scanpipe/project_charts.html @@ -11,7 +11,7 @@

-
+
{% endif %} diff --git a/scanpipe/tests/__init__.py b/scanpipe/tests/__init__.py index 7bfe2e651b..a1d313e966 100644 --- a/scanpipe/tests/__init__.py +++ b/scanpipe/tests/__init__.py @@ -124,8 +124,8 @@ def make_resource_file(project, path, **extra): "Copyright (c) 1995 Ted Hajek \n" "portions Copyright (c) 1994 Debian Association, Inc." ), - "license_expression": "gpl-2.0 AND gpl-2.0-plus AND unknown", - "declared_license": "", + "declared_license_expression": "gpl-2.0 AND gpl-2.0-plus AND unknown", + "extracted_license_statement": "", "notice_text": None, "root_path": None, "dependencies": [], diff --git a/scanpipe/tests/data/manifests/package.expected.json b/scanpipe/tests/data/manifests/package.expected.json index ab09eb47b0..b2d7b0c938 100644 --- a/scanpipe/tests/data/manifests/package.expected.json +++ b/scanpipe/tests/data/manifests/package.expected.json @@ -32,8 +32,8 @@ "code_view_url": null, "vcs_url": "https://github.com/electron/electron", "copyright": null, - "license_expression": "mit", - "declared_license": [ + "declared_license_expression": "mit", + "extracted_license_statement": [ "MIT" ], "notice_text": null, diff --git a/scanpipe/tests/pipes/test_resolve.py b/scanpipe/tests/pipes/test_resolve.py index 528309d280..13bd1260b1 100644 --- a/scanpipe/tests/pipes/test_resolve.py +++ b/scanpipe/tests/pipes/test_resolve.py @@ -54,21 +54,27 @@ def test_scanpipe_pipes_resolve_get_default_package_type(self): self.assertEqual("cyclonedx", resolve.get_default_package_type(input_location)) def test_scanpipe_pipes_resolve_set_license_expression(self): - declared_license = {"license": "MIT"} - data = resolve.set_license_expression({"declared_license": declared_license}) - self.assertEqual("mit", data.get("license_expression")) + extracted_license_statement = {"license": "MIT"} + data = resolve.set_license_expression( + {"extracted_license_statement": extracted_license_statement} + ) + self.assertEqual("mit", data.get("declared_license_expression")) - declared_license = { + extracted_license_statement = { "classifiers": [ "License :: OSI Approved :: Python Software Foundation License" ] } - data = resolve.set_license_expression({"declared_license": declared_license}) - self.assertEqual("python", data.get("license_expression")) + data = resolve.set_license_expression( + {"extracted_license_statement": extracted_license_statement} + ) + self.assertEqual("python", data.get("declared_license_expression")) - declared_license = "GPL 2.0" - data = resolve.set_license_expression({"declared_license": declared_license}) - self.assertEqual("gpl-2.0", data.get("license_expression")) + extracted_license_statement = "GPL 2.0" + data = resolve.set_license_expression( + {"extracted_license_statement": extracted_license_statement} + ) + self.assertEqual("gpl-2.0", data.get("declared_license_expression")) def test_scanpipe_pipes_resolve_resolve_packages(self): # ScanCode.io resolvers @@ -77,7 +83,7 @@ def test_scanpipe_pipes_resolve_resolve_packages(self): expected = { "filename": "Django-4.0.8-py3-none-any.whl", "download_url": "https://python.org/Django-4.0.8-py3-none-any.whl", - "license_expression": "bsd-new", + "declared_license_expression": "bsd-new", "md5": "386349753c386e574dceca5067e2788a", "name": "django", "sha1": "4cc6f7abda928a0b12cd1f1cd8ad3677519ca04e", @@ -99,7 +105,7 @@ def test_scanpipe_pipes_resolve_resolve_about_packages(self): expected = { "filename": "Django-4.0.8-py3-none-any.whl", "download_url": "https://python.org/Django-4.0.8-py3-none-any.whl", - "license_expression": "bsd-new", + "declared_license_expression": "bsd-new", "md5": "386349753c386e574dceca5067e2788a", "name": "django", "sha1": "4cc6f7abda928a0b12cd1f1cd8ad3677519ca04e", diff --git a/scanpipe/tests/test_models.py b/scanpipe/tests/test_models.py index 6937508bde..b00f59b5db 100644 --- a/scanpipe/tests/test_models.py +++ b/scanpipe/tests/test_models.py @@ -1823,9 +1823,29 @@ def test_scanpipe_codebase_resource_create_and_add_package_errors(self): self.assertIn("in save", error.traceback) def test_scanpipe_package_model_integrity_with_toolkit_package_model(self): - toolkit_package_fields = [field.name for field in PackageData.__attrs_attrs__] - discovered_packages_fields = [ - field.name for field in DiscoveredPackage._meta.get_fields() + scanpipe_only_fields = [ + "id", + "uuid", + "project", + "missing_resources", + "modified_resources", + "codebase_resources", + # TODO: Review those: + "package_uid", + "filename", + "manifest_path", + "contains_source_code", + ] + + discovered_package_fields = [ + field.name + for field in DiscoveredPackage._meta.get_fields() + if field.name not in scanpipe_only_fields ] - for toolkit_field_name in toolkit_package_fields: - self.assertIn(toolkit_field_name, discovered_packages_fields) + toolkit_package_fields = [field.name for field in PackageData.__attrs_attrs__] + + for toolkit_field in toolkit_package_fields: + self.assertIn(toolkit_field, discovered_package_fields) + + for scanpipe_field in discovered_package_fields: + self.assertIn(scanpipe_field, toolkit_package_fields) diff --git a/scanpipe/tests/test_pipelines.py b/scanpipe/tests/test_pipelines.py index c8b5644270..92313c7e59 100644 --- a/scanpipe/tests/test_pipelines.py +++ b/scanpipe/tests/test_pipelines.py @@ -763,8 +763,8 @@ def test_scanpipe_inspect_manifest_pipeline_cyclonedx_integration_test(self): "type": "pypi", "name": "toml", "version": "0.10.2", - "declared_license": "OFL-1.1\nApache-2.0", - "license_expression": "ofl-1.1 AND unknown", + "extracted_license_statement": "OFL-1.1\nApache-2.0", + "declared_license_expression": "ofl-1.1 AND unknown", "homepage_url": "https://cyclonedx.org/website", "bug_tracking_url": "https://cyclonedx.org/issue-tracker", "vcs_url": "https://cyclonedx.org/vcs", @@ -774,8 +774,8 @@ def test_scanpipe_inspect_manifest_pipeline_cyclonedx_integration_test(self): "type": "pypi", "name": "billiard", "version": "3.6.3.0", - "declared_license": "BSD-3-Clause", - "license_expression": "bsd-new", + "extracted_license_statement": "BSD-3-Clause", + "declared_license_expression": "bsd-new", "homepage_url": "", "bug_tracking_url": "", "vcs_url": "", @@ -786,12 +786,12 @@ def test_scanpipe_inspect_manifest_pipeline_cyclonedx_integration_test(self): "type": "pypi", "name": "fictional", "version": "9.10.2", - "declared_license": ( + "extracted_license_statement": ( "LGPL-3.0-or-later" " AND " "LicenseRef-scancode-openssl-exception-lgpl3.0plus" ), - "license_expression": ( + "declared_license_expression": ( "lgpl-3.0-plus AND openssl-exception-lgpl-3.0-plus" ), "homepage_url": "https://home.page", @@ -808,8 +808,14 @@ def test_scanpipe_inspect_manifest_pipeline_cyclonedx_integration_test(self): self.assertEqual(expected["name"], package.name) self.assertEqual(expected["version"], package.version) self.assertEqual(expected["homepage_url"], package.homepage_url) - self.assertEqual(expected["declared_license"], package.declared_license) - self.assertEqual(expected["license_expression"], package.license_expression) + self.assertEqual( + expected["extracted_license_statement"], + package.extracted_license_statement, + ) + self.assertEqual( + expected["declared_license_expression"], + package.declared_license_expression, + ) self.assertEqual(expected["filename"], package.filename) def test_scanpipe_deploy_to_develop_pipeline_integration_test(self): diff --git a/scanpipe/views.py b/scanpipe/views.py index 8a8a2b04de..ef137381cf 100644 --- a/scanpipe/views.py +++ b/scanpipe/views.py @@ -77,8 +77,9 @@ LICENSE_CLARITY_FIELDS = [ ( + # TODO: "Declared license", - "declared_license", + "extracted_license_statement", "Indicates that the software package licensing is documented at top-level or " "well-known locations in the software project, typically in a package " "manifest, NOTICE, LICENSE, COPYING or README file. " @@ -624,7 +625,7 @@ def get_context_data(self, **kwargs): packages = project.discoveredpackages.all().only( "type", - "license_expression", + "declared_license_expression", ) dependencies = project.discovereddependencies.all().only( @@ -644,7 +645,9 @@ def get_context_data(self, **kwargs): if scanpipe_app.policies_enabled: file_compliance_alert = files.values_list("compliance_alert", flat=True) - package_licenses = packages.values_list("license_expression", flat=True) + package_licenses = packages.values_list( + "declared_license_expression", flat=True + ) package_types = packages.values_list("type", flat=True) dependency_package_type = dependencies.values_list("type", flat=True) @@ -888,7 +891,7 @@ class DiscoveredPackageListView( prefetch_related = ["codebase_resources"] table_columns = [ "package_url", - "license_expression", + "declared_license_expression", "copyright", "primary_language", "resources", @@ -1178,7 +1181,7 @@ class DiscoveredPackageDetailsView( "essentials": { "fields": [ "package_url", - "license_expression", + "declared_license_expression", "primary_language", "homepage_url", "download_url", @@ -1196,8 +1199,8 @@ class DiscoveredPackageDetailsView( }, "terms": { "fields": [ - "license_expression", - "declared_license", + "declared_license_expression", + "extracted_license_statement", "copyright", "notice_text", ], From b887491c396a8248c4619c3f907e6f2885959c0e Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Fri, 5 May 2023 11:24:31 +0400 Subject: [PATCH 03/53] Add new field in API serializer #569 Signed-off-by: Thomas Druez --- scanpipe/api/serializers.py | 6 ++++++ scanpipe/tests/test_api.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/scanpipe/api/serializers.py b/scanpipe/api/serializers.py index 6482e915e5..034c23636b 100644 --- a/scanpipe/api/serializers.py +++ b/scanpipe/api/serializers.py @@ -297,7 +297,13 @@ class Meta: "sha256", "sha512", "copyright", + "holder", "declared_license_expression", + "declared_license_expression_spdx", + "license_detections", + "other_license_expression", + "other_license_expression_spdx", + "other_license_detections", "extracted_license_statement", "notice_text", "source_packages", diff --git a/scanpipe/tests/test_api.py b/scanpipe/tests/test_api.py index 5064b8e563..90ad96f710 100644 --- a/scanpipe/tests/test_api.py +++ b/scanpipe/tests/test_api.py @@ -719,7 +719,7 @@ def test_scanpipe_api_serializer_get_model_serializer(self): get_model_serializer(None) def test_scanpipe_api_serializer_get_serializer_fields(self): - self.assertEqual(38, len(get_serializer_fields(DiscoveredPackage))) + self.assertEqual(44, len(get_serializer_fields(DiscoveredPackage))) self.assertEqual(11, len(get_serializer_fields(DiscoveredDependency))) self.assertEqual(30, len(get_serializer_fields(CodebaseResource))) self.assertEqual(3, len(get_serializer_fields(CodebaseRelation))) From e278f8541557ec1de07364873e4e8fcbbc73246c Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Fri, 5 May 2023 11:27:20 +0400 Subject: [PATCH 04/53] Fix the scan_package pipeline #569 Signed-off-by: Thomas Druez --- scanpipe/pipelines/scan_package.py | 1 - .../tests/data/is-npm-1.0.0_scan_package.json | 338 +++++----- .../is-npm-1.0.0_scan_package_summary.json | 176 ++--- .../multiple-is-npm-1.0.0_scan_package.json | 607 +++++++++--------- ...ple-is-npm-1.0.0_scan_package_summary.json | 184 ++---- 5 files changed, 633 insertions(+), 673 deletions(-) diff --git a/scanpipe/pipelines/scan_package.py b/scanpipe/pipelines/scan_package.py index 4c45514866..4823334148 100644 --- a/scanpipe/pipelines/scan_package.py +++ b/scanpipe/pipelines/scan_package.py @@ -58,7 +58,6 @@ def steps(cls): "--package", "--url", "--classify", - "--is-license-text", "--summary", ] diff --git a/scanpipe/tests/data/is-npm-1.0.0_scan_package.json b/scanpipe/tests/data/is-npm-1.0.0_scan_package.json index 004efc42d3..8729a7c61e 100644 --- a/scanpipe/tests/data/is-npm-1.0.0_scan_package.json +++ b/scanpipe/tests/data/is-npm-1.0.0_scan_package.json @@ -7,7 +7,6 @@ "--copyright": true, "--email": true, "--info": true, - "--is-license-text": true, "--license": true, "--license-text": true, "--package": true, @@ -15,32 +14,43 @@ "--url": true }, "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", - "output_format_version": "2.0.0", + "output_format_version": "3.0.0", "message": null, "errors": [], "warnings": [], "extra_data": { - "spdx_license_list_version": "3.18", + "spdx_license_list_version": "3.20", "files_count": 3 } } ], - "dependencies": [ - { - "purl": "pkg:npm/ava", - "extracted_requirement": "0.0.3", - "scope": "devDependencies", - "is_runtime": false, - "is_optional": true, - "is_resolved": false, - "resolved_package": {}, - "extra_data": {}, - "dependency_uid": "pkg:npm/ava?uuid=fixed-uid-done-for-testing-5642512d1758", - "for_package_uid": "pkg:npm/is-npm@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", - "datafile_path": "codebase/package/package.json", - "datasource_id": "npm_package_json" - } - ], + "summary": { + "declared_license_expression": "mit", + "license_clarity_score": { + "score": 90, + "declared_license": true, + "identification_precision": true, + "has_license_text": false, + "declared_copyrights": true, + "conflicting_license_categories": false, + "ambiguous_compound_licensing": false + }, + "declared_holder": "Sindre Sorhus", + "primary_language": "JavaScript", + "other_license_expressions": [ + { + "value": null, + "count": 1 + } + ], + "other_holders": [ + { + "value": null, + "count": 2 + } + ], + "other_languages": [] + }, "packages": [ { "type": "npm", @@ -79,10 +89,34 @@ "code_view_url": null, "vcs_url": "https://github.com/sindresorhus/is-npm", "copyright": null, - "license_expression": "mit", - "declared_license": [ - "MIT" + "holder": null, + "declared_license_expression": "mit", + "declared_license_expression_spdx": "MIT", + "license_detections": [ + { + "license_expression": "mit", + "matches": [ + { + "score": 100.0, + "start_line": 1, + "end_line": 1, + "matched_length": 1, + "match_coverage": 100.0, + "matcher": "1-spdx-id", + "license_expression": "mit", + "rule_identifier": "spdx-license-identifier-mit-5da48780aba670b0860c46d899ed42a0f243ff06", + "rule_relevance": 100, + "rule_url": null, + "matched_text": "MIT" + } + ], + "identifier": "mit-a822f434-d61f-f2b1-c792-8b8cb9e7b9bf" + } ], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": "['MIT']", "notice_text": null, "source_packages": [], "extra_data": {}, @@ -99,28 +133,29 @@ "purl": "pkg:npm/is-npm@1.0.0" } ], - "summary": { - "declared_license_expression": "mit", - "license_clarity_score": { - "score": 90, - "declared_license": true, - "identification_precision": true, - "has_license_text": false, - "declared_copyrights": true, - "conflicting_license_categories": false, - "ambiguous_compound_licensing": false - }, - "declared_holder": "Sindre Sorhus", - "primary_language": "JavaScript", - "other_license_expressions": [], - "other_holders": [ - { - "value": null, - "count": 2 - } - ], - "other_languages": [] - }, + "dependencies": [ + { + "purl": "pkg:npm/ava", + "extracted_requirement": "0.0.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "extra_data": {}, + "dependency_uid": "pkg:npm/ava?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/is-npm@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "codebase/package/package.json", + "datasource_id": "npm_package_json" + } + ], + "license_detections": [ + { + "identifier": "mit-3fce6ea2-8abd-6c6b-3ede-a37af7c6efee", + "license_expression": "mit", + "detection_count": 2 + } + ], "files": [ { "path": "codebase", @@ -138,14 +173,16 @@ "is_media": false, "is_source": false, "is_script": false, - "licenses": [], - "license_expressions": [], + "package_data": [], + "for_packages": [], + "detected_license_expression": null, + "detected_license_expression_spdx": null, + "license_detections": [], + "license_clues": [], "percentage_of_license_text": 0, "copyrights": [], "holders": [], "authors": [], - "package_data": [], - "for_packages": [], "emails": [], "urls": [], "is_legal": false, @@ -153,7 +190,6 @@ "is_readme": false, "is_top_level": true, "is_key_file": false, - "is_license_text": false, "files_count": 3, "dirs_count": 1, "size_count": 1187, @@ -175,14 +211,16 @@ "is_media": false, "is_source": false, "is_script": false, - "licenses": [], - "license_expressions": [], + "package_data": [], + "for_packages": [], + "detected_license_expression": null, + "detected_license_expression_spdx": null, + "license_detections": [], + "license_clues": [], "percentage_of_license_text": 0, "copyrights": [], "holders": [], "authors": [], - "package_data": [], - "for_packages": [], "emails": [], "urls": [], "is_legal": false, @@ -190,7 +228,6 @@ "is_readme": false, "is_top_level": true, "is_key_file": false, - "is_license_text": false, "files_count": 3, "dirs_count": 0, "size_count": 1187, @@ -212,16 +249,18 @@ "is_media": false, "is_source": true, "is_script": false, - "licenses": [], - "license_expressions": [], - "percentage_of_license_text": 0, - "copyrights": [], - "holders": [], - "authors": [], "package_data": [], "for_packages": [ "pkg:npm/is-npm@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758" ], + "detected_license_expression": null, + "detected_license_expression_spdx": null, + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], "emails": [], "urls": [], "is_legal": false, @@ -229,7 +268,6 @@ "is_readme": false, "is_top_level": true, "is_key_file": false, - "is_license_text": false, "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -251,54 +289,6 @@ "is_media": false, "is_source": false, "is_script": false, - "licenses": [ - { - "key": "mit", - "score": 100.0, - "name": "MIT License", - "short_name": "MIT License", - "category": "Permissive", - "is_exception": false, - "is_unknown": false, - "owner": "MIT", - "homepage_url": "http://opensource.org/licenses/mit-license.php", - "text_url": "http://opensource.org/licenses/mit-license.php", - "reference_url": "https://scancode-licensedb.aboutcode.org/mit", - "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.LICENSE", - "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.yml", - "spdx_license_key": "MIT", - "spdx_url": "https://spdx.org/licenses/MIT", - "start_line": 5, - "end_line": 5, - "matched_rule": { - "identifier": "mit_30.RULE", - "license_expression": "mit", - "licenses": [ - "mit" - ], - "referenced_filenames": [], - "is_license_text": false, - "is_license_notice": false, - "is_license_reference": false, - "is_license_tag": true, - "is_license_intro": false, - "has_unknown": false, - "matcher": "2-aho", - "rule_length": 2, - "matched_length": 2, - "match_coverage": 100.0, - "rule_relevance": 100 - }, - "matched_text": " \"license\": \"MIT\"," - } - ], - "license_expressions": [ - "mit" - ], - "percentage_of_license_text": 3.33, - "copyrights": [], - "holders": [], - "authors": [], "package_data": [ { "type": "npm", @@ -337,10 +327,34 @@ "code_view_url": null, "vcs_url": "https://github.com/sindresorhus/is-npm", "copyright": null, - "license_expression": "mit", - "declared_license": [ - "MIT" + "holder": null, + "declared_license_expression": "mit", + "declared_license_expression_spdx": "MIT", + "license_detections": [ + { + "license_expression": "mit", + "matches": [ + { + "score": 100.0, + "start_line": 1, + "end_line": 1, + "matched_length": 1, + "match_coverage": 100.0, + "matcher": "1-spdx-id", + "license_expression": "mit", + "rule_identifier": "spdx-license-identifier-mit-5da48780aba670b0860c46d899ed42a0f243ff06", + "rule_relevance": 100, + "rule_url": null, + "matched_text": "MIT" + } + ], + "identifier": "mit-a822f434-d61f-f2b1-c792-8b8cb9e7b9bf" + } ], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": "['MIT']", "notice_text": null, "source_packages": [], "file_references": [], @@ -367,6 +381,34 @@ "for_packages": [ "pkg:npm/is-npm@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758" ], + "detected_license_expression": "mit", + "detected_license_expression_spdx": "MIT", + "license_detections": [ + { + "license_expression": "mit", + "matches": [ + { + "score": 100.0, + "start_line": 5, + "end_line": 5, + "matched_length": 2, + "match_coverage": 100.0, + "matcher": "2-aho", + "license_expression": "mit", + "rule_identifier": "mit_30.RULE", + "rule_relevance": 100, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/mit_30.RULE", + "matched_text": " \"license\": \"MIT\"," + } + ], + "identifier": "mit-3fce6ea2-8abd-6c6b-3ede-a37af7c6efee" + } + ], + "license_clues": [], + "percentage_of_license_text": 3.33, + "copyrights": [], + "holders": [], + "authors": [], "emails": [ { "email": "sindresorhus@gmail.com", @@ -386,7 +428,6 @@ "is_readme": false, "is_top_level": true, "is_key_file": true, - "is_license_text": false, "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -408,50 +449,34 @@ "is_media": false, "is_source": false, "is_script": false, - "licenses": [ + "package_data": [], + "for_packages": [ + "pkg:npm/is-npm@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "detected_license_expression": "mit", + "detected_license_expression_spdx": "MIT", + "license_detections": [ { - "key": "mit", - "score": 100.0, - "name": "MIT License", - "short_name": "MIT License", - "category": "Permissive", - "is_exception": false, - "is_unknown": false, - "owner": "MIT", - "homepage_url": "http://opensource.org/licenses/mit-license.php", - "text_url": "http://opensource.org/licenses/mit-license.php", - "reference_url": "https://scancode-licensedb.aboutcode.org/mit", - "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.LICENSE", - "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.yml", - "spdx_license_key": "MIT", - "spdx_url": "https://spdx.org/licenses/MIT", - "start_line": 28, - "end_line": 30, - "matched_rule": { - "identifier": "mit_30.RULE", - "license_expression": "mit", - "licenses": [ - "mit" - ], - "referenced_filenames": [], - "is_license_text": false, - "is_license_notice": false, - "is_license_reference": false, - "is_license_tag": true, - "is_license_intro": false, - "has_unknown": false, - "matcher": "2-aho", - "rule_length": 2, - "matched_length": 2, - "match_coverage": 100.0, - "rule_relevance": 100 - }, - "matched_text": "## License\n\nMIT \u00a9 [Sindre Sorhus](http://sindresorhus.com)" + "license_expression": "mit", + "matches": [ + { + "score": 100.0, + "start_line": 28, + "end_line": 30, + "matched_length": 2, + "match_coverage": 100.0, + "matcher": "2-aho", + "license_expression": "mit", + "rule_identifier": "mit_30.RULE", + "rule_relevance": 100, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/mit_30.RULE", + "matched_text": "## License\n\nMIT \u00a9 [Sindre Sorhus](http://sindresorhus.com)" + } + ], + "identifier": "mit-3fce6ea2-8abd-6c6b-3ede-a37af7c6efee" } ], - "license_expressions": [ - "mit" - ], + "license_clues": [], "percentage_of_license_text": 2.78, "copyrights": [ { @@ -468,10 +493,6 @@ } ], "authors": [], - "package_data": [], - "for_packages": [ - "pkg:npm/is-npm@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758" - ], "emails": [], "urls": [ { @@ -500,7 +521,6 @@ "is_readme": true, "is_top_level": true, "is_key_file": true, - "is_license_text": false, "files_count": 0, "dirs_count": 0, "size_count": 0, diff --git a/scanpipe/tests/data/is-npm-1.0.0_scan_package_summary.json b/scanpipe/tests/data/is-npm-1.0.0_scan_package_summary.json index c10cc85a75..fe8bd7cf5f 100644 --- a/scanpipe/tests/data/is-npm-1.0.0_scan_package_summary.json +++ b/scanpipe/tests/data/is-npm-1.0.0_scan_package_summary.json @@ -11,7 +11,12 @@ }, "declared_holder": "Sindre Sorhus", "primary_language": "JavaScript", - "other_license_expressions": [], + "other_license_expressions": [ + { + "value": null, + "count": 1 + } + ], "other_holders": [ { "value": null, @@ -19,18 +24,7 @@ } ], "other_languages": [], - "license_matches": { - "mit": [ - { - "path": "package/package.json", - "matched_text": " \"license\": \"MIT\"," - }, - { - "path": "package/readme.md", - "matched_text": "## License\n\nMIT \u00a9 [Sindre Sorhus](http://sindresorhus.com)" - } - ] - }, + "license_matches": {}, "key_files": [ { "path": "package/package.json", @@ -49,50 +43,8 @@ "is_archive": false, "is_media": false, "is_key_file": true, - "licenses": [ - { - "key": "mit", - "name": "MIT License", - "owner": "MIT", - "score": 100.0, - "category": "Permissive", - "end_line": 5, - "spdx_url": "https://spdx.org/licenses/MIT", - "text_url": "http://opensource.org/licenses/mit-license.php", - "is_unknown": false, - "short_name": "MIT License", - "start_line": 5, - "homepage_url": "http://opensource.org/licenses/mit-license.php", - "is_exception": false, - "matched_rule": { - "matcher": "2-aho", - "licenses": [ - "mit" - ], - "identifier": "mit_30.RULE", - "has_unknown": false, - "rule_length": 2, - "is_license_tag": true, - "match_coverage": 100.0, - "matched_length": 2, - "rule_relevance": 100, - "is_license_text": false, - "is_license_intro": false, - "is_license_notice": false, - "license_expression": "mit", - "is_license_reference": false, - "referenced_filenames": [] - }, - "matched_text": " \"license\": \"MIT\",", - "reference_url": "https://scancode-licensedb.aboutcode.org/mit", - "spdx_license_key": "MIT", - "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.yml", - "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.LICENSE" - } - ], - "license_expressions": [ - "mit" - ], + "licenses": [], + "license_expressions": [], "copyrights": [], "holders": [], "authors": [], @@ -103,6 +55,7 @@ "purl": "pkg:npm/is-npm@1.0.0", "sha1": null, "type": "npm", + "holder": null, "sha256": null, "sha512": null, "parties": [ @@ -152,13 +105,36 @@ "file_references": [], "source_packages": [], "bug_tracking_url": null, - "declared_license": [ - "MIT" - ], "primary_language": "JavaScript", - "license_expression": "mit", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-spdx-id", + "end_line": 1, + "rule_url": null, + "start_line": 1, + "matched_text": "MIT", + "match_coverage": 100.0, + "matched_length": 1, + "rule_relevance": 100, + "rule_identifier": "spdx-license-identifier-mit-5da48780aba670b0860c46d899ed42a0f243ff06", + "license_expression": "mit" + } + ], + "identifier": "mit-a822f434-d61f-f2b1-c792-8b8cb9e7b9bf", + "license_expression": "mit" + } + ], "repository_download_url": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "repository_homepage_url": "https://www.npmjs.com/package/is-npm" + "repository_homepage_url": "https://www.npmjs.com/package/is-npm", + "other_license_detections": [], + "other_license_expression": null, + "declared_license_expression": "mit", + "extracted_license_statement": "['MIT']", + "other_license_expression_spdx": null, + "declared_license_expression_spdx": "MIT" } ], "for_packages": [ @@ -198,50 +174,8 @@ "is_archive": false, "is_media": false, "is_key_file": true, - "licenses": [ - { - "key": "mit", - "name": "MIT License", - "owner": "MIT", - "score": 100.0, - "category": "Permissive", - "end_line": 30, - "spdx_url": "https://spdx.org/licenses/MIT", - "text_url": "http://opensource.org/licenses/mit-license.php", - "is_unknown": false, - "short_name": "MIT License", - "start_line": 28, - "homepage_url": "http://opensource.org/licenses/mit-license.php", - "is_exception": false, - "matched_rule": { - "matcher": "2-aho", - "licenses": [ - "mit" - ], - "identifier": "mit_30.RULE", - "has_unknown": false, - "rule_length": 2, - "is_license_tag": true, - "match_coverage": 100.0, - "matched_length": 2, - "rule_relevance": 100, - "is_license_text": false, - "is_license_intro": false, - "is_license_notice": false, - "license_expression": "mit", - "is_license_reference": false, - "referenced_filenames": [] - }, - "matched_text": "## License\n\nMIT \u00a9 [Sindre Sorhus](http://sindresorhus.com)", - "reference_url": "https://scancode-licensedb.aboutcode.org/mit", - "spdx_license_key": "MIT", - "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.yml", - "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.LICENSE" - } - ], - "license_expressions": [ - "mit" - ], + "licenses": [], + "license_expressions": [], "copyrights": [ { "end_line": 30, @@ -330,8 +264,34 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "mit", - "declared_license": "['MIT']", + "holder": "", + "declared_license_expression": "mit", + "declared_license_expression_spdx": "MIT", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-spdx-id", + "end_line": 1, + "rule_url": null, + "start_line": 1, + "matched_text": "MIT", + "match_coverage": 100.0, + "matched_length": 1, + "rule_relevance": 100, + "rule_identifier": "spdx-license-identifier-mit-5da48780aba670b0860c46d899ed42a0f243ff06", + "license_expression": "mit" + } + ], + "identifier": "mit-a822f434-d61f-f2b1-c792-8b8cb9e7b9bf", + "license_expression": "mit" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": {}, + "extracted_license_statement": "['MIT']", "notice_text": "", "source_packages": [], "extra_data": {}, diff --git a/scanpipe/tests/data/multiple-is-npm-1.0.0_scan_package.json b/scanpipe/tests/data/multiple-is-npm-1.0.0_scan_package.json index f57fcd8dba..9296f1d7fe 100644 --- a/scanpipe/tests/data/multiple-is-npm-1.0.0_scan_package.json +++ b/scanpipe/tests/data/multiple-is-npm-1.0.0_scan_package.json @@ -7,7 +7,6 @@ "--copyright": true, "--email": true, "--info": true, - "--is-license-text": true, "--license": true, "--license-text": true, "--package": true, @@ -15,46 +14,43 @@ "--url": true }, "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", - "output_format_version": "2.0.0", + "output_format_version": "3.0.0", "message": null, "errors": [], "warnings": [], "extra_data": { - "spdx_license_list_version": "3.18", + "spdx_license_list_version": "3.20", "files_count": 6 } } ], - "dependencies": [ - { - "purl": "pkg:npm/ava", - "extracted_requirement": "0.0.3", - "scope": "devDependencies", - "is_runtime": false, - "is_optional": true, - "is_resolved": false, - "resolved_package": {}, - "extra_data": {}, - "dependency_uid": "pkg:npm/ava?uuid=fixed-uid-done-for-testing-5642512d1758", - "for_package_uid": "pkg:npm/is-npm@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", - "datafile_path": "codebase/is-npm/package.json", - "datasource_id": "npm_package_json" + "summary": { + "declared_license_expression": "mit", + "license_clarity_score": { + "score": 90, + "declared_license": true, + "identification_precision": true, + "has_license_text": false, + "declared_copyrights": true, + "conflicting_license_categories": false, + "ambiguous_compound_licensing": false }, - { - "purl": "pkg:npm/ava", - "extracted_requirement": "0.0.3", - "scope": "devDependencies", - "is_runtime": false, - "is_optional": true, - "is_resolved": false, - "resolved_package": {}, - "extra_data": {}, - "dependency_uid": "pkg:npm/ava?uuid=fixed-uid-done-for-testing-5642512d1758", - "for_package_uid": "pkg:npm/is-npm@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", - "datafile_path": "codebase/is-npm/node_modules/is-npm/package.json", - "datasource_id": "npm_package_json" - } - ], + "declared_holder": "Sindre Sorhus", + "primary_language": "JavaScript", + "other_license_expressions": [ + { + "value": null, + "count": 1 + } + ], + "other_holders": [ + { + "value": null, + "count": 4 + } + ], + "other_languages": [] + }, "packages": [ { "type": "npm", @@ -93,10 +89,34 @@ "code_view_url": null, "vcs_url": "https://github.com/sindresorhus/is-npm", "copyright": null, - "license_expression": "mit", - "declared_license": [ - "MIT" + "holder": null, + "declared_license_expression": "mit", + "declared_license_expression_spdx": "MIT", + "license_detections": [ + { + "license_expression": "mit", + "matches": [ + { + "score": 100.0, + "start_line": 1, + "end_line": 1, + "matched_length": 1, + "match_coverage": 100.0, + "matcher": "1-spdx-id", + "license_expression": "mit", + "rule_identifier": "spdx-license-identifier-mit-5da48780aba670b0860c46d899ed42a0f243ff06", + "rule_relevance": 100, + "rule_url": null, + "matched_text": "MIT" + } + ], + "identifier": "mit-a822f434-d61f-f2b1-c792-8b8cb9e7b9bf" + } ], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": "['MIT']", "notice_text": null, "source_packages": [], "extra_data": {}, @@ -149,10 +169,34 @@ "code_view_url": null, "vcs_url": "https://github.com/sindresorhus/is-npm", "copyright": null, - "license_expression": "mit", - "declared_license": [ - "MIT" + "holder": null, + "declared_license_expression": "mit", + "declared_license_expression_spdx": "MIT", + "license_detections": [ + { + "license_expression": "mit", + "matches": [ + { + "score": 100.0, + "start_line": 1, + "end_line": 1, + "matched_length": 1, + "match_coverage": 100.0, + "matcher": "1-spdx-id", + "license_expression": "mit", + "rule_identifier": "spdx-license-identifier-mit-5da48780aba670b0860c46d899ed42a0f243ff06", + "rule_relevance": 100, + "rule_url": null, + "matched_text": "MIT" + } + ], + "identifier": "mit-a822f434-d61f-f2b1-c792-8b8cb9e7b9bf" + } ], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": "['MIT']", "notice_text": null, "source_packages": [], "extra_data": {}, @@ -169,28 +213,43 @@ "purl": "pkg:npm/is-npm@1.0.0" } ], - "summary": { - "declared_license_expression": "mit", - "license_clarity_score": { - "score": 90, - "declared_license": true, - "identification_precision": true, - "has_license_text": false, - "declared_copyrights": true, - "conflicting_license_categories": false, - "ambiguous_compound_licensing": false + "dependencies": [ + { + "purl": "pkg:npm/ava", + "extracted_requirement": "0.0.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "extra_data": {}, + "dependency_uid": "pkg:npm/ava?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/is-npm@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "codebase/is-npm/package.json", + "datasource_id": "npm_package_json" }, - "declared_holder": "Sindre Sorhus", - "primary_language": "JavaScript", - "other_license_expressions": [], - "other_holders": [ - { - "value": null, - "count": 4 - } - ], - "other_languages": [] - }, + { + "purl": "pkg:npm/ava", + "extracted_requirement": "0.0.3", + "scope": "devDependencies", + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "extra_data": {}, + "dependency_uid": "pkg:npm/ava?uuid=fixed-uid-done-for-testing-5642512d1758", + "for_package_uid": "pkg:npm/is-npm@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", + "datafile_path": "codebase/is-npm/node_modules/is-npm/package.json", + "datasource_id": "npm_package_json" + } + ], + "license_detections": [ + { + "identifier": "mit-3fce6ea2-8abd-6c6b-3ede-a37af7c6efee", + "license_expression": "mit", + "detection_count": 4 + } + ], "files": [ { "path": "codebase", @@ -208,14 +267,16 @@ "is_media": false, "is_source": false, "is_script": false, - "licenses": [], - "license_expressions": [], + "package_data": [], + "for_packages": [], + "detected_license_expression": null, + "detected_license_expression_spdx": null, + "license_detections": [], + "license_clues": [], "percentage_of_license_text": 0, "copyrights": [], "holders": [], "authors": [], - "package_data": [], - "for_packages": [], "emails": [], "urls": [], "is_legal": false, @@ -223,7 +284,6 @@ "is_readme": false, "is_top_level": true, "is_key_file": false, - "is_license_text": false, "files_count": 6, "dirs_count": 3, "size_count": 2374, @@ -245,14 +305,16 @@ "is_media": false, "is_source": false, "is_script": false, - "licenses": [], - "license_expressions": [], + "package_data": [], + "for_packages": [], + "detected_license_expression": null, + "detected_license_expression_spdx": null, + "license_detections": [], + "license_clues": [], "percentage_of_license_text": 0, "copyrights": [], "holders": [], "authors": [], - "package_data": [], - "for_packages": [], "emails": [], "urls": [], "is_legal": false, @@ -260,7 +322,6 @@ "is_readme": false, "is_top_level": true, "is_key_file": false, - "is_license_text": false, "files_count": 6, "dirs_count": 2, "size_count": 2374, @@ -282,16 +343,18 @@ "is_media": false, "is_source": true, "is_script": false, - "licenses": [], - "license_expressions": [], - "percentage_of_license_text": 0, - "copyrights": [], - "holders": [], - "authors": [], "package_data": [], "for_packages": [ "pkg:npm/is-npm@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758" ], + "detected_license_expression": null, + "detected_license_expression_spdx": null, + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], "emails": [], "urls": [], "is_legal": false, @@ -299,7 +362,6 @@ "is_readme": false, "is_top_level": true, "is_key_file": false, - "is_license_text": false, "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -321,14 +383,16 @@ "is_media": false, "is_source": false, "is_script": false, - "licenses": [], - "license_expressions": [], + "package_data": [], + "for_packages": [], + "detected_license_expression": null, + "detected_license_expression_spdx": null, + "license_detections": [], + "license_clues": [], "percentage_of_license_text": 0, "copyrights": [], "holders": [], "authors": [], - "package_data": [], - "for_packages": [], "emails": [], "urls": [], "is_legal": false, @@ -336,7 +400,6 @@ "is_readme": false, "is_top_level": true, "is_key_file": false, - "is_license_text": false, "files_count": 3, "dirs_count": 1, "size_count": 1187, @@ -358,14 +421,16 @@ "is_media": false, "is_source": false, "is_script": false, - "licenses": [], - "license_expressions": [], + "package_data": [], + "for_packages": [], + "detected_license_expression": null, + "detected_license_expression_spdx": null, + "license_detections": [], + "license_clues": [], "percentage_of_license_text": 0, "copyrights": [], "holders": [], "authors": [], - "package_data": [], - "for_packages": [], "emails": [], "urls": [], "is_legal": false, @@ -373,7 +438,6 @@ "is_readme": false, "is_top_level": false, "is_key_file": false, - "is_license_text": false, "files_count": 3, "dirs_count": 0, "size_count": 1187, @@ -395,16 +459,18 @@ "is_media": false, "is_source": true, "is_script": false, - "licenses": [], - "license_expressions": [], - "percentage_of_license_text": 0, - "copyrights": [], - "holders": [], - "authors": [], "package_data": [], "for_packages": [ "pkg:npm/is-npm@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758" ], + "detected_license_expression": null, + "detected_license_expression_spdx": null, + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], "emails": [], "urls": [], "is_legal": false, @@ -412,7 +478,6 @@ "is_readme": false, "is_top_level": false, "is_key_file": false, - "is_license_text": false, "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -434,54 +499,6 @@ "is_media": false, "is_source": false, "is_script": false, - "licenses": [ - { - "key": "mit", - "score": 100.0, - "name": "MIT License", - "short_name": "MIT License", - "category": "Permissive", - "is_exception": false, - "is_unknown": false, - "owner": "MIT", - "homepage_url": "http://opensource.org/licenses/mit-license.php", - "text_url": "http://opensource.org/licenses/mit-license.php", - "reference_url": "https://scancode-licensedb.aboutcode.org/mit", - "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.LICENSE", - "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.yml", - "spdx_license_key": "MIT", - "spdx_url": "https://spdx.org/licenses/MIT", - "start_line": 5, - "end_line": 5, - "matched_rule": { - "identifier": "mit_30.RULE", - "license_expression": "mit", - "licenses": [ - "mit" - ], - "referenced_filenames": [], - "is_license_text": false, - "is_license_notice": false, - "is_license_reference": false, - "is_license_tag": true, - "is_license_intro": false, - "has_unknown": false, - "matcher": "2-aho", - "rule_length": 2, - "matched_length": 2, - "match_coverage": 100.0, - "rule_relevance": 100 - }, - "matched_text": " \"license\": \"MIT\"," - } - ], - "license_expressions": [ - "mit" - ], - "percentage_of_license_text": 3.33, - "copyrights": [], - "holders": [], - "authors": [], "package_data": [ { "type": "npm", @@ -520,10 +537,34 @@ "code_view_url": null, "vcs_url": "https://github.com/sindresorhus/is-npm", "copyright": null, - "license_expression": "mit", - "declared_license": [ - "MIT" + "holder": null, + "declared_license_expression": "mit", + "declared_license_expression_spdx": "MIT", + "license_detections": [ + { + "license_expression": "mit", + "matches": [ + { + "score": 100.0, + "start_line": 1, + "end_line": 1, + "matched_length": 1, + "match_coverage": 100.0, + "matcher": "1-spdx-id", + "license_expression": "mit", + "rule_identifier": "spdx-license-identifier-mit-5da48780aba670b0860c46d899ed42a0f243ff06", + "rule_relevance": 100, + "rule_url": null, + "matched_text": "MIT" + } + ], + "identifier": "mit-a822f434-d61f-f2b1-c792-8b8cb9e7b9bf" + } ], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": "['MIT']", "notice_text": null, "source_packages": [], "file_references": [], @@ -550,6 +591,34 @@ "for_packages": [ "pkg:npm/is-npm@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758" ], + "detected_license_expression": "mit", + "detected_license_expression_spdx": "MIT", + "license_detections": [ + { + "license_expression": "mit", + "matches": [ + { + "score": 100.0, + "start_line": 5, + "end_line": 5, + "matched_length": 2, + "match_coverage": 100.0, + "matcher": "2-aho", + "license_expression": "mit", + "rule_identifier": "mit_30.RULE", + "rule_relevance": 100, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/mit_30.RULE", + "matched_text": " \"license\": \"MIT\"," + } + ], + "identifier": "mit-3fce6ea2-8abd-6c6b-3ede-a37af7c6efee" + } + ], + "license_clues": [], + "percentage_of_license_text": 3.33, + "copyrights": [], + "holders": [], + "authors": [], "emails": [ { "email": "sindresorhus@gmail.com", @@ -569,7 +638,6 @@ "is_readme": false, "is_top_level": false, "is_key_file": false, - "is_license_text": false, "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -591,50 +659,34 @@ "is_media": false, "is_source": false, "is_script": false, - "licenses": [ + "package_data": [], + "for_packages": [ + "pkg:npm/is-npm@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "detected_license_expression": "mit", + "detected_license_expression_spdx": "MIT", + "license_detections": [ { - "key": "mit", - "score": 100.0, - "name": "MIT License", - "short_name": "MIT License", - "category": "Permissive", - "is_exception": false, - "is_unknown": false, - "owner": "MIT", - "homepage_url": "http://opensource.org/licenses/mit-license.php", - "text_url": "http://opensource.org/licenses/mit-license.php", - "reference_url": "https://scancode-licensedb.aboutcode.org/mit", - "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.LICENSE", - "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.yml", - "spdx_license_key": "MIT", - "spdx_url": "https://spdx.org/licenses/MIT", - "start_line": 28, - "end_line": 30, - "matched_rule": { - "identifier": "mit_30.RULE", - "license_expression": "mit", - "licenses": [ - "mit" - ], - "referenced_filenames": [], - "is_license_text": false, - "is_license_notice": false, - "is_license_reference": false, - "is_license_tag": true, - "is_license_intro": false, - "has_unknown": false, - "matcher": "2-aho", - "rule_length": 2, - "matched_length": 2, - "match_coverage": 100.0, - "rule_relevance": 100 - }, - "matched_text": "## License\n\nMIT \u00a9 [Sindre Sorhus](http://sindresorhus.com)" + "license_expression": "mit", + "matches": [ + { + "score": 100.0, + "start_line": 28, + "end_line": 30, + "matched_length": 2, + "match_coverage": 100.0, + "matcher": "2-aho", + "license_expression": "mit", + "rule_identifier": "mit_30.RULE", + "rule_relevance": 100, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/mit_30.RULE", + "matched_text": "## License\n\nMIT \u00a9 [Sindre Sorhus](http://sindresorhus.com)" + } + ], + "identifier": "mit-3fce6ea2-8abd-6c6b-3ede-a37af7c6efee" } ], - "license_expressions": [ - "mit" - ], + "license_clues": [], "percentage_of_license_text": 2.78, "copyrights": [ { @@ -651,10 +703,6 @@ } ], "authors": [], - "package_data": [], - "for_packages": [ - "pkg:npm/is-npm@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758" - ], "emails": [], "urls": [ { @@ -683,7 +731,6 @@ "is_readme": true, "is_top_level": false, "is_key_file": false, - "is_license_text": false, "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -705,54 +752,6 @@ "is_media": false, "is_source": false, "is_script": false, - "licenses": [ - { - "key": "mit", - "score": 100.0, - "name": "MIT License", - "short_name": "MIT License", - "category": "Permissive", - "is_exception": false, - "is_unknown": false, - "owner": "MIT", - "homepage_url": "http://opensource.org/licenses/mit-license.php", - "text_url": "http://opensource.org/licenses/mit-license.php", - "reference_url": "https://scancode-licensedb.aboutcode.org/mit", - "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.LICENSE", - "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.yml", - "spdx_license_key": "MIT", - "spdx_url": "https://spdx.org/licenses/MIT", - "start_line": 5, - "end_line": 5, - "matched_rule": { - "identifier": "mit_30.RULE", - "license_expression": "mit", - "licenses": [ - "mit" - ], - "referenced_filenames": [], - "is_license_text": false, - "is_license_notice": false, - "is_license_reference": false, - "is_license_tag": true, - "is_license_intro": false, - "has_unknown": false, - "matcher": "2-aho", - "rule_length": 2, - "matched_length": 2, - "match_coverage": 100.0, - "rule_relevance": 100 - }, - "matched_text": " \"license\": \"MIT\"," - } - ], - "license_expressions": [ - "mit" - ], - "percentage_of_license_text": 3.33, - "copyrights": [], - "holders": [], - "authors": [], "package_data": [ { "type": "npm", @@ -791,10 +790,34 @@ "code_view_url": null, "vcs_url": "https://github.com/sindresorhus/is-npm", "copyright": null, - "license_expression": "mit", - "declared_license": [ - "MIT" + "holder": null, + "declared_license_expression": "mit", + "declared_license_expression_spdx": "MIT", + "license_detections": [ + { + "license_expression": "mit", + "matches": [ + { + "score": 100.0, + "start_line": 1, + "end_line": 1, + "matched_length": 1, + "match_coverage": 100.0, + "matcher": "1-spdx-id", + "license_expression": "mit", + "rule_identifier": "spdx-license-identifier-mit-5da48780aba670b0860c46d899ed42a0f243ff06", + "rule_relevance": 100, + "rule_url": null, + "matched_text": "MIT" + } + ], + "identifier": "mit-a822f434-d61f-f2b1-c792-8b8cb9e7b9bf" + } ], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": "['MIT']", "notice_text": null, "source_packages": [], "file_references": [], @@ -821,6 +844,34 @@ "for_packages": [ "pkg:npm/is-npm@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758" ], + "detected_license_expression": "mit", + "detected_license_expression_spdx": "MIT", + "license_detections": [ + { + "license_expression": "mit", + "matches": [ + { + "score": 100.0, + "start_line": 5, + "end_line": 5, + "matched_length": 2, + "match_coverage": 100.0, + "matcher": "2-aho", + "license_expression": "mit", + "rule_identifier": "mit_30.RULE", + "rule_relevance": 100, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/mit_30.RULE", + "matched_text": " \"license\": \"MIT\"," + } + ], + "identifier": "mit-3fce6ea2-8abd-6c6b-3ede-a37af7c6efee" + } + ], + "license_clues": [], + "percentage_of_license_text": 3.33, + "copyrights": [], + "holders": [], + "authors": [], "emails": [ { "email": "sindresorhus@gmail.com", @@ -840,7 +891,6 @@ "is_readme": false, "is_top_level": true, "is_key_file": true, - "is_license_text": false, "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -862,50 +912,34 @@ "is_media": false, "is_source": false, "is_script": false, - "licenses": [ + "package_data": [], + "for_packages": [ + "pkg:npm/is-npm@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], + "detected_license_expression": "mit", + "detected_license_expression_spdx": "MIT", + "license_detections": [ { - "key": "mit", - "score": 100.0, - "name": "MIT License", - "short_name": "MIT License", - "category": "Permissive", - "is_exception": false, - "is_unknown": false, - "owner": "MIT", - "homepage_url": "http://opensource.org/licenses/mit-license.php", - "text_url": "http://opensource.org/licenses/mit-license.php", - "reference_url": "https://scancode-licensedb.aboutcode.org/mit", - "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.LICENSE", - "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.yml", - "spdx_license_key": "MIT", - "spdx_url": "https://spdx.org/licenses/MIT", - "start_line": 28, - "end_line": 30, - "matched_rule": { - "identifier": "mit_30.RULE", - "license_expression": "mit", - "licenses": [ - "mit" - ], - "referenced_filenames": [], - "is_license_text": false, - "is_license_notice": false, - "is_license_reference": false, - "is_license_tag": true, - "is_license_intro": false, - "has_unknown": false, - "matcher": "2-aho", - "rule_length": 2, - "matched_length": 2, - "match_coverage": 100.0, - "rule_relevance": 100 - }, - "matched_text": "## License\n\nMIT \u00a9 [Sindre Sorhus](http://sindresorhus.com)" + "license_expression": "mit", + "matches": [ + { + "score": 100.0, + "start_line": 28, + "end_line": 30, + "matched_length": 2, + "match_coverage": 100.0, + "matcher": "2-aho", + "license_expression": "mit", + "rule_identifier": "mit_30.RULE", + "rule_relevance": 100, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/mit_30.RULE", + "matched_text": "## License\n\nMIT \u00a9 [Sindre Sorhus](http://sindresorhus.com)" + } + ], + "identifier": "mit-3fce6ea2-8abd-6c6b-3ede-a37af7c6efee" } ], - "license_expressions": [ - "mit" - ], + "license_clues": [], "percentage_of_license_text": 2.78, "copyrights": [ { @@ -922,10 +956,6 @@ } ], "authors": [], - "package_data": [], - "for_packages": [ - "pkg:npm/is-npm@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758" - ], "emails": [], "urls": [ { @@ -954,7 +984,6 @@ "is_readme": true, "is_top_level": true, "is_key_file": true, - "is_license_text": false, "files_count": 0, "dirs_count": 0, "size_count": 0, diff --git a/scanpipe/tests/data/multiple-is-npm-1.0.0_scan_package_summary.json b/scanpipe/tests/data/multiple-is-npm-1.0.0_scan_package_summary.json index 6a561eb1fc..9f9be0559e 100644 --- a/scanpipe/tests/data/multiple-is-npm-1.0.0_scan_package_summary.json +++ b/scanpipe/tests/data/multiple-is-npm-1.0.0_scan_package_summary.json @@ -11,7 +11,12 @@ }, "declared_holder": "Sindre Sorhus", "primary_language": "JavaScript", - "other_license_expressions": [], + "other_license_expressions": [ + { + "value": null, + "count": 1 + } + ], "other_holders": [ { "value": null, @@ -19,26 +24,7 @@ } ], "other_languages": [], - "license_matches": { - "mit": [ - { - "path": "is-npm/node_modules/is-npm/package.json", - "matched_text": " \"license\": \"MIT\"," - }, - { - "path": "is-npm/node_modules/is-npm/readme.md", - "matched_text": "## License\n\nMIT \u00a9 [Sindre Sorhus](http://sindresorhus.com)" - }, - { - "path": "is-npm/package.json", - "matched_text": " \"license\": \"MIT\"," - }, - { - "path": "is-npm/readme.md", - "matched_text": "## License\n\nMIT \u00a9 [Sindre Sorhus](http://sindresorhus.com)" - } - ] - }, + "license_matches": {}, "key_files": [ { "path": "is-npm/package.json", @@ -57,50 +43,8 @@ "is_archive": false, "is_media": false, "is_key_file": true, - "licenses": [ - { - "key": "mit", - "name": "MIT License", - "owner": "MIT", - "score": 100.0, - "category": "Permissive", - "end_line": 5, - "spdx_url": "https://spdx.org/licenses/MIT", - "text_url": "http://opensource.org/licenses/mit-license.php", - "is_unknown": false, - "short_name": "MIT License", - "start_line": 5, - "homepage_url": "http://opensource.org/licenses/mit-license.php", - "is_exception": false, - "matched_rule": { - "matcher": "2-aho", - "licenses": [ - "mit" - ], - "identifier": "mit_30.RULE", - "has_unknown": false, - "rule_length": 2, - "is_license_tag": true, - "match_coverage": 100.0, - "matched_length": 2, - "rule_relevance": 100, - "is_license_text": false, - "is_license_intro": false, - "is_license_notice": false, - "license_expression": "mit", - "is_license_reference": false, - "referenced_filenames": [] - }, - "matched_text": " \"license\": \"MIT\",", - "reference_url": "https://scancode-licensedb.aboutcode.org/mit", - "spdx_license_key": "MIT", - "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.yml", - "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.LICENSE" - } - ], - "license_expressions": [ - "mit" - ], + "licenses": [], + "license_expressions": [], "copyrights": [], "holders": [], "authors": [], @@ -111,6 +55,7 @@ "purl": "pkg:npm/is-npm@1.0.0", "sha1": null, "type": "npm", + "holder": null, "sha256": null, "sha512": null, "parties": [ @@ -160,13 +105,36 @@ "file_references": [], "source_packages": [], "bug_tracking_url": null, - "declared_license": [ - "MIT" - ], "primary_language": "JavaScript", - "license_expression": "mit", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-spdx-id", + "end_line": 1, + "rule_url": null, + "start_line": 1, + "matched_text": "MIT", + "match_coverage": 100.0, + "matched_length": 1, + "rule_relevance": 100, + "rule_identifier": "spdx-license-identifier-mit-5da48780aba670b0860c46d899ed42a0f243ff06", + "license_expression": "mit" + } + ], + "identifier": "mit-a822f434-d61f-f2b1-c792-8b8cb9e7b9bf", + "license_expression": "mit" + } + ], "repository_download_url": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "repository_homepage_url": "https://www.npmjs.com/package/is-npm" + "repository_homepage_url": "https://www.npmjs.com/package/is-npm", + "other_license_detections": [], + "other_license_expression": null, + "declared_license_expression": "mit", + "extracted_license_statement": "['MIT']", + "other_license_expression_spdx": null, + "declared_license_expression_spdx": "MIT" } ], "for_packages": [ @@ -206,50 +174,8 @@ "is_archive": false, "is_media": false, "is_key_file": true, - "licenses": [ - { - "key": "mit", - "name": "MIT License", - "owner": "MIT", - "score": 100.0, - "category": "Permissive", - "end_line": 30, - "spdx_url": "https://spdx.org/licenses/MIT", - "text_url": "http://opensource.org/licenses/mit-license.php", - "is_unknown": false, - "short_name": "MIT License", - "start_line": 28, - "homepage_url": "http://opensource.org/licenses/mit-license.php", - "is_exception": false, - "matched_rule": { - "matcher": "2-aho", - "licenses": [ - "mit" - ], - "identifier": "mit_30.RULE", - "has_unknown": false, - "rule_length": 2, - "is_license_tag": true, - "match_coverage": 100.0, - "matched_length": 2, - "rule_relevance": 100, - "is_license_text": false, - "is_license_intro": false, - "is_license_notice": false, - "license_expression": "mit", - "is_license_reference": false, - "referenced_filenames": [] - }, - "matched_text": "## License\n\nMIT \u00a9 [Sindre Sorhus](http://sindresorhus.com)", - "reference_url": "https://scancode-licensedb.aboutcode.org/mit", - "spdx_license_key": "MIT", - "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.yml", - "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.LICENSE" - } - ], - "license_expressions": [ - "mit" - ], + "licenses": [], + "license_expressions": [], "copyrights": [ { "end_line": 30, @@ -338,8 +264,34 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "mit", - "declared_license": "['MIT']", + "holder": "", + "declared_license_expression": "mit", + "declared_license_expression_spdx": "MIT", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-spdx-id", + "end_line": 1, + "rule_url": null, + "start_line": 1, + "matched_text": "MIT", + "match_coverage": 100.0, + "matched_length": 1, + "rule_relevance": 100, + "rule_identifier": "spdx-license-identifier-mit-5da48780aba670b0860c46d899ed42a0f243ff06", + "license_expression": "mit" + } + ], + "identifier": "mit-a822f434-d61f-f2b1-c792-8b8cb9e7b9bf", + "license_expression": "mit" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": {}, + "extracted_license_statement": "['MIT']", "notice_text": "", "source_packages": [], "extra_data": {}, From 7ff0a5ee101d9adba75b31c58e513b196250f359 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Fri, 5 May 2023 12:04:26 +0400 Subject: [PATCH 05/53] Fix unit tests and update expected files #569 Signed-off-by: Thomas Druez --- scanpipe/models.py | 5 +- scanpipe/pipes/resolve.py | 3 + scanpipe/templates/scanpipe/package_list.html | 2 +- .../tests/data/asgiref-3.3.0_fixtures.json | 20 +- ...asgiref-3.3.0_load_inventory_expected.json | 20 +- .../data/basic-rootfs_root_filesystems.json | 366 +++++++++++++++++- ...-0.6.0-py3-none-any.whl_scan_codebase.json | 256 +++++++++--- scanpipe/tests/data/debian_scan_codebase.json | 215 +++++++++- .../gcr_io_distroless_base_scan_codebase.json | 165 +++++++- .../data/is-npm-1.0.0_scan_codebase.json | 110 +++--- .../data/manifests/package.expected.json | 28 +- scanpipe/tests/test_models.py | 2 +- scanpipe/tests/test_pipelines.py | 6 +- 13 files changed, 1021 insertions(+), 177 deletions(-) diff --git a/scanpipe/models.py b/scanpipe/models.py index eb70083040..a60f1de167 100644 --- a/scanpipe/models.py +++ b/scanpipe/models.py @@ -2374,10 +2374,11 @@ def clean_data(cls, data): def spdx_id(self): return f"SPDXRef-scancodeio-{self._meta.model_name}-{self.uuid}" + # TODO: Is this still relevant with addition of declared_license_expression_spdx? def get_license_expression_spdx_id(self): """Return this package license expression using SPDX syntax and keys.""" - if self.license_expression: - return build_spdx_license_expression(self.license_expression) + if self.declared_license_expression: + return build_spdx_license_expression(self.declared_license_expression) def as_spdx(self): """Return this DiscoveredPackage as an SPDX Package entry.""" diff --git a/scanpipe/pipes/resolve.py b/scanpipe/pipes/resolve.py index 541e24abba..75724862b7 100644 --- a/scanpipe/pipes/resolve.py +++ b/scanpipe/pipes/resolve.py @@ -92,6 +92,9 @@ def resolve_about_packages(input_location): if about_resource := about_data.get("about_resource"): package_data["filename"] = list(about_resource.keys())[0] + if license_expression := about_data.get("license_expression"): + package_data["declared_license_expression"] = license_expression + for field_name, value in about_data.items(): if field_name.startswith("checksum_"): package_data[field_name.replace("checksum_", "")] = value diff --git a/scanpipe/templates/scanpipe/package_list.html b/scanpipe/templates/scanpipe/package_list.html index 4bd6166695..80208d5301 100644 --- a/scanpipe/templates/scanpipe/package_list.html +++ b/scanpipe/templates/scanpipe/package_list.html @@ -30,7 +30,7 @@ {% endif %} - {{ package.license_expression|linebreaksbr }} + {{ package.declared_license_expression|linebreaksbr }} {{ package.copyright|truncatechars:150|linebreaksbr }} diff --git a/scanpipe/tests/data/asgiref-3.3.0_fixtures.json b/scanpipe/tests/data/asgiref-3.3.0_fixtures.json index 1dbd0960c3..cffb5c12f7 100644 --- a/scanpipe/tests/data/asgiref-3.3.0_fixtures.json +++ b/scanpipe/tests/data/asgiref-3.3.0_fixtures.json @@ -306,14 +306,14 @@ ], "source_packages": [], "bug_tracking_url": null, - "declared_license": { + "extracted_license_statement": { "license": "BSD", "classifiers": [ "License :: OSI Approved :: BSD License" ] }, "primary_language": "Python", - "license_expression": "bsd-new AND bsd-new", + "declared_license_expression": "bsd-new AND bsd-new", "repository_download_url": "https://pypi.org/packages/source/a/asgiref/asgiref-3.3.0.tar.gz", "repository_homepage_url": "https://pypi.org/project/asgiref" } @@ -659,7 +659,7 @@ "is_license_text": false, "is_license_intro": false, "is_license_notice": true, - "license_expression": "apache-2.0", + "declared_license_expression": "apache-2.0", "is_license_reference": false, "referenced_filenames": [] }, @@ -840,7 +840,7 @@ "is_license_text": true, "is_license_intro": false, "is_license_notice": false, - "license_expression": "bsd-new", + "declared_license_expression": "bsd-new", "is_license_reference": false, "referenced_filenames": [] }, @@ -1225,14 +1225,14 @@ ], "source_packages": [], "bug_tracking_url": null, - "declared_license": { + "extracted_license_statement": { "license": "BSD", "classifiers": [ "License :: OSI Approved :: BSD License" ] }, "primary_language": "Python", - "license_expression": "bsd-new AND bsd-new", + "declared_license_expression": "bsd-new AND bsd-new", "repository_download_url": "https://pypi.org/packages/source/a/asgiref/asgiref-3.3.0.tar.gz", "repository_homepage_url": "https://pypi.org/project/asgiref" } @@ -1273,8 +1273,8 @@ "repository_download_url": "https://pypi.org/packages/source/a/asgiref/asgiref-3.3.0.tar.gz", "api_data_url": "https://pypi.org/pypi/asgiref/3.3.0/json", "copyright": "", - "license_expression": "bsd-new AND bsd-new", - "declared_license": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", + "declared_license_expression": "bsd-new AND bsd-new", + "extracted_license_statement": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", "notice_text": "", "manifest_path": "", "contains_source_code": null, @@ -1347,8 +1347,8 @@ "repository_download_url": "https://pypi.org/packages/source/a/asgiref/asgiref-3.3.0.tar.gz", "api_data_url": "https://pypi.org/pypi/asgiref/3.3.0/json", "copyright": "", - "license_expression": "bsd-new AND bsd-new", - "declared_license": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", + "declared_license_expression": "bsd-new AND bsd-new", + "extracted_license_statement": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", "notice_text": "", "manifest_path": "", "contains_source_code": null, diff --git a/scanpipe/tests/data/asgiref-3.3.0_load_inventory_expected.json b/scanpipe/tests/data/asgiref-3.3.0_load_inventory_expected.json index d0fab40b59..ca7780f18e 100644 --- a/scanpipe/tests/data/asgiref-3.3.0_load_inventory_expected.json +++ b/scanpipe/tests/data/asgiref-3.3.0_load_inventory_expected.json @@ -69,8 +69,14 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "bsd-new AND bsd-new", - "declared_license": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", + "holder": "", + "declared_license_expression": "", + "declared_license_expression_spdx": "", + "license_detections": {}, + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": {}, + "extracted_license_statement": "", "notice_text": "", "source_packages": [], "extra_data": { @@ -133,8 +139,14 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "bsd-new AND bsd-new", - "declared_license": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", + "holder": "", + "declared_license_expression": "", + "declared_license_expression_spdx": "", + "license_detections": {}, + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": {}, + "extracted_license_statement": "", "notice_text": "", "source_packages": [], "extra_data": { diff --git a/scanpipe/tests/data/basic-rootfs_root_filesystems.json b/scanpipe/tests/data/basic-rootfs_root_filesystems.json index e350a3ce9e..5a4d6809cc 100644 --- a/scanpipe/tests/data/basic-rootfs_root_filesystems.json +++ b/scanpipe/tests/data/basic-rootfs_root_filesystems.json @@ -84,8 +84,91 @@ "sha256": "", "sha512": "", "copyright": "Copyright (c) 1998-2016 Free Software Foundation, Inc.\nCopyright (c) 2001 by Pradeep Padala\nCopyright (c) 1994 X Consortium\nCopyright (c) 1980, 1991, 1992, 1993 The Regents of the University of California\nCopyright 1996-2007 by Thomas E. Dickey", - "license_expression": "x11-fsf AND x11-xconsortium AND bsd-new AND x11-fsf", - "declared_license": "", + "holder": "Free Software Foundation, Inc.\nPradeep Padala\nX Consortium\nThe Regents of the University of California\nThomas E. Dickey", + "declared_license_expression": "x11-fsf AND x11-xconsortium AND bsd-new", + "declared_license_expression_spdx": "X11-distribute-modifications-variant AND X11 AND BSD-3-Clause", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 45, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/x11-fsf.LICENSE", + "start_line": 23, + "matched_text": "Permission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, distribute with modifications, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR\nTHE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nExcept as contained in this notice, the name(s) of the above copyright\nholders shall not be used in advertising or otherwise to promote the\nsale, use or other dealings in this Software without prior written\nauthorization.", + "match_coverage": 100.0, + "matched_length": 200, + "rule_relevance": 100, + "rule_identifier": "x11-fsf.LICENSE", + "license_expression": "x11-fsf" + } + ], + "identifier": "x11_fsf-5f3d72c2-fa6a-2f7b-b859-17e7567c1724", + "license_expression": "x11-fsf" + }, + { + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 70, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/x11-xconsortium_2.RULE", + "start_line": 50, + "matched_text": "Permission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to\ndeal in the Software without restriction, including without limitation the\nrights to use, copy, modify, merge, publish, distribute, sublicense, and/or\nsell copies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\nAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-\nTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nExcept as contained in this notice, the name of the X Consortium shall not\nbe used in advertising or otherwise to promote the sale, use or other deal-\nings in this Software without prior written authorization from the X Consor-\ntium.", + "match_coverage": 100.0, + "matched_length": 201, + "rule_relevance": 100, + "rule_identifier": "x11-xconsortium_2.RULE", + "license_expression": "x11-xconsortium" + } + ], + "identifier": "x11_xconsortium-8bc3e205-5f29-ecad-90bc-2f492c65be46", + "license_expression": "x11-xconsortium" + }, + { + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 98, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_19.RULE", + "start_line": 76, + "matched_text": "Redistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n1. Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n3. Neither the name of the University nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\nOR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\nOUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGE.", + "match_coverage": 100.0, + "matched_length": 213, + "rule_relevance": 100, + "rule_identifier": "bsd-new_19.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-ccc98c3a-92d4-e7a3-e0ba-798328cb6b98", + "license_expression": "bsd-new" + }, + { + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 127, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/x11-fsf_7.RULE", + "start_line": 105, + "matched_text": "Permission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nExcept as contained in this notice, the name(s) of the above copyright\nholders shall not be used in advertising or otherwise to promote the\nsale, use or other dealings in this Software without prior written\nauthorization.", + "match_coverage": 100.0, + "matched_length": 199, + "rule_relevance": 100, + "rule_identifier": "x11-fsf_7.RULE", + "license_expression": "x11-fsf" + } + ], + "identifier": "x11_fsf-c2b8535e-1b81-42d8-945b-b026f349228d", + "license_expression": "x11-fsf" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": {}, + "extracted_license_statement": "", "notice_text": "", "source_packages": [ "pkg:deb/ncurses" @@ -139,8 +222,132 @@ "sha256": "", "sha512": "", "copyright": "Copyright 2013 Jiri Pirko \nCopyright 2014 Andrew Ayer ", - "license_expression": "(lgpl-2.1-plus AND lgpl-2.1-plus AND lgpl-2.1) AND (lgpl-2.1-plus AND lgpl-2.1-plus AND lgpl-2.1)", - "declared_license": "['LGPL-2.1+', 'LGPL-2.1+', 'LGPL-2.1+']", + "holder": "Jiri Pirko\nAndrew Ayer", + "declared_license_expression": "lgpl-2.1-plus AND lgpl-2.1", + "declared_license_expression_spdx": "LGPL-2.1-or-later AND LGPL-2.1-only", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 7, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/lgpl-2.1-plus_108.RULE", + "start_line": 7, + "matched_text": "License: LGPL-2.1+", + "match_coverage": 100.0, + "matched_length": 4, + "rule_relevance": 100, + "rule_identifier": "lgpl-2.1-plus_108.RULE", + "license_expression": "lgpl-2.1-plus" + }, + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 11, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/lgpl-2.1-plus_108.RULE", + "start_line": 11, + "matched_text": "License: LGPL-2.1+", + "match_coverage": 100.0, + "matched_length": 4, + "rule_relevance": 100, + "rule_identifier": "lgpl-2.1-plus_108.RULE", + "license_expression": "lgpl-2.1-plus" + }, + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 13, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/lgpl-2.1-plus_108.RULE", + "start_line": 13, + "matched_text": "License: LGPL-2.1+", + "match_coverage": 100.0, + "matched_length": 4, + "rule_relevance": 100, + "rule_identifier": "lgpl-2.1-plus_108.RULE", + "license_expression": "lgpl-2.1-plus" + }, + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 26, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/lgpl-2.1-plus_93.RULE", + "start_line": 14, + "matched_text": " This program is free software; you can redistribute it and/or modify it\n under the terms of the GNU Lesser General Public License as published\n by the Free Software Foundation; either version 2.1 of the License, or\n (at your option) any later version.\n .\n This program is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser\n General Public License for more details.\n .\n You should have received a copy of the GNU Lesser General Public License\n along with this program; if not, write to the Free Software Foundation,\n Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA", + "match_coverage": 100.0, + "matched_length": 117, + "rule_relevance": 100, + "rule_identifier": "lgpl-2.1-plus_93.RULE", + "license_expression": "lgpl-2.1-plus" + }, + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 30, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/lgpl-2.1_314.RULE", + "start_line": 24, + "matched_text": " You should have received a copy of the GNU Lesser General Public License\n along with this program; if not, write to the Free Software Foundation,\n Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n .\n On Debian systems, the full text of the GNU Lesser General Public\n License version 2.1 can be found in the file\n `/usr/share/common-licenses/LGPL-2.1'.", + "match_coverage": 100.0, + "matched_length": 64, + "rule_relevance": 100, + "rule_identifier": "lgpl-2.1_314.RULE", + "license_expression": "lgpl-2.1" + } + ], + "identifier": "lgpl_2_1_plus_and_lgpl_2_1-6a4d01fd-fa99-80b1-0c2c-a69c91c2ad96", + "license_expression": "lgpl-2.1-plus AND lgpl-2.1" + } + ], + "other_license_expression": "lgpl-2.1-plus AND lgpl-2.1", + "other_license_expression_spdx": "LGPL-2.1-or-later AND LGPL-2.1-only", + "other_license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-hash", + "end_line": 13, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/lgpl-2.1-plus_108.RULE", + "start_line": 13, + "matched_text": "License: lgpl-2.1+", + "match_coverage": 100.0, + "matched_length": 4, + "rule_relevance": 100, + "rule_identifier": "lgpl-2.1-plus_108.RULE", + "license_expression": "lgpl-2.1-plus" + }, + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 26, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/lgpl-2.1-plus_93.RULE", + "start_line": 14, + "matched_text": "This program is free software; you can redistribute it and/or modify it\nunder the terms of the GNU Lesser General Public License as published\nby the Free Software Foundation; either version 2.1 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser\nGeneral Public License for more details.\n\nYou should have received a copy of the GNU Lesser General Public License\nalong with this program; if not, write to the Free Software Foundation,\nInc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA", + "match_coverage": 100.0, + "matched_length": 117, + "rule_relevance": 100, + "rule_identifier": "lgpl-2.1-plus_93.RULE", + "license_expression": "lgpl-2.1-plus" + }, + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 30, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/lgpl-2.1_314.RULE", + "start_line": 24, + "matched_text": "You should have received a copy of the GNU Lesser General Public License\nalong with this program; if not, write to the Free Software Foundation,\nInc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nOn Debian systems, the full text of the GNU Lesser General Public\nLicense version 2.1 can be found in the file\n`/usr/share/common-licenses/LGPL-2.1'.", + "match_coverage": 100.0, + "matched_length": 64, + "rule_relevance": 100, + "rule_identifier": "lgpl-2.1_314.RULE", + "license_expression": "lgpl-2.1" + } + ], + "identifier": "lgpl_2_1_plus_and_lgpl_2_1-1018860f-b475-01e3-bdd4-39bf3444650e", + "license_expression": "lgpl-2.1-plus AND lgpl-2.1" + } + ], + "extracted_license_statement": "['LGPL-2.1+', 'LGPL-2.1+', 'LGPL-2.1+']", "notice_text": "", "source_packages": [ "pkg:deb/libndp" @@ -358,6 +565,7 @@ "purl": "pkg:deb/libncurses5", "sha1": null, "type": "deb", + "holder": "Free Software Foundation, Inc.\nPradeep Padala\nX Consortium\nThe Regents of the University of California\nThomas E. Dickey", "sha256": null, "sha512": null, "parties": [], @@ -381,11 +589,93 @@ "file_references": [], "source_packages": [], "bug_tracking_url": null, - "declared_license": null, "primary_language": null, - "license_expression": "x11-fsf AND x11-xconsortium AND bsd-new AND x11-fsf", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 45, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/x11-fsf.LICENSE", + "start_line": 23, + "matched_text": "Permission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, distribute with modifications, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR\nTHE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nExcept as contained in this notice, the name(s) of the above copyright\nholders shall not be used in advertising or otherwise to promote the\nsale, use or other dealings in this Software without prior written\nauthorization.", + "match_coverage": 100.0, + "matched_length": 200, + "rule_relevance": 100, + "rule_identifier": "x11-fsf.LICENSE", + "license_expression": "x11-fsf" + } + ], + "identifier": "x11_fsf-5f3d72c2-fa6a-2f7b-b859-17e7567c1724", + "license_expression": "x11-fsf" + }, + { + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 70, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/x11-xconsortium_2.RULE", + "start_line": 50, + "matched_text": "Permission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to\ndeal in the Software without restriction, including without limitation the\nrights to use, copy, modify, merge, publish, distribute, sublicense, and/or\nsell copies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\nAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-\nTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nExcept as contained in this notice, the name of the X Consortium shall not\nbe used in advertising or otherwise to promote the sale, use or other deal-\nings in this Software without prior written authorization from the X Consor-\ntium.", + "match_coverage": 100.0, + "matched_length": 201, + "rule_relevance": 100, + "rule_identifier": "x11-xconsortium_2.RULE", + "license_expression": "x11-xconsortium" + } + ], + "identifier": "x11_xconsortium-8bc3e205-5f29-ecad-90bc-2f492c65be46", + "license_expression": "x11-xconsortium" + }, + { + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 98, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_19.RULE", + "start_line": 76, + "matched_text": "Redistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n1. Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n3. Neither the name of the University nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\nOR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\nOUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGE.", + "match_coverage": 100.0, + "matched_length": 213, + "rule_relevance": 100, + "rule_identifier": "bsd-new_19.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-ccc98c3a-92d4-e7a3-e0ba-798328cb6b98", + "license_expression": "bsd-new" + }, + { + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 127, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/x11-fsf_7.RULE", + "start_line": 105, + "matched_text": "Permission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nExcept as contained in this notice, the name(s) of the above copyright\nholders shall not be used in advertising or otherwise to promote the\nsale, use or other dealings in this Software without prior written\nauthorization.", + "match_coverage": 100.0, + "matched_length": 199, + "rule_relevance": 100, + "rule_identifier": "x11-fsf_7.RULE", + "license_expression": "x11-fsf" + } + ], + "identifier": "x11_fsf-c2b8535e-1b81-42d8-945b-b026f349228d", + "license_expression": "x11-fsf" + } + ], "repository_download_url": null, - "repository_homepage_url": null + "repository_homepage_url": null, + "other_license_detections": [], + "other_license_expression": null, + "declared_license_expression": "x11-fsf AND x11-xconsortium AND bsd-new", + "extracted_license_statement": null, + "other_license_expression_spdx": null, + "declared_license_expression_spdx": "X11-distribute-modifications-variant AND X11 AND BSD-3-Clause" } ], "for_packages": [], @@ -450,6 +740,7 @@ "purl": "pkg:deb/libndp0", "sha1": null, "type": "deb", + "holder": "Jiri Pirko\nAndrew Ayer", "sha256": null, "sha512": null, "parties": [], @@ -473,15 +764,62 @@ "file_references": [], "source_packages": [], "bug_tracking_url": null, - "declared_license": [ - "LGPL-2.1+", - "LGPL-2.1+", - "LGPL-2.1+" - ], "primary_language": null, - "license_expression": "(lgpl-2.1-plus AND lgpl-2.1-plus AND lgpl-2.1) AND (lgpl-2.1-plus AND lgpl-2.1-plus AND lgpl-2.1)", + "license_detections": [], "repository_download_url": null, - "repository_homepage_url": null + "repository_homepage_url": null, + "other_license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-hash", + "end_line": 13, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/lgpl-2.1-plus_108.RULE", + "start_line": 13, + "matched_text": "License: lgpl-2.1+", + "match_coverage": 100.0, + "matched_length": 4, + "rule_relevance": 100, + "rule_identifier": "lgpl-2.1-plus_108.RULE", + "license_expression": "lgpl-2.1-plus" + }, + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 26, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/lgpl-2.1-plus_93.RULE", + "start_line": 14, + "matched_text": "This program is free software; you can redistribute it and/or modify it\nunder the terms of the GNU Lesser General Public License as published\nby the Free Software Foundation; either version 2.1 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser\nGeneral Public License for more details.\n\nYou should have received a copy of the GNU Lesser General Public License\nalong with this program; if not, write to the Free Software Foundation,\nInc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA", + "match_coverage": 100.0, + "matched_length": 117, + "rule_relevance": 100, + "rule_identifier": "lgpl-2.1-plus_93.RULE", + "license_expression": "lgpl-2.1-plus" + }, + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 30, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/lgpl-2.1_314.RULE", + "start_line": 24, + "matched_text": "You should have received a copy of the GNU Lesser General Public License\nalong with this program; if not, write to the Free Software Foundation,\nInc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nOn Debian systems, the full text of the GNU Lesser General Public\nLicense version 2.1 can be found in the file\n`/usr/share/common-licenses/LGPL-2.1'.", + "match_coverage": 100.0, + "matched_length": 64, + "rule_relevance": 100, + "rule_identifier": "lgpl-2.1_314.RULE", + "license_expression": "lgpl-2.1" + } + ], + "identifier": "lgpl_2_1_plus_and_lgpl_2_1-1018860f-b475-01e3-bdd4-39bf3444650e", + "license_expression": "lgpl-2.1-plus AND lgpl-2.1" + } + ], + "other_license_expression": "lgpl-2.1-plus AND lgpl-2.1", + "declared_license_expression": "lgpl-2.1-plus AND lgpl-2.1", + "extracted_license_statement": "['LGPL-2.1+', 'LGPL-2.1+', 'LGPL-2.1+']", + "other_license_expression_spdx": "LGPL-2.1-or-later AND LGPL-2.1-only", + "declared_license_expression_spdx": "LGPL-2.1-or-later AND LGPL-2.1-only" } ], "for_packages": [], diff --git a/scanpipe/tests/data/daglib-0.6.0-py3-none-any.whl_scan_codebase.json b/scanpipe/tests/data/daglib-0.6.0-py3-none-any.whl_scan_codebase.json index 31b5a04a93..507f6e6446 100644 --- a/scanpipe/tests/data/daglib-0.6.0-py3-none-any.whl_scan_codebase.json +++ b/scanpipe/tests/data/daglib-0.6.0-py3-none-any.whl_scan_codebase.json @@ -65,8 +65,53 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "mit AND mit", - "declared_license": "{'license': 'MIT', 'classifiers': ['License :: OSI Approved :: MIT License']}", + "holder": "", + "declared_license_expression": "mit", + "declared_license_expression_spdx": "MIT", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-spdx-id", + "end_line": 1, + "rule_url": null, + "start_line": 1, + "matched_text": "MIT", + "match_coverage": 100.0, + "matched_length": 1, + "rule_relevance": 100, + "rule_identifier": "spdx-license-identifier-mit-5da48780aba670b0860c46d899ed42a0f243ff06", + "license_expression": "mit" + } + ], + "identifier": "mit-a822f434-d61f-f2b1-c792-8b8cb9e7b9bf", + "license_expression": "mit" + }, + { + "matches": [ + { + "score": 100.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_mit_license.RULE", + "start_line": 1, + "matched_text": "['License :: OSI Approved :: MIT License']", + "match_coverage": 100.0, + "matched_length": 5, + "rule_relevance": 100, + "rule_identifier": "pypi_mit_license.RULE", + "license_expression": "mit" + } + ], + "identifier": "mit-24a5293c-14d7-5403-efac-1a8b7532c0e8", + "license_expression": "mit" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": {}, + "extracted_license_statement": "{'license': 'MIT', 'classifiers': ['License :: OSI Approved :: MIT License']}", "notice_text": "", "source_packages": [], "extra_data": { @@ -118,8 +163,53 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "mit AND mit", - "declared_license": "{'license': 'MIT', 'classifiers': ['License :: OSI Approved :: MIT License']}", + "holder": "", + "declared_license_expression": "mit", + "declared_license_expression_spdx": "MIT", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-spdx-id", + "end_line": 1, + "rule_url": null, + "start_line": 1, + "matched_text": "MIT", + "match_coverage": 100.0, + "matched_length": 1, + "rule_relevance": 100, + "rule_identifier": "spdx-license-identifier-mit-5da48780aba670b0860c46d899ed42a0f243ff06", + "license_expression": "mit" + } + ], + "identifier": "mit-a822f434-d61f-f2b1-c792-8b8cb9e7b9bf", + "license_expression": "mit" + }, + { + "matches": [ + { + "score": 100.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_mit_license.RULE", + "start_line": 1, + "matched_text": "['License :: OSI Approved :: MIT License']", + "match_coverage": 100.0, + "matched_length": 5, + "rule_relevance": 100, + "rule_identifier": "pypi_mit_license.RULE", + "license_expression": "mit" + } + ], + "identifier": "mit-24a5293c-14d7-5403-efac-1a8b7532c0e8", + "license_expression": "mit" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": {}, + "extracted_license_statement": "{'license': 'MIT', 'classifiers': ['License :: OSI Approved :: MIT License']}", "notice_text": "", "source_packages": [], "extra_data": { @@ -270,6 +360,7 @@ "purl": "pkg:pypi/daglib@0.6.0", "sha1": null, "type": "pypi", + "holder": null, "sha256": null, "sha512": null, "parties": [ @@ -405,16 +496,55 @@ ], "source_packages": [], "bug_tracking_url": null, - "declared_license": { - "license": "MIT", - "classifiers": [ - "License :: OSI Approved :: MIT License" - ] - }, "primary_language": "Python", - "license_expression": "mit AND mit", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-spdx-id", + "end_line": 1, + "rule_url": null, + "start_line": 1, + "matched_text": "MIT", + "match_coverage": 100.0, + "matched_length": 1, + "rule_relevance": 100, + "rule_identifier": "spdx-license-identifier-mit-5da48780aba670b0860c46d899ed42a0f243ff06", + "license_expression": "mit" + } + ], + "identifier": "mit-a822f434-d61f-f2b1-c792-8b8cb9e7b9bf", + "license_expression": "mit" + }, + { + "matches": [ + { + "score": 100.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_mit_license.RULE", + "start_line": 1, + "matched_text": "['License :: OSI Approved :: MIT License']", + "match_coverage": 100.0, + "matched_length": 5, + "rule_relevance": 100, + "rule_identifier": "pypi_mit_license.RULE", + "license_expression": "mit" + } + ], + "identifier": "mit-24a5293c-14d7-5403-efac-1a8b7532c0e8", + "license_expression": "mit" + } + ], "repository_download_url": "https://pypi.org/packages/source/d/daglib/daglib-0.6.0.tar.gz", - "repository_homepage_url": "https://pypi.org/project/daglib" + "repository_homepage_url": "https://pypi.org/project/daglib", + "other_license_detections": [], + "other_license_expression": null, + "declared_license_expression": "mit", + "extracted_license_statement": "{'license': 'MIT', 'classifiers': ['License :: OSI Approved :: MIT License']}", + "other_license_expression_spdx": null, + "declared_license_expression_spdx": "MIT" } ], "for_packages": [ @@ -525,50 +655,8 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [ - { - "key": "mit", - "name": "MIT License", - "owner": "MIT", - "score": 100.0, - "category": "Permissive", - "end_line": 19, - "spdx_url": "https://spdx.org/licenses/MIT", - "text_url": "http://opensource.org/licenses/mit-license.php", - "is_unknown": false, - "short_name": "MIT License", - "start_line": 3, - "homepage_url": "http://opensource.org/licenses/mit-license.php", - "is_exception": false, - "matched_rule": { - "matcher": "2-aho", - "licenses": [ - "mit" - ], - "identifier": "mit.LICENSE", - "has_unknown": false, - "rule_length": 161, - "is_license_tag": false, - "match_coverage": 100.0, - "matched_length": 161, - "rule_relevance": 100, - "is_license_text": true, - "is_license_intro": false, - "is_license_notice": false, - "license_expression": "mit", - "is_license_reference": false, - "referenced_filenames": [] - }, - "matched_text": "Permission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.", - "reference_url": "https://scancode-licensedb.aboutcode.org/mit", - "spdx_license_key": "MIT", - "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.yml", - "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.LICENSE" - } - ], - "license_expressions": [ - "mit" - ], + "licenses": [], + "license_expressions": [], "copyrights": [ { "end_line": 1, @@ -621,6 +709,7 @@ "purl": "pkg:pypi/daglib@0.6.0", "sha1": null, "type": "pypi", + "holder": null, "sha256": null, "sha512": null, "parties": [ @@ -756,16 +845,55 @@ ], "source_packages": [], "bug_tracking_url": null, - "declared_license": { - "license": "MIT", - "classifiers": [ - "License :: OSI Approved :: MIT License" - ] - }, "primary_language": "Python", - "license_expression": "mit AND mit", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-spdx-id", + "end_line": 1, + "rule_url": null, + "start_line": 1, + "matched_text": "MIT", + "match_coverage": 100.0, + "matched_length": 1, + "rule_relevance": 100, + "rule_identifier": "spdx-license-identifier-mit-5da48780aba670b0860c46d899ed42a0f243ff06", + "license_expression": "mit" + } + ], + "identifier": "mit-a822f434-d61f-f2b1-c792-8b8cb9e7b9bf", + "license_expression": "mit" + }, + { + "matches": [ + { + "score": 100.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_mit_license.RULE", + "start_line": 1, + "matched_text": "['License :: OSI Approved :: MIT License']", + "match_coverage": 100.0, + "matched_length": 5, + "rule_relevance": 100, + "rule_identifier": "pypi_mit_license.RULE", + "license_expression": "mit" + } + ], + "identifier": "mit-24a5293c-14d7-5403-efac-1a8b7532c0e8", + "license_expression": "mit" + } + ], "repository_download_url": "https://pypi.org/packages/source/d/daglib/daglib-0.6.0.tar.gz", - "repository_homepage_url": "https://pypi.org/project/daglib" + "repository_homepage_url": "https://pypi.org/project/daglib", + "other_license_detections": [], + "other_license_expression": null, + "declared_license_expression": "mit", + "extracted_license_statement": "{'license': 'MIT', 'classifiers': ['License :: OSI Approved :: MIT License']}", + "other_license_expression_spdx": null, + "declared_license_expression_spdx": "MIT" } ], "for_packages": [ diff --git a/scanpipe/tests/data/debian_scan_codebase.json b/scanpipe/tests/data/debian_scan_codebase.json index 6227a1f947..985d9458bc 100644 --- a/scanpipe/tests/data/debian_scan_codebase.json +++ b/scanpipe/tests/data/debian_scan_codebase.json @@ -134,8 +134,91 @@ "sha256": "", "sha512": "", "copyright": "Copyright (c) 1998-2016 Free Software Foundation, Inc.\nCopyright (c) 2001 by Pradeep Padala\nCopyright (c) 1994 X Consortium\nCopyright (c) 1980, 1991, 1992, 1993 The Regents of the University of California\nCopyright 1996-2007 by Thomas E. Dickey", - "license_expression": "x11-fsf AND x11-xconsortium AND bsd-new AND x11-fsf", - "declared_license": "", + "holder": "Free Software Foundation, Inc.\nPradeep Padala\nX Consortium\nThe Regents of the University of California\nThomas E. Dickey", + "declared_license_expression": "x11-fsf AND x11-xconsortium AND bsd-new", + "declared_license_expression_spdx": "X11-distribute-modifications-variant AND X11 AND BSD-3-Clause", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 45, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/x11-fsf.LICENSE", + "start_line": 23, + "matched_text": "Permission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, distribute with modifications, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR\nTHE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nExcept as contained in this notice, the name(s) of the above copyright\nholders shall not be used in advertising or otherwise to promote the\nsale, use or other dealings in this Software without prior written\nauthorization.", + "match_coverage": 100.0, + "matched_length": 200, + "rule_relevance": 100, + "rule_identifier": "x11-fsf.LICENSE", + "license_expression": "x11-fsf" + } + ], + "identifier": "x11_fsf-5f3d72c2-fa6a-2f7b-b859-17e7567c1724", + "license_expression": "x11-fsf" + }, + { + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 70, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/x11-xconsortium_2.RULE", + "start_line": 50, + "matched_text": "Permission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to\ndeal in the Software without restriction, including without limitation the\nrights to use, copy, modify, merge, publish, distribute, sublicense, and/or\nsell copies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nX CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\nAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-\nTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nExcept as contained in this notice, the name of the X Consortium shall not\nbe used in advertising or otherwise to promote the sale, use or other deal-\nings in this Software without prior written authorization from the X Consor-\ntium.", + "match_coverage": 100.0, + "matched_length": 201, + "rule_relevance": 100, + "rule_identifier": "x11-xconsortium_2.RULE", + "license_expression": "x11-xconsortium" + } + ], + "identifier": "x11_xconsortium-8bc3e205-5f29-ecad-90bc-2f492c65be46", + "license_expression": "x11-xconsortium" + }, + { + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 98, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_19.RULE", + "start_line": 76, + "matched_text": "Redistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions\nare met:\n1. Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n3. Neither the name of the University nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\nARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\nOR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\nOUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGE.", + "match_coverage": 100.0, + "matched_length": 213, + "rule_relevance": 100, + "rule_identifier": "bsd-new_19.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-ccc98c3a-92d4-e7a3-e0ba-798328cb6b98", + "license_expression": "bsd-new" + }, + { + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 127, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/x11-fsf_7.RULE", + "start_line": 105, + "matched_text": "Permission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nExcept as contained in this notice, the name(s) of the above copyright\nholders shall not be used in advertising or otherwise to promote the\nsale, use or other dealings in this Software without prior written\nauthorization.", + "match_coverage": 100.0, + "matched_length": 199, + "rule_relevance": 100, + "rule_identifier": "x11-fsf_7.RULE", + "license_expression": "x11-fsf" + } + ], + "identifier": "x11_fsf-c2b8535e-1b81-42d8-945b-b026f349228d", + "license_expression": "x11-fsf" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": {}, + "extracted_license_statement": "", "notice_text": "", "source_packages": [ "pkg:deb/ncurses" @@ -221,8 +304,132 @@ "sha256": "", "sha512": "", "copyright": "Copyright 2013 Jiri Pirko \nCopyright 2014 Andrew Ayer ", - "license_expression": "(lgpl-2.1-plus AND lgpl-2.1-plus AND lgpl-2.1) AND (lgpl-2.1-plus AND lgpl-2.1-plus AND lgpl-2.1)", - "declared_license": "['LGPL-2.1+', 'LGPL-2.1+', 'LGPL-2.1+']", + "holder": "Jiri Pirko\nAndrew Ayer", + "declared_license_expression": "lgpl-2.1-plus AND lgpl-2.1", + "declared_license_expression_spdx": "LGPL-2.1-or-later AND LGPL-2.1-only", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 7, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/lgpl-2.1-plus_108.RULE", + "start_line": 7, + "matched_text": "License: LGPL-2.1+", + "match_coverage": 100.0, + "matched_length": 4, + "rule_relevance": 100, + "rule_identifier": "lgpl-2.1-plus_108.RULE", + "license_expression": "lgpl-2.1-plus" + }, + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 11, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/lgpl-2.1-plus_108.RULE", + "start_line": 11, + "matched_text": "License: LGPL-2.1+", + "match_coverage": 100.0, + "matched_length": 4, + "rule_relevance": 100, + "rule_identifier": "lgpl-2.1-plus_108.RULE", + "license_expression": "lgpl-2.1-plus" + }, + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 13, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/lgpl-2.1-plus_108.RULE", + "start_line": 13, + "matched_text": "License: LGPL-2.1+", + "match_coverage": 100.0, + "matched_length": 4, + "rule_relevance": 100, + "rule_identifier": "lgpl-2.1-plus_108.RULE", + "license_expression": "lgpl-2.1-plus" + }, + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 26, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/lgpl-2.1-plus_93.RULE", + "start_line": 14, + "matched_text": " This program is free software; you can redistribute it and/or modify it\n under the terms of the GNU Lesser General Public License as published\n by the Free Software Foundation; either version 2.1 of the License, or\n (at your option) any later version.\n .\n This program is distributed in the hope that it will be useful,\n but WITHOUT ANY WARRANTY; without even the implied warranty of\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser\n General Public License for more details.\n .\n You should have received a copy of the GNU Lesser General Public License\n along with this program; if not, write to the Free Software Foundation,\n Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA", + "match_coverage": 100.0, + "matched_length": 117, + "rule_relevance": 100, + "rule_identifier": "lgpl-2.1-plus_93.RULE", + "license_expression": "lgpl-2.1-plus" + }, + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 30, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/lgpl-2.1_314.RULE", + "start_line": 24, + "matched_text": " You should have received a copy of the GNU Lesser General Public License\n along with this program; if not, write to the Free Software Foundation,\n Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n .\n On Debian systems, the full text of the GNU Lesser General Public\n License version 2.1 can be found in the file\n `/usr/share/common-licenses/LGPL-2.1'.", + "match_coverage": 100.0, + "matched_length": 64, + "rule_relevance": 100, + "rule_identifier": "lgpl-2.1_314.RULE", + "license_expression": "lgpl-2.1" + } + ], + "identifier": "lgpl_2_1_plus_and_lgpl_2_1-6a4d01fd-fa99-80b1-0c2c-a69c91c2ad96", + "license_expression": "lgpl-2.1-plus AND lgpl-2.1" + } + ], + "other_license_expression": "lgpl-2.1-plus AND lgpl-2.1", + "other_license_expression_spdx": "LGPL-2.1-or-later AND LGPL-2.1-only", + "other_license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-hash", + "end_line": 13, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/lgpl-2.1-plus_108.RULE", + "start_line": 13, + "matched_text": "License: lgpl-2.1+", + "match_coverage": 100.0, + "matched_length": 4, + "rule_relevance": 100, + "rule_identifier": "lgpl-2.1-plus_108.RULE", + "license_expression": "lgpl-2.1-plus" + }, + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 26, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/lgpl-2.1-plus_93.RULE", + "start_line": 14, + "matched_text": "This program is free software; you can redistribute it and/or modify it\nunder the terms of the GNU Lesser General Public License as published\nby the Free Software Foundation; either version 2.1 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser\nGeneral Public License for more details.\n\nYou should have received a copy of the GNU Lesser General Public License\nalong with this program; if not, write to the Free Software Foundation,\nInc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA", + "match_coverage": 100.0, + "matched_length": 117, + "rule_relevance": 100, + "rule_identifier": "lgpl-2.1-plus_93.RULE", + "license_expression": "lgpl-2.1-plus" + }, + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 30, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/lgpl-2.1_314.RULE", + "start_line": 24, + "matched_text": "You should have received a copy of the GNU Lesser General Public License\nalong with this program; if not, write to the Free Software Foundation,\nInc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n\nOn Debian systems, the full text of the GNU Lesser General Public\nLicense version 2.1 can be found in the file\n`/usr/share/common-licenses/LGPL-2.1'.", + "match_coverage": 100.0, + "matched_length": 64, + "rule_relevance": 100, + "rule_identifier": "lgpl-2.1_314.RULE", + "license_expression": "lgpl-2.1" + } + ], + "identifier": "lgpl_2_1_plus_and_lgpl_2_1-1018860f-b475-01e3-bdd4-39bf3444650e", + "license_expression": "lgpl-2.1-plus AND lgpl-2.1" + } + ], + "extracted_license_statement": "['LGPL-2.1+', 'LGPL-2.1+', 'LGPL-2.1+']", "notice_text": "", "source_packages": [ "pkg:deb/libndp" diff --git a/scanpipe/tests/data/gcr_io_distroless_base_scan_codebase.json b/scanpipe/tests/data/gcr_io_distroless_base_scan_codebase.json index ad3440ea9b..79af372583 100644 --- a/scanpipe/tests/data/gcr_io_distroless_base_scan_codebase.json +++ b/scanpipe/tests/data/gcr_io_distroless_base_scan_codebase.json @@ -152,8 +152,14 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "", - "declared_license": "", + "holder": "", + "declared_license_expression": "", + "declared_license_expression_spdx": "", + "license_detections": {}, + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": {}, + "extracted_license_statement": "", "notice_text": "", "source_packages": [], "extra_data": { @@ -203,8 +209,14 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "", - "declared_license": "", + "holder": "", + "declared_license_expression": "", + "declared_license_expression_spdx": "", + "license_detections": {}, + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": {}, + "extracted_license_statement": "", "notice_text": "", "source_packages": [ "pkg:deb/distroless/glibc" @@ -256,8 +268,14 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "", - "declared_license": "", + "holder": "", + "declared_license_expression": "", + "declared_license_expression_spdx": "", + "license_detections": {}, + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": {}, + "extracted_license_statement": "", "notice_text": "", "source_packages": [ "pkg:deb/distroless/openssl" @@ -309,8 +327,14 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "", - "declared_license": "", + "holder": "", + "declared_license_expression": "", + "declared_license_expression_spdx": "", + "license_detections": {}, + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": {}, + "extracted_license_statement": "", "notice_text": "", "source_packages": [], "extra_data": { @@ -360,8 +384,14 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "", - "declared_license": "", + "holder": "", + "declared_license_expression": "", + "declared_license_expression_spdx": "", + "license_detections": {}, + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": {}, + "extracted_license_statement": "", "notice_text": "", "source_packages": [], "extra_data": { @@ -411,8 +441,14 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "", - "declared_license": "", + "holder": "", + "declared_license_expression": "", + "declared_license_expression_spdx": "", + "license_detections": {}, + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": {}, + "extracted_license_statement": "", "notice_text": "", "source_packages": [], "extra_data": { @@ -13324,6 +13360,7 @@ "purl": "pkg:linux-distro/debian/distroless@11", "sha1": null, "type": "linux-distro", + "holder": null, "sha256": null, "sha512": null, "parties": [], @@ -13347,11 +13384,16 @@ "file_references": [], "source_packages": [], "bug_tracking_url": null, - "declared_license": null, "primary_language": null, - "license_expression": null, + "license_detections": [], "repository_download_url": null, - "repository_homepage_url": null + "repository_homepage_url": null, + "other_license_detections": [], + "other_license_expression": null, + "declared_license_expression": null, + "extracted_license_statement": null, + "other_license_expression_spdx": null, + "declared_license_expression_spdx": null } ], "for_packages": [], @@ -14370,6 +14412,7 @@ "purl": "pkg:deb/ca-certificates", "sha1": null, "type": "deb", + "holder": "Fumitoshi UKAI\nPhilipp Kern\nMichael Shuler\nMozilla Contributors", "sha256": null, "sha512": null, "parties": [], @@ -14393,14 +14436,94 @@ "file_references": [], "source_packages": [], "bug_tracking_url": null, - "declared_license": [ - "GPL-2+", - "MPL-2.0" - ], "primary_language": null, - "license_expression": "(gpl-2.0-plus AND gpl-2.0-plus AND gpl-2.0) AND (mpl-2.0 AND mpl-2.0)", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-hash", + "end_line": 13, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/gpl-2.0-plus_22.RULE", + "start_line": 13, + "matched_text": "License: gpl-2+", + "match_coverage": 100.0, + "matched_length": 3, + "rule_relevance": 100, + "rule_identifier": "gpl-2.0-plus_22.RULE", + "license_expression": "gpl-2.0-plus" + }, + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 27, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/gpl-2.0-plus_25.RULE", + "start_line": 14, + "matched_text": "This program is free software; you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation; either version 2 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,\nUSA.", + "match_coverage": 100.0, + "matched_length": 113, + "rule_relevance": 100, + "rule_identifier": "gpl-2.0-plus_25.RULE", + "license_expression": "gpl-2.0-plus" + }, + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 30, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/gpl-2.0_1166.RULE", + "start_line": 29, + "matched_text": "On Debian GNU/Linux systems, the complete text of the GNU General Public\nLicense can be found in '/usr/share/common-licenses/GPL-2'.", + "match_coverage": 100.0, + "matched_length": 24, + "rule_relevance": 100, + "rule_identifier": "gpl-2.0_1166.RULE", + "license_expression": "gpl-2.0" + } + ], + "identifier": "gpl_2_0_plus_and_gpl_2_0-c60cf274-d3ce-d029-06f8-cdf674420dbe", + "license_expression": "gpl-2.0-plus AND gpl-2.0" + }, + { + "matches": [ + { + "score": 100.0, + "matcher": "1-hash", + "end_line": 41, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/mpl-2.0_75.RULE", + "start_line": 41, + "matched_text": "License: mpl-2.0", + "match_coverage": 100.0, + "matched_length": 4, + "rule_relevance": 100, + "rule_identifier": "mpl-2.0_75.RULE", + "license_expression": "mpl-2.0" + }, + { + "score": 100.0, + "matcher": "1-hash", + "end_line": 414, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mpl-2.0.LICENSE", + "start_line": 42, + "matched_text": "Mozilla Public License Version 2.0\n==================================\n\n1. Definitions\n--------------\n\n1.1. \"Contributor\"\n means each individual or legal entity that creates, contributes to\n the creation of, or owns Covered Software.\n\n1.2. \"Contributor Version\"\n means the combination of the Contributions of others (if any) used\n by a Contributor and that particular Contributor's Contribution.\n\n1.3. \"Contribution\"\n means Covered Software of a particular Contributor.\n\n1.4. \"Covered Software\"\n means Source Code Form to which the initial Contributor has attached\n the notice in Exhibit A, the Executable Form of such Source Code\n Form, and Modifications of such Source Code Form, in each case\n including portions thereof.\n\n1.5. \"Incompatible With Secondary Licenses\"\n means\n\n (a) that the initial Contributor has attached the notice described\n in Exhibit B to the Covered Software; or\n\n (b) that the Covered Software was made available under the terms of\n version 1.1 or earlier of the License, but not also under the\n terms of a Secondary License.\n\n1.6. \"Executable Form\"\n means any form of the work other than Source Code Form.\n\n1.7. \"Larger Work\"\n means a work that combines Covered Software with other material, in\n a separate file or files, that is not Covered Software.\n\n1.8. \"License\"\n means this document.\n\n1.9. \"Licensable\"\n means having the right to grant, to the maximum extent possible,\n whether at the time of the initial grant or subsequently, any and\n all of the rights conveyed by this License.\n\n1.10. \"Modifications\"\n means any of the following:\n\n (a) any file in Source Code Form that results from an addition to,\n deletion from, or modification of the contents of Covered\n Software; or\n\n (b) any new file in Source Code Form that contains any Covered\n Software.\n\n1.11. \"Patent Claims\" of a Contributor\n means any patent claim(s), including without limitation, method,\n process, and apparatus claims, in any patent Licensable by such\n Contributor that would be infringed, but for the grant of the\n License, by the making, using, selling, offering for sale, having\n made, import, or transfer of either its Contributions or its\n Contributor Version.\n\n1.12. \"Secondary License\"\n means either the GNU General Public License, Version 2.0, the GNU\n Lesser General Public License, Version 2.1, the GNU Affero General\n Public License, Version 3.0, or any later versions of those\n licenses.\n\n1.13. \"Source Code Form\"\n means the form of the work preferred for making modifications.\n\n1.14. \"You\" (or \"Your\")\n means an individual or a legal entity exercising rights under this\n License. For legal entities, \"You\" includes any entity that\n controls, is controlled by, or is under common control with You. For\n purposes of this definition, \"control\" means (a) the power, direct\n or indirect, to cause the direction or management of such entity,\n whether by contract or otherwise, or (b) ownership of more than\n fifty percent (50%) of the outstanding shares or beneficial\n ownership of such entity.\n\n2. License Grants and Conditions\n--------------------------------\n\n2.1. Grants\n\nEach Contributor hereby grants You a world-wide, royalty-free,\nnon-exclusive license:\n\n(a) under intellectual property rights (other than patent or trademark)\n Licensable by such Contributor to use, reproduce, make available,\n modify, display, perform, distribute, and otherwise exploit its\n Contributions, either on an unmodified basis, with Modifications, or\n as part of a Larger Work; and\n\n(b) under Patent Claims of such Contributor to make, use, sell, offer\n for sale, have made, import, and otherwise transfer either its\n Contributions or its Contributor Version.\n\n2.2. Effective Date\n\nThe licenses granted in Section 2.1 with respect to any Contribution\nbecome effective for each Contribution on the date the Contributor first\ndistributes such Contribution.\n\n2.3. Limitations on Grant Scope\n\nThe licenses granted in this Section 2 are the only rights granted under\nthis License. No additional rights or licenses will be implied from the\ndistribution or licensing of Covered Software under this License.\nNotwithstanding Section 2.1(b) above, no patent license is granted by a\nContributor:\n\n(a) for any code that a Contributor has removed from Covered Software;\n or\n\n(b) for infringements caused by: (i) Your and any other third party's\n modifications of Covered Software, or (ii) the combination of its\n Contributions with other software (except as part of its Contributor\n Version); or\n\n(c) under Patent Claims infringed by Covered Software in the absence of\n its Contributions.\n\nThis License does not grant any rights in the trademarks, service marks,\nor logos of any Contributor (except as may be necessary to comply with\nthe notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\nNo Contributor makes additional grants as a result of Your choice to\ndistribute the Covered Software under a subsequent version of this\nLicense (see Section 10.2) or under the terms of a Secondary License (if\npermitted under the terms of Section 3.3).\n\n2.5. Representation\n\nEach Contributor represents that the Contributor believes its\nContributions are its original creation(s) or it has sufficient rights\nto grant the rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\nThis License is not intended to limit any rights You have under\napplicable copyright doctrines of fair use, fair dealing, or other\nequivalents.\n\n2.7. Conditions\n\nSections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted\nin Section 2.1.\n\n3. Responsibilities\n-------------------\n\n3.1. Distribution of Source Form\n\nAll distribution of Covered Software in Source Code Form, including any\nModifications that You create or to which You contribute, must be under\nthe terms of this License. You must inform recipients that the Source\nCode Form of the Covered Software is governed by the terms of this\nLicense, and how they can obtain a copy of this License. You may not\nattempt to alter or restrict the recipients' rights in the Source Code\nForm.\n\n3.2. Distribution of Executable Form\n\nIf You distribute Covered Software in Executable Form then:\n\n(a) such Covered Software must also be made available in Source Code\n Form, as described in Section 3.1, and You must inform recipients of\n the Executable Form how they can obtain a copy of such Source Code\n Form by reasonable means in a timely manner, at a charge no more\n than the cost of distribution to the recipient; and\n\n(b) You may distribute such Executable Form under the terms of this\n License, or sublicense it under different terms, provided that the\n license for the Executable Form does not attempt to limit or alter\n the recipients' rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\nYou may create and distribute a Larger Work under terms of Your choice,\nprovided that You also comply with the requirements of this License for\nthe Covered Software. If the Larger Work is a combination of Covered\nSoftware with a work governed by one or more Secondary Licenses, and the\nCovered Software is not Incompatible With Secondary Licenses, this\nLicense permits You to additionally distribute such Covered Software\nunder the terms of such Secondary License(s), so that the recipient of\nthe Larger Work may, at their option, further distribute the Covered\nSoftware under the terms of either this License or such Secondary\nLicense(s).\n\n3.4. Notices\n\nYou may not remove or alter the substance of any license notices\n(including copyright notices, patent notices, disclaimers of warranty,\nor limitations of liability) contained within the Source Code Form of\nthe Covered Software, except that You may alter any license notices to\nthe extent required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\nYou may choose to offer, and to charge a fee for, warranty, support,\nindemnity or liability obligations to one or more recipients of Covered\nSoftware. However, You may do so only on Your own behalf, and not on\nbehalf of any Contributor. You must make it absolutely clear that any\nsuch warranty, support, indemnity, or liability obligation is offered by\nYou alone, and You hereby agree to indemnify every Contributor for any\nliability incurred by such Contributor as a result of warranty, support,\nindemnity or liability terms You offer. You may include additional\ndisclaimers of warranty and limitations of liability specific to any\njurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n---------------------------------------------------\n\nIf it is impossible for You to comply with any of the terms of this\nLicense with respect to some or all of the Covered Software due to\nstatute, judicial order, or regulation then You must: (a) comply with\nthe terms of this License to the maximum extent possible; and (b)\ndescribe the limitations and the code they affect. Such description must\nbe placed in a text file included with all distributions of the Covered\nSoftware under this License. Except to the extent prohibited by statute\nor regulation, such description must be sufficiently detailed for a\nrecipient of ordinary skill to be able to understand it.\n\n5. Termination\n--------------\n\n5.1. The rights granted under this License will terminate automatically\nif You fail to comply with any of its terms. However, if You become\ncompliant, then the rights granted under this License from a particular\nContributor are reinstated (a) provisionally, unless and until such\nContributor explicitly and finally terminates Your grants, and (b) on an\nongoing basis, if such Contributor fails to notify You of the\nnon-compliance by some reasonable means prior to 60 days after You have\ncome back into compliance. Moreover, Your grants from a particular\nContributor are reinstated on an ongoing basis if such Contributor\nnotifies You of the non-compliance by some reasonable means, this is the\nfirst time You have received notice of non-compliance with this License\nfrom such Contributor, and You become compliant prior to 30 days after\nYour receipt of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\ninfringement claim (excluding declaratory judgment actions,\ncounter-claims, and cross-claims) alleging that a Contributor Version\ndirectly or indirectly infringes any patent, then the rights granted to\nYou by any and all Contributors for the Covered Software under Section\n2.1 of this License shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all\nend user license agreements (excluding distributors and resellers) which\nhave been validly granted by You or Your distributors under this License\nprior to termination shall survive termination.\n\n************************************************************************\n* *\n* 6. Disclaimer of Warranty *\n* ------------------------- *\n* *\n* Covered Software is provided under this License on an \"as is\" *\n* basis, without warranty of any kind, either expressed, implied, or *\n* statutory, including, without limitation, warranties that the *\n* Covered Software is free of defects, merchantable, fit for a *\n* particular purpose or non-infringing. The entire risk as to the *\n* quality and performance of the Covered Software is with You. *\n* Should any Covered Software prove defective in any respect, You *\n* (not any Contributor) assume the cost of any necessary servicing, *\n* repair, or correction. This disclaimer of warranty constitutes an *\n* essential part of this License. No use of any Covered Software is *\n* authorized under this License except under this disclaimer. *\n* *\n************************************************************************\n\n************************************************************************\n* *\n* 7. Limitation of Liability *\n* -------------------------- *\n* *\n* Under no circumstances and under no legal theory, whether tort *\n* (including negligence), contract, or otherwise, shall any *\n* Contributor, or anyone who distributes Covered Software as *\n* permitted above, be liable to You for any direct, indirect, *\n* special, incidental, or consequential damages of any character *\n* including, without limitation, damages for lost profits, loss of *\n* goodwill, work stoppage, computer failure or malfunction, or any *\n* and all other commercial damages or losses, even if such party *\n* shall have been informed of the possibility of such damages. This *\n* limitation of liability shall not apply to liability for death or *\n* personal injury resulting from such party's negligence to the *\n* extent applicable law prohibits such limitation. Some *\n* jurisdictions do not allow the exclusion or limitation of *\n* incidental or consequential damages, so this exclusion and *\n* limitation may not apply to You. *\n* *\n************************************************************************\n\n8. Litigation\n-------------\n\nAny litigation relating to this License may be brought only in the\ncourts of a jurisdiction where the defendant maintains its principal\nplace of business and such litigation shall be governed by laws of that\njurisdiction, without reference to its conflict-of-law provisions.\nNothing in this Section shall prevent a party's ability to bring\ncross-claims or counter-claims.\n\n9. Miscellaneous\n----------------\n\nThis License represents the complete agreement concerning the subject\nmatter hereof. If any provision of this License is held to be\nunenforceable, such provision shall be reformed only to the extent\nnecessary to make it enforceable. Any law or regulation which provides\nthat the language of a contract shall be construed against the drafter\nshall not be used to construe this License against a Contributor.\n\n10. Versions of the License\n---------------------------\n\n10.1. New Versions\n\nMozilla Foundation is the license steward. Except as provided in Section\n10.3, no one other than the license steward has the right to modify or\npublish new versions of this License. Each version will be given a\ndistinguishing version number.\n\n10.2. Effect of New Versions\n\nYou may distribute the Covered Software under the terms of the version\nof the License under which You originally received the Covered Software,\nor under the terms of any subsequent version published by the license\nsteward.\n\n10.3. Modified Versions\n\nIf you create software not governed by this License, and you want to\ncreate a new license for such software, you may create and use a\nmodified version of this License if you rename the license and remove\nany references to the name of the license steward (except to note that\nsuch modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary\nLicenses\n\nIf You choose to distribute Source Code Form that is Incompatible With\nSecondary Licenses under the terms of this version of the License, the\nnotice described in Exhibit B of this License must be attached.\n\nExhibit A - Source Code Form License Notice\n-------------------------------------------\n\n This Source Code Form is subject to the terms of the Mozilla Public\n License, v. 2.0. If a copy of the MPL was not distributed with this\n file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular\nfile, then You may include the notice in a location (such as a LICENSE\nfile in a relevant directory) where a recipient would be likely to look\nfor such a notice.\n\nYou may add additional accurate notices of copyright ownership.\n\nExhibit B - \"Incompatible With Secondary Licenses\" Notice\n---------------------------------------------------------\n\n This Source Code Form is \"Incompatible With Secondary Licenses\", as\n defined by the Mozilla Public License, v. 2.0.", + "match_coverage": 100.0, + "matched_length": 2371, + "rule_relevance": 100, + "rule_identifier": "mpl-2.0.LICENSE", + "license_expression": "mpl-2.0" + } + ], + "identifier": "mpl_2_0-a4e80716-0ace-81d4-b4b0-3d29c3a0f1e2", + "license_expression": "mpl-2.0" + } + ], "repository_download_url": null, - "repository_homepage_url": null + "repository_homepage_url": null, + "other_license_detections": [], + "other_license_expression": null, + "declared_license_expression": "(gpl-2.0-plus AND gpl-2.0) AND mpl-2.0", + "extracted_license_statement": "['GPL-2+', 'MPL-2.0']", + "other_license_expression_spdx": null, + "declared_license_expression_spdx": "(GPL-2.0-or-later AND GPL-2.0-only) AND MPL-2.0" } ], "for_packages": [], diff --git a/scanpipe/tests/data/is-npm-1.0.0_scan_codebase.json b/scanpipe/tests/data/is-npm-1.0.0_scan_codebase.json index 946a804f57..0c3fc301cf 100644 --- a/scanpipe/tests/data/is-npm-1.0.0_scan_codebase.json +++ b/scanpipe/tests/data/is-npm-1.0.0_scan_codebase.json @@ -68,8 +68,34 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "mit", - "declared_license": "['MIT']", + "holder": "", + "declared_license_expression": "mit", + "declared_license_expression_spdx": "MIT", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-spdx-id", + "end_line": 1, + "rule_url": null, + "start_line": 1, + "matched_text": "MIT", + "match_coverage": 100.0, + "matched_length": 1, + "rule_relevance": 100, + "rule_identifier": "spdx-license-identifier-mit-5da48780aba670b0860c46d899ed42a0f243ff06", + "license_expression": "mit" + } + ], + "identifier": "mit-a822f434-d61f-f2b1-c792-8b8cb9e7b9bf", + "license_expression": "mit" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": {}, + "extracted_license_statement": "['MIT']", "notice_text": "", "source_packages": [], "extra_data": {}, @@ -241,6 +267,7 @@ "purl": "pkg:npm/is-npm@1.0.0", "sha1": null, "type": "npm", + "holder": null, "sha256": null, "sha512": null, "parties": [ @@ -290,13 +317,36 @@ "file_references": [], "source_packages": [], "bug_tracking_url": null, - "declared_license": [ - "MIT" - ], "primary_language": "JavaScript", - "license_expression": "mit", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-spdx-id", + "end_line": 1, + "rule_url": null, + "start_line": 1, + "matched_text": "MIT", + "match_coverage": 100.0, + "matched_length": 1, + "rule_relevance": 100, + "rule_identifier": "spdx-license-identifier-mit-5da48780aba670b0860c46d899ed42a0f243ff06", + "license_expression": "mit" + } + ], + "identifier": "mit-a822f434-d61f-f2b1-c792-8b8cb9e7b9bf", + "license_expression": "mit" + } + ], "repository_download_url": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "repository_homepage_url": "https://www.npmjs.com/package/is-npm" + "repository_homepage_url": "https://www.npmjs.com/package/is-npm", + "other_license_detections": [], + "other_license_expression": null, + "declared_license_expression": "mit", + "extracted_license_statement": "['MIT']", + "other_license_expression_spdx": null, + "declared_license_expression_spdx": "MIT" } ], "for_packages": [ @@ -323,50 +373,8 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [ - { - "key": "mit", - "name": "MIT License", - "owner": "MIT", - "score": 100.0, - "category": "Permissive", - "end_line": 30, - "spdx_url": "https://spdx.org/licenses/MIT", - "text_url": "http://opensource.org/licenses/mit-license.php", - "is_unknown": false, - "short_name": "MIT License", - "start_line": 28, - "homepage_url": "http://opensource.org/licenses/mit-license.php", - "is_exception": false, - "matched_rule": { - "matcher": "2-aho", - "licenses": [ - "mit" - ], - "identifier": "mit_30.RULE", - "has_unknown": false, - "rule_length": 2, - "is_license_tag": true, - "match_coverage": 100.0, - "matched_length": 2, - "rule_relevance": 100, - "is_license_text": false, - "is_license_intro": false, - "is_license_notice": false, - "license_expression": "mit", - "is_license_reference": false, - "referenced_filenames": [] - }, - "matched_text": "## License\n\nMIT \u00a9 [Sindre Sorhus](http://sindresorhus.com)", - "reference_url": "https://scancode-licensedb.aboutcode.org/mit", - "spdx_license_key": "MIT", - "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.yml", - "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.LICENSE" - } - ], - "license_expressions": [ - "mit" - ], + "licenses": [], + "license_expressions": [], "copyrights": [ { "end_line": 30, diff --git a/scanpipe/tests/data/manifests/package.expected.json b/scanpipe/tests/data/manifests/package.expected.json index b2d7b0c938..8695981137 100644 --- a/scanpipe/tests/data/manifests/package.expected.json +++ b/scanpipe/tests/data/manifests/package.expected.json @@ -32,10 +32,34 @@ "code_view_url": null, "vcs_url": "https://github.com/electron/electron", "copyright": null, + "holder": null, "declared_license_expression": "mit", - "extracted_license_statement": [ - "MIT" + "declared_license_expression_spdx": "MIT", + "license_detections": [ + { + "license_expression": "mit", + "matches": [ + { + "score": 100.0, + "start_line": 1, + "end_line": 1, + "matched_length": 1, + "match_coverage": 100.0, + "matcher": "1-spdx-id", + "license_expression": "mit", + "rule_identifier": "spdx-license-identifier-mit-5da48780aba670b0860c46d899ed42a0f243ff06", + "rule_relevance": 100, + "rule_url": null, + "matched_text": "MIT" + } + ], + "identifier": "mit-a822f434-d61f-f2b1-c792-8b8cb9e7b9bf" + } ], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": "['MIT']", "notice_text": null, "source_packages": [], "file_references": [], diff --git a/scanpipe/tests/test_models.py b/scanpipe/tests/test_models.py index b00f59b5db..c0fd7b8222 100644 --- a/scanpipe/tests/test_models.py +++ b/scanpipe/tests/test_models.py @@ -1707,7 +1707,7 @@ def test_scanpipe_discovered_package_model_create_from_data(self): self.assertEqual("add and remove users and groups", package.description) self.assertEqual("849", package.size) self.assertEqual( - "gpl-2.0 AND gpl-2.0-plus AND unknown", package.license_expression + "gpl-2.0 AND gpl-2.0-plus AND unknown", package.declared_license_expression ) package_count = DiscoveredPackage.objects.count() diff --git a/scanpipe/tests/test_pipelines.py b/scanpipe/tests/test_pipelines.py index 92313c7e59..4286f1efbf 100644 --- a/scanpipe/tests/test_pipelines.py +++ b/scanpipe/tests/test_pipelines.py @@ -719,7 +719,7 @@ def test_scanpipe_inspect_manifest_pipeline_aboutfile_integration_test(self): self.assertEqual("pypi", discoveredpackage.type) self.assertEqual("django", discoveredpackage.name) self.assertEqual("4.0.8", discoveredpackage.version) - self.assertEqual("bsd-new", discoveredpackage.license_expression) + self.assertEqual("bsd-new", discoveredpackage.declared_license_expression) def test_scanpipe_inspect_manifest_pipeline_spdx_integration_test(self): pipeline_name = "inspect_manifest" @@ -740,8 +740,8 @@ def test_scanpipe_inspect_manifest_pipeline_spdx_integration_test(self): self.assertEqual("toml", discoveredpackage.name) self.assertEqual("0.10.2", discoveredpackage.version) self.assertEqual("https://github.com/uiri/toml", discoveredpackage.homepage_url) - self.assertEqual("MIT", discoveredpackage.declared_license) - self.assertEqual("mit", discoveredpackage.license_expression) + self.assertEqual("MIT", discoveredpackage.extracted_license_statement) + self.assertEqual("mit", discoveredpackage.declared_license_expression) def test_scanpipe_inspect_manifest_pipeline_cyclonedx_integration_test(self): pipeline_name = "inspect_manifest" From 9a028756ad6b1bf66c1d6e23aa1223161e26a255 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Fri, 5 May 2023 12:20:16 +0400 Subject: [PATCH 06/53] Fix unit tests and update expected files #569 Signed-off-by: Thomas Druez --- .../asgiref-3.3.0_walk_test_fixtures.json | 20 +++++++++---------- scanpipe/tests/pipes/test_scancode.py | 20 ++++++++++--------- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/scanpipe/tests/data/asgiref-3.3.0_walk_test_fixtures.json b/scanpipe/tests/data/asgiref-3.3.0_walk_test_fixtures.json index ca97770f6a..55184b2124 100644 --- a/scanpipe/tests/data/asgiref-3.3.0_walk_test_fixtures.json +++ b/scanpipe/tests/data/asgiref-3.3.0_walk_test_fixtures.json @@ -306,14 +306,14 @@ ], "source_packages": [], "bug_tracking_url": null, - "declared_license": { + "extracted_license_statement": { "license": "BSD", "classifiers": [ "License :: OSI Approved :: BSD License" ] }, "primary_language": "Python", - "license_expression": "bsd-new AND bsd-new", + "declared_license_expression": "bsd-new AND bsd-new", "repository_download_url": "https://pypi.org/packages/source/a/asgiref/asgiref-3.3.0.tar.gz", "repository_homepage_url": "https://pypi.org/project/asgiref" } @@ -659,7 +659,7 @@ "is_license_text": false, "is_license_intro": false, "is_license_notice": true, - "license_expression": "apache-2.0", + "declared_license_expression": "apache-2.0", "is_license_reference": false, "referenced_filenames": [] }, @@ -840,7 +840,7 @@ "is_license_text": true, "is_license_intro": false, "is_license_notice": false, - "license_expression": "bsd-new", + "declared_license_expression": "bsd-new", "is_license_reference": false, "referenced_filenames": [] }, @@ -1225,14 +1225,14 @@ ], "source_packages": [], "bug_tracking_url": null, - "declared_license": { + "extracted_license_statement": { "license": "BSD", "classifiers": [ "License :: OSI Approved :: BSD License" ] }, "primary_language": "Python", - "license_expression": "bsd-new AND bsd-new", + "declared_license_expression": "bsd-new AND bsd-new", "repository_download_url": "https://pypi.org/packages/source/a/asgiref/asgiref-3.3.0.tar.gz", "repository_homepage_url": "https://pypi.org/project/asgiref" } @@ -1273,8 +1273,8 @@ "repository_download_url": "https://pypi.org/packages/source/a/asgiref/asgiref-3.3.0.tar.gz", "api_data_url": "https://pypi.org/pypi/asgiref/3.3.0/json", "copyright": "", - "license_expression": "bsd-new AND bsd-new", - "declared_license": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", + "declared_license_expression": "bsd-new AND bsd-new", + "extracted_license_statement": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", "notice_text": "", "manifest_path": "", "contains_source_code": null, @@ -1347,8 +1347,8 @@ "repository_download_url": "https://pypi.org/packages/source/a/asgiref/asgiref-3.3.0.tar.gz", "api_data_url": "https://pypi.org/pypi/asgiref/3.3.0/json", "copyright": "", - "license_expression": "bsd-new AND bsd-new", - "declared_license": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", + "declared_license_expression": "bsd-new AND bsd-new", + "extracted_license_statement": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", "notice_text": "", "manifest_path": "", "contains_source_code": null, diff --git a/scanpipe/tests/pipes/test_scancode.py b/scanpipe/tests/pipes/test_scancode.py index b14720bbdb..873bdb7d53 100644 --- a/scanpipe/tests/pipes/test_scancode.py +++ b/scanpipe/tests/pipes/test_scancode.py @@ -148,14 +148,15 @@ def test_scanpipe_pipes_scancode_scan_file(self): input_location = str(self.data_location / "notice.NOTICE") scan_results, scan_errors = scancode.scan_file(input_location) expected = [ + "authors", "copyrights", + "detected_license_expression", + "detected_license_expression_spdx", + "emails", "holders", - "authors", - "licenses", - "license_expressions", - "spdx_license_expressions", + "license_clues", + "license_detections", "percentage_of_license_text", - "emails", "urls", ] self.assertEqual(sorted(expected), sorted(scan_results.keys())) @@ -175,11 +176,12 @@ def test_scanpipe_pipes_scancode_scan_file_timeout(self): self.assertEqual(expected_errors, scan_errors) expected = [ - "licenses", - "license_expressions", - "spdx_license_expressions", - "percentage_of_license_text", + "detected_license_expression", + "detected_license_expression_spdx", "emails", + "license_clues", + "license_detections", + "percentage_of_license_text", "urls", ] self.assertEqual(sorted(expected), sorted(scan_results.keys())) From 87cfd93e08261b0b5acee7865df5e4ab6950aa57 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Fri, 5 May 2023 12:32:48 +0400 Subject: [PATCH 07/53] Adjust new JSONField default as list #569 Signed-off-by: Thomas Druez --- ...0030_scancode_toolkit_v32_model_updates.py | 4 +-- scanpipe/models.py | 25 ++----------------- 2 files changed, 4 insertions(+), 25 deletions(-) diff --git a/scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py b/scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py index 1c2471ad9a..b7daec1fb9 100644 --- a/scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py +++ b/scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py @@ -60,7 +60,7 @@ class Migration(migrations.Migration): name="license_detections", field=models.JSONField( blank=True, - default=dict, + default=list, help_text="A list of LicenseDetection mappings typically derived from its extracted_license_statement or from some other type-specific routine or convention.", ), ), @@ -69,7 +69,7 @@ class Migration(migrations.Migration): name="other_license_detections", field=models.JSONField( blank=True, - default=dict, + default=list, help_text="A list of LicenseDetection mappings which is different from the declared_license_expression, (i.e. not the primary license) These are detections for the detection for the license expressions in other_license_expression. ", ), ), diff --git a/scanpipe/models.py b/scanpipe/models.py index a60f1de167..df7d66cb45 100644 --- a/scanpipe/models.py +++ b/scanpipe/models.py @@ -2101,30 +2101,10 @@ class AbstractPackage(models.Model): blank=True, help_text=_("Copyright statements for this package. Typically one per line."), ) - # The data structure of license attributes in package_data and the codebase - # level packages has been updated accordingly: - # - # There is a new license_detections attribute for the primary, top-level - # declared licenses of a package and an other_license_detections attribute - # for the other secondary detections. - # - # The license_expression is replaced by the declared_license_expression - # and other_license_expression attributes with their SPDX counterparts - # declared_license_expression_spdx and other_license_expression_spdx. - # These expressions are parallel to detections. - # - # The declared_license attribute is renamed extracted_license_statement - # and is now a YAML-encoded string. - # - # See license updates documentation - # _ - # for examples and details. holder = models.TextField( blank=True, help_text=_("Holders for this package. Typically one per line."), ) - # TODO: Replaces license_expression declared_license_expression = models.TextField( blank=True, help_text=_( @@ -2141,7 +2121,7 @@ class AbstractPackage(models.Model): ), ) license_detections = models.JSONField( - default=dict, + default=list, blank=True, help_text=_( "A list of LicenseDetection mappings typically derived " @@ -2165,7 +2145,7 @@ class AbstractPackage(models.Model): ), ) other_license_detections = models.JSONField( - default=dict, + default=list, blank=True, help_text=_( "A list of LicenseDetection mappings which is different from the " @@ -2174,7 +2154,6 @@ class AbstractPackage(models.Model): "in other_license_expression. " ), ) - # TODO: Replaces declared_license extracted_license_statement = models.TextField( blank=True, help_text=_( From 8797ea510818714f526c3a32fd9b07a212db4e2f Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Fri, 5 May 2023 13:54:00 +0400 Subject: [PATCH 08/53] Multiple adjustments for the v32 update #569 Signed-off-by: Thomas Druez --- scanpipe/models.py | 7 +++---- scanpipe/pipes/output.py | 8 +++++++- scanpipe/pipes/resolve.py | 32 +++++++++++--------------------- scanpipe/pipes/windows.py | 8 +++----- scanpipe/tests/test_models.py | 3 --- scanpipe/tests/test_pipelines.py | 2 +- scanpipe/views.py | 19 +++++++++++++++++-- 7 files changed, 42 insertions(+), 37 deletions(-) diff --git a/scanpipe/models.py b/scanpipe/models.py index df7d66cb45..f5ec29bbee 100644 --- a/scanpipe/models.py +++ b/scanpipe/models.py @@ -2380,13 +2380,12 @@ def as_spdx(self): ) ) - license_expression_spdx = self.get_license_expression_spdx_id() return spdx.Package( name=self.name or self.filename, spdx_id=self.spdx_id, download_location=self.download_url, - license_declared=license_expression_spdx, - license_concluded=license_expression_spdx, + license_declared=self.declared_license_expression_spdx, + license_concluded=self.declared_license_expression_spdx, copyright_text=self.copyright, version=self.version, homepage=self.homepage_url, @@ -2400,7 +2399,7 @@ def as_spdx(self): def as_cyclonedx(self): """Return this DiscoveredPackage as an CycloneDX Component entry.""" licenses = [] - if expression_spdx := self.get_license_expression_spdx_id(): + if expression_spdx := self.declared_license_expression_spdx: licenses = [ cyclonedx_model.LicenseChoice(license_expression=expression_spdx), ] diff --git a/scanpipe/pipes/output.py b/scanpipe/pipes/output.py index c97a2db7e8..ec4b41bda9 100644 --- a/scanpipe/pipes/output.py +++ b/scanpipe/pipes/output.py @@ -443,7 +443,13 @@ def to_xlsx(project): exceed the limits of what can be stored in a cell. """ output_file = project.get_output_file_path("results", "xlsx") - exclude_fields = ["licenses", "extra_data", "extracted_license_statement"] + exclude_fields = [ + "licenses", + "extra_data", + "extracted_license_statement", + "license_detections", + "other_license_detections", + ] if not scanpipe_app.policies_enabled: exclude_fields.append("compliance_alert") diff --git a/scanpipe/pipes/resolve.py b/scanpipe/pipes/resolve.py index 75724862b7..6781b5e514 100644 --- a/scanpipe/pipes/resolve.py +++ b/scanpipe/pipes/resolve.py @@ -27,11 +27,8 @@ from django.core.validators import EMPTY_VALUES from attributecode.model import About -from licensedcode.match_spdx_lid import get_spdx_expression from packagedcode import APPLICATION_PACKAGE_DATAFILE_HANDLERS - -# https://github.com/nexB/scancode-toolkit/commit/539ebedd700d7c6bb9596ca1274f0fd86624926d -# from packagedcode.licensing import get_normalized_expression +from packagedcode.licensing import get_license_detections_and_expression from packageurl import PackageURL from python_inspector.resolve_cli import resolver_api from scancode.api import get_package_data @@ -115,14 +112,16 @@ def spdx_package_to_discovered_package_data(spdx_package): for checksum in spdx_package.checksums } + # TODO: Compute the `declared_license_expression`, check toolkit code + declared_license_expression_spdx = spdx_package.license_concluded + declared_license_expression = "" + package_data = { "name": spdx_package.name, "download_url": spdx_package.download_location, - # TODO: Likely not relevant with model changes + "declared_license_expression": declared_license_expression, + "declared_license_expression_spdx": declared_license_expression_spdx, "extracted_license_statement": spdx_package.license_declared, - "declared_license_expression": get_spdx_expression( - spdx_package.license_concluded or "" - ), "copyright": spdx_package.copyright_text, "version": spdx_package.version, "homepage_url": spdx_package.homepage, @@ -239,6 +238,7 @@ def get_default_package_type(input_location): } +# TODO: Check if that function call is still relevant def set_license_expression(package_data): """ Set the license expression from a detected license dict/str in provided @@ -248,20 +248,10 @@ def set_license_expression(package_data): declared_license_expression = package_data.get("declared_license_expression") if extracted_license_statement and not declared_license_expression: - license_str = "" - - if isinstance(extracted_license_statement, dict): - license_str = extracted_license_statement.get("license") - - if not license_str: - license_str = repr(extracted_license_statement) - - from packagedcode import licensing - - license_expression = licensing.get_normalized_expression( - query_string=license_str + _, license_expression = get_license_detections_and_expression( + extracted_license_statement ) if license_expression: - package_data["declared_license_expression"] = declared_license_expression + package_data["declared_license_expression"] = license_expression return package_data diff --git a/scanpipe/pipes/windows.py b/scanpipe/pipes/windows.py index 390b69e373..bb5da785ba 100644 --- a/scanpipe/pipes/windows.py +++ b/scanpipe/pipes/windows.py @@ -148,14 +148,11 @@ def _tag_python_software(project): q_objects = [~Q(rootfs_path__icontains="site-packages")] for python_path, python_version in python_versions_by_path.items(): - # TODO: test_scanpipe_pipes_windows_tag_known_software - # TypeError: Package.__init__() got an unexpected keyword argument - # 'license_expression' python_package = Package( type="windows-program", name="Python", version=python_version, - # license_expression="python", + declared_license_expression="python", copyright="Copyright (c) Python Software Foundation", homepage_url="https://www.python.org/", ) @@ -196,11 +193,12 @@ def _tag_openjdk_software(project): openjdk_versions_by_path[openjdk_root_path] = openjdk_version for openjdk_path, openjdk_version in openjdk_versions_by_path.items(): + license_expression = "gpl-2.0 WITH oracle-openjdk-classpath-exception-2.0" openjdk_package = Package( type="windows-program", name="OpenJDK", version=openjdk_version, - # license_expression="gpl-2.0 WITH oracle-openjdk-classpath-exception-2.0", + declared_license_expression=license_expression, copyright="Copyright (c) Oracle and/or its affiliates", homepage_url="http://openjdk.java.net/", ) diff --git a/scanpipe/tests/test_models.py b/scanpipe/tests/test_models.py index c0fd7b8222..42f191f386 100644 --- a/scanpipe/tests/test_models.py +++ b/scanpipe/tests/test_models.py @@ -1830,11 +1830,8 @@ def test_scanpipe_package_model_integrity_with_toolkit_package_model(self): "missing_resources", "modified_resources", "codebase_resources", - # TODO: Review those: "package_uid", "filename", - "manifest_path", - "contains_source_code", ] discovered_package_fields = [ diff --git a/scanpipe/tests/test_pipelines.py b/scanpipe/tests/test_pipelines.py index 4286f1efbf..8925c6c567 100644 --- a/scanpipe/tests/test_pipelines.py +++ b/scanpipe/tests/test_pipelines.py @@ -764,7 +764,7 @@ def test_scanpipe_inspect_manifest_pipeline_cyclonedx_integration_test(self): "name": "toml", "version": "0.10.2", "extracted_license_statement": "OFL-1.1\nApache-2.0", - "declared_license_expression": "ofl-1.1 AND unknown", + "declared_license_expression": "ofl-1.1 OR apache-2.0", "homepage_url": "https://cyclonedx.org/website", "bug_tracking_url": "https://cyclonedx.org/issue-tracker", "vcs_url": "https://cyclonedx.org/vcs", diff --git a/scanpipe/views.py b/scanpipe/views.py index ef137381cf..26b45fb002 100644 --- a/scanpipe/views.py +++ b/scanpipe/views.py @@ -77,9 +77,8 @@ LICENSE_CLARITY_FIELDS = [ ( - # TODO: "Declared license", - "extracted_license_statement", + "declared_license", "Indicates that the software package licensing is documented at top-level or " "well-known locations in the software project, typically in a package " "manifest, NOTICE, LICENSE, COPYING or README file. " @@ -1182,6 +1181,10 @@ class DiscoveredPackageDetailsView( "fields": [ "package_url", "declared_license_expression", + { + "field_name": "declared_license_expression_spdx", + "label": "Declared license expression (SPDX)", + }, "primary_language", "homepage_url", "download_url", @@ -1200,9 +1203,21 @@ class DiscoveredPackageDetailsView( "terms": { "fields": [ "declared_license_expression", + { + "field_name": "declared_license_expression_spdx", + "label": "Declared license expression (SPDX)", + }, + "other_license_expression", + { + "field_name": "other_license_expression_spdx", + "label": "Other license expression (SPDX)", + }, "extracted_license_statement", "copyright", + "holder", "notice_text", + "license_detections", + "other_license_detections", ], "icon_class": "fas fa-file-contract", }, From c135721231f1ccedf895f209aed2270e8724a272 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Fri, 5 May 2023 14:04:25 +0400 Subject: [PATCH 09/53] Refine get_declared_license_expression_spdx logic #569 Signed-off-by: Thomas Druez --- scanpipe/models.py | 21 ++++++++++++++------- scanpipe/tests/__init__.py | 3 ++- scanpipe/tests/test_models.py | 28 ++++++++++++++++++++++++---- 3 files changed, 40 insertions(+), 12 deletions(-) diff --git a/scanpipe/models.py b/scanpipe/models.py index f5ec29bbee..1e727fcac4 100644 --- a/scanpipe/models.py +++ b/scanpipe/models.py @@ -2353,11 +2353,18 @@ def clean_data(cls, data): def spdx_id(self): return f"SPDXRef-scancodeio-{self._meta.model_name}-{self.uuid}" - # TODO: Is this still relevant with addition of declared_license_expression_spdx? - def get_license_expression_spdx_id(self): - """Return this package license expression using SPDX syntax and keys.""" - if self.declared_license_expression: + def get_declared_license_expression_spdx(self): + """ + Return this package license expression using SPDX keys. + + Use `declared_license_expression_spdx` when available or compute the expression + from `declared_license_expression`. + """ + if self.declared_license_expression_spdx: + return self.declared_license_expression_spdx + elif self.declared_license_expression: return build_spdx_license_expression(self.declared_license_expression) + return "" def as_spdx(self): """Return this DiscoveredPackage as an SPDX Package entry.""" @@ -2384,8 +2391,8 @@ def as_spdx(self): name=self.name or self.filename, spdx_id=self.spdx_id, download_location=self.download_url, - license_declared=self.declared_license_expression_spdx, - license_concluded=self.declared_license_expression_spdx, + license_declared=self.get_declared_license_expression_spdx(), + license_concluded=self.get_declared_license_expression_spdx(), copyright_text=self.copyright, version=self.version, homepage=self.homepage_url, @@ -2399,7 +2406,7 @@ def as_spdx(self): def as_cyclonedx(self): """Return this DiscoveredPackage as an CycloneDX Component entry.""" licenses = [] - if expression_spdx := self.declared_license_expression_spdx: + if expression_spdx := self.get_declared_license_expression_spdx(): licenses = [ cyclonedx_model.LicenseChoice(license_expression=expression_spdx), ] diff --git a/scanpipe/tests/__init__.py b/scanpipe/tests/__init__.py index a1d313e966..f89fb7ccaf 100644 --- a/scanpipe/tests/__init__.py +++ b/scanpipe/tests/__init__.py @@ -124,7 +124,8 @@ def make_resource_file(project, path, **extra): "Copyright (c) 1995 Ted Hajek \n" "portions Copyright (c) 1994 Debian Association, Inc." ), - "declared_license_expression": "gpl-2.0 AND gpl-2.0-plus AND unknown", + "declared_license_expression": "gpl-2.0 AND gpl-2.0-plus", + "declared_license_expression_spdx": "GPL-2.0-only AND GPL-2.0-or-later", "extracted_license_statement": "", "notice_text": None, "root_path": None, diff --git a/scanpipe/tests/test_models.py b/scanpipe/tests/test_models.py index 42f191f386..66bc6f7c49 100644 --- a/scanpipe/tests/test_models.py +++ b/scanpipe/tests/test_models.py @@ -1488,6 +1488,27 @@ def test_scanpipe_discovered_package_model_update_from_data(self): self.assertEqual(["description"], updated_fields) self.assertEqual(new_data["description"], package.description) + def test_scanpipe_discovered_package_get_declared_license_expression_spdx(self): + package = DiscoveredPackage.create_from_data(self.project1, package_data1) + expression = "gpl-2.0 AND gpl-2.0-plus" + spdx = "GPL-2.0-only AND GPL-2.0-or-later" + + self.assertEqual(expression, package.declared_license_expression) + self.assertEqual(spdx, package.declared_license_expression_spdx) + self.assertEqual(spdx, package.get_declared_license_expression_spdx()) + + package.declared_license_expression_spdx = "" + package.save() + self.assertEqual(expression, package.declared_license_expression) + self.assertEqual("", package.declared_license_expression_spdx) + self.assertEqual(spdx, package.get_declared_license_expression_spdx()) + + package.declared_license_expression = "" + package.save() + self.assertEqual("", package.declared_license_expression) + self.assertEqual("", package.declared_license_expression_spdx) + self.assertEqual("", package.get_declared_license_expression_spdx()) + def test_scanpipe_discovered_package_model_add_resources(self): package = DiscoveredPackage.create_from_data(self.project1, package_data1) resource1 = CodebaseResource.objects.create(project=self.project1, path="file1") @@ -1519,7 +1540,7 @@ def test_scanpipe_discovered_package_model_as_cyclonedx(self): self.assertEqual(purl, str(cyclonedx_component.bom_ref)) self.assertEqual(purl, cyclonedx_component.purl) self.assertEqual(1, len(cyclonedx_component.licenses)) - expected = "GPL-2.0-only AND GPL-2.0-or-later AND LicenseRef-scancode-unknown" + expected = "GPL-2.0-only AND GPL-2.0-or-later" self.assertEqual(expected, cyclonedx_component.licenses[0].expression) self.assertEqual(package_data1["copyright"], cyclonedx_component.copyright) self.assertEqual(package_data1["description"], cyclonedx_component.description) @@ -1706,9 +1727,8 @@ def test_scanpipe_discovered_package_model_create_from_data(self): self.assertEqual("arch=all", package.qualifiers) self.assertEqual("add and remove users and groups", package.description) self.assertEqual("849", package.size) - self.assertEqual( - "gpl-2.0 AND gpl-2.0-plus AND unknown", package.declared_license_expression - ) + expected = "gpl-2.0 AND gpl-2.0-plus" + self.assertEqual(expected, package.declared_license_expression) package_count = DiscoveredPackage.objects.count() incomplete_data = dict(package_data1) From 434b0e07138109a8bce6040678c58f6a34586b66 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Fri, 5 May 2023 14:11:05 +0400 Subject: [PATCH 10/53] Remove the manifest_path and contains_source_code fields #569 Signed-off-by: Thomas Druez --- docs/output-files.rst | 2 -- scanpipe/api/serializers.py | 2 -- scanpipe/filters.py | 2 -- .../0030_scancode_toolkit_v32_model_updates.py | 8 ++++++++ scanpipe/models.py | 9 --------- scanpipe/tests/__init__.py | 1 - scanpipe/tests/data/asgiref-3.3.0_fixtures.json | 4 ---- scanpipe/tests/test_api.py | 2 +- scanpipe/views.py | 2 -- 9 files changed, 9 insertions(+), 23 deletions(-) diff --git a/docs/output-files.rst b/docs/output-files.rst index e4c8410072..651732f8a3 100644 --- a/docs/output-files.rst +++ b/docs/output-files.rst @@ -182,8 +182,6 @@ similar to the following: "license_expression": "mit", "declared_license": "MIT", "notice_text": "", - "manifest_path": "", - "contains_source_code": null, "missing_resources": [ "/lib/libc.musl-x86_64.so.1" ], diff --git a/scanpipe/api/serializers.py b/scanpipe/api/serializers.py index 034c23636b..d4c9e1176e 100644 --- a/scanpipe/api/serializers.py +++ b/scanpipe/api/serializers.py @@ -309,8 +309,6 @@ class Meta: "source_packages", "extra_data", "package_uid", - "manifest_path", - "contains_source_code", "datasource_id", "file_references", "missing_resources", diff --git a/scanpipe/filters.py b/scanpipe/filters.py index f5e0c64f8c..25a33b7cbd 100644 --- a/scanpipe/filters.py +++ b/scanpipe/filters.py @@ -449,8 +449,6 @@ class Meta: "other_license_expression", "extracted_license_statement", "copyright", - "manifest_path", - "contains_source_code", ] diff --git a/scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py b/scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py index b7daec1fb9..deda765faf 100644 --- a/scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py +++ b/scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py @@ -9,6 +9,14 @@ class Migration(migrations.Migration): ] operations = [ + migrations.RemoveField( + model_name="discoveredpackage", + name="contains_source_code", + ), + migrations.RemoveField( + model_name="discoveredpackage", + name="manifest_path", + ), migrations.RemoveIndex( model_name="discoveredpackage", name="scanpipe_di_license_e8ce32_idx", diff --git a/scanpipe/models.py b/scanpipe/models.py index 1e727fcac4..127d6b1f65 100644 --- a/scanpipe/models.py +++ b/scanpipe/models.py @@ -2166,15 +2166,6 @@ class AbstractPackage(models.Model): blank=True, help_text=_("A notice text for this package."), ) - manifest_path = models.CharField( - max_length=1024, - blank=True, - help_text=_( - "A relative path to the manifest file if any, such as a " - "Maven .pom or a npm package.json." - ), - ) - contains_source_code = models.BooleanField(null=True, blank=True) datasource_id = models.CharField( max_length=64, blank=True, diff --git a/scanpipe/tests/__init__.py b/scanpipe/tests/__init__.py index f89fb7ccaf..e49b846b6d 100644 --- a/scanpipe/tests/__init__.py +++ b/scanpipe/tests/__init__.py @@ -130,7 +130,6 @@ def make_resource_file(project, path, **extra): "notice_text": None, "root_path": None, "dependencies": [], - "contains_source_code": None, "source_packages": [], "purl": "pkg:deb/debian/adduser@3.118?arch=all", "repository_homepage_url": None, diff --git a/scanpipe/tests/data/asgiref-3.3.0_fixtures.json b/scanpipe/tests/data/asgiref-3.3.0_fixtures.json index cffb5c12f7..30c780ed20 100644 --- a/scanpipe/tests/data/asgiref-3.3.0_fixtures.json +++ b/scanpipe/tests/data/asgiref-3.3.0_fixtures.json @@ -1276,8 +1276,6 @@ "declared_license_expression": "bsd-new AND bsd-new", "extracted_license_statement": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", "notice_text": "", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "parties": [ @@ -1350,8 +1348,6 @@ "declared_license_expression": "bsd-new AND bsd-new", "extracted_license_statement": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", "notice_text": "", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "parties": [ diff --git a/scanpipe/tests/test_api.py b/scanpipe/tests/test_api.py index 90ad96f710..b7b1e206fe 100644 --- a/scanpipe/tests/test_api.py +++ b/scanpipe/tests/test_api.py @@ -719,7 +719,7 @@ def test_scanpipe_api_serializer_get_model_serializer(self): get_model_serializer(None) def test_scanpipe_api_serializer_get_serializer_fields(self): - self.assertEqual(44, len(get_serializer_fields(DiscoveredPackage))) + self.assertEqual(42, len(get_serializer_fields(DiscoveredPackage))) self.assertEqual(11, len(get_serializer_fields(DiscoveredDependency))) self.assertEqual(30, len(get_serializer_fields(CodebaseResource))) self.assertEqual(3, len(get_serializer_fields(CodebaseRelation))) diff --git a/scanpipe/views.py b/scanpipe/views.py index 26b45fb002..45fc207227 100644 --- a/scanpipe/views.py +++ b/scanpipe/views.py @@ -1244,8 +1244,6 @@ class DiscoveredPackageDetailsView( {"field_name": "parties", "render_func": render_as_yaml}, "missing_resources", "modified_resources", - "manifest_path", - "contains_source_code", "package_uid", ], "icon_class": "fas fa-plus-square", From 60ec5a107e77d0fce8c4c91e080b1e61dfb5a841 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Fri, 5 May 2023 14:22:26 +0400 Subject: [PATCH 11/53] Data migration for declared_license_expression_spdx #569 Signed-off-by: Thomas Druez --- .../0031_scancode_toolkit_v32_data_updates.py | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py diff --git a/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py b/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py new file mode 100644 index 0000000000..2cf2c0b06f --- /dev/null +++ b/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py @@ -0,0 +1,32 @@ +# Generated by Django 4.2 on 2023-05-05 10:11 + +from django.db import migrations +from django.db.models import Q + + +def compute_declared_license_expression_spdx(apps, schema_editor): + """ + Compute `declared_license_expression_spdx`, when missing, + from `declared_license_expression`, when available. + """ + from licensedcode.cache import build_spdx_license_expression + + DiscoveredPackage = apps.get_model('scanpipe', 'DiscoveredPackage') + packages = DiscoveredPackage.objects.filter( + ~Q(declared_license_expression="") & Q(declared_license_expression_spdx="") + ) + + for package in packages: + if spdx := build_spdx_license_expression(package.declared_license_expression): + package.declared_license_expression_spdx = spdx + package.save() + + +class Migration(migrations.Migration): + dependencies = [ + ("scanpipe", "0030_scancode_toolkit_v32_model_updates"), + ] + + operations = [ + migrations.RunPython(compute_declared_license_expression_spdx), + ] From c73a0bbc58c914ae03ec08e31678dbc6923e0be4 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Fri, 5 May 2023 14:32:23 +0400 Subject: [PATCH 12/53] Fix rendering for license_detections and other_license_detections #569 Signed-off-by: Thomas Druez --- scanpipe/views.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/scanpipe/views.py b/scanpipe/views.py index 45fc207227..95ddecfe52 100644 --- a/scanpipe/views.py +++ b/scanpipe/views.py @@ -1216,8 +1216,11 @@ class DiscoveredPackageDetailsView( "copyright", "holder", "notice_text", - "license_detections", - "other_license_detections", + {"field_name": "license_detections", "render_func": render_as_yaml}, + { + "field_name": "other_license_detections", + "render_func": render_as_yaml, + }, ], "icon_class": "fas fa-file-contract", }, From 0103927e3a7a67b08b0c17e28599f8743c136f43 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Fri, 5 May 2023 17:57:47 +0400 Subject: [PATCH 13/53] Add get_declared_license_expression method #569 Signed-off-by: Thomas Druez --- scanpipe/models.py | 15 +++++++++++++++ scanpipe/pipes/resolve.py | 26 ++++++++++++++++++++++---- scanpipe/tests/pipes/test_resolve.py | 5 +++++ scanpipe/tests/test_models.py | 21 +++++++++++++++++++++ 4 files changed, 63 insertions(+), 4 deletions(-) diff --git a/scanpipe/models.py b/scanpipe/models.py index 127d6b1f65..8d7053c96b 100644 --- a/scanpipe/models.py +++ b/scanpipe/models.py @@ -2344,6 +2344,21 @@ def clean_data(cls, data): def spdx_id(self): return f"SPDXRef-scancodeio-{self._meta.model_name}-{self.uuid}" + def get_declared_license_expression(self): + """ + Return this package license expression. + + Use `declared_license_expression` when available or compute the expression + from `declared_license_expression_spdx`. + """ + from scanpipe.pipes.resolve import convert_spdx_expression + + if self.declared_license_expression: + return self.declared_license_expression + elif self.declared_license_expression_spdx: + return convert_spdx_expression(self.declared_license_expression_spdx) + return "" + def get_declared_license_expression_spdx(self): """ Return this package license expression using SPDX keys. diff --git a/scanpipe/pipes/resolve.py b/scanpipe/pipes/resolve.py index 6781b5e514..2ab7c7f4aa 100644 --- a/scanpipe/pipes/resolve.py +++ b/scanpipe/pipes/resolve.py @@ -29,6 +29,9 @@ from attributecode.model import About from packagedcode import APPLICATION_PACKAGE_DATAFILE_HANDLERS from packagedcode.licensing import get_license_detections_and_expression +from packagedcode.licensing import ( + get_license_detections_for_extracted_license_statement, +) from packageurl import PackageURL from python_inspector.resolve_cli import resolver_api from scancode.api import get_package_data @@ -100,6 +103,21 @@ def resolve_about_packages(input_location): return [package_data] +def convert_spdx_expression(license_expression_spdx): + """ + Return an ScanCode license expression from a SPDX `license_expression_spdx` + string. + """ + license_detections = get_license_detections_for_extracted_license_statement( + license_expression_spdx, + try_as_expression=True, + ) + if license_detections: + return license_detections[0].license_expression + + return "" + + def spdx_package_to_discovered_package_data(spdx_package): package_url_dict = {} for ref in spdx_package.external_refs: @@ -112,14 +130,15 @@ def spdx_package_to_discovered_package_data(spdx_package): for checksum in spdx_package.checksums } - # TODO: Compute the `declared_license_expression`, check toolkit code declared_license_expression_spdx = spdx_package.license_concluded - declared_license_expression = "" + declared_expression = "" + if declared_license_expression_spdx: + declared_expression = convert_spdx_expression(declared_license_expression_spdx) package_data = { "name": spdx_package.name, "download_url": spdx_package.download_location, - "declared_license_expression": declared_license_expression, + "declared_license_expression": declared_expression, "declared_license_expression_spdx": declared_license_expression_spdx, "extracted_license_statement": spdx_package.license_declared, "copyright": spdx_package.copyright_text, @@ -238,7 +257,6 @@ def get_default_package_type(input_location): } -# TODO: Check if that function call is still relevant def set_license_expression(package_data): """ Set the license expression from a detected license dict/str in provided diff --git a/scanpipe/tests/pipes/test_resolve.py b/scanpipe/tests/pipes/test_resolve.py index 13bd1260b1..669677bdc6 100644 --- a/scanpipe/tests/pipes/test_resolve.py +++ b/scanpipe/tests/pipes/test_resolve.py @@ -76,6 +76,11 @@ def test_scanpipe_pipes_resolve_set_license_expression(self): ) self.assertEqual("gpl-2.0", data.get("declared_license_expression")) + def test_scanpipe_pipes_resolve_convert_spdx_expression(self): + spdx = "MIT OR GPL-2.0-only WITH LicenseRef-scancode-generic-exception" + scancode_expression = "mit OR gpl-2.0 with generic-exception" + self.assertEqual(scancode_expression, resolve.convert_spdx_expression(spdx)) + def test_scanpipe_pipes_resolve_resolve_packages(self): # ScanCode.io resolvers input_location = self.manifest_location / "Django-4.0.8-py3-none-any.whl.ABOUT" diff --git a/scanpipe/tests/test_models.py b/scanpipe/tests/test_models.py index 66bc6f7c49..039141eef1 100644 --- a/scanpipe/tests/test_models.py +++ b/scanpipe/tests/test_models.py @@ -1509,6 +1509,27 @@ def test_scanpipe_discovered_package_get_declared_license_expression_spdx(self): self.assertEqual("", package.declared_license_expression_spdx) self.assertEqual("", package.get_declared_license_expression_spdx()) + def test_scanpipe_discovered_package_get_declared_license_expression(self): + package = DiscoveredPackage.create_from_data(self.project1, package_data1) + expression = "gpl-2.0 AND gpl-2.0-plus" + spdx = "GPL-2.0-only AND GPL-2.0-or-later" + + self.assertEqual(expression, package.declared_license_expression) + self.assertEqual(spdx, package.declared_license_expression_spdx) + self.assertEqual(expression, package.get_declared_license_expression()) + + package.declared_license_expression = "" + package.save() + self.assertEqual(expression, package.declared_license_expression) + self.assertEqual("", package.declared_license_expression_spdx) + self.assertEqual(expression, package.get_declared_license_expression()) + + package.declared_license_expression_spdx = "" + package.save() + self.assertEqual("", package.declared_license_expression) + self.assertEqual("", package.declared_license_expression_spdx) + self.assertEqual("", package.get_declared_license_expression_spdx()) + def test_scanpipe_discovered_package_model_add_resources(self): package = DiscoveredPackage.create_from_data(self.project1, package_data1) resource1 = CodebaseResource.objects.create(project=self.project1, path="file1") From 3a36ba41b379a360f045925a6bcd2c56dc57af2f Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Fri, 5 May 2023 18:19:05 +0400 Subject: [PATCH 14/53] Regen asgiref-3.3.0_toolkit_scan.json in RegenTestData #569 Signed-off-by: Thomas Druez --- .../tests/data/asgiref-3.3.0_fixtures.json | 668 +++++++------ .../data/asgiref-3.3.0_scanpipe_output.json | 458 +++++---- .../data/asgiref-3.3.0_toolkit_scan.json | 880 +++++++++++------- .../asgiref-3.3.0_walk_test_fixtures.json | 672 +++++++------ scanpipe/tests/regen_test_data.py | 9 +- 5 files changed, 1558 insertions(+), 1129 deletions(-) diff --git a/scanpipe/tests/data/asgiref-3.3.0_fixtures.json b/scanpipe/tests/data/asgiref-3.3.0_fixtures.json index 30c780ed20..88fd7c7ab3 100644 --- a/scanpipe/tests/data/asgiref-3.3.0_fixtures.json +++ b/scanpipe/tests/data/asgiref-3.3.0_fixtures.json @@ -1,12 +1,12 @@ [ { "model": "scanpipe.project", - "pk": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "pk": "822e1834-92cc-4000-b43f-744e46b49e19", "fields": { "extra_data": {}, - "created_date": "2023-03-01T00:08:21.226Z", + "created_date": "2023-05-05T14:14:02.241Z", "name": "asgiref", - "work_directory": "/tmp/tmp1kvnzy78/projects/asgiref-4c7f2e2e", + "work_directory": "/private/var/folders/ph/tpf7js_n0r554mngmvykl7lm0000gn/T/tmpqwsr_onx/projects/asgiref-822e1834", "input_sources": { "asgiref-3.3.0-py3-none-any.whl": "-" }, @@ -15,69 +15,32 @@ }, { "model": "scanpipe.run", - "pk": "04149b89-48d3-4f1d-a143-8459693eaf6b", + "pk": "ce2b1763-d686-45ef-8cb7-af928e508a3b", "fields": { "task_id": null, "task_start_date": null, "task_end_date": null, "task_exitcode": null, "task_output": "", - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "pipeline_name": "scan_codebase", - "created_date": "2023-03-01T00:08:21.228Z", + "created_date": "2023-05-05T14:14:02.244Z", "scancodeio_version": "", - "description": "A pipeline to scan a codebase resource with ScanCode-toolkit.\n\nInput files are copied to the project's codebase/ directory and are extracted\nin place before running the scan.\nAlternatively, the code can be manually copied to the project codebase/\ndirectory.", + "description": "Scan a codebase with ScanCode-toolkit.", "current_step": "", - "log": "2023-03-01 00:08:21.22 Pipeline [scan_codebase] starting\n2023-03-01 00:08:21.23 Step [copy_inputs_to_codebase_directory] starting\n2023-03-01 00:08:21.23 Step [copy_inputs_to_codebase_directory] completed in 0.00 seconds\n2023-03-01 00:08:21.23 Step [extract_archives] starting\n2023-03-01 00:08:21.25 Step [extract_archives] completed in 0.02 seconds\n2023-03-01 00:08:21.25 Step [collect_and_create_codebase_resources] starting\n2023-03-01 00:08:21.46 Step [collect_and_create_codebase_resources] completed in 0.21 seconds\n2023-03-01 00:08:21.46 Step [tag_empty_files] starting\n2023-03-01 00:08:21.46 Step [tag_empty_files] completed in 0.00 seconds\n2023-03-01 00:08:21.46 Step [scan_for_application_packages] starting\n2023-03-01 00:08:24.33 Step [scan_for_application_packages] completed in 2.87 seconds\n2023-03-01 00:08:24.33 Step [scan_for_files] starting\n2023-03-01 00:08:31.11 Step [scan_for_files] completed in 6.78 seconds\n2023-03-01 00:08:31.11 Pipeline completed\n" + "log": "2023-05-05 16:14:02.24 Pipeline [scan_codebase] starting\n2023-05-05 16:14:02.24 Step [copy_inputs_to_codebase_directory] starting\n2023-05-05 16:14:02.24 Step [copy_inputs_to_codebase_directory] completed in 0.00 seconds\n2023-05-05 16:14:02.24 Step [extract_archives] starting\n2023-05-05 16:14:02.27 Step [extract_archives] completed in 0.02 seconds\n2023-05-05 16:14:02.27 Step [collect_and_create_codebase_resources] starting\n2023-05-05 16:14:02.37 Step [collect_and_create_codebase_resources] completed in 0.10 seconds\n2023-05-05 16:14:02.37 Step [tag_empty_files] starting\n2023-05-05 16:14:02.37 Step [tag_empty_files] completed in 0.00 seconds\n2023-05-05 16:14:02.37 Step [scan_for_application_packages] starting\n2023-05-05 16:14:03.99 Step [scan_for_application_packages] completed in 1.61 seconds\n2023-05-05 16:14:03.99 Step [scan_for_files] starting\n2023-05-05 16:14:05.66 Step [scan_for_files] completed in 1.67 seconds\n2023-05-05 16:14:05.66 Pipeline completed\n" } }, { "model": "scanpipe.codebaseresource", "pk": 1, - "fields": { - "md5": "", - "sha1": "", - "sha256": "", - "sha512": "", - "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", - "copyrights": [], - "holders": [], - "authors": [], - "licenses": [], - "license_expressions": [], - "emails": [], - "urls": [], - "path": "asgiref-3.3.0-py3-none-any.whl-extract", - "rootfs_path": "", - "status": "scanned", - "size": 4096, - "tag": "", - "type": "directory", - "name": "asgiref-3.3.0-py3-none-any.whl-extract", - "extension": ".whl-extract", - "programming_language": "", - "mime_type": "", - "file_type": "", - "is_binary": false, - "is_text": false, - "is_archive": false, - "is_key_file": false, - "is_media": false, - "compliance_alert": "", - "package_data": [] - } -}, -{ - "model": "scanpipe.codebaseresource", - "pk": 2, "fields": { "md5": "5bce1df6dedc53a41a9a6b40d7b1699e", "sha1": "c03f67211a311b13d1294ac8af7cb139ee34c4f9", "sha256": "a5098bc870b80e7b872bff60bb363c7f2c2c89078759f6c47b53ff8c525a152e", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], @@ -95,7 +58,7 @@ "extension": ".whl", "programming_language": "", "mime_type": "application/zip", - "file_type": "Zip archive data, at least v2.0 to extract", + "file_type": "Zip archive data, at least v2.0 to extract, compression method=deflate", "is_binary": true, "is_text": false, "is_archive": true, @@ -110,6 +73,7 @@ "sha1": null, "size": null, "type": "pypi", + "holder": null, "sha256": null, "sha512": null, "parties": [ @@ -306,20 +270,96 @@ ], "source_packages": [], "bug_tracking_url": null, - "extracted_license_statement": { - "license": "BSD", - "classifiers": [ - "License :: OSI Approved :: BSD License" - ] - }, "primary_language": "Python", - "declared_license_expression": "bsd-new AND bsd-new", + "license_detections": [ + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_89.RULE", + "start_line": 1, + "matched_text": "license BSD", + "match_coverage": 100.0, + "matched_length": 2, + "rule_relevance": 99, + "rule_identifier": "bsd-new_89.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-261898a0-0118-87c4-7092-14e4ff134882", + "license_expression": "bsd-new" + }, + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_bsd_license.RULE", + "start_line": 1, + "matched_text": "['License :: OSI Approved :: BSD License']", + "match_coverage": 100.0, + "matched_length": 5, + "rule_relevance": 99, + "rule_identifier": "pypi_bsd_license.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-f4e99f86-00ab-18d9-a65d-a3a12767dcf5", + "license_expression": "bsd-new" + } + ], "repository_download_url": "https://pypi.org/packages/source/a/asgiref/asgiref-3.3.0.tar.gz", - "repository_homepage_url": "https://pypi.org/project/asgiref" + "repository_homepage_url": "https://pypi.org/project/asgiref", + "other_license_detections": [], + "other_license_expression": null, + "declared_license_expression": "bsd-new", + "extracted_license_statement": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", + "other_license_expression_spdx": null, + "declared_license_expression_spdx": "BSD-3-Clause" } ] } }, +{ + "model": "scanpipe.codebaseresource", + "pk": 2, + "fields": { + "md5": "", + "sha1": "", + "sha256": "", + "sha512": "", + "extra_data": {}, + "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "copyrights": [], + "holders": [], + "authors": [], + "licenses": [], + "license_expressions": [], + "emails": [], + "urls": [], + "path": "asgiref-3.3.0-py3-none-any.whl-extract", + "rootfs_path": "", + "status": "scanned", + "size": 128, + "tag": "", + "type": "directory", + "name": "asgiref-3.3.0-py3-none-any.whl-extract", + "extension": ".whl-extract", + "programming_language": "", + "mime_type": "", + "file_type": "", + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_key_file": false, + "is_media": false, + "compliance_alert": "", + "package_data": [] + } +}, { "model": "scanpipe.codebaseresource", "pk": 3, @@ -329,7 +369,7 @@ "sha256": "", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], @@ -340,7 +380,7 @@ "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref", "rootfs_path": "", "status": "scanned", - "size": 4096, + "size": 352, "tag": "", "type": "directory", "name": "asgiref", @@ -366,7 +406,7 @@ "sha256": "", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], @@ -377,7 +417,7 @@ "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info", "rootfs_path": "", "status": "scanned", - "size": 4096, + "size": 224, "tag": "", "type": "directory", "name": "asgiref-3.3.0.dist-info", @@ -403,7 +443,7 @@ "sha256": "fa4651a3b79201a4dc44a4096cd49ec8f427e912ea0ee05c666357b413a8afe7", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], @@ -435,12 +475,12 @@ "model": "scanpipe.codebaseresource", "pk": 6, "fields": { - "md5": "aff31de5fa753643adacf0311aa553f4", - "sha1": "534de2315197b14d0571edc5ed3b3b8ceade0d24", - "sha256": "ddbc8d455eceb68fc583c67e7c4ad0277c867fb39095c51ec5b37f70342e8334", + "md5": "5231077fd0628314246fcba7817b561e", + "sha1": "9c74e64e9a71903bb227907ea1806eac77e52434", + "sha256": "3151f66c476208c3154cb6c4fb557a2a253bab82f0ab33fb3c8b9f7976be9e33", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], @@ -448,13 +488,13 @@ "license_expressions": [], "emails": [], "urls": [], - "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/testing.py", + "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/compatibility.py", "rootfs_path": "", "status": "scanned", - "size": 3119, + "size": 1598, "tag": "", "type": "file", - "name": "testing.py", + "name": "compatibility.py", "extension": ".py", "programming_language": "Python", "mime_type": "text/x-script.python", @@ -477,7 +517,7 @@ "sha256": "885267fee0fea687875a02ceb929ca095312d47aaa57e20e4ce382f397caaf4d", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], @@ -508,50 +548,13 @@ { "model": "scanpipe.codebaseresource", "pk": 8, - "fields": { - "md5": "5231077fd0628314246fcba7817b561e", - "sha1": "9c74e64e9a71903bb227907ea1806eac77e52434", - "sha256": "3151f66c476208c3154cb6c4fb557a2a253bab82f0ab33fb3c8b9f7976be9e33", - "sha512": "", - "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", - "copyrights": [], - "holders": [], - "authors": [], - "licenses": [], - "license_expressions": [], - "emails": [], - "urls": [], - "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/compatibility.py", - "rootfs_path": "", - "status": "scanned", - "size": 1598, - "tag": "", - "type": "file", - "name": "compatibility.py", - "extension": ".py", - "programming_language": "Python", - "mime_type": "text/x-script.python", - "file_type": "Python script, ASCII text executable", - "is_binary": false, - "is_text": true, - "is_archive": false, - "is_key_file": false, - "is_media": false, - "compliance_alert": "", - "package_data": [] - } -}, -{ - "model": "scanpipe.codebaseresource", - "pk": 9, "fields": { "md5": "e4103a2fcd6a3f23a036307c978271d7", "sha1": "0de5075d1ce4a1a17d70ad6ee523e3d947074899", "sha256": "ee0fcf4a8e6fa9df8a4643bb48e82892d496afce44b6c8b8aea2721755545e1c", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], @@ -581,14 +584,14 @@ }, { "model": "scanpipe.codebaseresource", - "pk": 10, + "pk": 9, "fields": { "md5": "b4c45f37055d88dd11b15eb4de51b074", "sha1": "aacf7e5e2e5ba78ccfb67fa10e9e6b22c3935c9b", "sha256": "ddd445b778c097fc75c2bf69ad964cbadd3bd6999d1dd2306d39d401855e8e3e", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], @@ -618,61 +621,19 @@ }, { "model": "scanpipe.codebaseresource", - "pk": 11, + "pk": 10, "fields": { "md5": "8114ef1d7c1488ebf3a1766dbd39d427", "sha1": "361968f116e8ff9156511bf22f6aa04426f0c540", "sha256": "126c3e3a8a75a517d2739612304607804cf5f34da63fa25d03a6f11f7edb6f2f", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], - "licenses": [ - { - "key": "apache-2.0", - "name": "Apache License 2.0", - "owner": "Apache Software Foundation", - "score": 100.0, - "category": "Permissive", - "end_line": 2, - "spdx_url": "https://spdx.org/licenses/Apache-2.0", - "text_url": "http://www.apache.org/licenses/LICENSE-2.0", - "is_unknown": false, - "short_name": "Apache 2.0", - "start_line": 2, - "homepage_url": "http://www.apache.org/licenses/", - "is_exception": false, - "matched_rule": { - "matcher": "2-aho", - "licenses": [ - "apache-2.0" - ], - "identifier": "apache-2.0_174.RULE", - "has_unknown": false, - "rule_length": 6, - "is_license_tag": false, - "match_coverage": 100.0, - "matched_length": 6, - "rule_relevance": 100, - "is_license_text": false, - "is_license_intro": false, - "is_license_notice": true, - "declared_license_expression": "apache-2.0", - "is_license_reference": false, - "referenced_filenames": [] - }, - "matched_text": "# under the Apache 2.0 license. You may see the original project at", - "reference_url": "https://scancode-licensedb.aboutcode.org/apache-2.0", - "spdx_license_key": "Apache-2.0", - "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/apache-2.0.yml", - "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/apache-2.0.LICENSE" - } - ], - "license_expressions": [ - "apache-2.0" - ], + "licenses": [], + "license_expressions": [], "emails": [], "urls": [ { @@ -711,16 +672,90 @@ "package_data": [] } }, +{ + "model": "scanpipe.codebaseresource", + "pk": 11, + "fields": { + "md5": "4910b756f4e611055140e80f757d9325", + "sha1": "91bc786d907bf3ca8b8e6277063107975780f9ca", + "sha256": "30f49b9094bff904a42caeec32515715fe625a56dc48bd7c0e3d9988c0ad4bd7", + "sha512": "", + "extra_data": {}, + "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "copyrights": [], + "holders": [], + "authors": [], + "licenses": [], + "license_expressions": [], + "emails": [], + "urls": [], + "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/__init__.py", + "rootfs_path": "", + "status": "scanned", + "size": 22, + "tag": "", + "type": "file", + "name": "__init__.py", + "extension": ".py", + "programming_language": "Python", + "mime_type": "text/plain", + "file_type": "ASCII text", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_key_file": false, + "is_media": false, + "compliance_alert": "", + "package_data": [] + } +}, { "model": "scanpipe.codebaseresource", "pk": 12, + "fields": { + "md5": "aff31de5fa753643adacf0311aa553f4", + "sha1": "534de2315197b14d0571edc5ed3b3b8ceade0d24", + "sha256": "ddbc8d455eceb68fc583c67e7c4ad0277c867fb39095c51ec5b37f70342e8334", + "sha512": "", + "extra_data": {}, + "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "copyrights": [], + "holders": [], + "authors": [], + "licenses": [], + "license_expressions": [], + "emails": [], + "urls": [], + "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/testing.py", + "rootfs_path": "", + "status": "scanned", + "size": 3119, + "tag": "", + "type": "file", + "name": "testing.py", + "extension": ".py", + "programming_language": "Python", + "mime_type": "text/x-script.python", + "file_type": "Python script, ASCII text executable", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_key_file": false, + "is_media": false, + "compliance_alert": "", + "package_data": [] + } +}, +{ + "model": "scanpipe.codebaseresource", + "pk": 13, "fields": { "md5": "4eed1361d0e454149f95fca85c84f33f", "sha1": "1f06eb4dd6d38b1a3e2a9b9e751744b303c37e0d", "sha256": "f8bd1ea3fb8afddabb10f8efd66796d41446cad51168ef4d3c44b19c973d0ad0", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], @@ -750,14 +785,14 @@ }, { "model": "scanpipe.codebaseresource", - "pk": 13, + "pk": 14, "fields": { - "md5": "4910b756f4e611055140e80f757d9325", - "sha1": "91bc786d907bf3ca8b8e6277063107975780f9ca", - "sha256": "30f49b9094bff904a42caeec32515715fe625a56dc48bd7c0e3d9988c0ad4bd7", + "md5": "38e56802a5adcafeae35efc6e3d218ba", + "sha1": "5854ecf1ad649848d7cda8096d09ac258c888208", + "sha256": "2c1983592aa38f0bfb0afacc73ddc5b46ce10e8e89ceaa9fed1e5fc6361b608d", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], @@ -765,17 +800,17 @@ "license_expressions": [], "emails": [], "urls": [], - "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/__init__.py", + "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/RECORD", "rootfs_path": "", "status": "scanned", - "size": 22, + "size": 1073, "tag": "", "type": "file", - "name": "__init__.py", - "extension": ".py", - "programming_language": "Python", - "mime_type": "text/plain", - "file_type": "ASCII text", + "name": "RECORD", + "extension": "", + "programming_language": "", + "mime_type": "text/csv", + "file_type": "CSV text", "is_binary": false, "is_text": true, "is_archive": false, @@ -787,14 +822,14 @@ }, { "model": "scanpipe.codebaseresource", - "pk": 14, + "pk": 15, "fields": { "md5": "f09eb47206614a4954c51db8a94840fa", "sha1": "baf11129ce63c4eef654f39a360b31cfc7d1ac67", "sha256": "b846415d1b514e9c1dff14a22deb906d794bc546ca6129f950a18cd091e2a669", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [ { "end_line": 1, @@ -810,50 +845,8 @@ } ], "authors": [], - "licenses": [ - { - "key": "bsd-new", - "name": "BSD-3-Clause", - "owner": "Regents of the University of California", - "score": 100.0, - "category": "Permissive", - "end_line": 27, - "spdx_url": "https://spdx.org/licenses/BSD-3-Clause", - "text_url": "http://www.opensource.org/licenses/BSD-3-Clause", - "is_unknown": false, - "short_name": "BSD-3-Clause", - "start_line": 4, - "homepage_url": "http://www.opensource.org/licenses/BSD-3-Clause", - "is_exception": false, - "matched_rule": { - "matcher": "2-aho", - "licenses": [ - "bsd-new" - ], - "identifier": "bsd-new_683.RULE", - "has_unknown": false, - "rule_length": 214, - "is_license_tag": false, - "match_coverage": 100.0, - "matched_length": 214, - "rule_relevance": 100, - "is_license_text": true, - "is_license_intro": false, - "is_license_notice": false, - "declared_license_expression": "bsd-new", - "is_license_reference": false, - "referenced_filenames": [] - }, - "matched_text": "Redistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n 3. Neither the name of Django nor the names of its contributors may be used\n to endorse or promote products derived from this software without\n specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.", - "reference_url": "https://scancode-licensedb.aboutcode.org/bsd-new", - "spdx_license_key": "BSD-3-Clause", - "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/bsd-new.yml", - "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/bsd-new.LICENSE" - } - ], - "license_expressions": [ - "bsd-new" - ], + "licenses": [], + "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/LICENSE", @@ -878,14 +871,14 @@ }, { "model": "scanpipe.codebaseresource", - "pk": 15, + "pk": 16, "fields": { "md5": "5ccc7519eb42f1dfceee6e7d685f1ff5", "sha1": "ddd91bc89b15fc5c66e0fa259392955c74ba041f", "sha256": "11546323af45e6a5639bf620a9c4d73e74c0bf705f494af4595007b923f75e8a", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], @@ -915,14 +908,14 @@ }, { "model": "scanpipe.codebaseresource", - "pk": 16, + "pk": 17, "fields": { "md5": "680e61db4d95c8d9501b7a49fa2bf0b2", "sha1": "612390bd0d0227c009f9c99b479878adf7ac2f23", "sha256": "6e89108c2cf0c0446174188f76f60465ae1c1f14f83427807df40d52a27cb2c8", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], @@ -950,43 +943,6 @@ "package_data": [] } }, -{ - "model": "scanpipe.codebaseresource", - "pk": 17, - "fields": { - "md5": "38e56802a5adcafeae35efc6e3d218ba", - "sha1": "5854ecf1ad649848d7cda8096d09ac258c888208", - "sha256": "2c1983592aa38f0bfb0afacc73ddc5b46ce10e8e89ceaa9fed1e5fc6361b608d", - "sha512": "", - "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", - "copyrights": [], - "holders": [], - "authors": [], - "licenses": [], - "license_expressions": [], - "emails": [], - "urls": [], - "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/RECORD", - "rootfs_path": "", - "status": "scanned", - "size": 1073, - "tag": "", - "type": "file", - "name": "RECORD", - "extension": "", - "programming_language": "", - "mime_type": "application/csv", - "file_type": "CSV text", - "is_binary": false, - "is_text": true, - "is_archive": false, - "is_key_file": false, - "is_media": false, - "compliance_alert": "", - "package_data": [] - } -}, { "model": "scanpipe.codebaseresource", "pk": 18, @@ -996,7 +952,7 @@ "sha256": "70f98f4eb9f6068b192b5464fcdf69e29a8ff09962bfce84bbb052baeee44f33", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], @@ -1029,6 +985,7 @@ "sha1": null, "size": null, "type": "pypi", + "holder": null, "sha256": null, "sha512": null, "parties": [ @@ -1225,16 +1182,55 @@ ], "source_packages": [], "bug_tracking_url": null, - "extracted_license_statement": { - "license": "BSD", - "classifiers": [ - "License :: OSI Approved :: BSD License" - ] - }, "primary_language": "Python", - "declared_license_expression": "bsd-new AND bsd-new", + "license_detections": [ + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_89.RULE", + "start_line": 1, + "matched_text": "license BSD", + "match_coverage": 100.0, + "matched_length": 2, + "rule_relevance": 99, + "rule_identifier": "bsd-new_89.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-261898a0-0118-87c4-7092-14e4ff134882", + "license_expression": "bsd-new" + }, + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_bsd_license.RULE", + "start_line": 1, + "matched_text": "['License :: OSI Approved :: BSD License']", + "match_coverage": 100.0, + "matched_length": 5, + "rule_relevance": 99, + "rule_identifier": "pypi_bsd_license.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-f4e99f86-00ab-18d9-a65d-a3a12767dcf5", + "license_expression": "bsd-new" + } + ], "repository_download_url": "https://pypi.org/packages/source/a/asgiref/asgiref-3.3.0.tar.gz", - "repository_homepage_url": "https://pypi.org/project/asgiref" + "repository_homepage_url": "https://pypi.org/project/asgiref", + "other_license_detections": [], + "other_license_expression": null, + "declared_license_expression": "bsd-new", + "extracted_license_statement": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", + "other_license_expression_spdx": null, + "declared_license_expression_spdx": "BSD-3-Clause" } ] } @@ -1258,7 +1254,7 @@ "Documentation": "https://asgi.readthedocs.io/", "Further Documentation": "https://docs.djangoproject.com/en/stable/topics/async/#async-adapter-functions" }, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "filename": "", "primary_language": "Python", "description": "ASGI specs, helper code, and adapters\nasgiref\n=======\n\n.. image:: https://api.travis-ci.org/django/asgiref.svg\n :target: https://travis-ci.org/django/asgiref\n\n.. image:: https://img.shields.io/pypi/v/asgiref.svg\n :target: https://pypi.python.org/pypi/asgiref\n\nASGI is a standard for Python asynchronous web apps and servers to communicate\nwith each other, and positioned as an asynchronous successor to WSGI. You can\nread more at https://asgi.readthedocs.io/en/latest/\n\nThis package includes ASGI base libraries, such as:\n\n* Sync-to-async and async-to-sync function wrappers, ``asgiref.sync``\n* Server base classes, ``asgiref.server``\n* A WSGI-to-ASGI adapter, in ``asgiref.wsgi``\n\n\nFunction wrappers\n-----------------\n\nThese allow you to wrap or decorate async or sync functions to call them from\nthe other style (so you can call async functions from a synchronous thread,\nor vice-versa).\n\nIn particular:\n\n* AsyncToSync lets a synchronous subthread stop and wait while the async\n function is called on the main thread's event loop, and then control is\n returned to the thread when the async function is finished.\n\n* SyncToAsync lets async code call a synchronous function, which is run in\n a threadpool and control returned to the async coroutine when the synchronous\n function completes.\n\nThe idea is to make it easier to call synchronous APIs from async code and\nasynchronous APIs from synchronous code so it's easier to transition code from\none style to the other. In the case of Channels, we wrap the (synchronous)\nDjango view system with SyncToAsync to allow it to run inside the (asynchronous)\nASGI server.\n\nNote that exactly what threads things run in is very specific, and aimed to\nkeep maximum compatibility with old synchronous code. See\n\"Synchronous code & Threads\" below for a full explanation. By default,\n``sync_to_async`` will run all synchronous code in the program in the same\nthread for safety reasons; you can disable this for more performance with\n``@sync_to_async(thread_sensitive=False)``, but make sure that your code does\nnot rely on anything bound to threads (like database connections) when you do.\n\n\nThreadlocal replacement\n-----------------------\n\nThis is a drop-in replacement for ``threading.local`` that works with both\nthreads and asyncio Tasks. Even better, it will proxy values through from a\ntask-local context to a thread-local context when you use ``sync_to_async``\nto run things in a threadpool, and vice-versa for ``async_to_sync``.\n\nIf you instead want true thread- and task-safety, you can set\n``thread_critical`` on the Local object to ensure this instead.\n\n\nServer base classes\n-------------------\n\nIncludes a ``StatelessServer`` class which provides all the hard work of\nwriting a stateless server (as in, does not handle direct incoming sockets\nbut instead consumes external streams or sockets to work out what is happening).\n\nAn example of such a server would be a chatbot server that connects out to\na central chat server and provides a \"connection scope\" per user chatting to\nit. There's only one actual connection, but the server has to separate things\ninto several scopes for easier writing of the code.\n\nYou can see an example of this being used in `frequensgi `_.\n\n\nWSGI-to-ASGI adapter\n--------------------\n\nAllows you to wrap a WSGI application so it appears as a valid ASGI application.\n\nSimply wrap it around your WSGI application like so::\n\n asgi_application = WsgiToAsgi(wsgi_application)\n\nThe WSGI application will be run in a synchronous threadpool, and the wrapped\nASGI application will be one that accepts ``http`` class messages.\n\nPlease note that not all extended features of WSGI may be supported (such as\nfile handles for incoming POST bodies).\n\n\nDependencies\n------------\n\n``asgiref`` requires Python 3.5 or higher.\n\n\nContributing\n------------\n\nPlease refer to the\n`main Channels contributing docs `_.\n\n\nTesting\n'''''''\n\nTo run tests, make sure you have installed the ``tests`` extra with the package::\n\n cd asgiref/\n pip install -e .[tests]\n pytest\n\n\nBuilding the documentation\n''''''''''''''''''''''''''\n\nThe documentation uses `Sphinx `_::\n\n cd asgiref/docs/\n pip install sphinx\n\nTo build the docs, you can use the default tools::\n\n sphinx-build -b html . _build/html # or `make html`, if you've got make set up\n cd _build/html\n python -m http.server\n\n...or you can use ``sphinx-autobuild`` to run a server and rebuild/reload\nyour documentation changes automatically::\n\n pip install sphinx-autobuild\n sphinx-autobuild . _build/html\n\n\nImplementation Details\n----------------------\n\nSynchronous code & threads\n''''''''''''''''''''''''''\n\nThe ``asgiref.sync`` module provides two wrappers that let you go between\nasynchronous and synchronous code at will, while taking care of the rough edges\nfor you.\n\nUnfortunately, the rough edges are numerous, and the code has to work especially\nhard to keep things in the same thread as much as possible. Notably, the\nrestrictions we are working with are:\n\n* All synchronous code called through ``SyncToAsync`` and marked with\n ``thread_sensitive`` should run in the same thread as each other (and if the\n outer layer of the program is synchronous, the main thread)\n\n* If a thread already has a running async loop, ``AsyncToSync`` can't run things\n on that loop if it's blocked on synchronous code that is above you in the\n call stack.\n\nThe first compromise you get to might be that ``thread_sensitive`` code should\njust run in the same thread and not spawn in a sub-thread, fulfilling the first\nrestriction, but that immediately runs you into the second restriction.\n\nThe only real solution is to essentially have a variant of ThreadPoolExecutor\nthat executes any ``thread_sensitive`` code on the outermost synchronous\nthread - either the main thread, or a single spawned subthread.\n\nThis means you now have two basic states:\n\n* If the outermost layer of your program is synchronous, then all async code\n run through ``AsyncToSync`` will run in a per-call event loop in arbitary\n sub-threads, while all ``thread_sensitive`` code will run in the main thread.\n\n* If the outermost layer of your program is asynchronous, then all async code\n runs on the main thread's event loop, and all ``thread_sensitive`` synchronous\n code will run in a single shared sub-thread.\n\nCruicially, this means that in both cases there is a thread which is a shared\nresource that all ``thread_sensitive`` code must run on, and there is a chance\nthat this thread is currently blocked on its own ``AsyncToSync`` call. Thus,\n``AsyncToSync`` needs to act as an executor for thread code while it's blocking.\n\nThe ``CurrentThreadExecutor`` class provides this functionality; rather than\nsimply waiting on a Future, you can call its ``run_until_future`` method and\nit will run submitted code until that Future is done. This means that code\ninside the call can then run code on your thread.\n\n\nMaintenance and Security\n------------------------\n\nTo report security issues, please contact security@djangoproject.com. For GPG\nsignatures and more security process information, see\nhttps://docs.djangoproject.com/en/dev/internals/security/.\n\nTo report bugs or request new features, please open a new GitHub issue.\n\nThis repository is part of the Channels project. For the shepherd and maintenance team, please see the\n`main Channels readme `_.", @@ -1273,7 +1269,52 @@ "repository_download_url": "https://pypi.org/packages/source/a/asgiref/asgiref-3.3.0.tar.gz", "api_data_url": "https://pypi.org/pypi/asgiref/3.3.0/json", "copyright": "", - "declared_license_expression": "bsd-new AND bsd-new", + "holder": "", + "declared_license_expression": "bsd-new", + "declared_license_expression_spdx": "BSD-3-Clause", + "license_detections": [ + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_89.RULE", + "start_line": 1, + "matched_text": "license BSD", + "match_coverage": 100.0, + "matched_length": 2, + "rule_relevance": 99, + "rule_identifier": "bsd-new_89.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-261898a0-0118-87c4-7092-14e4ff134882", + "license_expression": "bsd-new" + }, + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_bsd_license.RULE", + "start_line": 1, + "matched_text": "['License :: OSI Approved :: BSD License']", + "match_coverage": 100.0, + "matched_length": 5, + "rule_relevance": 99, + "rule_identifier": "pypi_bsd_license.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-f4e99f86-00ab-18d9-a65d-a3a12767dcf5", + "license_expression": "bsd-new" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": [], "extracted_license_statement": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", "notice_text": "", "datasource_id": "", @@ -1287,10 +1328,10 @@ "email": "foundation@djangoproject.com" } ], - "uuid": "d4227045-439f-41b8-98ff-067c55276b2f", + "uuid": "36e61edd-53f1-429c-9034-31bb05c5482f", "missing_resources": [], "modified_resources": [], - "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=2c03615b-7c34-4676-a219-616b60084356", + "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=09aa0328-c4d5-4413-8837-59f88d05be1c", "keywords": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", @@ -1307,7 +1348,7 @@ ], "source_packages": [], "codebase_resources": [ - 2 + 1 ] } }, @@ -1330,7 +1371,7 @@ "Documentation": "https://asgi.readthedocs.io/", "Further Documentation": "https://docs.djangoproject.com/en/stable/topics/async/#async-adapter-functions" }, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "filename": "", "primary_language": "Python", "description": "ASGI specs, helper code, and adapters\nasgiref\n=======\n\n.. image:: https://api.travis-ci.org/django/asgiref.svg\n :target: https://travis-ci.org/django/asgiref\n\n.. image:: https://img.shields.io/pypi/v/asgiref.svg\n :target: https://pypi.python.org/pypi/asgiref\n\nASGI is a standard for Python asynchronous web apps and servers to communicate\nwith each other, and positioned as an asynchronous successor to WSGI. You can\nread more at https://asgi.readthedocs.io/en/latest/\n\nThis package includes ASGI base libraries, such as:\n\n* Sync-to-async and async-to-sync function wrappers, ``asgiref.sync``\n* Server base classes, ``asgiref.server``\n* A WSGI-to-ASGI adapter, in ``asgiref.wsgi``\n\n\nFunction wrappers\n-----------------\n\nThese allow you to wrap or decorate async or sync functions to call them from\nthe other style (so you can call async functions from a synchronous thread,\nor vice-versa).\n\nIn particular:\n\n* AsyncToSync lets a synchronous subthread stop and wait while the async\n function is called on the main thread's event loop, and then control is\n returned to the thread when the async function is finished.\n\n* SyncToAsync lets async code call a synchronous function, which is run in\n a threadpool and control returned to the async coroutine when the synchronous\n function completes.\n\nThe idea is to make it easier to call synchronous APIs from async code and\nasynchronous APIs from synchronous code so it's easier to transition code from\none style to the other. In the case of Channels, we wrap the (synchronous)\nDjango view system with SyncToAsync to allow it to run inside the (asynchronous)\nASGI server.\n\nNote that exactly what threads things run in is very specific, and aimed to\nkeep maximum compatibility with old synchronous code. See\n\"Synchronous code & Threads\" below for a full explanation. By default,\n``sync_to_async`` will run all synchronous code in the program in the same\nthread for safety reasons; you can disable this for more performance with\n``@sync_to_async(thread_sensitive=False)``, but make sure that your code does\nnot rely on anything bound to threads (like database connections) when you do.\n\n\nThreadlocal replacement\n-----------------------\n\nThis is a drop-in replacement for ``threading.local`` that works with both\nthreads and asyncio Tasks. Even better, it will proxy values through from a\ntask-local context to a thread-local context when you use ``sync_to_async``\nto run things in a threadpool, and vice-versa for ``async_to_sync``.\n\nIf you instead want true thread- and task-safety, you can set\n``thread_critical`` on the Local object to ensure this instead.\n\n\nServer base classes\n-------------------\n\nIncludes a ``StatelessServer`` class which provides all the hard work of\nwriting a stateless server (as in, does not handle direct incoming sockets\nbut instead consumes external streams or sockets to work out what is happening).\n\nAn example of such a server would be a chatbot server that connects out to\na central chat server and provides a \"connection scope\" per user chatting to\nit. There's only one actual connection, but the server has to separate things\ninto several scopes for easier writing of the code.\n\nYou can see an example of this being used in `frequensgi `_.\n\n\nWSGI-to-ASGI adapter\n--------------------\n\nAllows you to wrap a WSGI application so it appears as a valid ASGI application.\n\nSimply wrap it around your WSGI application like so::\n\n asgi_application = WsgiToAsgi(wsgi_application)\n\nThe WSGI application will be run in a synchronous threadpool, and the wrapped\nASGI application will be one that accepts ``http`` class messages.\n\nPlease note that not all extended features of WSGI may be supported (such as\nfile handles for incoming POST bodies).\n\n\nDependencies\n------------\n\n``asgiref`` requires Python 3.5 or higher.\n\n\nContributing\n------------\n\nPlease refer to the\n`main Channels contributing docs `_.\n\n\nTesting\n'''''''\n\nTo run tests, make sure you have installed the ``tests`` extra with the package::\n\n cd asgiref/\n pip install -e .[tests]\n pytest\n\n\nBuilding the documentation\n''''''''''''''''''''''''''\n\nThe documentation uses `Sphinx `_::\n\n cd asgiref/docs/\n pip install sphinx\n\nTo build the docs, you can use the default tools::\n\n sphinx-build -b html . _build/html # or `make html`, if you've got make set up\n cd _build/html\n python -m http.server\n\n...or you can use ``sphinx-autobuild`` to run a server and rebuild/reload\nyour documentation changes automatically::\n\n pip install sphinx-autobuild\n sphinx-autobuild . _build/html\n\n\nImplementation Details\n----------------------\n\nSynchronous code & threads\n''''''''''''''''''''''''''\n\nThe ``asgiref.sync`` module provides two wrappers that let you go between\nasynchronous and synchronous code at will, while taking care of the rough edges\nfor you.\n\nUnfortunately, the rough edges are numerous, and the code has to work especially\nhard to keep things in the same thread as much as possible. Notably, the\nrestrictions we are working with are:\n\n* All synchronous code called through ``SyncToAsync`` and marked with\n ``thread_sensitive`` should run in the same thread as each other (and if the\n outer layer of the program is synchronous, the main thread)\n\n* If a thread already has a running async loop, ``AsyncToSync`` can't run things\n on that loop if it's blocked on synchronous code that is above you in the\n call stack.\n\nThe first compromise you get to might be that ``thread_sensitive`` code should\njust run in the same thread and not spawn in a sub-thread, fulfilling the first\nrestriction, but that immediately runs you into the second restriction.\n\nThe only real solution is to essentially have a variant of ThreadPoolExecutor\nthat executes any ``thread_sensitive`` code on the outermost synchronous\nthread - either the main thread, or a single spawned subthread.\n\nThis means you now have two basic states:\n\n* If the outermost layer of your program is synchronous, then all async code\n run through ``AsyncToSync`` will run in a per-call event loop in arbitary\n sub-threads, while all ``thread_sensitive`` code will run in the main thread.\n\n* If the outermost layer of your program is asynchronous, then all async code\n runs on the main thread's event loop, and all ``thread_sensitive`` synchronous\n code will run in a single shared sub-thread.\n\nCruicially, this means that in both cases there is a thread which is a shared\nresource that all ``thread_sensitive`` code must run on, and there is a chance\nthat this thread is currently blocked on its own ``AsyncToSync`` call. Thus,\n``AsyncToSync`` needs to act as an executor for thread code while it's blocking.\n\nThe ``CurrentThreadExecutor`` class provides this functionality; rather than\nsimply waiting on a Future, you can call its ``run_until_future`` method and\nit will run submitted code until that Future is done. This means that code\ninside the call can then run code on your thread.\n\n\nMaintenance and Security\n------------------------\n\nTo report security issues, please contact security@djangoproject.com. For GPG\nsignatures and more security process information, see\nhttps://docs.djangoproject.com/en/dev/internals/security/.\n\nTo report bugs or request new features, please open a new GitHub issue.\n\nThis repository is part of the Channels project. For the shepherd and maintenance team, please see the\n`main Channels readme `_.", @@ -1345,7 +1386,52 @@ "repository_download_url": "https://pypi.org/packages/source/a/asgiref/asgiref-3.3.0.tar.gz", "api_data_url": "https://pypi.org/pypi/asgiref/3.3.0/json", "copyright": "", - "declared_license_expression": "bsd-new AND bsd-new", + "holder": "", + "declared_license_expression": "bsd-new", + "declared_license_expression_spdx": "BSD-3-Clause", + "license_detections": [ + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_89.RULE", + "start_line": 1, + "matched_text": "license BSD", + "match_coverage": 100.0, + "matched_length": 2, + "rule_relevance": 99, + "rule_identifier": "bsd-new_89.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-261898a0-0118-87c4-7092-14e4ff134882", + "license_expression": "bsd-new" + }, + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_bsd_license.RULE", + "start_line": 1, + "matched_text": "['License :: OSI Approved :: BSD License']", + "match_coverage": 100.0, + "matched_length": 5, + "rule_relevance": 99, + "rule_identifier": "pypi_bsd_license.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-f4e99f86-00ab-18d9-a65d-a3a12767dcf5", + "license_expression": "bsd-new" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": [], "extracted_license_statement": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", "notice_text": "", "datasource_id": "", @@ -1359,10 +1445,10 @@ "email": "foundation@djangoproject.com" } ], - "uuid": "92213ebf-c2f0-4bd6-9d4a-38ea138d2f63", + "uuid": "3e7e870e-0afd-43a2-872c-e252c88e4033", "missing_resources": [], "modified_resources": [], - "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=93d418ad-7f03-4fad-b64a-ac383131b7a8", + "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e", "keywords": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", @@ -1379,20 +1465,20 @@ ], "source_packages": [], "codebase_resources": [ - 14, + 15, 18, - 17, + 14, 16, - 15, - 8, - 10, - 13, + 17, + 11, + 6, 9, + 8, 7, 5, - 6, - 11, - 12 + 12, + 10, + 13 ] } }, @@ -1406,10 +1492,10 @@ "version": "", "qualifiers": "", "subpath": "", - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", - "dependency_uid": "pkg:pypi/pytest?uuid=ebec93f1-d78e-49ee-a1f5-80c26a0dc32b", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "dependency_uid": "pkg:pypi/pytest?uuid=69f10055-c756-444a-a4be-760a4978ec33", "for_package": 1, - "datafile_resource": 2, + "datafile_resource": 1, "extracted_requirement": "pytest; extra == \"tests\"", "scope": "tests", "datasource_id": "pypi_wheel", @@ -1428,10 +1514,10 @@ "version": "", "qualifiers": "", "subpath": "", - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", - "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=1ea67643-91ab-49af-a05d-d9d3f64506d1", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=5c0b0cd6-4d97-40dd-9b68-0bc139d33198", "for_package": 1, - "datafile_resource": 2, + "datafile_resource": 1, "extracted_requirement": "pytest-asyncio; extra == \"tests\"", "scope": "tests", "datasource_id": "pypi_wheel", @@ -1450,8 +1536,8 @@ "version": "", "qualifiers": "", "subpath": "", - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", - "dependency_uid": "pkg:pypi/pytest?uuid=cd04cbe8-ba3e-412b-9c1d-7eb6a617f1d1", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "dependency_uid": "pkg:pypi/pytest?uuid=1cc6674a-d2f8-4988-afc5-85e6722df0fb", "for_package": 2, "datafile_resource": 18, "extracted_requirement": "pytest; extra == \"tests\"", @@ -1472,8 +1558,8 @@ "version": "", "qualifiers": "", "subpath": "", - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", - "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=c8e504e9-3581-4b3d-bd9a-ac815d4bd63b", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=5147952d-9189-49c9-bbf2-a41247d901e2", "for_package": 2, "datafile_resource": 18, "extracted_requirement": "pytest-asyncio; extra == \"tests\"", diff --git a/scanpipe/tests/data/asgiref-3.3.0_scanpipe_output.json b/scanpipe/tests/data/asgiref-3.3.0_scanpipe_output.json index 1d9f55551a..198f42a623 100644 --- a/scanpipe/tests/data/asgiref-3.3.0_scanpipe_output.json +++ b/scanpipe/tests/data/asgiref-3.3.0_scanpipe_output.json @@ -2,10 +2,13 @@ "headers": [ { "tool_name": "scanpipe", - "tool_version": "32.0.1", + "tool_version": "32.2.0", + "other_tools": [ + "pkg:pypi/scancode-toolkit@32.0.0rc4" + ], "notice": "Generated with ScanCode.io and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied.\nNo content created from ScanCode.io should be considered or used as legal advice.\nConsult an Attorney for any legal advice.\nScanCode.io is a free software code scanning tool from nexB Inc. and others\nlicensed under the Apache License version 2.0.\nScanCode is a trademark of nexB Inc.\nVisit https://github.com/nexB/scancode.io for support and download.\n", - "uuid": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", - "created_date": "2023-03-01T00:08:21.226Z", + "uuid": "822e1834-92cc-4000-b43f-744e46b49e19", + "created_date": "2023-05-05T14:14:02.241Z", "input_sources": [ { "filename": "asgiref-3.3.0-py3-none-any.whl", @@ -16,16 +19,16 @@ { "pipeline_name": "scan_codebase", "status": "not_started", - "description": "A pipeline to scan a codebase resource with ScanCode-toolkit.\n\nInput files are copied to the project's codebase/ directory and are extracted\nin place before running the scan.\nAlternatively, the code can be manually copied to the project codebase/\ndirectory.", - "uuid": "04149b89-48d3-4f1d-a143-8459693eaf6b", - "created_date": "2023-03-01T00:08:21.228603Z", + "description": "Scan a codebase with ScanCode-toolkit.", + "uuid": "ce2b1763-d686-45ef-8cb7-af928e508a3b", + "created_date": "2023-05-05T16:14:02.244241+02:00", "scancodeio_version": "", "task_id": null, "task_start_date": null, "task_end_date": null, "task_exitcode": null, "task_output": "", - "log": "2023-03-01 00:08:21.22 Pipeline [scan_codebase] starting\n2023-03-01 00:08:21.23 Step [copy_inputs_to_codebase_directory] starting\n2023-03-01 00:08:21.23 Step [copy_inputs_to_codebase_directory] completed in 0.00 seconds\n2023-03-01 00:08:21.23 Step [extract_archives] starting\n2023-03-01 00:08:21.25 Step [extract_archives] completed in 0.02 seconds\n2023-03-01 00:08:21.25 Step [collect_and_create_codebase_resources] starting\n2023-03-01 00:08:21.46 Step [collect_and_create_codebase_resources] completed in 0.21 seconds\n2023-03-01 00:08:21.46 Step [tag_empty_files] starting\n2023-03-01 00:08:21.46 Step [tag_empty_files] completed in 0.00 seconds\n2023-03-01 00:08:21.46 Step [scan_for_application_packages] starting\n2023-03-01 00:08:24.33 Step [scan_for_application_packages] completed in 2.87 seconds\n2023-03-01 00:08:24.33 Step [scan_for_files] starting\n2023-03-01 00:08:31.11 Step [scan_for_files] completed in 6.78 seconds\n2023-03-01 00:08:31.11 Pipeline completed\n", + "log": "2023-05-05 16:14:02.24 Pipeline [scan_codebase] starting\n2023-05-05 16:14:02.24 Step [copy_inputs_to_codebase_directory] starting\n2023-05-05 16:14:02.24 Step [copy_inputs_to_codebase_directory] completed in 0.00 seconds\n2023-05-05 16:14:02.24 Step [extract_archives] starting\n2023-05-05 16:14:02.27 Step [extract_archives] completed in 0.02 seconds\n2023-05-05 16:14:02.27 Step [collect_and_create_codebase_resources] starting\n2023-05-05 16:14:02.37 Step [collect_and_create_codebase_resources] completed in 0.10 seconds\n2023-05-05 16:14:02.37 Step [tag_empty_files] starting\n2023-05-05 16:14:02.37 Step [tag_empty_files] completed in 0.00 seconds\n2023-05-05 16:14:02.37 Step [scan_for_application_packages] starting\n2023-05-05 16:14:03.99 Step [scan_for_application_packages] completed in 1.61 seconds\n2023-05-05 16:14:03.99 Step [scan_for_files] starting\n2023-05-05 16:14:05.66 Step [scan_for_files] completed in 1.67 seconds\n2023-05-05 16:14:05.66 Pipeline completed\n", "execution_time": null } ], @@ -81,8 +84,53 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "bsd-new AND bsd-new", - "declared_license": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", + "holder": "", + "declared_license_expression": "bsd-new", + "declared_license_expression_spdx": "BSD-3-Clause", + "license_detections": [ + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_89.RULE", + "start_line": 1, + "matched_text": "license BSD", + "match_coverage": 100.0, + "matched_length": 2, + "rule_relevance": 99, + "rule_identifier": "bsd-new_89.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-261898a0-0118-87c4-7092-14e4ff134882", + "license_expression": "bsd-new" + }, + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_bsd_license.RULE", + "start_line": 1, + "matched_text": "['License :: OSI Approved :: BSD License']", + "match_coverage": 100.0, + "matched_length": 5, + "rule_relevance": 99, + "rule_identifier": "pypi_bsd_license.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-f4e99f86-00ab-18d9-a65d-a3a12767dcf5", + "license_expression": "bsd-new" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": [], + "extracted_license_statement": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", "notice_text": "", "source_packages": [], "extra_data": { @@ -90,9 +138,7 @@ "Documentation": "https://asgi.readthedocs.io/", "Further Documentation": "https://docs.djangoproject.com/en/stable/topics/async/#async-adapter-functions" }, - "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=2c03615b-7c34-4676-a219-616b60084356", - "manifest_path": "", - "contains_source_code": null, + "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=09aa0328-c4d5-4413-8837-59f88d05be1c", "datasource_id": "", "file_references": [], "missing_resources": [], @@ -146,8 +192,53 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "bsd-new AND bsd-new", - "declared_license": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", + "holder": "", + "declared_license_expression": "bsd-new", + "declared_license_expression_spdx": "BSD-3-Clause", + "license_detections": [ + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_89.RULE", + "start_line": 1, + "matched_text": "license BSD", + "match_coverage": 100.0, + "matched_length": 2, + "rule_relevance": 99, + "rule_identifier": "bsd-new_89.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-261898a0-0118-87c4-7092-14e4ff134882", + "license_expression": "bsd-new" + }, + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_bsd_license.RULE", + "start_line": 1, + "matched_text": "['License :: OSI Approved :: BSD License']", + "match_coverage": 100.0, + "matched_length": 5, + "rule_relevance": 99, + "rule_identifier": "pypi_bsd_license.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-f4e99f86-00ab-18d9-a65d-a3a12767dcf5", + "license_expression": "bsd-new" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": [], + "extracted_license_statement": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", "notice_text": "", "source_packages": [], "extra_data": { @@ -155,9 +246,7 @@ "Documentation": "https://asgi.readthedocs.io/", "Further Documentation": "https://docs.djangoproject.com/en/stable/topics/async/#async-adapter-functions" }, - "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=93d418ad-7f03-4fad-b64a-ac383131b7a8", - "manifest_path": "", - "contains_source_code": null, + "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e", "datasource_id": "", "file_references": [], "missing_resources": [], @@ -172,8 +261,8 @@ "is_runtime": true, "is_optional": true, "is_resolved": false, - "dependency_uid": "pkg:pypi/pytest?uuid=ebec93f1-d78e-49ee-a1f5-80c26a0dc32b", - "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=2c03615b-7c34-4676-a219-616b60084356", + "dependency_uid": "pkg:pypi/pytest?uuid=69f10055-c756-444a-a4be-760a4978ec33", + "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=09aa0328-c4d5-4413-8837-59f88d05be1c", "datafile_path": "asgiref-3.3.0-py3-none-any.whl", "datasource_id": "pypi_wheel", "package_type": "pypi" @@ -185,8 +274,8 @@ "is_runtime": true, "is_optional": true, "is_resolved": false, - "dependency_uid": "pkg:pypi/pytest?uuid=cd04cbe8-ba3e-412b-9c1d-7eb6a617f1d1", - "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=93d418ad-7f03-4fad-b64a-ac383131b7a8", + "dependency_uid": "pkg:pypi/pytest?uuid=1cc6674a-d2f8-4988-afc5-85e6722df0fb", + "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e", "datafile_path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/METADATA", "datasource_id": "pypi_wheel_metadata", "package_type": "pypi" @@ -198,8 +287,8 @@ "is_runtime": true, "is_optional": true, "is_resolved": false, - "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=1ea67643-91ab-49af-a05d-d9d3f64506d1", - "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=2c03615b-7c34-4676-a219-616b60084356", + "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=5c0b0cd6-4d97-40dd-9b68-0bc139d33198", + "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=09aa0328-c4d5-4413-8837-59f88d05be1c", "datafile_path": "asgiref-3.3.0-py3-none-any.whl", "datasource_id": "pypi_wheel", "package_type": "pypi" @@ -211,8 +300,8 @@ "is_runtime": true, "is_optional": true, "is_resolved": false, - "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=c8e504e9-3581-4b3d-bd9a-ac815d4bd63b", - "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=93d418ad-7f03-4fad-b64a-ac383131b7a8", + "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=5147952d-9189-49c9-bbf2-a41247d901e2", + "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e", "datafile_path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/METADATA", "datasource_id": "pypi_wheel_metadata", "package_type": "pypi" @@ -232,7 +321,7 @@ "sha256": "a5098bc870b80e7b872bff60bb363c7f2c2c89078759f6c47b53ff8c525a152e", "sha512": "", "mime_type": "application/zip", - "file_type": "Zip archive data, at least v2.0 to extract", + "file_type": "Zip archive data, at least v2.0 to extract, compression method=deflate", "programming_language": "", "is_binary": true, "is_text": false, @@ -253,6 +342,7 @@ "sha1": null, "size": null, "type": "pypi", + "holder": null, "sha256": null, "sha512": null, "parties": [ @@ -449,20 +539,59 @@ ], "source_packages": [], "bug_tracking_url": null, - "declared_license": { - "license": "BSD", - "classifiers": [ - "License :: OSI Approved :: BSD License" - ] - }, "primary_language": "Python", - "license_expression": "bsd-new AND bsd-new", + "license_detections": [ + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_89.RULE", + "start_line": 1, + "matched_text": "license BSD", + "match_coverage": 100.0, + "matched_length": 2, + "rule_relevance": 99, + "rule_identifier": "bsd-new_89.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-261898a0-0118-87c4-7092-14e4ff134882", + "license_expression": "bsd-new" + }, + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_bsd_license.RULE", + "start_line": 1, + "matched_text": "['License :: OSI Approved :: BSD License']", + "match_coverage": 100.0, + "matched_length": 5, + "rule_relevance": 99, + "rule_identifier": "pypi_bsd_license.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-f4e99f86-00ab-18d9-a65d-a3a12767dcf5", + "license_expression": "bsd-new" + } + ], "repository_download_url": "https://pypi.org/packages/source/a/asgiref/asgiref-3.3.0.tar.gz", - "repository_homepage_url": "https://pypi.org/project/asgiref" + "repository_homepage_url": "https://pypi.org/project/asgiref", + "other_license_detections": [], + "other_license_expression": null, + "declared_license_expression": "bsd-new", + "extracted_license_statement": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", + "other_license_expression_spdx": null, + "declared_license_expression_spdx": "BSD-3-Clause" } ], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=2c03615b-7c34-4676-a219-616b60084356" + "pkg:pypi/asgiref@3.3.0?uuid=09aa0328-c4d5-4413-8837-59f88d05be1c" ], "emails": [], "urls": [], @@ -475,7 +604,7 @@ "status": "scanned", "tag": "", "extension": ".whl-extract", - "size": 4096, + "size": 128, "md5": "", "sha1": "", "sha256": "", @@ -507,7 +636,7 @@ "status": "scanned", "tag": "", "extension": "", - "size": 4096, + "size": 352, "md5": "", "sha1": "", "sha256": "", @@ -539,7 +668,7 @@ "status": "scanned", "tag": "", "extension": ".dist-info", - "size": 4096, + "size": 224, "md5": "", "sha1": "", "sha256": "", @@ -584,50 +713,8 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [ - { - "key": "bsd-new", - "name": "BSD-3-Clause", - "owner": "Regents of the University of California", - "score": 100.0, - "category": "Permissive", - "end_line": 27, - "spdx_url": "https://spdx.org/licenses/BSD-3-Clause", - "text_url": "http://www.opensource.org/licenses/BSD-3-Clause", - "is_unknown": false, - "short_name": "BSD-3-Clause", - "start_line": 4, - "homepage_url": "http://www.opensource.org/licenses/BSD-3-Clause", - "is_exception": false, - "matched_rule": { - "matcher": "2-aho", - "licenses": [ - "bsd-new" - ], - "identifier": "bsd-new_683.RULE", - "has_unknown": false, - "rule_length": 214, - "is_license_tag": false, - "match_coverage": 100.0, - "matched_length": 214, - "rule_relevance": 100, - "is_license_text": true, - "is_license_intro": false, - "is_license_notice": false, - "license_expression": "bsd-new", - "is_license_reference": false, - "referenced_filenames": [] - }, - "matched_text": "Redistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n 3. Neither the name of Django nor the names of its contributors may be used\n to endorse or promote products derived from this software without\n specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.", - "reference_url": "https://scancode-licensedb.aboutcode.org/bsd-new", - "spdx_license_key": "BSD-3-Clause", - "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/bsd-new.yml", - "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/bsd-new.LICENSE" - } - ], - "license_expressions": [ - "bsd-new" - ], + "licenses": [], + "license_expressions": [], "compliance_alert": "", "copyrights": [ { @@ -646,7 +733,7 @@ "authors": [], "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=93d418ad-7f03-4fad-b64a-ac383131b7a8" + "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" ], "emails": [], "urls": [], @@ -686,6 +773,7 @@ "sha1": null, "size": null, "type": "pypi", + "holder": null, "sha256": null, "sha512": null, "parties": [ @@ -882,20 +970,59 @@ ], "source_packages": [], "bug_tracking_url": null, - "declared_license": { - "license": "BSD", - "classifiers": [ - "License :: OSI Approved :: BSD License" - ] - }, "primary_language": "Python", - "license_expression": "bsd-new AND bsd-new", + "license_detections": [ + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_89.RULE", + "start_line": 1, + "matched_text": "license BSD", + "match_coverage": 100.0, + "matched_length": 2, + "rule_relevance": 99, + "rule_identifier": "bsd-new_89.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-261898a0-0118-87c4-7092-14e4ff134882", + "license_expression": "bsd-new" + }, + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_bsd_license.RULE", + "start_line": 1, + "matched_text": "['License :: OSI Approved :: BSD License']", + "match_coverage": 100.0, + "matched_length": 5, + "rule_relevance": 99, + "rule_identifier": "pypi_bsd_license.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-f4e99f86-00ab-18d9-a65d-a3a12767dcf5", + "license_expression": "bsd-new" + } + ], "repository_download_url": "https://pypi.org/packages/source/a/asgiref/asgiref-3.3.0.tar.gz", - "repository_homepage_url": "https://pypi.org/project/asgiref" + "repository_homepage_url": "https://pypi.org/project/asgiref", + "other_license_detections": [], + "other_license_expression": null, + "declared_license_expression": "bsd-new", + "extracted_license_statement": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", + "other_license_expression_spdx": null, + "declared_license_expression_spdx": "BSD-3-Clause" } ], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=93d418ad-7f03-4fad-b64a-ac383131b7a8" + "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" ], "emails": [], "urls": [], @@ -913,7 +1040,7 @@ "sha1": "5854ecf1ad649848d7cda8096d09ac258c888208", "sha256": "2c1983592aa38f0bfb0afacc73ddc5b46ce10e8e89ceaa9fed1e5fc6361b608d", "sha512": "", - "mime_type": "application/csv", + "mime_type": "text/csv", "file_type": "CSV text", "programming_language": "", "is_binary": false, @@ -929,23 +1056,23 @@ "authors": [], "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=93d418ad-7f03-4fad-b64a-ac383131b7a8" + "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" ], "emails": [], "urls": [], "extra_data": {} }, { - "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/top_level.txt", + "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/WHEEL", "type": "file", - "name": "top_level.txt", + "name": "WHEEL", "status": "scanned", "tag": "", - "extension": ".txt", - "size": 8, - "md5": "680e61db4d95c8d9501b7a49fa2bf0b2", - "sha1": "612390bd0d0227c009f9c99b479878adf7ac2f23", - "sha256": "6e89108c2cf0c0446174188f76f60465ae1c1f14f83427807df40d52a27cb2c8", + "extension": "", + "size": 92, + "md5": "5ccc7519eb42f1dfceee6e7d685f1ff5", + "sha1": "ddd91bc89b15fc5c66e0fa259392955c74ba041f", + "sha256": "11546323af45e6a5639bf620a9c4d73e74c0bf705f494af4595007b923f75e8a", "sha512": "", "mime_type": "text/plain", "file_type": "ASCII text", @@ -963,23 +1090,23 @@ "authors": [], "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=93d418ad-7f03-4fad-b64a-ac383131b7a8" + "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" ], "emails": [], "urls": [], "extra_data": {} }, { - "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/WHEEL", + "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/top_level.txt", "type": "file", - "name": "WHEEL", + "name": "top_level.txt", "status": "scanned", "tag": "", - "extension": "", - "size": 92, - "md5": "5ccc7519eb42f1dfceee6e7d685f1ff5", - "sha1": "ddd91bc89b15fc5c66e0fa259392955c74ba041f", - "sha256": "11546323af45e6a5639bf620a9c4d73e74c0bf705f494af4595007b923f75e8a", + "extension": ".txt", + "size": 8, + "md5": "680e61db4d95c8d9501b7a49fa2bf0b2", + "sha1": "612390bd0d0227c009f9c99b479878adf7ac2f23", + "sha256": "6e89108c2cf0c0446174188f76f60465ae1c1f14f83427807df40d52a27cb2c8", "sha512": "", "mime_type": "text/plain", "file_type": "ASCII text", @@ -997,26 +1124,26 @@ "authors": [], "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=93d418ad-7f03-4fad-b64a-ac383131b7a8" + "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" ], "emails": [], "urls": [], "extra_data": {} }, { - "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/compatibility.py", + "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/__init__.py", "type": "file", - "name": "compatibility.py", + "name": "__init__.py", "status": "scanned", "tag": "", "extension": ".py", - "size": 1598, - "md5": "5231077fd0628314246fcba7817b561e", - "sha1": "9c74e64e9a71903bb227907ea1806eac77e52434", - "sha256": "3151f66c476208c3154cb6c4fb557a2a253bab82f0ab33fb3c8b9f7976be9e33", + "size": 22, + "md5": "4910b756f4e611055140e80f757d9325", + "sha1": "91bc786d907bf3ca8b8e6277063107975780f9ca", + "sha256": "30f49b9094bff904a42caeec32515715fe625a56dc48bd7c0e3d9988c0ad4bd7", "sha512": "", - "mime_type": "text/x-script.python", - "file_type": "Python script, ASCII text executable", + "mime_type": "text/plain", + "file_type": "ASCII text", "programming_language": "Python", "is_binary": false, "is_text": true, @@ -1031,23 +1158,23 @@ "authors": [], "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=93d418ad-7f03-4fad-b64a-ac383131b7a8" + "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" ], "emails": [], "urls": [], "extra_data": {} }, { - "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/current_thread_executor.py", + "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/compatibility.py", "type": "file", - "name": "current_thread_executor.py", + "name": "compatibility.py", "status": "scanned", "tag": "", "extension": ".py", - "size": 2974, - "md5": "b4c45f37055d88dd11b15eb4de51b074", - "sha1": "aacf7e5e2e5ba78ccfb67fa10e9e6b22c3935c9b", - "sha256": "ddd445b778c097fc75c2bf69ad964cbadd3bd6999d1dd2306d39d401855e8e3e", + "size": 1598, + "md5": "5231077fd0628314246fcba7817b561e", + "sha1": "9c74e64e9a71903bb227907ea1806eac77e52434", + "sha256": "3151f66c476208c3154cb6c4fb557a2a253bab82f0ab33fb3c8b9f7976be9e33", "sha512": "", "mime_type": "text/x-script.python", "file_type": "Python script, ASCII text executable", @@ -1065,26 +1192,26 @@ "authors": [], "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=93d418ad-7f03-4fad-b64a-ac383131b7a8" + "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" ], "emails": [], "urls": [], "extra_data": {} }, { - "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/__init__.py", + "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/current_thread_executor.py", "type": "file", - "name": "__init__.py", + "name": "current_thread_executor.py", "status": "scanned", "tag": "", "extension": ".py", - "size": 22, - "md5": "4910b756f4e611055140e80f757d9325", - "sha1": "91bc786d907bf3ca8b8e6277063107975780f9ca", - "sha256": "30f49b9094bff904a42caeec32515715fe625a56dc48bd7c0e3d9988c0ad4bd7", + "size": 2974, + "md5": "b4c45f37055d88dd11b15eb4de51b074", + "sha1": "aacf7e5e2e5ba78ccfb67fa10e9e6b22c3935c9b", + "sha256": "ddd445b778c097fc75c2bf69ad964cbadd3bd6999d1dd2306d39d401855e8e3e", "sha512": "", - "mime_type": "text/plain", - "file_type": "ASCII text", + "mime_type": "text/x-script.python", + "file_type": "Python script, ASCII text executable", "programming_language": "Python", "is_binary": false, "is_text": true, @@ -1099,7 +1226,7 @@ "authors": [], "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=93d418ad-7f03-4fad-b64a-ac383131b7a8" + "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" ], "emails": [], "urls": [], @@ -1133,7 +1260,7 @@ "authors": [], "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=93d418ad-7f03-4fad-b64a-ac383131b7a8" + "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" ], "emails": [], "urls": [], @@ -1167,7 +1294,7 @@ "authors": [], "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=93d418ad-7f03-4fad-b64a-ac383131b7a8" + "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" ], "emails": [], "urls": [], @@ -1201,7 +1328,7 @@ "authors": [], "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=93d418ad-7f03-4fad-b64a-ac383131b7a8" + "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" ], "emails": [], "urls": [], @@ -1235,7 +1362,7 @@ "authors": [], "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=93d418ad-7f03-4fad-b64a-ac383131b7a8" + "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" ], "emails": [], "urls": [], @@ -1261,57 +1388,15 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [ - { - "key": "apache-2.0", - "name": "Apache License 2.0", - "owner": "Apache Software Foundation", - "score": 100.0, - "category": "Permissive", - "end_line": 2, - "spdx_url": "https://spdx.org/licenses/Apache-2.0", - "text_url": "http://www.apache.org/licenses/LICENSE-2.0", - "is_unknown": false, - "short_name": "Apache 2.0", - "start_line": 2, - "homepage_url": "http://www.apache.org/licenses/", - "is_exception": false, - "matched_rule": { - "matcher": "2-aho", - "licenses": [ - "apache-2.0" - ], - "identifier": "apache-2.0_174.RULE", - "has_unknown": false, - "rule_length": 6, - "is_license_tag": false, - "match_coverage": 100.0, - "matched_length": 6, - "rule_relevance": 100, - "is_license_text": false, - "is_license_intro": false, - "is_license_notice": true, - "license_expression": "apache-2.0", - "is_license_reference": false, - "referenced_filenames": [] - }, - "matched_text": "# under the Apache 2.0 license. You may see the original project at", - "reference_url": "https://scancode-licensedb.aboutcode.org/apache-2.0", - "spdx_license_key": "Apache-2.0", - "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/apache-2.0.yml", - "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/apache-2.0.LICENSE" - } - ], - "license_expressions": [ - "apache-2.0" - ], + "licenses": [], + "license_expressions": [], "compliance_alert": "", "copyrights": [], "holders": [], "authors": [], "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=93d418ad-7f03-4fad-b64a-ac383131b7a8" + "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" ], "emails": [], "urls": [ @@ -1361,11 +1446,12 @@ "authors": [], "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=93d418ad-7f03-4fad-b64a-ac383131b7a8" + "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" ], "emails": [], "urls": [], "extra_data": {} } - ] + ], + "relations": [] } \ No newline at end of file diff --git a/scanpipe/tests/data/asgiref-3.3.0_toolkit_scan.json b/scanpipe/tests/data/asgiref-3.3.0_toolkit_scan.json index 6aa541c3ee..a725bed00e 100644 --- a/scanpipe/tests/data/asgiref-3.3.0_toolkit_scan.json +++ b/scanpipe/tests/data/asgiref-3.3.0_toolkit_scan.json @@ -2,93 +2,40 @@ "headers": [ { "tool_name": "scancode-toolkit", - "tool_version": "31.0.0b3", + "tool_version": "32.0.0rc4", "options": { "input": [ - "codebase/" + "/private/var/folders/ph/tpf7js_n0r554mngmvykl7lm0000gn/T/tmpqwsr_onx/projects/asgiref-822e1834/codebase" ], "--copyright": true, "--info": true, - "--json-pp": "/home/jono/Desktop/asgiref-3.3.0-py-none-clip.json", + "--json-pp": "/Volumes/nexB/repos/scancode.io/scanpipe/tests/data/asgiref-3.3.0_toolkit_scan.json", "--license": true, "--package": true, - "--processes": "4" + "--processes": "-1", + "--verbose": true }, "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", - "start_timestamp": "2022-05-10T191738.719041", - "end_timestamp": "2022-05-10T191741.404391", - "output_format_version": "2.0.0", - "duration": 2.68536114692688, + "start_timestamp": "2023-05-05T141406.032577", + "end_timestamp": "2023-05-05T141409.498069", + "output_format_version": "3.0.0", + "duration": 3.465496063232422, "message": null, "errors": [], "warnings": [], "extra_data": { "system_environment": { - "operating_system": "linux", + "operating_system": "mac", "cpu_architecture": "64", - "platform": "Linux-5.4.0-109-generic-x86_64-with-glibc2.27", - "platform_version": "#123~18.04.1-Ubuntu SMP Fri Apr 8 09:48:52 UTC 2022", - "python_version": "3.9.12 (main, Apr 16 2022, 19:31:36) \n[GCC 7.5.0]" + "platform": "macOS-13.3.1-arm64-arm-64bit", + "platform_version": "Darwin Kernel Version 22.4.0: Mon Mar 6 20:59:28 PST 2023; root:xnu-8796.101.5~3/RELEASE_ARM64_T6000", + "python_version": "3.10.10 (v3.10.10:aad5f6a891, Feb 7 2023, 08:47:40) [Clang 13.0.0 (clang-1300.0.29.30)]" }, - "spdx_license_list_version": "3.16", + "spdx_license_list_version": "3.20", "files_count": 15 } } ], - "dependencies": [ - { - "purl": "pkg:pypi/pytest", - "extracted_requirement": null, - "scope": "tests", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {}, - "dependency_uid": "pkg:pypi/pytest?uuid=2c09a89c-6c38-4029-bd79-6a863adc6287", - "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=67cec7fe-24c6-47a3-9881-6ddeb8b1ac83", - "datafile_path": "codebase/asgiref-3.3.0-py3-none-any.whl", - "datasource_id": "pypi_wheel" - }, - { - "purl": "pkg:pypi/pytest-asyncio", - "extracted_requirement": null, - "scope": "tests", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {}, - "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=f92b5fa7-4746-4e9a-b7bc-a56ee6ff7ac6", - "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=67cec7fe-24c6-47a3-9881-6ddeb8b1ac83", - "datafile_path": "codebase/asgiref-3.3.0-py3-none-any.whl", - "datasource_id": "pypi_wheel" - }, - { - "purl": "pkg:pypi/pytest", - "extracted_requirement": null, - "scope": "tests", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {}, - "dependency_uid": "pkg:pypi/pytest?uuid=cb69cd49-eb88-4237-8497-ad675a175798", - "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=e6474d12-5040-4c97-b9bc-eaaaf79e4816", - "datafile_path": "codebase/asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/METADATA", - "datasource_id": "pypi_wheel_metadata" - }, - { - "purl": "pkg:pypi/pytest-asyncio", - "extracted_requirement": null, - "scope": "tests", - "is_runtime": true, - "is_optional": false, - "is_resolved": false, - "resolved_package": {}, - "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=52eb33ff-8a5b-4c5b-a059-296ca3a5cb7f", - "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=e6474d12-5040-4c97-b9bc-eaaaf79e4816", - "datafile_path": "codebase/asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/METADATA", - "datasource_id": "pypi_wheel_metadata" - } - ], "packages": [ { "type": "pypi", @@ -134,13 +81,53 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "bsd-new AND bsd-new", - "declared_license": { - "license": "BSD", - "classifiers": [ - "License :: OSI Approved :: BSD License" - ] - }, + "holder": null, + "declared_license_expression": "bsd-new", + "declared_license_expression_spdx": "BSD-3-Clause", + "license_detections": [ + { + "license_expression": "bsd-new", + "matches": [ + { + "score": 99.0, + "start_line": 1, + "end_line": 1, + "matched_length": 2, + "match_coverage": 100.0, + "matcher": "1-hash", + "license_expression": "bsd-new", + "rule_identifier": "bsd-new_89.RULE", + "rule_relevance": 99, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_89.RULE", + "matched_text": "license BSD" + } + ], + "identifier": "bsd_new-261898a0-0118-87c4-7092-14e4ff134882" + }, + { + "license_expression": "bsd-new", + "matches": [ + { + "score": 99.0, + "start_line": 1, + "end_line": 1, + "matched_length": 5, + "match_coverage": 100.0, + "matcher": "1-hash", + "license_expression": "bsd-new", + "rule_identifier": "pypi_bsd_license.RULE", + "rule_relevance": 99, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_bsd_license.RULE", + "matched_text": "['License :: OSI Approved :: BSD License']" + } + ], + "identifier": "bsd_new-f4e99f86-00ab-18d9-a65d-a3a12767dcf5" + } + ], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", "notice_text": null, "source_packages": [], "extra_data": { @@ -151,7 +138,7 @@ "repository_homepage_url": "https://pypi.org/project/asgiref", "repository_download_url": "https://pypi.org/packages/source/a/asgiref/asgiref-3.3.0.tar.gz", "api_data_url": "https://pypi.org/pypi/asgiref/3.3.0/json", - "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=67cec7fe-24c6-47a3-9881-6ddeb8b1ac83", + "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=b5e66572-7b2b-4813-8833-72532a060ea0", "datafile_paths": [ "codebase/asgiref-3.3.0-py3-none-any.whl" ], @@ -204,13 +191,53 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "bsd-new AND bsd-new", - "declared_license": { - "license": "BSD", - "classifiers": [ - "License :: OSI Approved :: BSD License" - ] - }, + "holder": null, + "declared_license_expression": "bsd-new", + "declared_license_expression_spdx": "BSD-3-Clause", + "license_detections": [ + { + "license_expression": "bsd-new", + "matches": [ + { + "score": 99.0, + "start_line": 1, + "end_line": 1, + "matched_length": 2, + "match_coverage": 100.0, + "matcher": "1-hash", + "license_expression": "bsd-new", + "rule_identifier": "bsd-new_89.RULE", + "rule_relevance": 99, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_89.RULE", + "matched_text": "license BSD" + } + ], + "identifier": "bsd_new-261898a0-0118-87c4-7092-14e4ff134882" + }, + { + "license_expression": "bsd-new", + "matches": [ + { + "score": 99.0, + "start_line": 1, + "end_line": 1, + "matched_length": 5, + "match_coverage": 100.0, + "matcher": "1-hash", + "license_expression": "bsd-new", + "rule_identifier": "pypi_bsd_license.RULE", + "rule_relevance": 99, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_bsd_license.RULE", + "matched_text": "['License :: OSI Approved :: BSD License']" + } + ], + "identifier": "bsd_new-f4e99f86-00ab-18d9-a65d-a3a12767dcf5" + } + ], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", "notice_text": null, "source_packages": [], "extra_data": { @@ -221,7 +248,7 @@ "repository_homepage_url": "https://pypi.org/project/asgiref", "repository_download_url": "https://pypi.org/packages/source/a/asgiref/asgiref-3.3.0.tar.gz", "api_data_url": "https://pypi.org/pypi/asgiref/3.3.0/json", - "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=e6474d12-5040-4c97-b9bc-eaaaf79e4816", + "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad", "datafile_paths": [ "codebase/asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/METADATA" ], @@ -231,6 +258,86 @@ "purl": "pkg:pypi/asgiref@3.3.0" } ], + "dependencies": [ + { + "purl": "pkg:pypi/pytest", + "extracted_requirement": "pytest; extra == \"tests\"", + "scope": "tests", + "is_runtime": true, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "extra_data": {}, + "dependency_uid": "pkg:pypi/pytest?uuid=ad3c935c-1890-429f-abb4-42242d00cf4a", + "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=b5e66572-7b2b-4813-8833-72532a060ea0", + "datafile_path": "codebase/asgiref-3.3.0-py3-none-any.whl", + "datasource_id": "pypi_wheel" + }, + { + "purl": "pkg:pypi/pytest-asyncio", + "extracted_requirement": "pytest-asyncio; extra == \"tests\"", + "scope": "tests", + "is_runtime": true, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "extra_data": {}, + "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=6d439359-3a43-473b-a7e9-132ddaf1d65c", + "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=b5e66572-7b2b-4813-8833-72532a060ea0", + "datafile_path": "codebase/asgiref-3.3.0-py3-none-any.whl", + "datasource_id": "pypi_wheel" + }, + { + "purl": "pkg:pypi/pytest", + "extracted_requirement": "pytest; extra == \"tests\"", + "scope": "tests", + "is_runtime": true, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "extra_data": {}, + "dependency_uid": "pkg:pypi/pytest?uuid=f87fae40-67a5-40a1-ad94-f9f848cfe4d1", + "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad", + "datafile_path": "codebase/asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/METADATA", + "datasource_id": "pypi_wheel_metadata" + }, + { + "purl": "pkg:pypi/pytest-asyncio", + "extracted_requirement": "pytest-asyncio; extra == \"tests\"", + "scope": "tests", + "is_runtime": true, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "extra_data": {}, + "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=69142343-716c-4c9a-9e88-1315f1e93946", + "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad", + "datafile_path": "codebase/asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/METADATA", + "datasource_id": "pypi_wheel_metadata" + } + ], + "license_detections": [ + { + "identifier": "apache_2_0-5a90b5fa-5d10-5a98-d2a7-ef089c46a900", + "license_expression": "apache-2.0", + "detection_count": 1 + }, + { + "identifier": "bsd_new-72cae3bc-4423-3a9e-be84-ee8bb5120a4d", + "license_expression": "bsd-new", + "detection_count": 1 + }, + { + "identifier": "bsd_new-261898a0-0118-87c4-7092-14e4ff134882", + "license_expression": "bsd-new", + "detection_count": 1 + }, + { + "identifier": "bsd_new-f4e99f86-00ab-18d9-a65d-a3a12767dcf5", + "license_expression": "bsd-new", + "detection_count": 1 + } + ], "files": [ { "path": "codebase", @@ -252,14 +359,16 @@ "is_media": false, "is_source": false, "is_script": false, - "licenses": [], - "license_expressions": [], + "package_data": [], + "for_packages": [], + "detected_license_expression": null, + "detected_license_expression_spdx": null, + "license_detections": [], + "license_clues": [], "percentage_of_license_text": 0, "copyrights": [], "holders": [], "authors": [], - "package_data": [], - "for_packages": [], "files_count": 15, "dirs_count": 3, "size_count": 74520, @@ -272,12 +381,12 @@ "base_name": "asgiref-3.3.0-py3-none-any", "extension": ".whl", "size": 19948, - "date": "2022-05-10", + "date": "2023-05-05", "sha1": "c03f67211a311b13d1294ac8af7cb139ee34c4f9", "md5": "5bce1df6dedc53a41a9a6b40d7b1699e", "sha256": "a5098bc870b80e7b872bff60bb363c7f2c2c89078759f6c47b53ff8c525a152e", "mime_type": "application/zip", - "file_type": "Zip archive data, at least v2.0 to extract", + "file_type": "Zip archive data, at least v2.0 to extract, compression method=deflate", "programming_language": null, "is_binary": true, "is_text": false, @@ -285,12 +394,6 @@ "is_media": false, "is_source": false, "is_script": false, - "licenses": [], - "license_expressions": [], - "percentage_of_license_text": 0, - "copyrights": [], - "holders": [], - "authors": [], "package_data": [ { "type": "pypi", @@ -336,13 +439,53 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "bsd-new AND bsd-new", - "declared_license": { - "license": "BSD", - "classifiers": [ - "License :: OSI Approved :: BSD License" - ] - }, + "holder": null, + "declared_license_expression": "bsd-new", + "declared_license_expression_spdx": "BSD-3-Clause", + "license_detections": [ + { + "license_expression": "bsd-new", + "matches": [ + { + "score": 99.0, + "start_line": 1, + "end_line": 1, + "matched_length": 2, + "match_coverage": 100.0, + "matcher": "1-hash", + "license_expression": "bsd-new", + "rule_identifier": "bsd-new_89.RULE", + "rule_relevance": 99, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_89.RULE", + "matched_text": "license BSD" + } + ], + "identifier": "bsd_new-261898a0-0118-87c4-7092-14e4ff134882" + }, + { + "license_expression": "bsd-new", + "matches": [ + { + "score": 99.0, + "start_line": 1, + "end_line": 1, + "matched_length": 5, + "match_coverage": 100.0, + "matcher": "1-hash", + "license_expression": "bsd-new", + "rule_identifier": "pypi_bsd_license.RULE", + "rule_relevance": 99, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_bsd_license.RULE", + "matched_text": "['License :: OSI Approved :: BSD License']" + } + ], + "identifier": "bsd_new-f4e99f86-00ab-18d9-a65d-a3a12767dcf5" + } + ], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", "notice_text": null, "source_packages": [], "file_references": [ @@ -481,21 +624,23 @@ "dependencies": [ { "purl": "pkg:pypi/pytest", - "extracted_requirement": null, + "extracted_requirement": "pytest; extra == \"tests\"", "scope": "tests", "is_runtime": true, - "is_optional": false, + "is_optional": true, "is_resolved": false, - "resolved_package": {} + "resolved_package": {}, + "extra_data": {} }, { "purl": "pkg:pypi/pytest-asyncio", - "extracted_requirement": null, + "extracted_requirement": "pytest-asyncio; extra == \"tests\"", "scope": "tests", "is_runtime": true, - "is_optional": false, + "is_optional": true, "is_resolved": false, - "resolved_package": {} + "resolved_package": {}, + "extra_data": {} } ], "repository_homepage_url": "https://pypi.org/project/asgiref", @@ -506,8 +651,16 @@ } ], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=67cec7fe-24c6-47a3-9881-6ddeb8b1ac83" + "pkg:pypi/asgiref@3.3.0?uuid=b5e66572-7b2b-4813-8833-72532a060ea0" ], + "detected_license_expression": null, + "detected_license_expression_spdx": null, + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": 0, + "copyrights": [], + "holders": [], + "authors": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -533,14 +686,16 @@ "is_media": false, "is_source": false, "is_script": false, - "licenses": [], - "license_expressions": [], + "package_data": [], + "for_packages": [], + "detected_license_expression": null, + "detected_license_expression_spdx": null, + "license_detections": [], + "license_clues": [], "percentage_of_license_text": 0, "copyrights": [], "holders": [], "authors": [], - "package_data": [], - "for_packages": [], "files_count": 14, "dirs_count": 2, "size_count": 54572, @@ -566,14 +721,16 @@ "is_media": false, "is_source": false, "is_script": false, - "licenses": [], - "license_expressions": [], + "package_data": [], + "for_packages": [], + "detected_license_expression": null, + "detected_license_expression_spdx": null, + "license_detections": [], + "license_clues": [], "percentage_of_license_text": 0, "copyrights": [], "holders": [], "authors": [], - "package_data": [], - "for_packages": [], "files_count": 9, "dirs_count": 0, "size_count": 43047, @@ -599,14 +756,18 @@ "is_media": false, "is_source": true, "is_script": false, - "licenses": [], - "license_expressions": [], + "package_data": [], + "for_packages": [ + "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + ], + "detected_license_expression": null, + "detected_license_expression_spdx": null, + "license_detections": [], + "license_clues": [], "percentage_of_license_text": 0, "copyrights": [], "holders": [], "authors": [], - "package_data": [], - "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -632,14 +793,18 @@ "is_media": false, "is_source": true, "is_script": true, - "licenses": [], - "license_expressions": [], + "package_data": [], + "for_packages": [ + "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + ], + "detected_license_expression": null, + "detected_license_expression_spdx": null, + "license_detections": [], + "license_clues": [], "percentage_of_license_text": 0, "copyrights": [], "holders": [], "authors": [], - "package_data": [], - "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -665,14 +830,18 @@ "is_media": false, "is_source": true, "is_script": true, - "licenses": [], - "license_expressions": [], + "package_data": [], + "for_packages": [ + "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + ], + "detected_license_expression": null, + "detected_license_expression_spdx": null, + "license_detections": [], + "license_clues": [], "percentage_of_license_text": 0, "copyrights": [], "holders": [], "authors": [], - "package_data": [], - "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -698,14 +867,18 @@ "is_media": false, "is_source": true, "is_script": true, - "licenses": [], - "license_expressions": [], + "package_data": [], + "for_packages": [ + "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + ], + "detected_license_expression": null, + "detected_license_expression_spdx": null, + "license_detections": [], + "license_clues": [], "percentage_of_license_text": 0, "copyrights": [], "holders": [], "authors": [], - "package_data": [], - "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -731,14 +904,18 @@ "is_media": false, "is_source": true, "is_script": true, - "licenses": [], - "license_expressions": [], + "package_data": [], + "for_packages": [ + "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + ], + "detected_license_expression": null, + "detected_license_expression_spdx": null, + "license_detections": [], + "license_clues": [], "percentage_of_license_text": 0, "copyrights": [], "holders": [], "authors": [], - "package_data": [], - "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -764,14 +941,18 @@ "is_media": false, "is_source": true, "is_script": true, - "licenses": [], - "license_expressions": [], + "package_data": [], + "for_packages": [ + "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + ], + "detected_license_expression": null, + "detected_license_expression_spdx": null, + "license_detections": [], + "license_clues": [], "percentage_of_license_text": 0, "copyrights": [], "holders": [], "authors": [], - "package_data": [], - "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -797,14 +978,18 @@ "is_media": false, "is_source": true, "is_script": true, - "licenses": [], - "license_expressions": [], + "package_data": [], + "for_packages": [ + "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + ], + "detected_license_expression": null, + "detected_license_expression_spdx": null, + "license_detections": [], + "license_clues": [], "percentage_of_license_text": 0, "copyrights": [], "holders": [], "authors": [], - "package_data": [], - "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -830,55 +1015,37 @@ "is_media": false, "is_source": true, "is_script": true, - "licenses": [ + "package_data": [], + "for_packages": [ + "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + ], + "detected_license_expression": "apache-2.0", + "detected_license_expression_spdx": "Apache-2.0", + "license_detections": [ { - "key": "apache-2.0", - "score": 100.0, - "name": "Apache License 2.0", - "short_name": "Apache 2.0", - "category": "Permissive", - "is_exception": false, - "is_unknown": false, - "owner": "Apache Software Foundation", - "homepage_url": "http://www.apache.org/licenses/", - "text_url": "http://www.apache.org/licenses/LICENSE-2.0", - "reference_url": "https://scancode-licensedb.aboutcode.org/apache-2.0", - "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/apache-2.0.LICENSE", - "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/apache-2.0.yml", - "spdx_license_key": "Apache-2.0", - "spdx_url": "https://spdx.org/licenses/Apache-2.0", - "start_line": 2, - "end_line": 2, - "matched_rule": { - "identifier": "apache-2.0_174.RULE", - "license_expression": "apache-2.0", - "licenses": [ - "apache-2.0" - ], - "referenced_filenames": [], - "is_license_text": false, - "is_license_notice": true, - "is_license_reference": false, - "is_license_tag": false, - "is_license_intro": false, - "has_unknown": false, - "matcher": "2-aho", - "rule_length": 6, - "matched_length": 6, - "match_coverage": 100.0, - "rule_relevance": 100 - } + "license_expression": "apache-2.0", + "matches": [ + { + "score": 100.0, + "start_line": 2, + "end_line": 2, + "matched_length": 6, + "match_coverage": 100.0, + "matcher": "2-aho", + "license_expression": "apache-2.0", + "rule_identifier": "apache-2.0_174.RULE", + "rule_relevance": 100, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/apache-2.0_174.RULE" + } + ], + "identifier": "apache_2_0-5a90b5fa-5d10-5a98-d2a7-ef089c46a900" } ], - "license_expressions": [ - "apache-2.0" - ], + "license_clues": [], "percentage_of_license_text": 1.22, "copyrights": [], "holders": [], "authors": [], - "package_data": [], - "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -904,14 +1071,18 @@ "is_media": false, "is_source": true, "is_script": true, - "licenses": [], - "license_expressions": [], + "package_data": [], + "for_packages": [ + "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + ], + "detected_license_expression": null, + "detected_license_expression_spdx": null, + "license_detections": [], + "license_clues": [], "percentage_of_license_text": 0, "copyrights": [], "holders": [], "authors": [], - "package_data": [], - "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -937,14 +1108,16 @@ "is_media": false, "is_source": false, "is_script": false, - "licenses": [], - "license_expressions": [], + "package_data": [], + "for_packages": [], + "detected_license_expression": null, + "detected_license_expression_spdx": null, + "license_detections": [], + "license_clues": [], "percentage_of_license_text": 0, "copyrights": [], "holders": [], "authors": [], - "package_data": [], - "for_packages": [], "files_count": 5, "dirs_count": 0, "size_count": 11525, @@ -970,49 +1143,33 @@ "is_media": false, "is_source": false, "is_script": false, - "licenses": [ + "package_data": [], + "for_packages": [ + "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + ], + "detected_license_expression": "bsd-new", + "detected_license_expression_spdx": "BSD-3-Clause", + "license_detections": [ { - "key": "bsd-new", - "score": 100.0, - "name": "BSD-3-Clause", - "short_name": "BSD-3-Clause", - "category": "Permissive", - "is_exception": false, - "is_unknown": false, - "owner": "Regents of the University of California", - "homepage_url": "http://www.opensource.org/licenses/BSD-3-Clause", - "text_url": "http://www.opensource.org/licenses/BSD-3-Clause", - "reference_url": "https://scancode-licensedb.aboutcode.org/bsd-new", - "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/bsd-new.LICENSE", - "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/bsd-new.yml", - "spdx_license_key": "BSD-3-Clause", - "spdx_url": "https://spdx.org/licenses/BSD-3-Clause", - "start_line": 4, - "end_line": 27, - "matched_rule": { - "identifier": "bsd-new_683.RULE", - "license_expression": "bsd-new", - "licenses": [ - "bsd-new" - ], - "referenced_filenames": [], - "is_license_text": true, - "is_license_notice": false, - "is_license_reference": false, - "is_license_tag": false, - "is_license_intro": false, - "has_unknown": false, - "matcher": "2-aho", - "rule_length": 214, - "matched_length": 214, - "match_coverage": 100.0, - "rule_relevance": 100 - } + "license_expression": "bsd-new", + "matches": [ + { + "score": 100.0, + "start_line": 4, + "end_line": 27, + "matched_length": 214, + "match_coverage": 100.0, + "matcher": "2-aho", + "license_expression": "bsd-new", + "rule_identifier": "bsd-new_683.RULE", + "rule_relevance": 100, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_683.RULE" + } + ], + "identifier": "bsd_new-72cae3bc-4423-3a9e-be84-ee8bb5120a4d" } ], - "license_expressions": [ - "bsd-new" - ], + "license_clues": [], "percentage_of_license_text": 95.11, "copyrights": [ { @@ -1029,8 +1186,6 @@ } ], "authors": [], - "package_data": [], - "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -1056,98 +1211,6 @@ "is_media": false, "is_source": false, "is_script": false, - "licenses": [ - { - "key": "bsd-new", - "score": 99.0, - "name": "BSD-3-Clause", - "short_name": "BSD-3-Clause", - "category": "Permissive", - "is_exception": false, - "is_unknown": false, - "owner": "Regents of the University of California", - "homepage_url": "http://www.opensource.org/licenses/BSD-3-Clause", - "text_url": "http://www.opensource.org/licenses/BSD-3-Clause", - "reference_url": "https://scancode-licensedb.aboutcode.org/bsd-new", - "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/bsd-new.LICENSE", - "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/bsd-new.yml", - "spdx_license_key": "BSD-3-Clause", - "spdx_url": "https://spdx.org/licenses/BSD-3-Clause", - "start_line": 8, - "end_line": 8, - "matched_rule": { - "identifier": "bsd-new_89.RULE", - "license_expression": "bsd-new", - "licenses": [ - "bsd-new" - ], - "referenced_filenames": [], - "is_license_text": false, - "is_license_notice": false, - "is_license_reference": false, - "is_license_tag": true, - "is_license_intro": false, - "has_unknown": false, - "matcher": "2-aho", - "rule_length": 2, - "matched_length": 2, - "match_coverage": 100.0, - "rule_relevance": 99 - } - }, - { - "key": "bsd-new", - "score": 99.0, - "name": "BSD-3-Clause", - "short_name": "BSD-3-Clause", - "category": "Permissive", - "is_exception": false, - "is_unknown": false, - "owner": "Regents of the University of California", - "homepage_url": "http://www.opensource.org/licenses/BSD-3-Clause", - "text_url": "http://www.opensource.org/licenses/BSD-3-Clause", - "reference_url": "https://scancode-licensedb.aboutcode.org/bsd-new", - "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/bsd-new.LICENSE", - "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/bsd-new.yml", - "spdx_license_key": "BSD-3-Clause", - "spdx_url": "https://spdx.org/licenses/BSD-3-Clause", - "start_line": 16, - "end_line": 16, - "matched_rule": { - "identifier": "pypi_bsd_license.RULE", - "license_expression": "bsd-new", - "licenses": [ - "bsd-new" - ], - "referenced_filenames": [], - "is_license_text": false, - "is_license_notice": false, - "is_license_reference": false, - "is_license_tag": true, - "is_license_intro": false, - "has_unknown": false, - "matcher": "2-aho", - "rule_length": 5, - "matched_length": 5, - "match_coverage": 100.0, - "rule_relevance": 99 - } - } - ], - "license_expressions": [ - "bsd-new", - "bsd-new" - ], - "percentage_of_license_text": 0.54, - "copyrights": [], - "holders": [], - "authors": [ - { - "author": "Django Software Foundation", - "start_line": 6, - "end_line": 6 - } - ], "package_data": [ { "type": "pypi", @@ -1193,13 +1256,53 @@ "code_view_url": null, "vcs_url": null, "copyright": null, - "license_expression": "bsd-new AND bsd-new", - "declared_license": { - "license": "BSD", - "classifiers": [ - "License :: OSI Approved :: BSD License" - ] - }, + "holder": null, + "declared_license_expression": "bsd-new", + "declared_license_expression_spdx": "BSD-3-Clause", + "license_detections": [ + { + "license_expression": "bsd-new", + "matches": [ + { + "score": 99.0, + "start_line": 1, + "end_line": 1, + "matched_length": 2, + "match_coverage": 100.0, + "matcher": "1-hash", + "license_expression": "bsd-new", + "rule_identifier": "bsd-new_89.RULE", + "rule_relevance": 99, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_89.RULE", + "matched_text": "license BSD" + } + ], + "identifier": "bsd_new-261898a0-0118-87c4-7092-14e4ff134882" + }, + { + "license_expression": "bsd-new", + "matches": [ + { + "score": 99.0, + "start_line": 1, + "end_line": 1, + "matched_length": 5, + "match_coverage": 100.0, + "matcher": "1-hash", + "license_expression": "bsd-new", + "rule_identifier": "pypi_bsd_license.RULE", + "rule_relevance": 99, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_bsd_license.RULE", + "matched_text": "['License :: OSI Approved :: BSD License']" + } + ], + "identifier": "bsd_new-f4e99f86-00ab-18d9-a65d-a3a12767dcf5" + } + ], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", "notice_text": null, "source_packages": [], "file_references": [ @@ -1338,21 +1441,23 @@ "dependencies": [ { "purl": "pkg:pypi/pytest", - "extracted_requirement": null, + "extracted_requirement": "pytest; extra == \"tests\"", "scope": "tests", "is_runtime": true, - "is_optional": false, + "is_optional": true, "is_resolved": false, - "resolved_package": {} + "resolved_package": {}, + "extra_data": {} }, { "purl": "pkg:pypi/pytest-asyncio", - "extracted_requirement": null, + "extracted_requirement": "pytest-asyncio; extra == \"tests\"", "scope": "tests", "is_runtime": true, - "is_optional": false, + "is_optional": true, "is_resolved": false, - "resolved_package": {} + "resolved_package": {}, + "extra_data": {} } ], "repository_homepage_url": "https://pypi.org/project/asgiref", @@ -1363,7 +1468,58 @@ } ], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=e6474d12-5040-4c97-b9bc-eaaaf79e4816" + "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + ], + "detected_license_expression": "bsd-new", + "detected_license_expression_spdx": "BSD-3-Clause", + "license_detections": [ + { + "license_expression": "bsd-new", + "matches": [ + { + "score": 99.0, + "start_line": 8, + "end_line": 8, + "matched_length": 2, + "match_coverage": 100.0, + "matcher": "2-aho", + "license_expression": "bsd-new", + "rule_identifier": "bsd-new_89.RULE", + "rule_relevance": 99, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_89.RULE" + } + ], + "identifier": "bsd_new-261898a0-0118-87c4-7092-14e4ff134882" + }, + { + "license_expression": "bsd-new", + "matches": [ + { + "score": 99.0, + "start_line": 16, + "end_line": 16, + "matched_length": 5, + "match_coverage": 100.0, + "matcher": "2-aho", + "license_expression": "bsd-new", + "rule_identifier": "pypi_bsd_license.RULE", + "rule_relevance": 99, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_bsd_license.RULE" + } + ], + "identifier": "bsd_new-f4e99f86-00ab-18d9-a65d-a3a12767dcf5" + } + ], + "license_clues": [], + "percentage_of_license_text": 0.54, + "copyrights": [], + "holders": [], + "authors": [ + { + "author": "Django Software Foundation", + "start_line": 6, + "end_line": 6 + } ], "files_count": 0, "dirs_count": 0, @@ -1381,7 +1537,7 @@ "sha1": "5854ecf1ad649848d7cda8096d09ac258c888208", "md5": "38e56802a5adcafeae35efc6e3d218ba", "sha256": "2c1983592aa38f0bfb0afacc73ddc5b46ce10e8e89ceaa9fed1e5fc6361b608d", - "mime_type": "application/csv", + "mime_type": "text/csv", "file_type": "CSV text", "programming_language": null, "is_binary": false, @@ -1390,14 +1546,18 @@ "is_media": false, "is_source": false, "is_script": false, - "licenses": [], - "license_expressions": [], + "package_data": [], + "for_packages": [ + "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + ], + "detected_license_expression": null, + "detected_license_expression_spdx": null, + "license_detections": [], + "license_clues": [], "percentage_of_license_text": 0, "copyrights": [], "holders": [], "authors": [], - "package_data": [], - "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -1423,14 +1583,18 @@ "is_media": false, "is_source": false, "is_script": false, - "licenses": [], - "license_expressions": [], + "package_data": [], + "for_packages": [ + "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + ], + "detected_license_expression": null, + "detected_license_expression_spdx": null, + "license_detections": [], + "license_clues": [], "percentage_of_license_text": 0, "copyrights": [], "holders": [], "authors": [], - "package_data": [], - "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, @@ -1456,14 +1620,18 @@ "is_media": false, "is_source": false, "is_script": false, - "licenses": [], - "license_expressions": [], + "package_data": [], + "for_packages": [ + "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + ], + "detected_license_expression": null, + "detected_license_expression_spdx": null, + "license_detections": [], + "license_clues": [], "percentage_of_license_text": 0, "copyrights": [], "holders": [], "authors": [], - "package_data": [], - "for_packages": [], "files_count": 0, "dirs_count": 0, "size_count": 0, diff --git a/scanpipe/tests/data/asgiref-3.3.0_walk_test_fixtures.json b/scanpipe/tests/data/asgiref-3.3.0_walk_test_fixtures.json index 55184b2124..b927e8a87a 100644 --- a/scanpipe/tests/data/asgiref-3.3.0_walk_test_fixtures.json +++ b/scanpipe/tests/data/asgiref-3.3.0_walk_test_fixtures.json @@ -1,12 +1,12 @@ [ { "model": "scanpipe.project", - "pk": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "pk": "822e1834-92cc-4000-b43f-744e46b49e19", "fields": { "extra_data": {}, - "created_date": "2023-03-01T00:08:21.226Z", + "created_date": "2023-05-05T14:14:02.241Z", "name": "asgiref", - "work_directory": "/tmp/tmp1kvnzy78/projects/asgiref-4c7f2e2e", + "work_directory": "/private/var/folders/ph/tpf7js_n0r554mngmvykl7lm0000gn/T/tmpqwsr_onx/projects/asgiref-822e1834", "input_sources": { "asgiref-3.3.0-py3-none-any.whl": "-" }, @@ -15,69 +15,32 @@ }, { "model": "scanpipe.run", - "pk": "04149b89-48d3-4f1d-a143-8459693eaf6b", + "pk": "ce2b1763-d686-45ef-8cb7-af928e508a3b", "fields": { "task_id": null, "task_start_date": null, "task_end_date": null, "task_exitcode": null, "task_output": "", - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "pipeline_name": "scan_codebase", - "created_date": "2023-03-01T00:08:21.228Z", + "created_date": "2023-05-05T14:14:02.244Z", "scancodeio_version": "", - "description": "A pipeline to scan a codebase resource with ScanCode-toolkit.\n\nInput files are copied to the project's codebase/ directory and are extracted\nin place before running the scan.\nAlternatively, the code can be manually copied to the project codebase/\ndirectory.", + "description": "Scan a codebase with ScanCode-toolkit.", "current_step": "", - "log": "2023-03-01 00:08:21.22 Pipeline [scan_codebase] starting\n2023-03-01 00:08:21.23 Step [copy_inputs_to_codebase_directory] starting\n2023-03-01 00:08:21.23 Step [copy_inputs_to_codebase_directory] completed in 0.00 seconds\n2023-03-01 00:08:21.23 Step [extract_archives] starting\n2023-03-01 00:08:21.25 Step [extract_archives] completed in 0.02 seconds\n2023-03-01 00:08:21.25 Step [collect_and_create_codebase_resources] starting\n2023-03-01 00:08:21.46 Step [collect_and_create_codebase_resources] completed in 0.21 seconds\n2023-03-01 00:08:21.46 Step [tag_empty_files] starting\n2023-03-01 00:08:21.46 Step [tag_empty_files] completed in 0.00 seconds\n2023-03-01 00:08:21.46 Step [scan_for_application_packages] starting\n2023-03-01 00:08:24.33 Step [scan_for_application_packages] completed in 2.87 seconds\n2023-03-01 00:08:24.33 Step [scan_for_files] starting\n2023-03-01 00:08:31.11 Step [scan_for_files] completed in 6.78 seconds\n2023-03-01 00:08:31.11 Pipeline completed\n" + "log": "2023-05-05 16:14:02.24 Pipeline [scan_codebase] starting\n2023-05-05 16:14:02.24 Step [copy_inputs_to_codebase_directory] starting\n2023-05-05 16:14:02.24 Step [copy_inputs_to_codebase_directory] completed in 0.00 seconds\n2023-05-05 16:14:02.24 Step [extract_archives] starting\n2023-05-05 16:14:02.27 Step [extract_archives] completed in 0.02 seconds\n2023-05-05 16:14:02.27 Step [collect_and_create_codebase_resources] starting\n2023-05-05 16:14:02.37 Step [collect_and_create_codebase_resources] completed in 0.10 seconds\n2023-05-05 16:14:02.37 Step [tag_empty_files] starting\n2023-05-05 16:14:02.37 Step [tag_empty_files] completed in 0.00 seconds\n2023-05-05 16:14:02.37 Step [scan_for_application_packages] starting\n2023-05-05 16:14:03.99 Step [scan_for_application_packages] completed in 1.61 seconds\n2023-05-05 16:14:03.99 Step [scan_for_files] starting\n2023-05-05 16:14:05.66 Step [scan_for_files] completed in 1.67 seconds\n2023-05-05 16:14:05.66 Pipeline completed\n" } }, { "model": "scanpipe.codebaseresource", "pk": 1, - "fields": { - "md5": "", - "sha1": "", - "sha256": "", - "sha512": "", - "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", - "copyrights": [], - "holders": [], - "authors": [], - "licenses": [], - "license_expressions": [], - "emails": [], - "urls": [], - "path": "asgiref-3.3.0.whl-extract", - "rootfs_path": "", - "status": "scanned", - "size": 4096, - "tag": "", - "type": "directory", - "name": "asgiref-3.3.0-py3-none-any.whl-extract", - "extension": ".whl-extract", - "programming_language": "", - "mime_type": "", - "file_type": "", - "is_binary": false, - "is_text": false, - "is_archive": false, - "is_key_file": false, - "is_media": false, - "compliance_alert": "", - "package_data": [] - } - }, - { - "model": "scanpipe.codebaseresource", - "pk": 2, "fields": { "md5": "5bce1df6dedc53a41a9a6b40d7b1699e", "sha1": "c03f67211a311b13d1294ac8af7cb139ee34c4f9", "sha256": "a5098bc870b80e7b872bff60bb363c7f2c2c89078759f6c47b53ff8c525a152e", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], @@ -95,7 +58,7 @@ "extension": ".whl", "programming_language": "", "mime_type": "application/zip", - "file_type": "Zip archive data, at least v2.0 to extract", + "file_type": "Zip archive data, at least v2.0 to extract, compression method=deflate", "is_binary": true, "is_text": false, "is_archive": true, @@ -110,6 +73,7 @@ "sha1": null, "size": null, "type": "pypi", + "holder": null, "sha256": null, "sha512": null, "parties": [ @@ -306,20 +270,96 @@ ], "source_packages": [], "bug_tracking_url": null, - "extracted_license_statement": { - "license": "BSD", - "classifiers": [ - "License :: OSI Approved :: BSD License" - ] - }, "primary_language": "Python", - "declared_license_expression": "bsd-new AND bsd-new", + "license_detections": [ + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_89.RULE", + "start_line": 1, + "matched_text": "license BSD", + "match_coverage": 100.0, + "matched_length": 2, + "rule_relevance": 99, + "rule_identifier": "bsd-new_89.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-261898a0-0118-87c4-7092-14e4ff134882", + "license_expression": "bsd-new" + }, + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_bsd_license.RULE", + "start_line": 1, + "matched_text": "['License :: OSI Approved :: BSD License']", + "match_coverage": 100.0, + "matched_length": 5, + "rule_relevance": 99, + "rule_identifier": "pypi_bsd_license.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-f4e99f86-00ab-18d9-a65d-a3a12767dcf5", + "license_expression": "bsd-new" + } + ], "repository_download_url": "https://pypi.org/packages/source/a/asgiref/asgiref-3.3.0.tar.gz", - "repository_homepage_url": "https://pypi.org/project/asgiref" + "repository_homepage_url": "https://pypi.org/project/asgiref", + "other_license_detections": [], + "other_license_expression": null, + "declared_license_expression": "bsd-new", + "extracted_license_statement": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", + "other_license_expression_spdx": null, + "declared_license_expression_spdx": "BSD-3-Clause" } ] } }, + { + "model": "scanpipe.codebaseresource", + "pk": 2, + "fields": { + "md5": "", + "sha1": "", + "sha256": "", + "sha512": "", + "extra_data": {}, + "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "copyrights": [], + "holders": [], + "authors": [], + "licenses": [], + "license_expressions": [], + "emails": [], + "urls": [], + "path": "asgiref-3.3.0.whl-extract", + "rootfs_path": "", + "status": "scanned", + "size": 128, + "tag": "", + "type": "directory", + "name": "asgiref-3.3.0-py3-none-any.whl-extract", + "extension": ".whl-extract", + "programming_language": "", + "mime_type": "", + "file_type": "", + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_key_file": false, + "is_media": false, + "compliance_alert": "", + "package_data": [] + } + }, { "model": "scanpipe.codebaseresource", "pk": 3, @@ -329,7 +369,7 @@ "sha256": "", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], @@ -340,7 +380,7 @@ "path": "asgiref-3.3.0.whl-extract/asgiref", "rootfs_path": "", "status": "scanned", - "size": 4096, + "size": 352, "tag": "", "type": "directory", "name": "asgiref", @@ -366,7 +406,7 @@ "sha256": "", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], @@ -377,7 +417,7 @@ "path": "asgiref-3.3.0.whl-extract/asgiref-3.3.0.dist-info", "rootfs_path": "", "status": "scanned", - "size": 4096, + "size": 224, "tag": "", "type": "directory", "name": "asgiref-3.3.0.dist-info", @@ -403,7 +443,7 @@ "sha256": "fa4651a3b79201a4dc44a4096cd49ec8f427e912ea0ee05c666357b413a8afe7", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], @@ -435,12 +475,12 @@ "model": "scanpipe.codebaseresource", "pk": 6, "fields": { - "md5": "aff31de5fa753643adacf0311aa553f4", - "sha1": "534de2315197b14d0571edc5ed3b3b8ceade0d24", - "sha256": "ddbc8d455eceb68fc583c67e7c4ad0277c867fb39095c51ec5b37f70342e8334", + "md5": "5231077fd0628314246fcba7817b561e", + "sha1": "9c74e64e9a71903bb227907ea1806eac77e52434", + "sha256": "3151f66c476208c3154cb6c4fb557a2a253bab82f0ab33fb3c8b9f7976be9e33", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], @@ -448,13 +488,13 @@ "license_expressions": [], "emails": [], "urls": [], - "path": "asgiref-3.3.0.whl-extract/asgiref/testing.py", + "path": "asgiref-3.3.0.whl-extract/asgiref/compatibility.py", "rootfs_path": "", "status": "scanned", - "size": 3119, + "size": 1598, "tag": "", "type": "file", - "name": "testing.py", + "name": "compatibility.py", "extension": ".py", "programming_language": "Python", "mime_type": "text/x-script.python", @@ -477,7 +517,7 @@ "sha256": "885267fee0fea687875a02ceb929ca095312d47aaa57e20e4ce382f397caaf4d", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], @@ -508,50 +548,13 @@ { "model": "scanpipe.codebaseresource", "pk": 8, - "fields": { - "md5": "5231077fd0628314246fcba7817b561e", - "sha1": "9c74e64e9a71903bb227907ea1806eac77e52434", - "sha256": "3151f66c476208c3154cb6c4fb557a2a253bab82f0ab33fb3c8b9f7976be9e33", - "sha512": "", - "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", - "copyrights": [], - "holders": [], - "authors": [], - "licenses": [], - "license_expressions": [], - "emails": [], - "urls": [], - "path": "asgiref-3.3.0.whl-extract/asgiref/compatibility.py", - "rootfs_path": "", - "status": "scanned", - "size": 1598, - "tag": "", - "type": "file", - "name": "compatibility.py", - "extension": ".py", - "programming_language": "Python", - "mime_type": "text/x-script.python", - "file_type": "Python script, ASCII text executable", - "is_binary": false, - "is_text": true, - "is_archive": false, - "is_key_file": false, - "is_media": false, - "compliance_alert": "", - "package_data": [] - } - }, - { - "model": "scanpipe.codebaseresource", - "pk": 9, "fields": { "md5": "e4103a2fcd6a3f23a036307c978271d7", "sha1": "0de5075d1ce4a1a17d70ad6ee523e3d947074899", "sha256": "ee0fcf4a8e6fa9df8a4643bb48e82892d496afce44b6c8b8aea2721755545e1c", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], @@ -581,14 +584,14 @@ }, { "model": "scanpipe.codebaseresource", - "pk": 10, + "pk": 9, "fields": { "md5": "b4c45f37055d88dd11b15eb4de51b074", "sha1": "aacf7e5e2e5ba78ccfb67fa10e9e6b22c3935c9b", "sha256": "ddd445b778c097fc75c2bf69ad964cbadd3bd6999d1dd2306d39d401855e8e3e", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], @@ -618,61 +621,19 @@ }, { "model": "scanpipe.codebaseresource", - "pk": 11, + "pk": 10, "fields": { "md5": "8114ef1d7c1488ebf3a1766dbd39d427", "sha1": "361968f116e8ff9156511bf22f6aa04426f0c540", "sha256": "126c3e3a8a75a517d2739612304607804cf5f34da63fa25d03a6f11f7edb6f2f", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], - "licenses": [ - { - "key": "apache-2.0", - "name": "Apache License 2.0", - "owner": "Apache Software Foundation", - "score": 100.0, - "category": "Permissive", - "end_line": 2, - "spdx_url": "https://spdx.org/licenses/Apache-2.0", - "text_url": "http://www.apache.org/licenses/LICENSE-2.0", - "is_unknown": false, - "short_name": "Apache 2.0", - "start_line": 2, - "homepage_url": "http://www.apache.org/licenses/", - "is_exception": false, - "matched_rule": { - "matcher": "2-aho", - "licenses": [ - "apache-2.0" - ], - "identifier": "apache-2.0_174.RULE", - "has_unknown": false, - "rule_length": 6, - "is_license_tag": false, - "match_coverage": 100.0, - "matched_length": 6, - "rule_relevance": 100, - "is_license_text": false, - "is_license_intro": false, - "is_license_notice": true, - "declared_license_expression": "apache-2.0", - "is_license_reference": false, - "referenced_filenames": [] - }, - "matched_text": "# under the Apache 2.0 license. You may see the original project at", - "reference_url": "https://scancode-licensedb.aboutcode.org/apache-2.0", - "spdx_license_key": "Apache-2.0", - "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/apache-2.0.yml", - "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/apache-2.0.LICENSE" - } - ], - "license_expressions": [ - "apache-2.0" - ], + "licenses": [], + "license_expressions": [], "emails": [], "urls": [ { @@ -711,16 +672,90 @@ "package_data": [] } }, + { + "model": "scanpipe.codebaseresource", + "pk": 11, + "fields": { + "md5": "4910b756f4e611055140e80f757d9325", + "sha1": "91bc786d907bf3ca8b8e6277063107975780f9ca", + "sha256": "30f49b9094bff904a42caeec32515715fe625a56dc48bd7c0e3d9988c0ad4bd7", + "sha512": "", + "extra_data": {}, + "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "copyrights": [], + "holders": [], + "authors": [], + "licenses": [], + "license_expressions": [], + "emails": [], + "urls": [], + "path": "asgiref-3.3.0.whl-extract/asgiref/__init__.py", + "rootfs_path": "", + "status": "scanned", + "size": 22, + "tag": "", + "type": "file", + "name": "__init__.py", + "extension": ".py", + "programming_language": "Python", + "mime_type": "text/plain", + "file_type": "ASCII text", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_key_file": false, + "is_media": false, + "compliance_alert": "", + "package_data": [] + } + }, { "model": "scanpipe.codebaseresource", "pk": 12, + "fields": { + "md5": "aff31de5fa753643adacf0311aa553f4", + "sha1": "534de2315197b14d0571edc5ed3b3b8ceade0d24", + "sha256": "ddbc8d455eceb68fc583c67e7c4ad0277c867fb39095c51ec5b37f70342e8334", + "sha512": "", + "extra_data": {}, + "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "copyrights": [], + "holders": [], + "authors": [], + "licenses": [], + "license_expressions": [], + "emails": [], + "urls": [], + "path": "asgiref-3.3.0.whl-extract/asgiref/testing.py", + "rootfs_path": "", + "status": "scanned", + "size": 3119, + "tag": "", + "type": "file", + "name": "testing.py", + "extension": ".py", + "programming_language": "Python", + "mime_type": "text/x-script.python", + "file_type": "Python script, ASCII text executable", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_key_file": false, + "is_media": false, + "compliance_alert": "", + "package_data": [] + } + }, + { + "model": "scanpipe.codebaseresource", + "pk": 13, "fields": { "md5": "4eed1361d0e454149f95fca85c84f33f", "sha1": "1f06eb4dd6d38b1a3e2a9b9e751744b303c37e0d", "sha256": "f8bd1ea3fb8afddabb10f8efd66796d41446cad51168ef4d3c44b19c973d0ad0", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], @@ -750,14 +785,14 @@ }, { "model": "scanpipe.codebaseresource", - "pk": 13, + "pk": 14, "fields": { - "md5": "4910b756f4e611055140e80f757d9325", - "sha1": "91bc786d907bf3ca8b8e6277063107975780f9ca", - "sha256": "30f49b9094bff904a42caeec32515715fe625a56dc48bd7c0e3d9988c0ad4bd7", + "md5": "38e56802a5adcafeae35efc6e3d218ba", + "sha1": "5854ecf1ad649848d7cda8096d09ac258c888208", + "sha256": "2c1983592aa38f0bfb0afacc73ddc5b46ce10e8e89ceaa9fed1e5fc6361b608d", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], @@ -765,17 +800,17 @@ "license_expressions": [], "emails": [], "urls": [], - "path": "asgiref-3.3.0.whl-extract/asgiref/__init__.py", + "path": "asgiref-3.3.0.whl-extract/asgiref-3.3.0.dist-info/RECORD", "rootfs_path": "", "status": "scanned", - "size": 22, + "size": 1073, "tag": "", "type": "file", - "name": "__init__.py", - "extension": ".py", - "programming_language": "Python", - "mime_type": "text/plain", - "file_type": "ASCII text", + "name": "RECORD", + "extension": "", + "programming_language": "", + "mime_type": "text/csv", + "file_type": "CSV text", "is_binary": false, "is_text": true, "is_archive": false, @@ -787,14 +822,14 @@ }, { "model": "scanpipe.codebaseresource", - "pk": 14, + "pk": 15, "fields": { "md5": "f09eb47206614a4954c51db8a94840fa", "sha1": "baf11129ce63c4eef654f39a360b31cfc7d1ac67", "sha256": "b846415d1b514e9c1dff14a22deb906d794bc546ca6129f950a18cd091e2a669", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [ { "end_line": 1, @@ -810,50 +845,8 @@ } ], "authors": [], - "licenses": [ - { - "key": "bsd-new", - "name": "BSD-3-Clause", - "owner": "Regents of the University of California", - "score": 100.0, - "category": "Permissive", - "end_line": 27, - "spdx_url": "https://spdx.org/licenses/BSD-3-Clause", - "text_url": "http://www.opensource.org/licenses/BSD-3-Clause", - "is_unknown": false, - "short_name": "BSD-3-Clause", - "start_line": 4, - "homepage_url": "http://www.opensource.org/licenses/BSD-3-Clause", - "is_exception": false, - "matched_rule": { - "matcher": "2-aho", - "licenses": [ - "bsd-new" - ], - "identifier": "bsd-new_683.RULE", - "has_unknown": false, - "rule_length": 214, - "is_license_tag": false, - "match_coverage": 100.0, - "matched_length": 214, - "rule_relevance": 100, - "is_license_text": true, - "is_license_intro": false, - "is_license_notice": false, - "declared_license_expression": "bsd-new", - "is_license_reference": false, - "referenced_filenames": [] - }, - "matched_text": "Redistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n 3. Neither the name of Django nor the names of its contributors may be used\n to endorse or promote products derived from this software without\n specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.", - "reference_url": "https://scancode-licensedb.aboutcode.org/bsd-new", - "spdx_license_key": "BSD-3-Clause", - "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/bsd-new.yml", - "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/bsd-new.LICENSE" - } - ], - "license_expressions": [ - "bsd-new" - ], + "licenses": [], + "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0.whl-extract/asgiref-3.3.0.dist-info/LICENSE", @@ -878,14 +871,14 @@ }, { "model": "scanpipe.codebaseresource", - "pk": 15, + "pk": 16, "fields": { "md5": "5ccc7519eb42f1dfceee6e7d685f1ff5", "sha1": "ddd91bc89b15fc5c66e0fa259392955c74ba041f", "sha256": "11546323af45e6a5639bf620a9c4d73e74c0bf705f494af4595007b923f75e8a", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], @@ -915,14 +908,14 @@ }, { "model": "scanpipe.codebaseresource", - "pk": 16, + "pk": 17, "fields": { "md5": "680e61db4d95c8d9501b7a49fa2bf0b2", "sha1": "612390bd0d0227c009f9c99b479878adf7ac2f23", "sha256": "6e89108c2cf0c0446174188f76f60465ae1c1f14f83427807df40d52a27cb2c8", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], @@ -950,43 +943,6 @@ "package_data": [] } }, - { - "model": "scanpipe.codebaseresource", - "pk": 17, - "fields": { - "md5": "38e56802a5adcafeae35efc6e3d218ba", - "sha1": "5854ecf1ad649848d7cda8096d09ac258c888208", - "sha256": "2c1983592aa38f0bfb0afacc73ddc5b46ce10e8e89ceaa9fed1e5fc6361b608d", - "sha512": "", - "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", - "copyrights": [], - "holders": [], - "authors": [], - "licenses": [], - "license_expressions": [], - "emails": [], - "urls": [], - "path": "asgiref-3.3.0.whl-extract/asgiref-3.3.0.dist-info/RECORD", - "rootfs_path": "", - "status": "scanned", - "size": 1073, - "tag": "", - "type": "file", - "name": "RECORD", - "extension": "", - "programming_language": "", - "mime_type": "application/csv", - "file_type": "CSV text", - "is_binary": false, - "is_text": true, - "is_archive": false, - "is_key_file": false, - "is_media": false, - "compliance_alert": "", - "package_data": [] - } - }, { "model": "scanpipe.codebaseresource", "pk": 18, @@ -996,7 +952,7 @@ "sha256": "70f98f4eb9f6068b192b5464fcdf69e29a8ff09962bfce84bbb052baeee44f33", "sha512": "", "extra_data": {}, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "copyrights": [], "holders": [], "authors": [], @@ -1029,6 +985,7 @@ "sha1": null, "size": null, "type": "pypi", + "holder": null, "sha256": null, "sha512": null, "parties": [ @@ -1225,16 +1182,55 @@ ], "source_packages": [], "bug_tracking_url": null, - "extracted_license_statement": { - "license": "BSD", - "classifiers": [ - "License :: OSI Approved :: BSD License" - ] - }, "primary_language": "Python", - "declared_license_expression": "bsd-new AND bsd-new", + "license_detections": [ + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_89.RULE", + "start_line": 1, + "matched_text": "license BSD", + "match_coverage": 100.0, + "matched_length": 2, + "rule_relevance": 99, + "rule_identifier": "bsd-new_89.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-261898a0-0118-87c4-7092-14e4ff134882", + "license_expression": "bsd-new" + }, + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_bsd_license.RULE", + "start_line": 1, + "matched_text": "['License :: OSI Approved :: BSD License']", + "match_coverage": 100.0, + "matched_length": 5, + "rule_relevance": 99, + "rule_identifier": "pypi_bsd_license.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-f4e99f86-00ab-18d9-a65d-a3a12767dcf5", + "license_expression": "bsd-new" + } + ], "repository_download_url": "https://pypi.org/packages/source/a/asgiref/asgiref-3.3.0.tar.gz", - "repository_homepage_url": "https://pypi.org/project/asgiref" + "repository_homepage_url": "https://pypi.org/project/asgiref", + "other_license_detections": [], + "other_license_expression": null, + "declared_license_expression": "bsd-new", + "extracted_license_statement": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", + "other_license_expression_spdx": null, + "declared_license_expression_spdx": "BSD-3-Clause" } ] } @@ -1258,7 +1254,7 @@ "Documentation": "https://asgi.readthedocs.io/", "Further Documentation": "https://docs.djangoproject.com/en/stable/topics/async/#async-adapter-functions" }, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "filename": "", "primary_language": "Python", "description": "ASGI specs, helper code, and adapters\nasgiref\n=======\n\n.. image:: https://api.travis-ci.org/django/asgiref.svg\n :target: https://travis-ci.org/django/asgiref\n\n.. image:: https://img.shields.io/pypi/v/asgiref.svg\n :target: https://pypi.python.org/pypi/asgiref\n\nASGI is a standard for Python asynchronous web apps and servers to communicate\nwith each other, and positioned as an asynchronous successor to WSGI. You can\nread more at https://asgi.readthedocs.io/en/latest/\n\nThis package includes ASGI base libraries, such as:\n\n* Sync-to-async and async-to-sync function wrappers, ``asgiref.sync``\n* Server base classes, ``asgiref.server``\n* A WSGI-to-ASGI adapter, in ``asgiref.wsgi``\n\n\nFunction wrappers\n-----------------\n\nThese allow you to wrap or decorate async or sync functions to call them from\nthe other style (so you can call async functions from a synchronous thread,\nor vice-versa).\n\nIn particular:\n\n* AsyncToSync lets a synchronous subthread stop and wait while the async\n function is called on the main thread's event loop, and then control is\n returned to the thread when the async function is finished.\n\n* SyncToAsync lets async code call a synchronous function, which is run in\n a threadpool and control returned to the async coroutine when the synchronous\n function completes.\n\nThe idea is to make it easier to call synchronous APIs from async code and\nasynchronous APIs from synchronous code so it's easier to transition code from\none style to the other. In the case of Channels, we wrap the (synchronous)\nDjango view system with SyncToAsync to allow it to run inside the (asynchronous)\nASGI server.\n\nNote that exactly what threads things run in is very specific, and aimed to\nkeep maximum compatibility with old synchronous code. See\n\"Synchronous code & Threads\" below for a full explanation. By default,\n``sync_to_async`` will run all synchronous code in the program in the same\nthread for safety reasons; you can disable this for more performance with\n``@sync_to_async(thread_sensitive=False)``, but make sure that your code does\nnot rely on anything bound to threads (like database connections) when you do.\n\n\nThreadlocal replacement\n-----------------------\n\nThis is a drop-in replacement for ``threading.local`` that works with both\nthreads and asyncio Tasks. Even better, it will proxy values through from a\ntask-local context to a thread-local context when you use ``sync_to_async``\nto run things in a threadpool, and vice-versa for ``async_to_sync``.\n\nIf you instead want true thread- and task-safety, you can set\n``thread_critical`` on the Local object to ensure this instead.\n\n\nServer base classes\n-------------------\n\nIncludes a ``StatelessServer`` class which provides all the hard work of\nwriting a stateless server (as in, does not handle direct incoming sockets\nbut instead consumes external streams or sockets to work out what is happening).\n\nAn example of such a server would be a chatbot server that connects out to\na central chat server and provides a \"connection scope\" per user chatting to\nit. There's only one actual connection, but the server has to separate things\ninto several scopes for easier writing of the code.\n\nYou can see an example of this being used in `frequensgi `_.\n\n\nWSGI-to-ASGI adapter\n--------------------\n\nAllows you to wrap a WSGI application so it appears as a valid ASGI application.\n\nSimply wrap it around your WSGI application like so::\n\n asgi_application = WsgiToAsgi(wsgi_application)\n\nThe WSGI application will be run in a synchronous threadpool, and the wrapped\nASGI application will be one that accepts ``http`` class messages.\n\nPlease note that not all extended features of WSGI may be supported (such as\nfile handles for incoming POST bodies).\n\n\nDependencies\n------------\n\n``asgiref`` requires Python 3.5 or higher.\n\n\nContributing\n------------\n\nPlease refer to the\n`main Channels contributing docs `_.\n\n\nTesting\n'''''''\n\nTo run tests, make sure you have installed the ``tests`` extra with the package::\n\n cd asgiref/\n pip install -e .[tests]\n pytest\n\n\nBuilding the documentation\n''''''''''''''''''''''''''\n\nThe documentation uses `Sphinx `_::\n\n cd asgiref/docs/\n pip install sphinx\n\nTo build the docs, you can use the default tools::\n\n sphinx-build -b html . _build/html # or `make html`, if you've got make set up\n cd _build/html\n python -m http.server\n\n...or you can use ``sphinx-autobuild`` to run a server and rebuild/reload\nyour documentation changes automatically::\n\n pip install sphinx-autobuild\n sphinx-autobuild . _build/html\n\n\nImplementation Details\n----------------------\n\nSynchronous code & threads\n''''''''''''''''''''''''''\n\nThe ``asgiref.sync`` module provides two wrappers that let you go between\nasynchronous and synchronous code at will, while taking care of the rough edges\nfor you.\n\nUnfortunately, the rough edges are numerous, and the code has to work especially\nhard to keep things in the same thread as much as possible. Notably, the\nrestrictions we are working with are:\n\n* All synchronous code called through ``SyncToAsync`` and marked with\n ``thread_sensitive`` should run in the same thread as each other (and if the\n outer layer of the program is synchronous, the main thread)\n\n* If a thread already has a running async loop, ``AsyncToSync`` can't run things\n on that loop if it's blocked on synchronous code that is above you in the\n call stack.\n\nThe first compromise you get to might be that ``thread_sensitive`` code should\njust run in the same thread and not spawn in a sub-thread, fulfilling the first\nrestriction, but that immediately runs you into the second restriction.\n\nThe only real solution is to essentially have a variant of ThreadPoolExecutor\nthat executes any ``thread_sensitive`` code on the outermost synchronous\nthread - either the main thread, or a single spawned subthread.\n\nThis means you now have two basic states:\n\n* If the outermost layer of your program is synchronous, then all async code\n run through ``AsyncToSync`` will run in a per-call event loop in arbitary\n sub-threads, while all ``thread_sensitive`` code will run in the main thread.\n\n* If the outermost layer of your program is asynchronous, then all async code\n runs on the main thread's event loop, and all ``thread_sensitive`` synchronous\n code will run in a single shared sub-thread.\n\nCruicially, this means that in both cases there is a thread which is a shared\nresource that all ``thread_sensitive`` code must run on, and there is a chance\nthat this thread is currently blocked on its own ``AsyncToSync`` call. Thus,\n``AsyncToSync`` needs to act as an executor for thread code while it's blocking.\n\nThe ``CurrentThreadExecutor`` class provides this functionality; rather than\nsimply waiting on a Future, you can call its ``run_until_future`` method and\nit will run submitted code until that Future is done. This means that code\ninside the call can then run code on your thread.\n\n\nMaintenance and Security\n------------------------\n\nTo report security issues, please contact security@djangoproject.com. For GPG\nsignatures and more security process information, see\nhttps://docs.djangoproject.com/en/dev/internals/security/.\n\nTo report bugs or request new features, please open a new GitHub issue.\n\nThis repository is part of the Channels project. For the shepherd and maintenance team, please see the\n`main Channels readme `_.", @@ -1273,11 +1269,54 @@ "repository_download_url": "https://pypi.org/packages/source/a/asgiref/asgiref-3.3.0.tar.gz", "api_data_url": "https://pypi.org/pypi/asgiref/3.3.0/json", "copyright": "", - "declared_license_expression": "bsd-new AND bsd-new", + "holder": "", + "declared_license_expression": "bsd-new", + "declared_license_expression_spdx": "BSD-3-Clause", + "license_detections": [ + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_89.RULE", + "start_line": 1, + "matched_text": "license BSD", + "match_coverage": 100.0, + "matched_length": 2, + "rule_relevance": 99, + "rule_identifier": "bsd-new_89.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-261898a0-0118-87c4-7092-14e4ff134882", + "license_expression": "bsd-new" + }, + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_bsd_license.RULE", + "start_line": 1, + "matched_text": "['License :: OSI Approved :: BSD License']", + "match_coverage": 100.0, + "matched_length": 5, + "rule_relevance": 99, + "rule_identifier": "pypi_bsd_license.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-f4e99f86-00ab-18d9-a65d-a3a12767dcf5", + "license_expression": "bsd-new" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": [], "extracted_license_statement": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", "notice_text": "", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "parties": [ @@ -1289,10 +1328,10 @@ "email": "foundation@djangoproject.com" } ], - "uuid": "d4227045-439f-41b8-98ff-067c55276b2f", + "uuid": "36e61edd-53f1-429c-9034-31bb05c5482f", "missing_resources": [], "modified_resources": [], - "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=2c03615b-7c34-4676-a219-616b60084356", + "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=09aa0328-c4d5-4413-8837-59f88d05be1c", "keywords": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", @@ -1309,7 +1348,7 @@ ], "source_packages": [], "codebase_resources": [ - 2 + 1 ] } }, @@ -1332,7 +1371,7 @@ "Documentation": "https://asgi.readthedocs.io/", "Further Documentation": "https://docs.djangoproject.com/en/stable/topics/async/#async-adapter-functions" }, - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", "filename": "", "primary_language": "Python", "description": "ASGI specs, helper code, and adapters\nasgiref\n=======\n\n.. image:: https://api.travis-ci.org/django/asgiref.svg\n :target: https://travis-ci.org/django/asgiref\n\n.. image:: https://img.shields.io/pypi/v/asgiref.svg\n :target: https://pypi.python.org/pypi/asgiref\n\nASGI is a standard for Python asynchronous web apps and servers to communicate\nwith each other, and positioned as an asynchronous successor to WSGI. You can\nread more at https://asgi.readthedocs.io/en/latest/\n\nThis package includes ASGI base libraries, such as:\n\n* Sync-to-async and async-to-sync function wrappers, ``asgiref.sync``\n* Server base classes, ``asgiref.server``\n* A WSGI-to-ASGI adapter, in ``asgiref.wsgi``\n\n\nFunction wrappers\n-----------------\n\nThese allow you to wrap or decorate async or sync functions to call them from\nthe other style (so you can call async functions from a synchronous thread,\nor vice-versa).\n\nIn particular:\n\n* AsyncToSync lets a synchronous subthread stop and wait while the async\n function is called on the main thread's event loop, and then control is\n returned to the thread when the async function is finished.\n\n* SyncToAsync lets async code call a synchronous function, which is run in\n a threadpool and control returned to the async coroutine when the synchronous\n function completes.\n\nThe idea is to make it easier to call synchronous APIs from async code and\nasynchronous APIs from synchronous code so it's easier to transition code from\none style to the other. In the case of Channels, we wrap the (synchronous)\nDjango view system with SyncToAsync to allow it to run inside the (asynchronous)\nASGI server.\n\nNote that exactly what threads things run in is very specific, and aimed to\nkeep maximum compatibility with old synchronous code. See\n\"Synchronous code & Threads\" below for a full explanation. By default,\n``sync_to_async`` will run all synchronous code in the program in the same\nthread for safety reasons; you can disable this for more performance with\n``@sync_to_async(thread_sensitive=False)``, but make sure that your code does\nnot rely on anything bound to threads (like database connections) when you do.\n\n\nThreadlocal replacement\n-----------------------\n\nThis is a drop-in replacement for ``threading.local`` that works with both\nthreads and asyncio Tasks. Even better, it will proxy values through from a\ntask-local context to a thread-local context when you use ``sync_to_async``\nto run things in a threadpool, and vice-versa for ``async_to_sync``.\n\nIf you instead want true thread- and task-safety, you can set\n``thread_critical`` on the Local object to ensure this instead.\n\n\nServer base classes\n-------------------\n\nIncludes a ``StatelessServer`` class which provides all the hard work of\nwriting a stateless server (as in, does not handle direct incoming sockets\nbut instead consumes external streams or sockets to work out what is happening).\n\nAn example of such a server would be a chatbot server that connects out to\na central chat server and provides a \"connection scope\" per user chatting to\nit. There's only one actual connection, but the server has to separate things\ninto several scopes for easier writing of the code.\n\nYou can see an example of this being used in `frequensgi `_.\n\n\nWSGI-to-ASGI adapter\n--------------------\n\nAllows you to wrap a WSGI application so it appears as a valid ASGI application.\n\nSimply wrap it around your WSGI application like so::\n\n asgi_application = WsgiToAsgi(wsgi_application)\n\nThe WSGI application will be run in a synchronous threadpool, and the wrapped\nASGI application will be one that accepts ``http`` class messages.\n\nPlease note that not all extended features of WSGI may be supported (such as\nfile handles for incoming POST bodies).\n\n\nDependencies\n------------\n\n``asgiref`` requires Python 3.5 or higher.\n\n\nContributing\n------------\n\nPlease refer to the\n`main Channels contributing docs `_.\n\n\nTesting\n'''''''\n\nTo run tests, make sure you have installed the ``tests`` extra with the package::\n\n cd asgiref/\n pip install -e .[tests]\n pytest\n\n\nBuilding the documentation\n''''''''''''''''''''''''''\n\nThe documentation uses `Sphinx `_::\n\n cd asgiref/docs/\n pip install sphinx\n\nTo build the docs, you can use the default tools::\n\n sphinx-build -b html . _build/html # or `make html`, if you've got make set up\n cd _build/html\n python -m http.server\n\n...or you can use ``sphinx-autobuild`` to run a server and rebuild/reload\nyour documentation changes automatically::\n\n pip install sphinx-autobuild\n sphinx-autobuild . _build/html\n\n\nImplementation Details\n----------------------\n\nSynchronous code & threads\n''''''''''''''''''''''''''\n\nThe ``asgiref.sync`` module provides two wrappers that let you go between\nasynchronous and synchronous code at will, while taking care of the rough edges\nfor you.\n\nUnfortunately, the rough edges are numerous, and the code has to work especially\nhard to keep things in the same thread as much as possible. Notably, the\nrestrictions we are working with are:\n\n* All synchronous code called through ``SyncToAsync`` and marked with\n ``thread_sensitive`` should run in the same thread as each other (and if the\n outer layer of the program is synchronous, the main thread)\n\n* If a thread already has a running async loop, ``AsyncToSync`` can't run things\n on that loop if it's blocked on synchronous code that is above you in the\n call stack.\n\nThe first compromise you get to might be that ``thread_sensitive`` code should\njust run in the same thread and not spawn in a sub-thread, fulfilling the first\nrestriction, but that immediately runs you into the second restriction.\n\nThe only real solution is to essentially have a variant of ThreadPoolExecutor\nthat executes any ``thread_sensitive`` code on the outermost synchronous\nthread - either the main thread, or a single spawned subthread.\n\nThis means you now have two basic states:\n\n* If the outermost layer of your program is synchronous, then all async code\n run through ``AsyncToSync`` will run in a per-call event loop in arbitary\n sub-threads, while all ``thread_sensitive`` code will run in the main thread.\n\n* If the outermost layer of your program is asynchronous, then all async code\n runs on the main thread's event loop, and all ``thread_sensitive`` synchronous\n code will run in a single shared sub-thread.\n\nCruicially, this means that in both cases there is a thread which is a shared\nresource that all ``thread_sensitive`` code must run on, and there is a chance\nthat this thread is currently blocked on its own ``AsyncToSync`` call. Thus,\n``AsyncToSync`` needs to act as an executor for thread code while it's blocking.\n\nThe ``CurrentThreadExecutor`` class provides this functionality; rather than\nsimply waiting on a Future, you can call its ``run_until_future`` method and\nit will run submitted code until that Future is done. This means that code\ninside the call can then run code on your thread.\n\n\nMaintenance and Security\n------------------------\n\nTo report security issues, please contact security@djangoproject.com. For GPG\nsignatures and more security process information, see\nhttps://docs.djangoproject.com/en/dev/internals/security/.\n\nTo report bugs or request new features, please open a new GitHub issue.\n\nThis repository is part of the Channels project. For the shepherd and maintenance team, please see the\n`main Channels readme `_.", @@ -1347,11 +1386,54 @@ "repository_download_url": "https://pypi.org/packages/source/a/asgiref/asgiref-3.3.0.tar.gz", "api_data_url": "https://pypi.org/pypi/asgiref/3.3.0/json", "copyright": "", - "declared_license_expression": "bsd-new AND bsd-new", + "holder": "", + "declared_license_expression": "bsd-new", + "declared_license_expression_spdx": "BSD-3-Clause", + "license_detections": [ + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_89.RULE", + "start_line": 1, + "matched_text": "license BSD", + "match_coverage": 100.0, + "matched_length": 2, + "rule_relevance": 99, + "rule_identifier": "bsd-new_89.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-261898a0-0118-87c4-7092-14e4ff134882", + "license_expression": "bsd-new" + }, + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_bsd_license.RULE", + "start_line": 1, + "matched_text": "['License :: OSI Approved :: BSD License']", + "match_coverage": 100.0, + "matched_length": 5, + "rule_relevance": 99, + "rule_identifier": "pypi_bsd_license.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-f4e99f86-00ab-18d9-a65d-a3a12767dcf5", + "license_expression": "bsd-new" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": [], "extracted_license_statement": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", "notice_text": "", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "parties": [ @@ -1363,10 +1445,10 @@ "email": "foundation@djangoproject.com" } ], - "uuid": "92213ebf-c2f0-4bd6-9d4a-38ea138d2f63", + "uuid": "3e7e870e-0afd-43a2-872c-e252c88e4033", "missing_resources": [], "modified_resources": [], - "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=93d418ad-7f03-4fad-b64a-ac383131b7a8", + "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e", "keywords": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", @@ -1383,20 +1465,20 @@ ], "source_packages": [], "codebase_resources": [ - 14, + 15, 18, - 17, + 14, 16, - 15, - 8, - 10, - 13, + 17, + 11, + 6, 9, + 8, 7, 5, - 6, - 11, - 12 + 12, + 10, + 13 ] } }, @@ -1410,10 +1492,10 @@ "version": "", "qualifiers": "", "subpath": "", - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", - "dependency_uid": "pkg:pypi/pytest?uuid=ebec93f1-d78e-49ee-a1f5-80c26a0dc32b", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "dependency_uid": "pkg:pypi/pytest?uuid=69f10055-c756-444a-a4be-760a4978ec33", "for_package": 1, - "datafile_resource": 2, + "datafile_resource": 1, "extracted_requirement": "pytest; extra == \"tests\"", "scope": "tests", "datasource_id": "pypi_wheel", @@ -1432,10 +1514,10 @@ "version": "", "qualifiers": "", "subpath": "", - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", - "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=1ea67643-91ab-49af-a05d-d9d3f64506d1", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=5c0b0cd6-4d97-40dd-9b68-0bc139d33198", "for_package": 1, - "datafile_resource": 2, + "datafile_resource": 1, "extracted_requirement": "pytest-asyncio; extra == \"tests\"", "scope": "tests", "datasource_id": "pypi_wheel", @@ -1454,8 +1536,8 @@ "version": "", "qualifiers": "", "subpath": "", - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", - "dependency_uid": "pkg:pypi/pytest?uuid=cd04cbe8-ba3e-412b-9c1d-7eb6a617f1d1", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "dependency_uid": "pkg:pypi/pytest?uuid=1cc6674a-d2f8-4988-afc5-85e6722df0fb", "for_package": 2, "datafile_resource": 18, "extracted_requirement": "pytest; extra == \"tests\"", @@ -1476,8 +1558,8 @@ "version": "", "qualifiers": "", "subpath": "", - "project": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", - "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=c8e504e9-3581-4b3d-bd9a-ac815d4bd63b", + "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=5147952d-9189-49c9-bbf2-a41247d901e2", "for_package": 2, "datafile_resource": 18, "extracted_requirement": "pytest-asyncio; extra == \"tests\"", diff --git a/scanpipe/tests/regen_test_data.py b/scanpipe/tests/regen_test_data.py index e647036737..33f2ca9db9 100644 --- a/scanpipe/tests/regen_test_data.py +++ b/scanpipe/tests/regen_test_data.py @@ -29,6 +29,7 @@ from scanpipe.models import Project from scanpipe.pipes import codebase from scanpipe.pipes import output +from scanpipe.pipes import scancode class RegenTestData(TestCase): @@ -67,7 +68,13 @@ def test_regen_asgiref_test_files(self): exitcode, _ = pipeline.execute() self.assertEqual(0, exitcode) - # Scan results + # ScanCode-toolkit scan result + scan_options = ["--copyright", "--info", "--license", "--package"] + scan_location = str(project1.codebase_path) + output_location = str(self.data_location / "asgiref-3.3.0_toolkit_scan.json") + scancode.run_scancode(scan_location, output_location, scan_options) + + # ScanCode.io results test_file_location = self.data_location / "asgiref-3.3.0_scanpipe_output.json" result_file = output.to_json(project1) result_json = json.loads(Path(result_file).read_text()) From a79cd7ef6d5f991b18302210d2302dcfead70792 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Fri, 5 May 2023 19:30:38 +0400 Subject: [PATCH 15/53] Base set of changes for the CodebaseResource migration #569 Signed-off-by: Thomas Druez --- scanpipe/api/serializers.py | 7 ++- scanpipe/filters.py | 18 +++--- ...seresource_license_expressions_and_more.py | 49 ++++++++++++++++ ...ce_detected_license_expression_and_more.py | 27 +++++++++ scanpipe/models.py | 56 +++++++++++++------ scanpipe/pipes/resolve.py | 12 +--- .../templates/scanpipe/resource_list.html | 8 +-- scanpipe/tests/pipes/test_resolve.py | 2 +- scanpipe/views.py | 15 +++-- 9 files changed, 144 insertions(+), 50 deletions(-) create mode 100644 scanpipe/migrations/0032_remove_codebaseresource_license_expressions_and_more.py create mode 100644 scanpipe/migrations/0033_alter_codebaseresource_detected_license_expression_and_more.py diff --git a/scanpipe/api/serializers.py b/scanpipe/api/serializers.py index d4c9e1176e..5dd13b1acf 100644 --- a/scanpipe/api/serializers.py +++ b/scanpipe/api/serializers.py @@ -251,8 +251,11 @@ class Meta: "is_archive", "is_media", "is_key_file", - "licenses", - "license_expressions", + "detected_license_expression", + "detected_license_expression_spdx", + "license_detections", + "license_clues", + "percentage_of_license_text", "compliance_alert", "copyrights", "holders", diff --git a/scanpipe/filters.py b/scanpipe/filters.py index 25a33b7cbd..e282cd326e 100644 --- a/scanpipe/filters.py +++ b/scanpipe/filters.py @@ -335,10 +335,11 @@ class ResourceFilterSet(FilterSetUtilsMixin, django_filters.FilterSet): label="License key", field_name="licenses", ) - license_category = JSONContainsFilter( - label="License category", - field_name="licenses", - ) + # TODO: We will have to compute that field as not available anymore + # license_category = JSONContainsFilter( + # label="License category", + # field_name="licenses", + # ) compliance_alert = django_filters.ChoiceFilter( choices=CodebaseResource.Compliance.choices + [("EMPTY", "EMPTY")] ) @@ -373,9 +374,12 @@ class Meta: "copyrights", "holders", "authors", - "licenses", - "license_category", - "license_expressions", + # "license_category", + "detected_license_expression", + "detected_license_expression_spdx", + "license_detections", + "license_clues", + "percentage_of_license_text", "emails", "urls", "in_package", diff --git a/scanpipe/migrations/0032_remove_codebaseresource_license_expressions_and_more.py b/scanpipe/migrations/0032_remove_codebaseresource_license_expressions_and_more.py new file mode 100644 index 0000000000..6ee3751efd --- /dev/null +++ b/scanpipe/migrations/0032_remove_codebaseresource_license_expressions_and_more.py @@ -0,0 +1,49 @@ +# Generated by Django 4.2 on 2023-05-05 15:08 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("scanpipe", "0031_scancode_toolkit_v32_data_updates"), + ] + + operations = [ + migrations.RemoveField( + model_name="codebaseresource", + name="license_expressions", + ), + migrations.RemoveField( + model_name="codebaseresource", + name="licenses", + ), + migrations.AddField( + model_name="codebaseresource", + name="detected_license_expression", + field=models.TextField(blank=True, help_text=""), + ), + migrations.AddField( + model_name="codebaseresource", + name="detected_license_expression_spdx", + field=models.TextField(blank=True, help_text=""), + ), + migrations.AddField( + model_name="codebaseresource", + name="license_clues", + field=models.JSONField( + blank=True, default=list, help_text="List of license clues." + ), + ), + migrations.AddField( + model_name="codebaseresource", + name="license_detections", + field=models.JSONField( + blank=True, default=list, help_text="List of license detection details." + ), + ), + migrations.AddField( + model_name="codebaseresource", + name="percentage_of_license_text", + field=models.FloatField(blank=True, help_text="", null=True), + ), + ] diff --git a/scanpipe/migrations/0033_alter_codebaseresource_detected_license_expression_and_more.py b/scanpipe/migrations/0033_alter_codebaseresource_detected_license_expression_and_more.py new file mode 100644 index 0000000000..df180c9ffc --- /dev/null +++ b/scanpipe/migrations/0033_alter_codebaseresource_detected_license_expression_and_more.py @@ -0,0 +1,27 @@ +# Generated by Django 4.2 on 2023-05-05 15:08 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("scanpipe", "0032_remove_codebaseresource_license_expressions_and_more"), + ] + + operations = [ + migrations.AlterField( + model_name="codebaseresource", + name="detected_license_expression", + field=models.TextField(blank=True, help_text=""), + ), + migrations.AlterField( + model_name="codebaseresource", + name="detected_license_expression_spdx", + field=models.TextField(blank=True, help_text=""), + ), + migrations.AlterField( + model_name="codebaseresource", + name="percentage_of_license_text", + field=models.FloatField(blank=True, help_text="", null=True), + ), + ] diff --git a/scanpipe/models.py b/scanpipe/models.py index 8d7053c96b..45cb469cd2 100644 --- a/scanpipe/models.py +++ b/scanpipe/models.py @@ -926,8 +926,8 @@ def less_common(self, field_name, limit=most_common_limit): `field_name` starting at the `limit`. """ json_fields_mapping = { - "license_key": ("licenses", "key"), - "license_category": ("licenses", "category"), + "license_key": ("license_detections", "key"), + "license_category": ("license_detections", "category"), "copyrights": ("copyrights", "copyright"), "holders": ("holders", "holder"), } @@ -1438,9 +1438,33 @@ def has_value(self, field_name): return self.filter(~Q((f"{field_name}__in", EMPTY_VALUES))) +# TODO: Add in UI, API, ... class ScanFieldsModelMixin(models.Model): """Fields returned by the ScanCode-toolkit scans.""" + detected_license_expression = models.TextField( + blank=True, + help_text=_(""), + ) + detected_license_expression_spdx = models.TextField( + blank=True, + help_text=_(""), + ) + license_detections = models.JSONField( + blank=True, + default=list, + help_text=_("List of license detection details."), + ) + license_clues = models.JSONField( + blank=True, + default=list, + help_text=_("List of license clues."), + ) + percentage_of_license_text = models.FloatField( + blank=True, + null=True, + help_text=_(""), + ) copyrights = models.JSONField( blank=True, default=list, @@ -1460,16 +1484,6 @@ class ScanFieldsModelMixin(models.Model): default=list, help_text=_("List of detected authors (and related detection details)."), ) - licenses = models.JSONField( - blank=True, - default=list, - help_text=_("List of license detection details."), - ) - license_expressions = models.JSONField( - blank=True, - default=list, - help_text=_("List of detected license expressions."), - ) emails = models.JSONField( blank=True, default=list, @@ -1527,7 +1541,7 @@ class CodebaseResource( A project Codebase Resources are records of its code files and directories. Each record is identified by its path under the project workspace. - These model fields should be kept in line with `scancode.resource.Resource`. + These model fields should be kept in line with `commoncode.resource.Resource`. """ path = models.CharField( @@ -1688,7 +1702,8 @@ def save(self, codebase=None, *args, **kwargs): """ if scanpipe_app.policies_enabled: loaded_licenses = getattr(self, "loaded_licenses", []) - if self.licenses != loaded_licenses: + # TODO: Use detected_license_expression instead + if self.license_detections != loaded_licenses: self.inject_licenses_policy(scanpipe_app.license_policies_index) self.compliance_alert = self.compute_compliance_alert() @@ -1696,7 +1711,8 @@ def save(self, codebase=None, *args, **kwargs): def inject_licenses_policy(self, policies_index): """Inject license policies from the `policies_index` into the licenses field.""" - for license_data in self.licenses: + for license_data in self.license_detections: + # TODO: key is not available anymore, license_expression only key = license_data.get("key") license_data["policy"] = policies_index.get(key, None) @@ -1729,7 +1745,8 @@ def is_symlink(self): def compute_compliance_alert(self): """Compute and return the compliance_alert value from the licenses policies.""" - if not self.licenses: + # TODO: Base this on self.detected_license_expression + if not self.license_detections: return "" ok = self.Compliance.OK @@ -1738,7 +1755,7 @@ def compute_compliance_alert(self): missing = self.Compliance.MISSING alerts = [] - for license_data in self.licenses: + for license_data in self.license_detections: policy = license_data.get("policy") if policy: alerts.append(policy.get("compliance_alert") or ok) @@ -1753,6 +1770,7 @@ def compute_compliance_alert(self): return missing return ok + # TODO: Remove this @property def unique_license_expressions(self): """Return the sorted set of unique license_expressions.""" @@ -1937,7 +1955,9 @@ def as_spdx(self): """Return this CodebaseResource as an SPDX Package entry.""" from scanpipe.pipes import spdx - spdx_license_keys = [license["spdx_license_key"] for license in self.licenses] + spdx_license_keys = [ + license["spdx_license_key"] for license in self.license_detections + ] copyrights = [copyright["copyright"] for copyright in self.copyrights] holders = [holder["holder"] for holder in self.holders] authors = [author["author"] for author in self.authors] diff --git a/scanpipe/pipes/resolve.py b/scanpipe/pipes/resolve.py index 2ab7c7f4aa..7a97ecff43 100644 --- a/scanpipe/pipes/resolve.py +++ b/scanpipe/pipes/resolve.py @@ -29,9 +29,6 @@ from attributecode.model import About from packagedcode import APPLICATION_PACKAGE_DATAFILE_HANDLERS from packagedcode.licensing import get_license_detections_and_expression -from packagedcode.licensing import ( - get_license_detections_for_extracted_license_statement, -) from packageurl import PackageURL from python_inspector.resolve_cli import resolver_api from scancode.api import get_package_data @@ -108,14 +105,7 @@ def convert_spdx_expression(license_expression_spdx): Return an ScanCode license expression from a SPDX `license_expression_spdx` string. """ - license_detections = get_license_detections_for_extracted_license_statement( - license_expression_spdx, - try_as_expression=True, - ) - if license_detections: - return license_detections[0].license_expression - - return "" + return get_license_detections_and_expression(license_expression_spdx)[1] def spdx_package_to_discovered_package_data(spdx_package): diff --git a/scanpipe/templates/scanpipe/resource_list.html b/scanpipe/templates/scanpipe/resource_list.html index d676599a61..4ceff78fcd 100644 --- a/scanpipe/templates/scanpipe/resource_list.html +++ b/scanpipe/templates/scanpipe/resource_list.html @@ -55,13 +55,7 @@ {{ resource.tag }} - + {{ resource.detected_license_expression }} {% if include_compliance_alert %} diff --git a/scanpipe/tests/pipes/test_resolve.py b/scanpipe/tests/pipes/test_resolve.py index 669677bdc6..79fa6ec5d2 100644 --- a/scanpipe/tests/pipes/test_resolve.py +++ b/scanpipe/tests/pipes/test_resolve.py @@ -78,7 +78,7 @@ def test_scanpipe_pipes_resolve_set_license_expression(self): def test_scanpipe_pipes_resolve_convert_spdx_expression(self): spdx = "MIT OR GPL-2.0-only WITH LicenseRef-scancode-generic-exception" - scancode_expression = "mit OR gpl-2.0 with generic-exception" + scancode_expression = "mit OR gpl-2.0 WITH generic-exception" self.assertEqual(scancode_expression, resolve.convert_spdx_expression(spdx)) def test_scanpipe_pipes_resolve_resolve_packages(self): diff --git a/scanpipe/views.py b/scanpipe/views.py index 95ddecfe52..731ee14890 100644 --- a/scanpipe/views.py +++ b/scanpipe/views.py @@ -619,7 +619,7 @@ def get_context_data(self, **kwargs): "mime_type", "holders", "copyrights", - "license_expressions", + "detected_license_expression", ) packages = project.discoveredpackages.all().only( @@ -861,7 +861,7 @@ class CodebaseResourceListView( "programming_language", "mime_type", "tag", - "license_expressions", + "detected_license_expression", { "field_name": "compliance_alert", "condition": scanpipe_app.policies_enabled, @@ -1051,7 +1051,14 @@ class CodebaseResourceDetailsView( }, "detection": { "fields": [ - {"field_name": "license_expressions", "render_func": render_as_yaml}, + "detected_license_expression", + { + "field_name": "detected_license_expression_spdx", + "label": "Detected license expression (SPDX)", + }, + {"field_name": "license_detections", "render_func": render_as_yaml}, + {"field_name": "license_clues", "render_func": render_as_yaml}, + "percentage_of_license_text", {"field_name": "copyrights", "render_func": render_as_yaml}, {"field_name": "holders", "render_func": render_as_yaml}, {"field_name": "authors", "render_func": render_as_yaml}, @@ -1135,7 +1142,7 @@ def get_context_data(self, **kwargs): messages.warning(self.request, message) context["detected_values"] = { - "licenses": self.get_annotations("licenses"), + "licenses": self.get_annotations("license_detections"), "copyrights": self.get_annotations("copyrights"), "holders": self.get_annotations("holders"), "authors": self.get_annotations("authors"), From de7f6a144ff620373f01cfd8e2fc16c6361c7f54 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Mon, 8 May 2023 08:01:13 +0400 Subject: [PATCH 16/53] Consolidate migrations #569 Signed-off-by: Thomas Druez --- ...0030_scancode_toolkit_v32_model_updates.py | 34 +++++++++++++ .../0031_scancode_toolkit_v32_data_updates.py | 9 ++-- ...seresource_license_expressions_and_more.py | 49 ------------------- ...ce_detected_license_expression_and_more.py | 27 ---------- scanpipe/models.py | 7 ++- 5 files changed, 43 insertions(+), 83 deletions(-) delete mode 100644 scanpipe/migrations/0032_remove_codebaseresource_license_expressions_and_more.py delete mode 100644 scanpipe/migrations/0033_alter_codebaseresource_detected_license_expression_and_more.py diff --git a/scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py b/scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py index deda765faf..8982d21743 100644 --- a/scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py +++ b/scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py @@ -111,4 +111,38 @@ class Migration(migrations.Migration): name="scanpipe_di_other_l_1f1616_idx", ), ), + + # CodebaseResource + migrations.RenameField( + model_name="codebaseresource", + old_name="license_expressions", + new_name="detected_license_expression", + ), + migrations.AlterField( + model_name="codebaseresource", + name="detected_license_expression", + field=models.TextField(blank=True, help_text="TODO"), + ), + migrations.RenameField( + model_name="codebaseresource", + old_name="licenses", + new_name="license_detections", + ), + migrations.AddField( + model_name="codebaseresource", + name="detected_license_expression_spdx", + field=models.TextField(blank=True, help_text="TODO"), + ), + migrations.AddField( + model_name="codebaseresource", + name="license_clues", + field=models.JSONField( + blank=True, default=list, help_text="List of license clues." + ), + ), + migrations.AddField( + model_name="codebaseresource", + name="percentage_of_license_text", + field=models.FloatField(blank=True, help_text="TODO", null=True), + ), ] diff --git a/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py b/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py index 2cf2c0b06f..08f259009d 100644 --- a/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py +++ b/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py @@ -4,9 +4,9 @@ from django.db.models import Q -def compute_declared_license_expression_spdx(apps, schema_editor): +def compute_package_declared_license_expression_spdx(apps, schema_editor): """ - Compute `declared_license_expression_spdx`, when missing, + Compute DiscoveredPackage `declared_license_expression_spdx`, when missing, from `declared_license_expression`, when available. """ from licensedcode.cache import build_spdx_license_expression @@ -28,5 +28,8 @@ class Migration(migrations.Migration): ] operations = [ - migrations.RunPython(compute_declared_license_expression_spdx), + migrations.RunPython( + compute_package_declared_license_expression_spdx, + reverse_code=migrations.RunPython.noop, + ), ] diff --git a/scanpipe/migrations/0032_remove_codebaseresource_license_expressions_and_more.py b/scanpipe/migrations/0032_remove_codebaseresource_license_expressions_and_more.py deleted file mode 100644 index 6ee3751efd..0000000000 --- a/scanpipe/migrations/0032_remove_codebaseresource_license_expressions_and_more.py +++ /dev/null @@ -1,49 +0,0 @@ -# Generated by Django 4.2 on 2023-05-05 15:08 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ("scanpipe", "0031_scancode_toolkit_v32_data_updates"), - ] - - operations = [ - migrations.RemoveField( - model_name="codebaseresource", - name="license_expressions", - ), - migrations.RemoveField( - model_name="codebaseresource", - name="licenses", - ), - migrations.AddField( - model_name="codebaseresource", - name="detected_license_expression", - field=models.TextField(blank=True, help_text=""), - ), - migrations.AddField( - model_name="codebaseresource", - name="detected_license_expression_spdx", - field=models.TextField(blank=True, help_text=""), - ), - migrations.AddField( - model_name="codebaseresource", - name="license_clues", - field=models.JSONField( - blank=True, default=list, help_text="List of license clues." - ), - ), - migrations.AddField( - model_name="codebaseresource", - name="license_detections", - field=models.JSONField( - blank=True, default=list, help_text="List of license detection details." - ), - ), - migrations.AddField( - model_name="codebaseresource", - name="percentage_of_license_text", - field=models.FloatField(blank=True, help_text="", null=True), - ), - ] diff --git a/scanpipe/migrations/0033_alter_codebaseresource_detected_license_expression_and_more.py b/scanpipe/migrations/0033_alter_codebaseresource_detected_license_expression_and_more.py deleted file mode 100644 index df180c9ffc..0000000000 --- a/scanpipe/migrations/0033_alter_codebaseresource_detected_license_expression_and_more.py +++ /dev/null @@ -1,27 +0,0 @@ -# Generated by Django 4.2 on 2023-05-05 15:08 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ("scanpipe", "0032_remove_codebaseresource_license_expressions_and_more"), - ] - - operations = [ - migrations.AlterField( - model_name="codebaseresource", - name="detected_license_expression", - field=models.TextField(blank=True, help_text=""), - ), - migrations.AlterField( - model_name="codebaseresource", - name="detected_license_expression_spdx", - field=models.TextField(blank=True, help_text=""), - ), - migrations.AlterField( - model_name="codebaseresource", - name="percentage_of_license_text", - field=models.FloatField(blank=True, help_text="", null=True), - ), - ] diff --git a/scanpipe/models.py b/scanpipe/models.py index 45cb469cd2..86c0178386 100644 --- a/scanpipe/models.py +++ b/scanpipe/models.py @@ -1438,17 +1438,16 @@ def has_value(self, field_name): return self.filter(~Q((f"{field_name}__in", EMPTY_VALUES))) -# TODO: Add in UI, API, ... class ScanFieldsModelMixin(models.Model): """Fields returned by the ScanCode-toolkit scans.""" detected_license_expression = models.TextField( blank=True, - help_text=_(""), + help_text=_("TODO"), ) detected_license_expression_spdx = models.TextField( blank=True, - help_text=_(""), + help_text=_("TODO"), ) license_detections = models.JSONField( blank=True, @@ -1463,7 +1462,7 @@ class ScanFieldsModelMixin(models.Model): percentage_of_license_text = models.FloatField( blank=True, null=True, - help_text=_(""), + help_text=_("TODO"), ) copyrights = models.JSONField( blank=True, From 09ebed89428ab088a6cd47f02a962a6a5d76d578 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Mon, 8 May 2023 08:39:37 +0400 Subject: [PATCH 17/53] Update code to resource model changes and fix parts of tests #569 Signed-off-by: Thomas Druez --- scanpipe/filters.py | 10 +- scanpipe/models.py | 20 +- scanpipe/pipes/output.py | 6 +- scanpipe/pipes/rootfs.py | 4 +- scanpipe/pipes/scancode.py | 2 +- .../templates/scanpipe/resource_list.html | 2 +- scanpipe/tests/__init__.py | 4 +- .../tests/data/asgiref-3.3.0_fixtures.json | 250 ++++++++++++------ .../data/asgiref-3.3.0_scanpipe_output.json | 232 +++++++++++----- .../data/asgiref-3.3.0_toolkit_scan.json | 60 ++--- .../asgiref-3.3.0_walk_test_fixtures.json | 250 ++++++++++++------ .../minitag.tar-expected-scan.json | 32 +-- scanpipe/tests/pipes/test_output.py | 7 - scanpipe/tests/pipes/test_rootfs.py | 2 +- scanpipe/tests/pipes/test_scancode.py | 24 +- scanpipe/tests/test_models.py | 79 +++--- scanpipe/tests/test_views.py | 4 +- scanpipe/views.py | 2 +- 18 files changed, 620 insertions(+), 370 deletions(-) diff --git a/scanpipe/filters.py b/scanpipe/filters.py index e282cd326e..b649f4d9f1 100644 --- a/scanpipe/filters.py +++ b/scanpipe/filters.py @@ -331,11 +331,11 @@ class ResourceFilterSet(FilterSetUtilsMixin, django_filters.FilterSet): "related_from__from_resource__path", ], ) - license_key = JSONContainsFilter( - label="License key", - field_name="licenses", - ) - # TODO: We will have to compute that field as not available anymore + # TODO: We will have to compute those fields as not available anymore + # license_key = JSONContainsFilter( + # label="License key", + # field_name="licenses", + # ) # license_category = JSONContainsFilter( # label="License category", # field_name="licenses", diff --git a/scanpipe/models.py b/scanpipe/models.py index 86c0178386..4c0f904c7e 100644 --- a/scanpipe/models.py +++ b/scanpipe/models.py @@ -1393,10 +1393,10 @@ def without_symlinks(self): return self.filter(~Q(type=self.model.Type.SYMLINK)) def has_licenses(self): - return self.filter(~Q(licenses=[])) + return self.filter(~Q(license_detections=[])) def has_no_licenses(self): - return self.filter(licenses=[]) + return self.filter(license_detections=[]) def has_package_data(self): return self.filter(~Q(package_data=[])) @@ -1409,7 +1409,7 @@ def licenses_categories(self, categories): ) def unknown_license(self): - return self.json_field_contains("license_expressions", "unknown") + return self.filter(detected_license_expression__icontains="unknown") def from_codebase(self): """Resources in from/ directory""" @@ -1685,8 +1685,8 @@ def from_db(cls, db, field_names, values): """ new = super().from_db(db, field_names, values) - if "licenses" in field_names: - new._loaded_licenses = values[field_names.index("licenses")] + if "license_detections" in field_names: + new._loaded_licenses = values[field_names.index("license_detections")] return new @@ -1699,9 +1699,9 @@ def save(self, codebase=None, *args, **kwargs): `codebase` is not used in this context but required for compatibility with the commoncode.resource.Codebase class API. """ + # TODO: Review and test this if scanpipe_app.policies_enabled: - loaded_licenses = getattr(self, "loaded_licenses", []) - # TODO: Use detected_license_expression instead + loaded_licenses = getattr(self, "_loaded_licenses", []) if self.license_detections != loaded_licenses: self.inject_licenses_policy(scanpipe_app.license_policies_index) self.compliance_alert = self.compute_compliance_alert() @@ -1769,12 +1769,6 @@ def compute_compliance_alert(self): return missing return ok - # TODO: Remove this - @property - def unique_license_expressions(self): - """Return the sorted set of unique license_expressions.""" - return sorted(set(self.license_expressions)) - def parent_path(self): """Return the parent path for this CodebaseResource or None.""" return parent_directory(self.path, with_trail=False) diff --git a/scanpipe/pipes/output.py b/scanpipe/pipes/output.py index ec4b41bda9..9b99794613 100644 --- a/scanpipe/pipes/output.py +++ b/scanpipe/pipes/output.py @@ -36,7 +36,6 @@ from license_expression import ordered_unique from licensedcode.cache import build_spdx_license_expression from licensedcode.cache import get_licenses_by_spdx_key -from packagedcode.utils import combine_expressions from scancode_config import __version__ as scancode_toolkit_version from scancodeio import SCAN_NOTICE @@ -397,9 +396,6 @@ def _adapt_value_for_xlsx(fieldname, value, maximum_length=32767, _adapt=True): max_description_lines = 5 value = "\n".join(value.splitlines(False)[:max_description_lines]) - if fieldname == "license_expressions": - value = combine_expressions(value) - # we only get this key in each dict of a list for some fields mapping_key = mappings_key_by_fieldname.get(fieldname) if mapping_key: @@ -444,11 +440,11 @@ def to_xlsx(project): """ output_file = project.get_output_file_path("results", "xlsx") exclude_fields = [ - "licenses", "extra_data", "extracted_license_statement", "license_detections", "other_license_detections", + "license_clues", ] if not scanpipe_app.policies_enabled: diff --git a/scanpipe/pipes/rootfs.py b/scanpipe/pipes/rootfs.py index 7c25dc3546..7020a77d84 100644 --- a/scanpipe/pipes/rootfs.py +++ b/scanpipe/pipes/rootfs.py @@ -370,8 +370,8 @@ def tag_data_files_with_no_clues(project): copyrights=[], holders=[], authors=[], - licenses=[], - license_expressions=[], + license_detections=[], + detected_license_expression="", emails=[], urls=[], ) diff --git a/scanpipe/pipes/scancode.py b/scanpipe/pipes/scancode.py index c316d6c9c5..31c1d0ac53 100644 --- a/scanpipe/pipes/scancode.py +++ b/scanpipe/pipes/scancode.py @@ -546,7 +546,7 @@ def _get_license_matches_grouped(project): for resource in project.codebaseresources.has_licenses(): file_cache = [] - for license in resource.licenses: + for license in resource.license_detections: matched_rule = license.get("matched_rule", {}) license_expression = matched_rule.get("license_expression") matched_text = license.get("matched_text") diff --git a/scanpipe/templates/scanpipe/resource_list.html b/scanpipe/templates/scanpipe/resource_list.html index 4ceff78fcd..52813676e2 100644 --- a/scanpipe/templates/scanpipe/resource_list.html +++ b/scanpipe/templates/scanpipe/resource_list.html @@ -55,7 +55,7 @@ {{ resource.tag }} - {{ resource.detected_license_expression }} + {{ resource.detected_license_expression }} {% if include_compliance_alert %} diff --git a/scanpipe/tests/__init__.py b/scanpipe/tests/__init__.py index e49b846b6d..e0780ae77d 100644 --- a/scanpipe/tests/__init__.py +++ b/scanpipe/tests/__init__.py @@ -74,8 +74,8 @@ def make_resource_file(project, path, **extra): "is_archive": False, "is_media": False, "is_key_file": False, - "licenses": [], - "license_expressions": [], + "license_detections": [], + "detected_license_expression": "", "compliance_alert": "", "copyrights": [], "holders": [], diff --git a/scanpipe/tests/data/asgiref-3.3.0_fixtures.json b/scanpipe/tests/data/asgiref-3.3.0_fixtures.json index 88fd7c7ab3..86569a1d5e 100644 --- a/scanpipe/tests/data/asgiref-3.3.0_fixtures.json +++ b/scanpipe/tests/data/asgiref-3.3.0_fixtures.json @@ -1,12 +1,12 @@ [ { "model": "scanpipe.project", - "pk": "822e1834-92cc-4000-b43f-744e46b49e19", + "pk": "cbd609b2-525a-4052-9860-201b879b20d9", "fields": { "extra_data": {}, - "created_date": "2023-05-05T14:14:02.241Z", + "created_date": "2023-05-08T04:34:00.013Z", "name": "asgiref", - "work_directory": "/private/var/folders/ph/tpf7js_n0r554mngmvykl7lm0000gn/T/tmpqwsr_onx/projects/asgiref-822e1834", + "work_directory": "/private/var/folders/ph/tpf7js_n0r554mngmvykl7lm0000gn/T/tmph8hp21h7/projects/asgiref-cbd609b2", "input_sources": { "asgiref-3.3.0-py3-none-any.whl": "-" }, @@ -15,20 +15,20 @@ }, { "model": "scanpipe.run", - "pk": "ce2b1763-d686-45ef-8cb7-af928e508a3b", + "pk": "69d0d86d-6462-47db-b933-6638642bbbfc", "fields": { "task_id": null, "task_start_date": null, "task_end_date": null, "task_exitcode": null, "task_output": "", - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", "pipeline_name": "scan_codebase", - "created_date": "2023-05-05T14:14:02.244Z", + "created_date": "2023-05-08T04:34:00.018Z", "scancodeio_version": "", "description": "Scan a codebase with ScanCode-toolkit.", "current_step": "", - "log": "2023-05-05 16:14:02.24 Pipeline [scan_codebase] starting\n2023-05-05 16:14:02.24 Step [copy_inputs_to_codebase_directory] starting\n2023-05-05 16:14:02.24 Step [copy_inputs_to_codebase_directory] completed in 0.00 seconds\n2023-05-05 16:14:02.24 Step [extract_archives] starting\n2023-05-05 16:14:02.27 Step [extract_archives] completed in 0.02 seconds\n2023-05-05 16:14:02.27 Step [collect_and_create_codebase_resources] starting\n2023-05-05 16:14:02.37 Step [collect_and_create_codebase_resources] completed in 0.10 seconds\n2023-05-05 16:14:02.37 Step [tag_empty_files] starting\n2023-05-05 16:14:02.37 Step [tag_empty_files] completed in 0.00 seconds\n2023-05-05 16:14:02.37 Step [scan_for_application_packages] starting\n2023-05-05 16:14:03.99 Step [scan_for_application_packages] completed in 1.61 seconds\n2023-05-05 16:14:03.99 Step [scan_for_files] starting\n2023-05-05 16:14:05.66 Step [scan_for_files] completed in 1.67 seconds\n2023-05-05 16:14:05.66 Pipeline completed\n" + "log": "2023-05-08 06:34:00.01 Pipeline [scan_codebase] starting\n2023-05-08 06:34:00.02 Step [copy_inputs_to_codebase_directory] starting\n2023-05-08 06:34:00.02 Step [copy_inputs_to_codebase_directory] completed in 0.00 seconds\n2023-05-08 06:34:00.02 Step [extract_archives] starting\n2023-05-08 06:34:00.04 Step [extract_archives] completed in 0.02 seconds\n2023-05-08 06:34:00.04 Step [collect_and_create_codebase_resources] starting\n2023-05-08 06:34:00.16 Step [collect_and_create_codebase_resources] completed in 0.11 seconds\n2023-05-08 06:34:00.16 Step [tag_empty_files] starting\n2023-05-08 06:34:00.16 Step [tag_empty_files] completed in 0.00 seconds\n2023-05-08 06:34:00.16 Step [scan_for_application_packages] starting\n2023-05-08 06:34:01.88 Step [scan_for_application_packages] completed in 1.72 seconds\n2023-05-08 06:34:01.88 Step [scan_for_files] starting\n2023-05-08 06:34:03.54 Step [scan_for_files] completed in 1.66 seconds\n2023-05-08 06:34:03.54 Pipeline completed\n" } }, { @@ -40,12 +40,15 @@ "sha256": "a5098bc870b80e7b872bff60bb363c7f2c2c89078759f6c47b53ff8c525a152e", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0-py3-none-any.whl", @@ -332,12 +335,15 @@ "sha256": "", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0-py3-none-any.whl-extract", @@ -369,12 +375,15 @@ "sha256": "", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref", @@ -406,12 +415,15 @@ "sha256": "", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info", @@ -443,12 +455,15 @@ "sha256": "fa4651a3b79201a4dc44a4096cd49ec8f427e912ea0ee05c666357b413a8afe7", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/sync.py", @@ -480,12 +495,15 @@ "sha256": "3151f66c476208c3154cb6c4fb557a2a253bab82f0ab33fb3c8b9f7976be9e33", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/compatibility.py", @@ -517,12 +535,15 @@ "sha256": "885267fee0fea687875a02ceb929ca095312d47aaa57e20e4ce382f397caaf4d", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/server.py", @@ -554,12 +575,15 @@ "sha256": "ee0fcf4a8e6fa9df8a4643bb48e82892d496afce44b6c8b8aea2721755545e1c", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/local.py", @@ -591,12 +615,15 @@ "sha256": "ddd445b778c097fc75c2bf69ad964cbadd3bd6999d1dd2306d39d401855e8e3e", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/current_thread_executor.py", @@ -628,12 +655,36 @@ "sha256": "126c3e3a8a75a517d2739612304607804cf5f34da63fa25d03a6f11f7edb6f2f", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "apache-2.0", + "detected_license_expression_spdx": "Apache-2.0", + "license_detections": [ + { + "policy": null, + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 2, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/apache-2.0_174.RULE", + "start_line": 2, + "matched_text": "# under the Apache 2.0 license. You may see the original project at", + "match_coverage": 100.0, + "matched_length": 6, + "rule_relevance": 100, + "rule_identifier": "apache-2.0_174.RULE", + "license_expression": "apache-2.0" + } + ], + "identifier": "apache_2_0-5a90b5fa-5d10-5a98-d2a7-ef089c46a900", + "license_expression": "apache-2.0" + } + ], + "license_clues": [], + "percentage_of_license_text": 1.22, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [ { @@ -668,7 +719,7 @@ "is_archive": false, "is_key_file": false, "is_media": false, - "compliance_alert": "", + "compliance_alert": "missing", "package_data": [] } }, @@ -681,12 +732,15 @@ "sha256": "30f49b9094bff904a42caeec32515715fe625a56dc48bd7c0e3d9988c0ad4bd7", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/__init__.py", @@ -718,12 +772,15 @@ "sha256": "ddbc8d455eceb68fc583c67e7c4ad0277c867fb39095c51ec5b37f70342e8334", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/testing.py", @@ -755,12 +812,15 @@ "sha256": "f8bd1ea3fb8afddabb10f8efd66796d41446cad51168ef4d3c44b19c973d0ad0", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/wsgi.py", @@ -792,12 +852,15 @@ "sha256": "2c1983592aa38f0bfb0afacc73ddc5b46ce10e8e89ceaa9fed1e5fc6361b608d", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/RECORD", @@ -829,7 +892,33 @@ "sha256": "b846415d1b514e9c1dff14a22deb906d794bc546ca6129f950a18cd091e2a669", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "bsd-new", + "detected_license_expression_spdx": "BSD-3-Clause", + "license_detections": [ + { + "policy": null, + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 27, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_683.RULE", + "start_line": 4, + "matched_text": "Redistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n 3. Neither the name of Django nor the names of its contributors may be used\n to endorse or promote products derived from this software without\n specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.", + "match_coverage": 100.0, + "matched_length": 214, + "rule_relevance": 100, + "rule_identifier": "bsd-new_683.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-72cae3bc-4423-3a9e-be84-ee8bb5120a4d", + "license_expression": "bsd-new" + } + ], + "license_clues": [], + "percentage_of_license_text": 95.11, "copyrights": [ { "end_line": 1, @@ -845,8 +934,6 @@ } ], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/LICENSE", @@ -865,7 +952,7 @@ "is_archive": false, "is_key_file": false, "is_media": false, - "compliance_alert": "", + "compliance_alert": "missing", "package_data": [] } }, @@ -878,12 +965,15 @@ "sha256": "11546323af45e6a5639bf620a9c4d73e74c0bf705f494af4595007b923f75e8a", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/WHEEL", @@ -915,12 +1005,15 @@ "sha256": "6e89108c2cf0c0446174188f76f60465ae1c1f14f83427807df40d52a27cb2c8", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/top_level.txt", @@ -952,12 +1045,15 @@ "sha256": "70f98f4eb9f6068b192b5464fcdf69e29a8ff09962bfce84bbb052baeee44f33", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/METADATA", @@ -1254,7 +1350,7 @@ "Documentation": "https://asgi.readthedocs.io/", "Further Documentation": "https://docs.djangoproject.com/en/stable/topics/async/#async-adapter-functions" }, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", "filename": "", "primary_language": "Python", "description": "ASGI specs, helper code, and adapters\nasgiref\n=======\n\n.. image:: https://api.travis-ci.org/django/asgiref.svg\n :target: https://travis-ci.org/django/asgiref\n\n.. image:: https://img.shields.io/pypi/v/asgiref.svg\n :target: https://pypi.python.org/pypi/asgiref\n\nASGI is a standard for Python asynchronous web apps and servers to communicate\nwith each other, and positioned as an asynchronous successor to WSGI. You can\nread more at https://asgi.readthedocs.io/en/latest/\n\nThis package includes ASGI base libraries, such as:\n\n* Sync-to-async and async-to-sync function wrappers, ``asgiref.sync``\n* Server base classes, ``asgiref.server``\n* A WSGI-to-ASGI adapter, in ``asgiref.wsgi``\n\n\nFunction wrappers\n-----------------\n\nThese allow you to wrap or decorate async or sync functions to call them from\nthe other style (so you can call async functions from a synchronous thread,\nor vice-versa).\n\nIn particular:\n\n* AsyncToSync lets a synchronous subthread stop and wait while the async\n function is called on the main thread's event loop, and then control is\n returned to the thread when the async function is finished.\n\n* SyncToAsync lets async code call a synchronous function, which is run in\n a threadpool and control returned to the async coroutine when the synchronous\n function completes.\n\nThe idea is to make it easier to call synchronous APIs from async code and\nasynchronous APIs from synchronous code so it's easier to transition code from\none style to the other. In the case of Channels, we wrap the (synchronous)\nDjango view system with SyncToAsync to allow it to run inside the (asynchronous)\nASGI server.\n\nNote that exactly what threads things run in is very specific, and aimed to\nkeep maximum compatibility with old synchronous code. See\n\"Synchronous code & Threads\" below for a full explanation. By default,\n``sync_to_async`` will run all synchronous code in the program in the same\nthread for safety reasons; you can disable this for more performance with\n``@sync_to_async(thread_sensitive=False)``, but make sure that your code does\nnot rely on anything bound to threads (like database connections) when you do.\n\n\nThreadlocal replacement\n-----------------------\n\nThis is a drop-in replacement for ``threading.local`` that works with both\nthreads and asyncio Tasks. Even better, it will proxy values through from a\ntask-local context to a thread-local context when you use ``sync_to_async``\nto run things in a threadpool, and vice-versa for ``async_to_sync``.\n\nIf you instead want true thread- and task-safety, you can set\n``thread_critical`` on the Local object to ensure this instead.\n\n\nServer base classes\n-------------------\n\nIncludes a ``StatelessServer`` class which provides all the hard work of\nwriting a stateless server (as in, does not handle direct incoming sockets\nbut instead consumes external streams or sockets to work out what is happening).\n\nAn example of such a server would be a chatbot server that connects out to\na central chat server and provides a \"connection scope\" per user chatting to\nit. There's only one actual connection, but the server has to separate things\ninto several scopes for easier writing of the code.\n\nYou can see an example of this being used in `frequensgi `_.\n\n\nWSGI-to-ASGI adapter\n--------------------\n\nAllows you to wrap a WSGI application so it appears as a valid ASGI application.\n\nSimply wrap it around your WSGI application like so::\n\n asgi_application = WsgiToAsgi(wsgi_application)\n\nThe WSGI application will be run in a synchronous threadpool, and the wrapped\nASGI application will be one that accepts ``http`` class messages.\n\nPlease note that not all extended features of WSGI may be supported (such as\nfile handles for incoming POST bodies).\n\n\nDependencies\n------------\n\n``asgiref`` requires Python 3.5 or higher.\n\n\nContributing\n------------\n\nPlease refer to the\n`main Channels contributing docs `_.\n\n\nTesting\n'''''''\n\nTo run tests, make sure you have installed the ``tests`` extra with the package::\n\n cd asgiref/\n pip install -e .[tests]\n pytest\n\n\nBuilding the documentation\n''''''''''''''''''''''''''\n\nThe documentation uses `Sphinx `_::\n\n cd asgiref/docs/\n pip install sphinx\n\nTo build the docs, you can use the default tools::\n\n sphinx-build -b html . _build/html # or `make html`, if you've got make set up\n cd _build/html\n python -m http.server\n\n...or you can use ``sphinx-autobuild`` to run a server and rebuild/reload\nyour documentation changes automatically::\n\n pip install sphinx-autobuild\n sphinx-autobuild . _build/html\n\n\nImplementation Details\n----------------------\n\nSynchronous code & threads\n''''''''''''''''''''''''''\n\nThe ``asgiref.sync`` module provides two wrappers that let you go between\nasynchronous and synchronous code at will, while taking care of the rough edges\nfor you.\n\nUnfortunately, the rough edges are numerous, and the code has to work especially\nhard to keep things in the same thread as much as possible. Notably, the\nrestrictions we are working with are:\n\n* All synchronous code called through ``SyncToAsync`` and marked with\n ``thread_sensitive`` should run in the same thread as each other (and if the\n outer layer of the program is synchronous, the main thread)\n\n* If a thread already has a running async loop, ``AsyncToSync`` can't run things\n on that loop if it's blocked on synchronous code that is above you in the\n call stack.\n\nThe first compromise you get to might be that ``thread_sensitive`` code should\njust run in the same thread and not spawn in a sub-thread, fulfilling the first\nrestriction, but that immediately runs you into the second restriction.\n\nThe only real solution is to essentially have a variant of ThreadPoolExecutor\nthat executes any ``thread_sensitive`` code on the outermost synchronous\nthread - either the main thread, or a single spawned subthread.\n\nThis means you now have two basic states:\n\n* If the outermost layer of your program is synchronous, then all async code\n run through ``AsyncToSync`` will run in a per-call event loop in arbitary\n sub-threads, while all ``thread_sensitive`` code will run in the main thread.\n\n* If the outermost layer of your program is asynchronous, then all async code\n runs on the main thread's event loop, and all ``thread_sensitive`` synchronous\n code will run in a single shared sub-thread.\n\nCruicially, this means that in both cases there is a thread which is a shared\nresource that all ``thread_sensitive`` code must run on, and there is a chance\nthat this thread is currently blocked on its own ``AsyncToSync`` call. Thus,\n``AsyncToSync`` needs to act as an executor for thread code while it's blocking.\n\nThe ``CurrentThreadExecutor`` class provides this functionality; rather than\nsimply waiting on a Future, you can call its ``run_until_future`` method and\nit will run submitted code until that Future is done. This means that code\ninside the call can then run code on your thread.\n\n\nMaintenance and Security\n------------------------\n\nTo report security issues, please contact security@djangoproject.com. For GPG\nsignatures and more security process information, see\nhttps://docs.djangoproject.com/en/dev/internals/security/.\n\nTo report bugs or request new features, please open a new GitHub issue.\n\nThis repository is part of the Channels project. For the shepherd and maintenance team, please see the\n`main Channels readme `_.", @@ -1328,10 +1424,10 @@ "email": "foundation@djangoproject.com" } ], - "uuid": "36e61edd-53f1-429c-9034-31bb05c5482f", + "uuid": "8fa7433f-c05e-45b3-960d-60a5423327f7", "missing_resources": [], "modified_resources": [], - "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=09aa0328-c4d5-4413-8837-59f88d05be1c", + "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=e60b7109-14eb-47af-9568-09b4b630dca5", "keywords": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", @@ -1371,7 +1467,7 @@ "Documentation": "https://asgi.readthedocs.io/", "Further Documentation": "https://docs.djangoproject.com/en/stable/topics/async/#async-adapter-functions" }, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", "filename": "", "primary_language": "Python", "description": "ASGI specs, helper code, and adapters\nasgiref\n=======\n\n.. image:: https://api.travis-ci.org/django/asgiref.svg\n :target: https://travis-ci.org/django/asgiref\n\n.. image:: https://img.shields.io/pypi/v/asgiref.svg\n :target: https://pypi.python.org/pypi/asgiref\n\nASGI is a standard for Python asynchronous web apps and servers to communicate\nwith each other, and positioned as an asynchronous successor to WSGI. You can\nread more at https://asgi.readthedocs.io/en/latest/\n\nThis package includes ASGI base libraries, such as:\n\n* Sync-to-async and async-to-sync function wrappers, ``asgiref.sync``\n* Server base classes, ``asgiref.server``\n* A WSGI-to-ASGI adapter, in ``asgiref.wsgi``\n\n\nFunction wrappers\n-----------------\n\nThese allow you to wrap or decorate async or sync functions to call them from\nthe other style (so you can call async functions from a synchronous thread,\nor vice-versa).\n\nIn particular:\n\n* AsyncToSync lets a synchronous subthread stop and wait while the async\n function is called on the main thread's event loop, and then control is\n returned to the thread when the async function is finished.\n\n* SyncToAsync lets async code call a synchronous function, which is run in\n a threadpool and control returned to the async coroutine when the synchronous\n function completes.\n\nThe idea is to make it easier to call synchronous APIs from async code and\nasynchronous APIs from synchronous code so it's easier to transition code from\none style to the other. In the case of Channels, we wrap the (synchronous)\nDjango view system with SyncToAsync to allow it to run inside the (asynchronous)\nASGI server.\n\nNote that exactly what threads things run in is very specific, and aimed to\nkeep maximum compatibility with old synchronous code. See\n\"Synchronous code & Threads\" below for a full explanation. By default,\n``sync_to_async`` will run all synchronous code in the program in the same\nthread for safety reasons; you can disable this for more performance with\n``@sync_to_async(thread_sensitive=False)``, but make sure that your code does\nnot rely on anything bound to threads (like database connections) when you do.\n\n\nThreadlocal replacement\n-----------------------\n\nThis is a drop-in replacement for ``threading.local`` that works with both\nthreads and asyncio Tasks. Even better, it will proxy values through from a\ntask-local context to a thread-local context when you use ``sync_to_async``\nto run things in a threadpool, and vice-versa for ``async_to_sync``.\n\nIf you instead want true thread- and task-safety, you can set\n``thread_critical`` on the Local object to ensure this instead.\n\n\nServer base classes\n-------------------\n\nIncludes a ``StatelessServer`` class which provides all the hard work of\nwriting a stateless server (as in, does not handle direct incoming sockets\nbut instead consumes external streams or sockets to work out what is happening).\n\nAn example of such a server would be a chatbot server that connects out to\na central chat server and provides a \"connection scope\" per user chatting to\nit. There's only one actual connection, but the server has to separate things\ninto several scopes for easier writing of the code.\n\nYou can see an example of this being used in `frequensgi `_.\n\n\nWSGI-to-ASGI adapter\n--------------------\n\nAllows you to wrap a WSGI application so it appears as a valid ASGI application.\n\nSimply wrap it around your WSGI application like so::\n\n asgi_application = WsgiToAsgi(wsgi_application)\n\nThe WSGI application will be run in a synchronous threadpool, and the wrapped\nASGI application will be one that accepts ``http`` class messages.\n\nPlease note that not all extended features of WSGI may be supported (such as\nfile handles for incoming POST bodies).\n\n\nDependencies\n------------\n\n``asgiref`` requires Python 3.5 or higher.\n\n\nContributing\n------------\n\nPlease refer to the\n`main Channels contributing docs `_.\n\n\nTesting\n'''''''\n\nTo run tests, make sure you have installed the ``tests`` extra with the package::\n\n cd asgiref/\n pip install -e .[tests]\n pytest\n\n\nBuilding the documentation\n''''''''''''''''''''''''''\n\nThe documentation uses `Sphinx `_::\n\n cd asgiref/docs/\n pip install sphinx\n\nTo build the docs, you can use the default tools::\n\n sphinx-build -b html . _build/html # or `make html`, if you've got make set up\n cd _build/html\n python -m http.server\n\n...or you can use ``sphinx-autobuild`` to run a server and rebuild/reload\nyour documentation changes automatically::\n\n pip install sphinx-autobuild\n sphinx-autobuild . _build/html\n\n\nImplementation Details\n----------------------\n\nSynchronous code & threads\n''''''''''''''''''''''''''\n\nThe ``asgiref.sync`` module provides two wrappers that let you go between\nasynchronous and synchronous code at will, while taking care of the rough edges\nfor you.\n\nUnfortunately, the rough edges are numerous, and the code has to work especially\nhard to keep things in the same thread as much as possible. Notably, the\nrestrictions we are working with are:\n\n* All synchronous code called through ``SyncToAsync`` and marked with\n ``thread_sensitive`` should run in the same thread as each other (and if the\n outer layer of the program is synchronous, the main thread)\n\n* If a thread already has a running async loop, ``AsyncToSync`` can't run things\n on that loop if it's blocked on synchronous code that is above you in the\n call stack.\n\nThe first compromise you get to might be that ``thread_sensitive`` code should\njust run in the same thread and not spawn in a sub-thread, fulfilling the first\nrestriction, but that immediately runs you into the second restriction.\n\nThe only real solution is to essentially have a variant of ThreadPoolExecutor\nthat executes any ``thread_sensitive`` code on the outermost synchronous\nthread - either the main thread, or a single spawned subthread.\n\nThis means you now have two basic states:\n\n* If the outermost layer of your program is synchronous, then all async code\n run through ``AsyncToSync`` will run in a per-call event loop in arbitary\n sub-threads, while all ``thread_sensitive`` code will run in the main thread.\n\n* If the outermost layer of your program is asynchronous, then all async code\n runs on the main thread's event loop, and all ``thread_sensitive`` synchronous\n code will run in a single shared sub-thread.\n\nCruicially, this means that in both cases there is a thread which is a shared\nresource that all ``thread_sensitive`` code must run on, and there is a chance\nthat this thread is currently blocked on its own ``AsyncToSync`` call. Thus,\n``AsyncToSync`` needs to act as an executor for thread code while it's blocking.\n\nThe ``CurrentThreadExecutor`` class provides this functionality; rather than\nsimply waiting on a Future, you can call its ``run_until_future`` method and\nit will run submitted code until that Future is done. This means that code\ninside the call can then run code on your thread.\n\n\nMaintenance and Security\n------------------------\n\nTo report security issues, please contact security@djangoproject.com. For GPG\nsignatures and more security process information, see\nhttps://docs.djangoproject.com/en/dev/internals/security/.\n\nTo report bugs or request new features, please open a new GitHub issue.\n\nThis repository is part of the Channels project. For the shepherd and maintenance team, please see the\n`main Channels readme `_.", @@ -1445,10 +1541,10 @@ "email": "foundation@djangoproject.com" } ], - "uuid": "3e7e870e-0afd-43a2-872c-e252c88e4033", + "uuid": "bef22e34-f8c3-463d-9d3e-46a55c3170e8", "missing_resources": [], "modified_resources": [], - "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e", + "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=f66d2b7c-233e-4a6a-93d8-1d17732704e9", "keywords": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", @@ -1492,8 +1588,8 @@ "version": "", "qualifiers": "", "subpath": "", - "project": "822e1834-92cc-4000-b43f-744e46b49e19", - "dependency_uid": "pkg:pypi/pytest?uuid=69f10055-c756-444a-a4be-760a4978ec33", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "dependency_uid": "pkg:pypi/pytest?uuid=ea2921dd-6dfd-4d20-b018-6d611f2c71e5", "for_package": 1, "datafile_resource": 1, "extracted_requirement": "pytest; extra == \"tests\"", @@ -1514,8 +1610,8 @@ "version": "", "qualifiers": "", "subpath": "", - "project": "822e1834-92cc-4000-b43f-744e46b49e19", - "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=5c0b0cd6-4d97-40dd-9b68-0bc139d33198", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=cd6e2840-3615-4f33-9e9b-1222026a1b90", "for_package": 1, "datafile_resource": 1, "extracted_requirement": "pytest-asyncio; extra == \"tests\"", @@ -1536,8 +1632,8 @@ "version": "", "qualifiers": "", "subpath": "", - "project": "822e1834-92cc-4000-b43f-744e46b49e19", - "dependency_uid": "pkg:pypi/pytest?uuid=1cc6674a-d2f8-4988-afc5-85e6722df0fb", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "dependency_uid": "pkg:pypi/pytest?uuid=d5506e2e-5172-4435-93e0-b4929f31d8d7", "for_package": 2, "datafile_resource": 18, "extracted_requirement": "pytest; extra == \"tests\"", @@ -1558,8 +1654,8 @@ "version": "", "qualifiers": "", "subpath": "", - "project": "822e1834-92cc-4000-b43f-744e46b49e19", - "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=5147952d-9189-49c9-bbf2-a41247d901e2", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=ab7f2ac4-cf40-4717-8d41-067e66bad5aa", "for_package": 2, "datafile_resource": 18, "extracted_requirement": "pytest-asyncio; extra == \"tests\"", diff --git a/scanpipe/tests/data/asgiref-3.3.0_scanpipe_output.json b/scanpipe/tests/data/asgiref-3.3.0_scanpipe_output.json index 198f42a623..366714b794 100644 --- a/scanpipe/tests/data/asgiref-3.3.0_scanpipe_output.json +++ b/scanpipe/tests/data/asgiref-3.3.0_scanpipe_output.json @@ -7,8 +7,8 @@ "pkg:pypi/scancode-toolkit@32.0.0rc4" ], "notice": "Generated with ScanCode.io and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied.\nNo content created from ScanCode.io should be considered or used as legal advice.\nConsult an Attorney for any legal advice.\nScanCode.io is a free software code scanning tool from nexB Inc. and others\nlicensed under the Apache License version 2.0.\nScanCode is a trademark of nexB Inc.\nVisit https://github.com/nexB/scancode.io for support and download.\n", - "uuid": "822e1834-92cc-4000-b43f-744e46b49e19", - "created_date": "2023-05-05T14:14:02.241Z", + "uuid": "cbd609b2-525a-4052-9860-201b879b20d9", + "created_date": "2023-05-08T04:34:00.013Z", "input_sources": [ { "filename": "asgiref-3.3.0-py3-none-any.whl", @@ -20,15 +20,15 @@ "pipeline_name": "scan_codebase", "status": "not_started", "description": "Scan a codebase with ScanCode-toolkit.", - "uuid": "ce2b1763-d686-45ef-8cb7-af928e508a3b", - "created_date": "2023-05-05T16:14:02.244241+02:00", + "uuid": "69d0d86d-6462-47db-b933-6638642bbbfc", + "created_date": "2023-05-08T06:34:00.018045+02:00", "scancodeio_version": "", "task_id": null, "task_start_date": null, "task_end_date": null, "task_exitcode": null, "task_output": "", - "log": "2023-05-05 16:14:02.24 Pipeline [scan_codebase] starting\n2023-05-05 16:14:02.24 Step [copy_inputs_to_codebase_directory] starting\n2023-05-05 16:14:02.24 Step [copy_inputs_to_codebase_directory] completed in 0.00 seconds\n2023-05-05 16:14:02.24 Step [extract_archives] starting\n2023-05-05 16:14:02.27 Step [extract_archives] completed in 0.02 seconds\n2023-05-05 16:14:02.27 Step [collect_and_create_codebase_resources] starting\n2023-05-05 16:14:02.37 Step [collect_and_create_codebase_resources] completed in 0.10 seconds\n2023-05-05 16:14:02.37 Step [tag_empty_files] starting\n2023-05-05 16:14:02.37 Step [tag_empty_files] completed in 0.00 seconds\n2023-05-05 16:14:02.37 Step [scan_for_application_packages] starting\n2023-05-05 16:14:03.99 Step [scan_for_application_packages] completed in 1.61 seconds\n2023-05-05 16:14:03.99 Step [scan_for_files] starting\n2023-05-05 16:14:05.66 Step [scan_for_files] completed in 1.67 seconds\n2023-05-05 16:14:05.66 Pipeline completed\n", + "log": "2023-05-08 06:34:00.01 Pipeline [scan_codebase] starting\n2023-05-08 06:34:00.02 Step [copy_inputs_to_codebase_directory] starting\n2023-05-08 06:34:00.02 Step [copy_inputs_to_codebase_directory] completed in 0.00 seconds\n2023-05-08 06:34:00.02 Step [extract_archives] starting\n2023-05-08 06:34:00.04 Step [extract_archives] completed in 0.02 seconds\n2023-05-08 06:34:00.04 Step [collect_and_create_codebase_resources] starting\n2023-05-08 06:34:00.16 Step [collect_and_create_codebase_resources] completed in 0.11 seconds\n2023-05-08 06:34:00.16 Step [tag_empty_files] starting\n2023-05-08 06:34:00.16 Step [tag_empty_files] completed in 0.00 seconds\n2023-05-08 06:34:00.16 Step [scan_for_application_packages] starting\n2023-05-08 06:34:01.88 Step [scan_for_application_packages] completed in 1.72 seconds\n2023-05-08 06:34:01.88 Step [scan_for_files] starting\n2023-05-08 06:34:03.54 Step [scan_for_files] completed in 1.66 seconds\n2023-05-08 06:34:03.54 Pipeline completed\n", "execution_time": null } ], @@ -138,7 +138,7 @@ "Documentation": "https://asgi.readthedocs.io/", "Further Documentation": "https://docs.djangoproject.com/en/stable/topics/async/#async-adapter-functions" }, - "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=09aa0328-c4d5-4413-8837-59f88d05be1c", + "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=e60b7109-14eb-47af-9568-09b4b630dca5", "datasource_id": "", "file_references": [], "missing_resources": [], @@ -246,7 +246,7 @@ "Documentation": "https://asgi.readthedocs.io/", "Further Documentation": "https://docs.djangoproject.com/en/stable/topics/async/#async-adapter-functions" }, - "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e", + "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=f66d2b7c-233e-4a6a-93d8-1d17732704e9", "datasource_id": "", "file_references": [], "missing_resources": [], @@ -261,8 +261,8 @@ "is_runtime": true, "is_optional": true, "is_resolved": false, - "dependency_uid": "pkg:pypi/pytest?uuid=69f10055-c756-444a-a4be-760a4978ec33", - "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=09aa0328-c4d5-4413-8837-59f88d05be1c", + "dependency_uid": "pkg:pypi/pytest?uuid=ea2921dd-6dfd-4d20-b018-6d611f2c71e5", + "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=e60b7109-14eb-47af-9568-09b4b630dca5", "datafile_path": "asgiref-3.3.0-py3-none-any.whl", "datasource_id": "pypi_wheel", "package_type": "pypi" @@ -274,8 +274,8 @@ "is_runtime": true, "is_optional": true, "is_resolved": false, - "dependency_uid": "pkg:pypi/pytest?uuid=1cc6674a-d2f8-4988-afc5-85e6722df0fb", - "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e", + "dependency_uid": "pkg:pypi/pytest?uuid=d5506e2e-5172-4435-93e0-b4929f31d8d7", + "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=f66d2b7c-233e-4a6a-93d8-1d17732704e9", "datafile_path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/METADATA", "datasource_id": "pypi_wheel_metadata", "package_type": "pypi" @@ -287,8 +287,8 @@ "is_runtime": true, "is_optional": true, "is_resolved": false, - "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=5c0b0cd6-4d97-40dd-9b68-0bc139d33198", - "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=09aa0328-c4d5-4413-8837-59f88d05be1c", + "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=cd6e2840-3615-4f33-9e9b-1222026a1b90", + "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=e60b7109-14eb-47af-9568-09b4b630dca5", "datafile_path": "asgiref-3.3.0-py3-none-any.whl", "datasource_id": "pypi_wheel", "package_type": "pypi" @@ -300,8 +300,8 @@ "is_runtime": true, "is_optional": true, "is_resolved": false, - "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=5147952d-9189-49c9-bbf2-a41247d901e2", - "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e", + "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=ab7f2ac4-cf40-4717-8d41-067e66bad5aa", + "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=f66d2b7c-233e-4a6a-93d8-1d17732704e9", "datafile_path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/METADATA", "datasource_id": "pypi_wheel_metadata", "package_type": "pypi" @@ -328,8 +328,11 @@ "is_archive": true, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "compliance_alert": "", "copyrights": [], "holders": [], @@ -591,7 +594,7 @@ } ], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=09aa0328-c4d5-4413-8837-59f88d05be1c" + "pkg:pypi/asgiref@3.3.0?uuid=e60b7109-14eb-47af-9568-09b4b630dca5" ], "emails": [], "urls": [], @@ -617,8 +620,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "compliance_alert": "", "copyrights": [], "holders": [], @@ -649,8 +655,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "compliance_alert": "", "copyrights": [], "holders": [], @@ -681,8 +690,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "compliance_alert": "", "copyrights": [], "holders": [], @@ -713,9 +725,33 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], - "compliance_alert": "", + "detected_license_expression": "bsd-new", + "detected_license_expression_spdx": "BSD-3-Clause", + "license_detections": [ + { + "policy": null, + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 27, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_683.RULE", + "start_line": 4, + "matched_text": "Redistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n 3. Neither the name of Django nor the names of its contributors may be used\n to endorse or promote products derived from this software without\n specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.", + "match_coverage": 100.0, + "matched_length": 214, + "rule_relevance": 100, + "rule_identifier": "bsd-new_683.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-72cae3bc-4423-3a9e-be84-ee8bb5120a4d", + "license_expression": "bsd-new" + } + ], + "license_clues": [], + "percentage_of_license_text": 95.11, + "compliance_alert": "missing", "copyrights": [ { "end_line": 1, @@ -733,7 +769,7 @@ "authors": [], "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" + "pkg:pypi/asgiref@3.3.0?uuid=f66d2b7c-233e-4a6a-93d8-1d17732704e9" ], "emails": [], "urls": [], @@ -759,8 +795,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "compliance_alert": "", "copyrights": [], "holders": [], @@ -1022,7 +1061,7 @@ } ], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" + "pkg:pypi/asgiref@3.3.0?uuid=f66d2b7c-233e-4a6a-93d8-1d17732704e9" ], "emails": [], "urls": [], @@ -1048,15 +1087,18 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "compliance_alert": "", "copyrights": [], "holders": [], "authors": [], "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" + "pkg:pypi/asgiref@3.3.0?uuid=f66d2b7c-233e-4a6a-93d8-1d17732704e9" ], "emails": [], "urls": [], @@ -1082,15 +1124,18 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "compliance_alert": "", "copyrights": [], "holders": [], "authors": [], "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" + "pkg:pypi/asgiref@3.3.0?uuid=f66d2b7c-233e-4a6a-93d8-1d17732704e9" ], "emails": [], "urls": [], @@ -1116,15 +1161,18 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "compliance_alert": "", "copyrights": [], "holders": [], "authors": [], "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" + "pkg:pypi/asgiref@3.3.0?uuid=f66d2b7c-233e-4a6a-93d8-1d17732704e9" ], "emails": [], "urls": [], @@ -1150,15 +1198,18 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "compliance_alert": "", "copyrights": [], "holders": [], "authors": [], "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" + "pkg:pypi/asgiref@3.3.0?uuid=f66d2b7c-233e-4a6a-93d8-1d17732704e9" ], "emails": [], "urls": [], @@ -1184,15 +1235,18 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "compliance_alert": "", "copyrights": [], "holders": [], "authors": [], "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" + "pkg:pypi/asgiref@3.3.0?uuid=f66d2b7c-233e-4a6a-93d8-1d17732704e9" ], "emails": [], "urls": [], @@ -1218,15 +1272,18 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "compliance_alert": "", "copyrights": [], "holders": [], "authors": [], "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" + "pkg:pypi/asgiref@3.3.0?uuid=f66d2b7c-233e-4a6a-93d8-1d17732704e9" ], "emails": [], "urls": [], @@ -1252,15 +1309,18 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "compliance_alert": "", "copyrights": [], "holders": [], "authors": [], "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" + "pkg:pypi/asgiref@3.3.0?uuid=f66d2b7c-233e-4a6a-93d8-1d17732704e9" ], "emails": [], "urls": [], @@ -1286,15 +1346,18 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "compliance_alert": "", "copyrights": [], "holders": [], "authors": [], "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" + "pkg:pypi/asgiref@3.3.0?uuid=f66d2b7c-233e-4a6a-93d8-1d17732704e9" ], "emails": [], "urls": [], @@ -1320,15 +1383,18 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "compliance_alert": "", "copyrights": [], "holders": [], "authors": [], "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" + "pkg:pypi/asgiref@3.3.0?uuid=f66d2b7c-233e-4a6a-93d8-1d17732704e9" ], "emails": [], "urls": [], @@ -1354,15 +1420,18 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "compliance_alert": "", "copyrights": [], "holders": [], "authors": [], "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" + "pkg:pypi/asgiref@3.3.0?uuid=f66d2b7c-233e-4a6a-93d8-1d17732704e9" ], "emails": [], "urls": [], @@ -1388,15 +1457,39 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], - "compliance_alert": "", + "detected_license_expression": "apache-2.0", + "detected_license_expression_spdx": "Apache-2.0", + "license_detections": [ + { + "policy": null, + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 2, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/apache-2.0_174.RULE", + "start_line": 2, + "matched_text": "# under the Apache 2.0 license. You may see the original project at", + "match_coverage": 100.0, + "matched_length": 6, + "rule_relevance": 100, + "rule_identifier": "apache-2.0_174.RULE", + "license_expression": "apache-2.0" + } + ], + "identifier": "apache_2_0-5a90b5fa-5d10-5a98-d2a7-ef089c46a900", + "license_expression": "apache-2.0" + } + ], + "license_clues": [], + "percentage_of_license_text": 1.22, + "compliance_alert": "missing", "copyrights": [], "holders": [], "authors": [], "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" + "pkg:pypi/asgiref@3.3.0?uuid=f66d2b7c-233e-4a6a-93d8-1d17732704e9" ], "emails": [], "urls": [ @@ -1438,15 +1531,18 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "compliance_alert": "", "copyrights": [], "holders": [], "authors": [], "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e" + "pkg:pypi/asgiref@3.3.0?uuid=f66d2b7c-233e-4a6a-93d8-1d17732704e9" ], "emails": [], "urls": [], diff --git a/scanpipe/tests/data/asgiref-3.3.0_toolkit_scan.json b/scanpipe/tests/data/asgiref-3.3.0_toolkit_scan.json index a725bed00e..47667421a3 100644 --- a/scanpipe/tests/data/asgiref-3.3.0_toolkit_scan.json +++ b/scanpipe/tests/data/asgiref-3.3.0_toolkit_scan.json @@ -5,7 +5,7 @@ "tool_version": "32.0.0rc4", "options": { "input": [ - "/private/var/folders/ph/tpf7js_n0r554mngmvykl7lm0000gn/T/tmpqwsr_onx/projects/asgiref-822e1834/codebase" + "/private/var/folders/ph/tpf7js_n0r554mngmvykl7lm0000gn/T/tmph8hp21h7/projects/asgiref-cbd609b2/codebase" ], "--copyright": true, "--info": true, @@ -16,10 +16,10 @@ "--verbose": true }, "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", - "start_timestamp": "2023-05-05T141406.032577", - "end_timestamp": "2023-05-05T141409.498069", + "start_timestamp": "2023-05-08T043403.919268", + "end_timestamp": "2023-05-08T043407.453871", "output_format_version": "3.0.0", - "duration": 3.465496063232422, + "duration": 3.534606695175171, "message": null, "errors": [], "warnings": [], @@ -138,7 +138,7 @@ "repository_homepage_url": "https://pypi.org/project/asgiref", "repository_download_url": "https://pypi.org/packages/source/a/asgiref/asgiref-3.3.0.tar.gz", "api_data_url": "https://pypi.org/pypi/asgiref/3.3.0/json", - "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=b5e66572-7b2b-4813-8833-72532a060ea0", + "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=3fea6fce-008f-4b3e-aa38-ab6317f51260", "datafile_paths": [ "codebase/asgiref-3.3.0-py3-none-any.whl" ], @@ -248,7 +248,7 @@ "repository_homepage_url": "https://pypi.org/project/asgiref", "repository_download_url": "https://pypi.org/packages/source/a/asgiref/asgiref-3.3.0.tar.gz", "api_data_url": "https://pypi.org/pypi/asgiref/3.3.0/json", - "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad", + "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=b8a0a7de-6939-401c-8d75-a1d7474c6e11", "datafile_paths": [ "codebase/asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/METADATA" ], @@ -268,8 +268,8 @@ "is_resolved": false, "resolved_package": {}, "extra_data": {}, - "dependency_uid": "pkg:pypi/pytest?uuid=ad3c935c-1890-429f-abb4-42242d00cf4a", - "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=b5e66572-7b2b-4813-8833-72532a060ea0", + "dependency_uid": "pkg:pypi/pytest?uuid=bf865e81-8653-4620-adf6-1b6004eb1107", + "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=3fea6fce-008f-4b3e-aa38-ab6317f51260", "datafile_path": "codebase/asgiref-3.3.0-py3-none-any.whl", "datasource_id": "pypi_wheel" }, @@ -282,8 +282,8 @@ "is_resolved": false, "resolved_package": {}, "extra_data": {}, - "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=6d439359-3a43-473b-a7e9-132ddaf1d65c", - "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=b5e66572-7b2b-4813-8833-72532a060ea0", + "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=23012364-0d0b-4ac1-8df0-b76ec5cf1543", + "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=3fea6fce-008f-4b3e-aa38-ab6317f51260", "datafile_path": "codebase/asgiref-3.3.0-py3-none-any.whl", "datasource_id": "pypi_wheel" }, @@ -296,8 +296,8 @@ "is_resolved": false, "resolved_package": {}, "extra_data": {}, - "dependency_uid": "pkg:pypi/pytest?uuid=f87fae40-67a5-40a1-ad94-f9f848cfe4d1", - "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad", + "dependency_uid": "pkg:pypi/pytest?uuid=ec885665-fcd5-4240-b400-94e0c28b52bf", + "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=b8a0a7de-6939-401c-8d75-a1d7474c6e11", "datafile_path": "codebase/asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/METADATA", "datasource_id": "pypi_wheel_metadata" }, @@ -310,8 +310,8 @@ "is_resolved": false, "resolved_package": {}, "extra_data": {}, - "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=69142343-716c-4c9a-9e88-1315f1e93946", - "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad", + "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=61e9d8cc-0f71-4ea9-9796-538be428935e", + "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=b8a0a7de-6939-401c-8d75-a1d7474c6e11", "datafile_path": "codebase/asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/METADATA", "datasource_id": "pypi_wheel_metadata" } @@ -381,7 +381,7 @@ "base_name": "asgiref-3.3.0-py3-none-any", "extension": ".whl", "size": 19948, - "date": "2023-05-05", + "date": "2023-05-08", "sha1": "c03f67211a311b13d1294ac8af7cb139ee34c4f9", "md5": "5bce1df6dedc53a41a9a6b40d7b1699e", "sha256": "a5098bc870b80e7b872bff60bb363c7f2c2c89078759f6c47b53ff8c525a152e", @@ -651,7 +651,7 @@ } ], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=b5e66572-7b2b-4813-8833-72532a060ea0" + "pkg:pypi/asgiref@3.3.0?uuid=3fea6fce-008f-4b3e-aa38-ab6317f51260" ], "detected_license_expression": null, "detected_license_expression_spdx": null, @@ -758,7 +758,7 @@ "is_script": false, "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + "pkg:pypi/asgiref@3.3.0?uuid=b8a0a7de-6939-401c-8d75-a1d7474c6e11" ], "detected_license_expression": null, "detected_license_expression_spdx": null, @@ -795,7 +795,7 @@ "is_script": true, "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + "pkg:pypi/asgiref@3.3.0?uuid=b8a0a7de-6939-401c-8d75-a1d7474c6e11" ], "detected_license_expression": null, "detected_license_expression_spdx": null, @@ -832,7 +832,7 @@ "is_script": true, "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + "pkg:pypi/asgiref@3.3.0?uuid=b8a0a7de-6939-401c-8d75-a1d7474c6e11" ], "detected_license_expression": null, "detected_license_expression_spdx": null, @@ -869,7 +869,7 @@ "is_script": true, "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + "pkg:pypi/asgiref@3.3.0?uuid=b8a0a7de-6939-401c-8d75-a1d7474c6e11" ], "detected_license_expression": null, "detected_license_expression_spdx": null, @@ -906,7 +906,7 @@ "is_script": true, "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + "pkg:pypi/asgiref@3.3.0?uuid=b8a0a7de-6939-401c-8d75-a1d7474c6e11" ], "detected_license_expression": null, "detected_license_expression_spdx": null, @@ -943,7 +943,7 @@ "is_script": true, "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + "pkg:pypi/asgiref@3.3.0?uuid=b8a0a7de-6939-401c-8d75-a1d7474c6e11" ], "detected_license_expression": null, "detected_license_expression_spdx": null, @@ -980,7 +980,7 @@ "is_script": true, "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + "pkg:pypi/asgiref@3.3.0?uuid=b8a0a7de-6939-401c-8d75-a1d7474c6e11" ], "detected_license_expression": null, "detected_license_expression_spdx": null, @@ -1017,7 +1017,7 @@ "is_script": true, "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + "pkg:pypi/asgiref@3.3.0?uuid=b8a0a7de-6939-401c-8d75-a1d7474c6e11" ], "detected_license_expression": "apache-2.0", "detected_license_expression_spdx": "Apache-2.0", @@ -1073,7 +1073,7 @@ "is_script": true, "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + "pkg:pypi/asgiref@3.3.0?uuid=b8a0a7de-6939-401c-8d75-a1d7474c6e11" ], "detected_license_expression": null, "detected_license_expression_spdx": null, @@ -1145,7 +1145,7 @@ "is_script": false, "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + "pkg:pypi/asgiref@3.3.0?uuid=b8a0a7de-6939-401c-8d75-a1d7474c6e11" ], "detected_license_expression": "bsd-new", "detected_license_expression_spdx": "BSD-3-Clause", @@ -1468,7 +1468,7 @@ } ], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + "pkg:pypi/asgiref@3.3.0?uuid=b8a0a7de-6939-401c-8d75-a1d7474c6e11" ], "detected_license_expression": "bsd-new", "detected_license_expression_spdx": "BSD-3-Clause", @@ -1548,7 +1548,7 @@ "is_script": false, "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + "pkg:pypi/asgiref@3.3.0?uuid=b8a0a7de-6939-401c-8d75-a1d7474c6e11" ], "detected_license_expression": null, "detected_license_expression_spdx": null, @@ -1585,7 +1585,7 @@ "is_script": false, "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + "pkg:pypi/asgiref@3.3.0?uuid=b8a0a7de-6939-401c-8d75-a1d7474c6e11" ], "detected_license_expression": null, "detected_license_expression_spdx": null, @@ -1622,7 +1622,7 @@ "is_script": false, "package_data": [], "for_packages": [ - "pkg:pypi/asgiref@3.3.0?uuid=1586e0c5-c171-4ca8-82e9-244760cdd6ad" + "pkg:pypi/asgiref@3.3.0?uuid=b8a0a7de-6939-401c-8d75-a1d7474c6e11" ], "detected_license_expression": null, "detected_license_expression_spdx": null, diff --git a/scanpipe/tests/data/asgiref-3.3.0_walk_test_fixtures.json b/scanpipe/tests/data/asgiref-3.3.0_walk_test_fixtures.json index b927e8a87a..b3f0dde29e 100644 --- a/scanpipe/tests/data/asgiref-3.3.0_walk_test_fixtures.json +++ b/scanpipe/tests/data/asgiref-3.3.0_walk_test_fixtures.json @@ -1,12 +1,12 @@ [ { "model": "scanpipe.project", - "pk": "822e1834-92cc-4000-b43f-744e46b49e19", + "pk": "cbd609b2-525a-4052-9860-201b879b20d9", "fields": { "extra_data": {}, - "created_date": "2023-05-05T14:14:02.241Z", + "created_date": "2023-05-08T04:34:00.013Z", "name": "asgiref", - "work_directory": "/private/var/folders/ph/tpf7js_n0r554mngmvykl7lm0000gn/T/tmpqwsr_onx/projects/asgiref-822e1834", + "work_directory": "/private/var/folders/ph/tpf7js_n0r554mngmvykl7lm0000gn/T/tmph8hp21h7/projects/asgiref-cbd609b2", "input_sources": { "asgiref-3.3.0-py3-none-any.whl": "-" }, @@ -15,20 +15,20 @@ }, { "model": "scanpipe.run", - "pk": "ce2b1763-d686-45ef-8cb7-af928e508a3b", + "pk": "69d0d86d-6462-47db-b933-6638642bbbfc", "fields": { "task_id": null, "task_start_date": null, "task_end_date": null, "task_exitcode": null, "task_output": "", - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", "pipeline_name": "scan_codebase", - "created_date": "2023-05-05T14:14:02.244Z", + "created_date": "2023-05-08T04:34:00.018Z", "scancodeio_version": "", "description": "Scan a codebase with ScanCode-toolkit.", "current_step": "", - "log": "2023-05-05 16:14:02.24 Pipeline [scan_codebase] starting\n2023-05-05 16:14:02.24 Step [copy_inputs_to_codebase_directory] starting\n2023-05-05 16:14:02.24 Step [copy_inputs_to_codebase_directory] completed in 0.00 seconds\n2023-05-05 16:14:02.24 Step [extract_archives] starting\n2023-05-05 16:14:02.27 Step [extract_archives] completed in 0.02 seconds\n2023-05-05 16:14:02.27 Step [collect_and_create_codebase_resources] starting\n2023-05-05 16:14:02.37 Step [collect_and_create_codebase_resources] completed in 0.10 seconds\n2023-05-05 16:14:02.37 Step [tag_empty_files] starting\n2023-05-05 16:14:02.37 Step [tag_empty_files] completed in 0.00 seconds\n2023-05-05 16:14:02.37 Step [scan_for_application_packages] starting\n2023-05-05 16:14:03.99 Step [scan_for_application_packages] completed in 1.61 seconds\n2023-05-05 16:14:03.99 Step [scan_for_files] starting\n2023-05-05 16:14:05.66 Step [scan_for_files] completed in 1.67 seconds\n2023-05-05 16:14:05.66 Pipeline completed\n" + "log": "2023-05-08 06:34:00.01 Pipeline [scan_codebase] starting\n2023-05-08 06:34:00.02 Step [copy_inputs_to_codebase_directory] starting\n2023-05-08 06:34:00.02 Step [copy_inputs_to_codebase_directory] completed in 0.00 seconds\n2023-05-08 06:34:00.02 Step [extract_archives] starting\n2023-05-08 06:34:00.04 Step [extract_archives] completed in 0.02 seconds\n2023-05-08 06:34:00.04 Step [collect_and_create_codebase_resources] starting\n2023-05-08 06:34:00.16 Step [collect_and_create_codebase_resources] completed in 0.11 seconds\n2023-05-08 06:34:00.16 Step [tag_empty_files] starting\n2023-05-08 06:34:00.16 Step [tag_empty_files] completed in 0.00 seconds\n2023-05-08 06:34:00.16 Step [scan_for_application_packages] starting\n2023-05-08 06:34:01.88 Step [scan_for_application_packages] completed in 1.72 seconds\n2023-05-08 06:34:01.88 Step [scan_for_files] starting\n2023-05-08 06:34:03.54 Step [scan_for_files] completed in 1.66 seconds\n2023-05-08 06:34:03.54 Pipeline completed\n" } }, { @@ -40,12 +40,15 @@ "sha256": "a5098bc870b80e7b872bff60bb363c7f2c2c89078759f6c47b53ff8c525a152e", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0.whl", @@ -332,12 +335,15 @@ "sha256": "", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0.whl-extract", @@ -369,12 +375,15 @@ "sha256": "", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0.whl-extract/asgiref", @@ -406,12 +415,15 @@ "sha256": "", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0.whl-extract/asgiref-3.3.0.dist-info", @@ -443,12 +455,15 @@ "sha256": "fa4651a3b79201a4dc44a4096cd49ec8f427e912ea0ee05c666357b413a8afe7", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0.whl-extract/asgiref/sync.py", @@ -480,12 +495,15 @@ "sha256": "3151f66c476208c3154cb6c4fb557a2a253bab82f0ab33fb3c8b9f7976be9e33", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0.whl-extract/asgiref/compatibility.py", @@ -517,12 +535,15 @@ "sha256": "885267fee0fea687875a02ceb929ca095312d47aaa57e20e4ce382f397caaf4d", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0.whl-extract/asgiref/server.py", @@ -554,12 +575,15 @@ "sha256": "ee0fcf4a8e6fa9df8a4643bb48e82892d496afce44b6c8b8aea2721755545e1c", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0.whl-extract/asgiref/local.py", @@ -591,12 +615,15 @@ "sha256": "ddd445b778c097fc75c2bf69ad964cbadd3bd6999d1dd2306d39d401855e8e3e", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0.whl-extract/asgiref/current_thread_executor.py", @@ -628,12 +655,36 @@ "sha256": "126c3e3a8a75a517d2739612304607804cf5f34da63fa25d03a6f11f7edb6f2f", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "apache-2.0", + "detected_license_expression_spdx": "Apache-2.0", + "license_detections": [ + { + "policy": null, + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 2, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/apache-2.0_174.RULE", + "start_line": 2, + "matched_text": "# under the Apache 2.0 license. You may see the original project at", + "match_coverage": 100.0, + "matched_length": 6, + "rule_relevance": 100, + "rule_identifier": "apache-2.0_174.RULE", + "license_expression": "apache-2.0" + } + ], + "identifier": "apache_2_0-5a90b5fa-5d10-5a98-d2a7-ef089c46a900", + "license_expression": "apache-2.0" + } + ], + "license_clues": [], + "percentage_of_license_text": 1.22, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [ { @@ -668,7 +719,7 @@ "is_archive": false, "is_key_file": false, "is_media": false, - "compliance_alert": "", + "compliance_alert": "missing", "package_data": [] } }, @@ -681,12 +732,15 @@ "sha256": "30f49b9094bff904a42caeec32515715fe625a56dc48bd7c0e3d9988c0ad4bd7", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0.whl-extract/asgiref/__init__.py", @@ -718,12 +772,15 @@ "sha256": "ddbc8d455eceb68fc583c67e7c4ad0277c867fb39095c51ec5b37f70342e8334", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0.whl-extract/asgiref/testing.py", @@ -755,12 +812,15 @@ "sha256": "f8bd1ea3fb8afddabb10f8efd66796d41446cad51168ef4d3c44b19c973d0ad0", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0.whl-extract/asgiref/wsgi.py", @@ -792,12 +852,15 @@ "sha256": "2c1983592aa38f0bfb0afacc73ddc5b46ce10e8e89ceaa9fed1e5fc6361b608d", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0.whl-extract/asgiref-3.3.0.dist-info/RECORD", @@ -829,7 +892,33 @@ "sha256": "b846415d1b514e9c1dff14a22deb906d794bc546ca6129f950a18cd091e2a669", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "bsd-new", + "detected_license_expression_spdx": "BSD-3-Clause", + "license_detections": [ + { + "policy": null, + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 27, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_683.RULE", + "start_line": 4, + "matched_text": "Redistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n 1. Redistributions of source code must retain the above copyright notice,\n this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n 3. Neither the name of Django nor the names of its contributors may be used\n to endorse or promote products derived from this software without\n specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.", + "match_coverage": 100.0, + "matched_length": 214, + "rule_relevance": 100, + "rule_identifier": "bsd-new_683.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-72cae3bc-4423-3a9e-be84-ee8bb5120a4d", + "license_expression": "bsd-new" + } + ], + "license_clues": [], + "percentage_of_license_text": 95.11, "copyrights": [ { "end_line": 1, @@ -845,8 +934,6 @@ } ], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0.whl-extract/asgiref-3.3.0.dist-info/LICENSE", @@ -865,7 +952,7 @@ "is_archive": false, "is_key_file": false, "is_media": false, - "compliance_alert": "", + "compliance_alert": "missing", "package_data": [] } }, @@ -878,12 +965,15 @@ "sha256": "11546323af45e6a5639bf620a9c4d73e74c0bf705f494af4595007b923f75e8a", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0.whl-extract/asgiref-3.3.0.dist-info/WHEEL", @@ -915,12 +1005,15 @@ "sha256": "6e89108c2cf0c0446174188f76f60465ae1c1f14f83427807df40d52a27cb2c8", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0.whl-extract/asgiref-3.3.0.dist-info/top_level.txt", @@ -952,12 +1045,15 @@ "sha256": "70f98f4eb9f6068b192b5464fcdf69e29a8ff09962bfce84bbb052baeee44f33", "sha512": "", "extra_data": {}, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], - "licenses": [], - "license_expressions": [], "emails": [], "urls": [], "path": "asgiref-3.3.0.whl-extract/asgiref-3.3.0.dist-info/METADATA", @@ -1254,7 +1350,7 @@ "Documentation": "https://asgi.readthedocs.io/", "Further Documentation": "https://docs.djangoproject.com/en/stable/topics/async/#async-adapter-functions" }, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", "filename": "", "primary_language": "Python", "description": "ASGI specs, helper code, and adapters\nasgiref\n=======\n\n.. image:: https://api.travis-ci.org/django/asgiref.svg\n :target: https://travis-ci.org/django/asgiref\n\n.. image:: https://img.shields.io/pypi/v/asgiref.svg\n :target: https://pypi.python.org/pypi/asgiref\n\nASGI is a standard for Python asynchronous web apps and servers to communicate\nwith each other, and positioned as an asynchronous successor to WSGI. You can\nread more at https://asgi.readthedocs.io/en/latest/\n\nThis package includes ASGI base libraries, such as:\n\n* Sync-to-async and async-to-sync function wrappers, ``asgiref.sync``\n* Server base classes, ``asgiref.server``\n* A WSGI-to-ASGI adapter, in ``asgiref.wsgi``\n\n\nFunction wrappers\n-----------------\n\nThese allow you to wrap or decorate async or sync functions to call them from\nthe other style (so you can call async functions from a synchronous thread,\nor vice-versa).\n\nIn particular:\n\n* AsyncToSync lets a synchronous subthread stop and wait while the async\n function is called on the main thread's event loop, and then control is\n returned to the thread when the async function is finished.\n\n* SyncToAsync lets async code call a synchronous function, which is run in\n a threadpool and control returned to the async coroutine when the synchronous\n function completes.\n\nThe idea is to make it easier to call synchronous APIs from async code and\nasynchronous APIs from synchronous code so it's easier to transition code from\none style to the other. In the case of Channels, we wrap the (synchronous)\nDjango view system with SyncToAsync to allow it to run inside the (asynchronous)\nASGI server.\n\nNote that exactly what threads things run in is very specific, and aimed to\nkeep maximum compatibility with old synchronous code. See\n\"Synchronous code & Threads\" below for a full explanation. By default,\n``sync_to_async`` will run all synchronous code in the program in the same\nthread for safety reasons; you can disable this for more performance with\n``@sync_to_async(thread_sensitive=False)``, but make sure that your code does\nnot rely on anything bound to threads (like database connections) when you do.\n\n\nThreadlocal replacement\n-----------------------\n\nThis is a drop-in replacement for ``threading.local`` that works with both\nthreads and asyncio Tasks. Even better, it will proxy values through from a\ntask-local context to a thread-local context when you use ``sync_to_async``\nto run things in a threadpool, and vice-versa for ``async_to_sync``.\n\nIf you instead want true thread- and task-safety, you can set\n``thread_critical`` on the Local object to ensure this instead.\n\n\nServer base classes\n-------------------\n\nIncludes a ``StatelessServer`` class which provides all the hard work of\nwriting a stateless server (as in, does not handle direct incoming sockets\nbut instead consumes external streams or sockets to work out what is happening).\n\nAn example of such a server would be a chatbot server that connects out to\na central chat server and provides a \"connection scope\" per user chatting to\nit. There's only one actual connection, but the server has to separate things\ninto several scopes for easier writing of the code.\n\nYou can see an example of this being used in `frequensgi `_.\n\n\nWSGI-to-ASGI adapter\n--------------------\n\nAllows you to wrap a WSGI application so it appears as a valid ASGI application.\n\nSimply wrap it around your WSGI application like so::\n\n asgi_application = WsgiToAsgi(wsgi_application)\n\nThe WSGI application will be run in a synchronous threadpool, and the wrapped\nASGI application will be one that accepts ``http`` class messages.\n\nPlease note that not all extended features of WSGI may be supported (such as\nfile handles for incoming POST bodies).\n\n\nDependencies\n------------\n\n``asgiref`` requires Python 3.5 or higher.\n\n\nContributing\n------------\n\nPlease refer to the\n`main Channels contributing docs `_.\n\n\nTesting\n'''''''\n\nTo run tests, make sure you have installed the ``tests`` extra with the package::\n\n cd asgiref/\n pip install -e .[tests]\n pytest\n\n\nBuilding the documentation\n''''''''''''''''''''''''''\n\nThe documentation uses `Sphinx `_::\n\n cd asgiref/docs/\n pip install sphinx\n\nTo build the docs, you can use the default tools::\n\n sphinx-build -b html . _build/html # or `make html`, if you've got make set up\n cd _build/html\n python -m http.server\n\n...or you can use ``sphinx-autobuild`` to run a server and rebuild/reload\nyour documentation changes automatically::\n\n pip install sphinx-autobuild\n sphinx-autobuild . _build/html\n\n\nImplementation Details\n----------------------\n\nSynchronous code & threads\n''''''''''''''''''''''''''\n\nThe ``asgiref.sync`` module provides two wrappers that let you go between\nasynchronous and synchronous code at will, while taking care of the rough edges\nfor you.\n\nUnfortunately, the rough edges are numerous, and the code has to work especially\nhard to keep things in the same thread as much as possible. Notably, the\nrestrictions we are working with are:\n\n* All synchronous code called through ``SyncToAsync`` and marked with\n ``thread_sensitive`` should run in the same thread as each other (and if the\n outer layer of the program is synchronous, the main thread)\n\n* If a thread already has a running async loop, ``AsyncToSync`` can't run things\n on that loop if it's blocked on synchronous code that is above you in the\n call stack.\n\nThe first compromise you get to might be that ``thread_sensitive`` code should\njust run in the same thread and not spawn in a sub-thread, fulfilling the first\nrestriction, but that immediately runs you into the second restriction.\n\nThe only real solution is to essentially have a variant of ThreadPoolExecutor\nthat executes any ``thread_sensitive`` code on the outermost synchronous\nthread - either the main thread, or a single spawned subthread.\n\nThis means you now have two basic states:\n\n* If the outermost layer of your program is synchronous, then all async code\n run through ``AsyncToSync`` will run in a per-call event loop in arbitary\n sub-threads, while all ``thread_sensitive`` code will run in the main thread.\n\n* If the outermost layer of your program is asynchronous, then all async code\n runs on the main thread's event loop, and all ``thread_sensitive`` synchronous\n code will run in a single shared sub-thread.\n\nCruicially, this means that in both cases there is a thread which is a shared\nresource that all ``thread_sensitive`` code must run on, and there is a chance\nthat this thread is currently blocked on its own ``AsyncToSync`` call. Thus,\n``AsyncToSync`` needs to act as an executor for thread code while it's blocking.\n\nThe ``CurrentThreadExecutor`` class provides this functionality; rather than\nsimply waiting on a Future, you can call its ``run_until_future`` method and\nit will run submitted code until that Future is done. This means that code\ninside the call can then run code on your thread.\n\n\nMaintenance and Security\n------------------------\n\nTo report security issues, please contact security@djangoproject.com. For GPG\nsignatures and more security process information, see\nhttps://docs.djangoproject.com/en/dev/internals/security/.\n\nTo report bugs or request new features, please open a new GitHub issue.\n\nThis repository is part of the Channels project. For the shepherd and maintenance team, please see the\n`main Channels readme `_.", @@ -1328,10 +1424,10 @@ "email": "foundation@djangoproject.com" } ], - "uuid": "36e61edd-53f1-429c-9034-31bb05c5482f", + "uuid": "8fa7433f-c05e-45b3-960d-60a5423327f7", "missing_resources": [], "modified_resources": [], - "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=09aa0328-c4d5-4413-8837-59f88d05be1c", + "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=e60b7109-14eb-47af-9568-09b4b630dca5", "keywords": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", @@ -1371,7 +1467,7 @@ "Documentation": "https://asgi.readthedocs.io/", "Further Documentation": "https://docs.djangoproject.com/en/stable/topics/async/#async-adapter-functions" }, - "project": "822e1834-92cc-4000-b43f-744e46b49e19", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", "filename": "", "primary_language": "Python", "description": "ASGI specs, helper code, and adapters\nasgiref\n=======\n\n.. image:: https://api.travis-ci.org/django/asgiref.svg\n :target: https://travis-ci.org/django/asgiref\n\n.. image:: https://img.shields.io/pypi/v/asgiref.svg\n :target: https://pypi.python.org/pypi/asgiref\n\nASGI is a standard for Python asynchronous web apps and servers to communicate\nwith each other, and positioned as an asynchronous successor to WSGI. You can\nread more at https://asgi.readthedocs.io/en/latest/\n\nThis package includes ASGI base libraries, such as:\n\n* Sync-to-async and async-to-sync function wrappers, ``asgiref.sync``\n* Server base classes, ``asgiref.server``\n* A WSGI-to-ASGI adapter, in ``asgiref.wsgi``\n\n\nFunction wrappers\n-----------------\n\nThese allow you to wrap or decorate async or sync functions to call them from\nthe other style (so you can call async functions from a synchronous thread,\nor vice-versa).\n\nIn particular:\n\n* AsyncToSync lets a synchronous subthread stop and wait while the async\n function is called on the main thread's event loop, and then control is\n returned to the thread when the async function is finished.\n\n* SyncToAsync lets async code call a synchronous function, which is run in\n a threadpool and control returned to the async coroutine when the synchronous\n function completes.\n\nThe idea is to make it easier to call synchronous APIs from async code and\nasynchronous APIs from synchronous code so it's easier to transition code from\none style to the other. In the case of Channels, we wrap the (synchronous)\nDjango view system with SyncToAsync to allow it to run inside the (asynchronous)\nASGI server.\n\nNote that exactly what threads things run in is very specific, and aimed to\nkeep maximum compatibility with old synchronous code. See\n\"Synchronous code & Threads\" below for a full explanation. By default,\n``sync_to_async`` will run all synchronous code in the program in the same\nthread for safety reasons; you can disable this for more performance with\n``@sync_to_async(thread_sensitive=False)``, but make sure that your code does\nnot rely on anything bound to threads (like database connections) when you do.\n\n\nThreadlocal replacement\n-----------------------\n\nThis is a drop-in replacement for ``threading.local`` that works with both\nthreads and asyncio Tasks. Even better, it will proxy values through from a\ntask-local context to a thread-local context when you use ``sync_to_async``\nto run things in a threadpool, and vice-versa for ``async_to_sync``.\n\nIf you instead want true thread- and task-safety, you can set\n``thread_critical`` on the Local object to ensure this instead.\n\n\nServer base classes\n-------------------\n\nIncludes a ``StatelessServer`` class which provides all the hard work of\nwriting a stateless server (as in, does not handle direct incoming sockets\nbut instead consumes external streams or sockets to work out what is happening).\n\nAn example of such a server would be a chatbot server that connects out to\na central chat server and provides a \"connection scope\" per user chatting to\nit. There's only one actual connection, but the server has to separate things\ninto several scopes for easier writing of the code.\n\nYou can see an example of this being used in `frequensgi `_.\n\n\nWSGI-to-ASGI adapter\n--------------------\n\nAllows you to wrap a WSGI application so it appears as a valid ASGI application.\n\nSimply wrap it around your WSGI application like so::\n\n asgi_application = WsgiToAsgi(wsgi_application)\n\nThe WSGI application will be run in a synchronous threadpool, and the wrapped\nASGI application will be one that accepts ``http`` class messages.\n\nPlease note that not all extended features of WSGI may be supported (such as\nfile handles for incoming POST bodies).\n\n\nDependencies\n------------\n\n``asgiref`` requires Python 3.5 or higher.\n\n\nContributing\n------------\n\nPlease refer to the\n`main Channels contributing docs `_.\n\n\nTesting\n'''''''\n\nTo run tests, make sure you have installed the ``tests`` extra with the package::\n\n cd asgiref/\n pip install -e .[tests]\n pytest\n\n\nBuilding the documentation\n''''''''''''''''''''''''''\n\nThe documentation uses `Sphinx `_::\n\n cd asgiref/docs/\n pip install sphinx\n\nTo build the docs, you can use the default tools::\n\n sphinx-build -b html . _build/html # or `make html`, if you've got make set up\n cd _build/html\n python -m http.server\n\n...or you can use ``sphinx-autobuild`` to run a server and rebuild/reload\nyour documentation changes automatically::\n\n pip install sphinx-autobuild\n sphinx-autobuild . _build/html\n\n\nImplementation Details\n----------------------\n\nSynchronous code & threads\n''''''''''''''''''''''''''\n\nThe ``asgiref.sync`` module provides two wrappers that let you go between\nasynchronous and synchronous code at will, while taking care of the rough edges\nfor you.\n\nUnfortunately, the rough edges are numerous, and the code has to work especially\nhard to keep things in the same thread as much as possible. Notably, the\nrestrictions we are working with are:\n\n* All synchronous code called through ``SyncToAsync`` and marked with\n ``thread_sensitive`` should run in the same thread as each other (and if the\n outer layer of the program is synchronous, the main thread)\n\n* If a thread already has a running async loop, ``AsyncToSync`` can't run things\n on that loop if it's blocked on synchronous code that is above you in the\n call stack.\n\nThe first compromise you get to might be that ``thread_sensitive`` code should\njust run in the same thread and not spawn in a sub-thread, fulfilling the first\nrestriction, but that immediately runs you into the second restriction.\n\nThe only real solution is to essentially have a variant of ThreadPoolExecutor\nthat executes any ``thread_sensitive`` code on the outermost synchronous\nthread - either the main thread, or a single spawned subthread.\n\nThis means you now have two basic states:\n\n* If the outermost layer of your program is synchronous, then all async code\n run through ``AsyncToSync`` will run in a per-call event loop in arbitary\n sub-threads, while all ``thread_sensitive`` code will run in the main thread.\n\n* If the outermost layer of your program is asynchronous, then all async code\n runs on the main thread's event loop, and all ``thread_sensitive`` synchronous\n code will run in a single shared sub-thread.\n\nCruicially, this means that in both cases there is a thread which is a shared\nresource that all ``thread_sensitive`` code must run on, and there is a chance\nthat this thread is currently blocked on its own ``AsyncToSync`` call. Thus,\n``AsyncToSync`` needs to act as an executor for thread code while it's blocking.\n\nThe ``CurrentThreadExecutor`` class provides this functionality; rather than\nsimply waiting on a Future, you can call its ``run_until_future`` method and\nit will run submitted code until that Future is done. This means that code\ninside the call can then run code on your thread.\n\n\nMaintenance and Security\n------------------------\n\nTo report security issues, please contact security@djangoproject.com. For GPG\nsignatures and more security process information, see\nhttps://docs.djangoproject.com/en/dev/internals/security/.\n\nTo report bugs or request new features, please open a new GitHub issue.\n\nThis repository is part of the Channels project. For the shepherd and maintenance team, please see the\n`main Channels readme `_.", @@ -1445,10 +1541,10 @@ "email": "foundation@djangoproject.com" } ], - "uuid": "3e7e870e-0afd-43a2-872c-e252c88e4033", + "uuid": "bef22e34-f8c3-463d-9d3e-46a55c3170e8", "missing_resources": [], "modified_resources": [], - "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=14f464f7-37f3-4378-8707-55f93846835e", + "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=f66d2b7c-233e-4a6a-93d8-1d17732704e9", "keywords": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", @@ -1492,8 +1588,8 @@ "version": "", "qualifiers": "", "subpath": "", - "project": "822e1834-92cc-4000-b43f-744e46b49e19", - "dependency_uid": "pkg:pypi/pytest?uuid=69f10055-c756-444a-a4be-760a4978ec33", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "dependency_uid": "pkg:pypi/pytest?uuid=ea2921dd-6dfd-4d20-b018-6d611f2c71e5", "for_package": 1, "datafile_resource": 1, "extracted_requirement": "pytest; extra == \"tests\"", @@ -1514,8 +1610,8 @@ "version": "", "qualifiers": "", "subpath": "", - "project": "822e1834-92cc-4000-b43f-744e46b49e19", - "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=5c0b0cd6-4d97-40dd-9b68-0bc139d33198", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=cd6e2840-3615-4f33-9e9b-1222026a1b90", "for_package": 1, "datafile_resource": 1, "extracted_requirement": "pytest-asyncio; extra == \"tests\"", @@ -1536,8 +1632,8 @@ "version": "", "qualifiers": "", "subpath": "", - "project": "822e1834-92cc-4000-b43f-744e46b49e19", - "dependency_uid": "pkg:pypi/pytest?uuid=1cc6674a-d2f8-4988-afc5-85e6722df0fb", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "dependency_uid": "pkg:pypi/pytest?uuid=d5506e2e-5172-4435-93e0-b4929f31d8d7", "for_package": 2, "datafile_resource": 18, "extracted_requirement": "pytest; extra == \"tests\"", @@ -1558,8 +1654,8 @@ "version": "", "qualifiers": "", "subpath": "", - "project": "822e1834-92cc-4000-b43f-744e46b49e19", - "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=5147952d-9189-49c9-bbf2-a41247d901e2", + "project": "cbd609b2-525a-4052-9860-201b879b20d9", + "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=ab7f2ac4-cf40-4717-8d41-067e66bad5aa", "for_package": 2, "datafile_resource": 18, "extracted_requirement": "pytest-asyncio; extra == \"tests\"", diff --git a/scanpipe/tests/data/image-with-symlinks/minitag.tar-expected-scan.json b/scanpipe/tests/data/image-with-symlinks/minitag.tar-expected-scan.json index c8c6c20d83..7a65178b5e 100644 --- a/scanpipe/tests/data/image-with-symlinks/minitag.tar-expected-scan.json +++ b/scanpipe/tests/data/image-with-symlinks/minitag.tar-expected-scan.json @@ -93,8 +93,8 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "license_detections": [], + "detected_license_expression": [], "copyrights": [], "holders": [], "authors": [], @@ -121,8 +121,8 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "license_detections": [], + "detected_license_expression": [], "copyrights": [], "holders": [], "authors": [], @@ -149,8 +149,8 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "license_detections": [], + "detected_license_expression": [], "copyrights": [], "holders": [], "authors": [], @@ -177,8 +177,8 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "license_detections": [], + "detected_license_expression": [], "copyrights": [], "holders": [], "authors": [], @@ -205,8 +205,8 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "license_detections": [], + "detected_license_expression": [], "copyrights": [], "holders": [], "authors": [], @@ -233,8 +233,8 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "license_detections": [], + "detected_license_expression": [], "copyrights": [], "holders": [], "authors": [], @@ -261,8 +261,8 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "license_detections": [], + "detected_license_expression": [], "copyrights": [], "holders": [], "authors": [], @@ -289,8 +289,8 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "license_detections": [], + "detected_license_expression": [], "copyrights": [], "holders": [], "authors": [], diff --git a/scanpipe/tests/pipes/test_output.py b/scanpipe/tests/pipes/test_output.py index 3c5b45cd86..0549aa8476 100644 --- a/scanpipe/tests/pipes/test_output.py +++ b/scanpipe/tests/pipes/test_output.py @@ -341,13 +341,6 @@ def test__adapt_value_for_xlsx_does_adapt_crlf_to_lf(self): self.assertEqual(result, "some \nsimple \nvalue\n") self.assertEqual(error, None) - def test__adapt_value_for_xlsx_does_adapt_license_expressions(self): - result, error = output._adapt_value_for_xlsx( - fieldname="license_expressions", value=["mit", "mit", "gpl-2.0"] - ) - self.assertEqual(result, "mit AND gpl-2.0") - self.assertEqual(error, None) - def test__adapt_value_for_xlsx_does_adapt_description_and_keeps_only_5_lines(self): twenty_lines = "\r\n".join(str(i) for i in range(20)) diff --git a/scanpipe/tests/pipes/test_rootfs.py b/scanpipe/tests/pipes/test_rootfs.py index 8d31bc5396..4e8c5e991f 100644 --- a/scanpipe/tests/pipes/test_rootfs.py +++ b/scanpipe/tests/pipes/test_rootfs.py @@ -120,7 +120,7 @@ def test_scanpipe_pipes_rootfs_tag_data_files_with_no_clues(self): path="root/user/bar.data", rootfs_path="/user/bar.data", file_type="data", - license_expressions=["apache-2.0"], + detected_license_expression="apache-2.0", ) rootfs.tag_data_files_with_no_clues(p1) resource1.refresh_from_db() diff --git a/scanpipe/tests/pipes/test_scancode.py b/scanpipe/tests/pipes/test_scancode.py index 873bdb7d53..496565f4a5 100644 --- a/scanpipe/tests/pipes/test_scancode.py +++ b/scanpipe/tests/pipes/test_scancode.py @@ -208,12 +208,8 @@ def test_scanpipe_pipes_scancode_scan_file_and_save_results(self): scancode.save_scan_file_results(codebase_resource2, scan_results, scan_errors) codebase_resource2.refresh_from_db() self.assertEqual("scanned", codebase_resource2.status) - expected = [ - "apache-2.0", - "apache-2.0", - "warranty-disclaimer", - ] - self.assertEqual(expected, codebase_resource2.license_expressions) + expected = "apache-2.0 AND warranty-disclaimer" + self.assertEqual(expected, codebase_resource2.detected_license_expression) def test_scanpipe_pipes_scancode_scan_file_and_save_results_timeout_error(self): project1 = Project.objects.create(name="Analysis") @@ -241,7 +237,7 @@ def test_scanpipe_pipes_scancode_scan_file_and_save_results_timeout_error(self): @mock.patch("scanpipe.pipes.scancode._scan_resource") def test_scanpipe_pipes_scancode_scan_for_files(self, mock_scan_resource): - scan_results = {"license_expressions": ["mit"]} + scan_results = {"detected_license_expression": "mit"} scan_errors = [] mock_scan_resource.return_value = scan_results, scan_errors @@ -262,10 +258,10 @@ def test_scanpipe_pipes_scancode_scan_for_files(self, mock_scan_resource): resource1.refresh_from_db() self.assertEqual("scanned", resource1.status) - self.assertEqual(["mit"], resource1.license_expressions) + self.assertEqual("mit", resource1.detected_license_expression) resource2.refresh_from_db() self.assertEqual("scanned", resource2.status) - self.assertEqual(["mit"], resource2.license_expressions) + self.assertEqual("mit", resource2.detected_license_expression) resource3 = CodebaseResource.objects.create( project=project1, @@ -278,7 +274,7 @@ def test_scanpipe_pipes_scancode_scan_for_files(self, mock_scan_resource): scancode.scan_for_files(project1) resource3.refresh_from_db() self.assertEqual("scanned-with-error", resource3.status) - self.assertEqual([], resource3.license_expressions) + self.assertEqual("", resource3.detected_license_expression) self.assertEqual(["copy"], resource3.copyrights) def test_scanpipe_pipes_scancode_scan_for_package_data_timeout(self): @@ -391,19 +387,19 @@ def test_scanpipe_pipes_scancode_create_codebase_resources_inject_policy(self): resources = project.codebaseresources resource1 = resources.get(path__endswith="asgiref-3.3.0.dist-info/LICENSE") - self.assertEqual("bsd-new", resource1.licenses[0]["key"]) + self.assertEqual("bsd-new", resource1.license_detections[0]["key"]) self.assertNotIn("bsd-new", license_policies_index) - self.assertIsNone(resource1.licenses[0]["policy"]) + self.assertIsNone(resource1.license_detections[0]["policy"]) resource2 = resources.get(path__endswith="asgiref/timeout.py") - self.assertEqual("apache-2.0", resource2.licenses[0]["key"]) + self.assertEqual("apache-2.0", resource2.license_detections[0]["key"]) expected = { "label": "Approved License", "color_code": "#008000", "license_key": "apache-2.0", "compliance_alert": "", } - self.assertEqual(expected, resource2.licenses[0]["policy"]) + self.assertEqual(expected, resource2.license_detections[0]["policy"]) def test_scanpipe_pipes_scancode_run_scancode(self): project = Project.objects.create(name="name with space") diff --git a/scanpipe/tests/test_models.py b/scanpipe/tests/test_models.py index 039141eef1..86f1bebea5 100644 --- a/scanpipe/tests/test_models.py +++ b/scanpipe/tests/test_models.py @@ -826,21 +826,9 @@ def test_scanpipe_codebase_resource_model_file_content(self): line_count = len(resource.file_content.split("\n")) self.assertEqual(101, line_count) - def test_scanpipe_codebase_resource_model_unique_license_expressions(self): - resource = CodebaseResource(project=self.project1) - resource.license_expressions = [ - "mit", - "apache-2.0", - "apache-2.0", - "mit AND apache-2.0", - "gpl-3.0", - ] - expected = ["apache-2.0", "gpl-3.0", "mit", "mit AND apache-2.0"] - self.assertEqual(expected, resource.unique_license_expressions) - def test_scanpipe_pipes_codebase_resources_inject_licenses_policy(self): resource = CodebaseResource( - licenses=[ + license_detections=[ {"key": "mit"}, {"key": "apache-2.0"}, {"key": "gpl-3.0"}, @@ -870,13 +858,13 @@ def test_scanpipe_pipes_codebase_resources_inject_licenses_policy(self): ] resource.inject_licenses_policy(license_policies_index) - self.assertEqual(expected, resource.licenses) + self.assertEqual(expected, resource.license_detections) def test_scanpipe_pipes_scancode_codebase_resources_inject_policy_on_save(self): scanpipe_app.license_policies_index = license_policies_index resource = CodebaseResource.objects.create( - project=self.project1, path="file", licenses=[{"key": "gpl-3.0"}] + project=self.project1, path="file", license_detections=[{"key": "gpl-3.0"}] ) expected = [ { @@ -889,14 +877,14 @@ def test_scanpipe_pipes_scancode_codebase_resources_inject_policy_on_save(self): }, } ] - self.assertEqual(expected, resource.licenses) + self.assertEqual(expected, resource.license_detections) - resource.licenses = [{"key": "not-in-index"}] + resource.license_detections = [{"key": "not-in-index"}] resource.save() expected = [{"key": "not-in-index", "policy": None}] - self.assertEqual(expected, resource.licenses) + self.assertEqual(expected, resource.license_detections) - resource.licenses = [{"key": "apache-2.0"}] + resource.license_detections = [{"key": "apache-2.0"}] resource.save() expected = [ { @@ -909,7 +897,7 @@ def test_scanpipe_pipes_scancode_codebase_resources_inject_policy_on_save(self): }, } ] - self.assertEqual(expected, resource.licenses) + self.assertEqual(expected, resource.license_detections) def test_scanpipe_codebase_resource_model_compliance_alert(self): scanpipe_app.license_policies_index = license_policies_index @@ -918,29 +906,29 @@ def test_scanpipe_codebase_resource_model_compliance_alert(self): license_key = "bsd-new" self.assertNotIn(license_key, scanpipe_app.license_policies_index) - resource.licenses = [{"key": license_key}] + resource.license_detections = [{"key": license_key}] resource.save() self.assertEqual("missing", resource.compliance_alert) license_key = "apache-2.0" self.assertIn(license_key, scanpipe_app.license_policies_index) - resource.licenses = [{"key": license_key}] + resource.license_detections = [{"key": license_key}] resource.save() self.assertEqual("ok", resource.compliance_alert) license_key = "mpl-2.0" self.assertIn(license_key, scanpipe_app.license_policies_index) - resource.licenses = [{"key": license_key}] + resource.license_detections = [{"key": license_key}] resource.save() self.assertEqual("warning", resource.compliance_alert) license_key = "gpl-3.0" self.assertIn(license_key, scanpipe_app.license_policies_index) - resource.licenses = [{"key": license_key}] + resource.license_detections = [{"key": license_key}] resource.save() self.assertEqual("error", resource.compliance_alert) - resource.licenses = [ + resource.license_detections = [ {"key": "apache-2.0"}, {"key": "mpl-2.0"}, {"key": "gpl-3.0"}, @@ -950,11 +938,14 @@ def test_scanpipe_codebase_resource_model_compliance_alert(self): def test_scanpipe_scan_fields_model_mixin_methods(self): expected = [ + "detected_license_expression", + "detected_license_expression_spdx", + "license_detections", + "license_clues", + "percentage_of_license_text", "copyrights", "holders", "authors", - "licenses", - "license_expressions", "emails", "urls", ] @@ -965,19 +956,19 @@ def test_scanpipe_scan_fields_model_mixin_methods(self): ) scan_results = { - "license_expressions": ["mit"], + "detected_license_expression": "mit", "name": "name", "non_resource_field": "value", } resource.set_scan_results(scan_results, save=True) resource.refresh_from_db() self.assertEqual("", resource.name) - self.assertEqual(["mit"], resource.license_expressions) + self.assertEqual("mit", resource.detected_license_expression) resource2 = CodebaseResource.objects.create(project=self.project1, path="file2") resource2.copy_scan_results(from_instance=resource, save=True) resource.refresh_from_db() - self.assertEqual(["mit"], resource2.license_expressions) + self.assertEqual("mit", resource2.detected_license_expression) def test_scanpipe_codebase_resource_queryset_methods(self): CodebaseResource.objects.all().delete() @@ -1040,7 +1031,7 @@ def test_scanpipe_codebase_resource_queryset_methods(self): self.assertIn(directory, qs) self.assertNotIn(symlink, qs) - file.licenses = [{"key": "bsd-new", "name": "BSD-3-Clause"}] + file.license_detections = [{"key": "bsd-new", "name": "BSD-3-Clause"}] file.save() qs = CodebaseResource.objects.has_licenses() self.assertEqual(1, len(qs)) @@ -1057,19 +1048,7 @@ def test_scanpipe_codebase_resource_queryset_methods(self): qs = CodebaseResource.objects.unknown_license() self.assertEqual(0, len(qs)) - file.license_expressions = ["gpl-3.0", "unknown"] - file.save() - qs = CodebaseResource.objects.unknown_license() - self.assertEqual(1, len(qs)) - self.assertIn(file, qs) - - file.license_expressions = ["unknown AND mit", "gpl-3.0-plus"] - file.save() - qs = CodebaseResource.objects.unknown_license() - self.assertEqual(1, len(qs)) - self.assertIn(file, qs) - - file.license_expressions = ["gpl-3.0-plus OR unknown"] + file.detected_license_expression = "gpl-3.0 AND unknown" file.save() qs = CodebaseResource.objects.unknown_license() self.assertEqual(1, len(qs)) @@ -1079,7 +1058,7 @@ def test_scanpipe_codebase_resource_queryset_methods(self): self.assertEqual(0, qs.count()) qs = CodebaseResource.objects.has_value("type") self.assertEqual(3, qs.count()) - qs = CodebaseResource.objects.has_value("license_expressions") + qs = CodebaseResource.objects.has_value("detected_license_expression") self.assertEqual(1, qs.count()) qs = CodebaseResource.objects.has_value("copyrights") self.assertEqual(0, qs.count()) @@ -1127,13 +1106,15 @@ def test_scanpipe_codebase_resource_queryset_licenses_categories(self): resource1 = CodebaseResource.objects.create( project=self.project1, path="1", - licenses=[{"key": "gpl-3.0", "category": "Copyleft"}], + license_detections=[{"key": "gpl-3.0", "category": "Copyleft"}], ) resource2 = CodebaseResource.objects.create( project=self.project1, path="2", - licenses=[{"key": "lgpl-3.0-plus", "category": "Copyleft Limited"}], + license_detections=[ + {"key": "lgpl-3.0-plus", "category": "Copyleft Limited"} + ], ) resource_qs = self.project1.codebaseresources @@ -1520,8 +1501,8 @@ def test_scanpipe_discovered_package_get_declared_license_expression(self): package.declared_license_expression = "" package.save() - self.assertEqual(expression, package.declared_license_expression) - self.assertEqual("", package.declared_license_expression_spdx) + self.assertEqual("", package.declared_license_expression) + self.assertEqual(spdx, package.declared_license_expression_spdx) self.assertEqual(expression, package.get_declared_license_expression()) package.declared_license_expression_spdx = "" diff --git a/scanpipe/tests/test_views.py b/scanpipe/tests/test_views.py index f9991b0b3d..0444b47303 100644 --- a/scanpipe/tests/test_views.py +++ b/scanpipe/tests/test_views.py @@ -453,7 +453,9 @@ def test_scanpipe_views_codebase_resource_details_annotations_missing_policy(sel resource1 = CodebaseResource.objects.create( project=self.project1, path="resource1", - licenses=[{"key": "key", "policy": None, "start_line": 1, "end_line": 2}], + license_detections=[ + {"key": "key", "policy": None, "start_line": 1, "end_line": 2} + ], ) url = resource1.get_absolute_url() diff --git a/scanpipe/views.py b/scanpipe/views.py index 731ee14890..f7cea27664 100644 --- a/scanpipe/views.py +++ b/scanpipe/views.py @@ -1104,7 +1104,7 @@ def get_annotation_text(entry, field_name, value_key): https://github.com/nexB/scancode-results-analyzer/blob/6c132bc20153d5c96929c f378bd0f06d83db9005/src/results_analyze/analyzer_plugin.py#L131-L198 """ - if field_name == "licenses": + if field_name == "license_detections": return entry.get("matched_rule", {}).get("license_expression") return entry.get(value_key) From 03cd3146118fc94eeb3f4cb1f9b03b6e48008149 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Mon, 8 May 2023 12:35:59 +0400 Subject: [PATCH 18/53] Update test expected results files #569 Signed-off-by: Thomas Druez --- scanpipe/models.py | 1 + .../data/alpine_3_15_4_scan_codebase.json | 1701 ++- ...asgiref-3.3.0_load_inventory_expected.json | 669 +- .../data/basic-rootfs_root_filesystems.json | 118 +- ...-0.6.0-py3-none-any.whl_scan_codebase.json | 105 +- scanpipe/tests/data/debian_scan_codebase.json | 118 +- scanpipe/tests/data/flume-ng-node-d2d.json | 399 +- .../gcr_io_distroless_base_scan_codebase.json | 12328 +++++++++++----- .../minitag.tar-expected-scan.json | 40 +- .../data/is-npm-1.0.0_scan_codebase.json | 66 +- scanpipe/tests/regen_test_data.py | 3 + scanpipe/tests/test_api.py | 2 +- 12 files changed, 11101 insertions(+), 4449 deletions(-) diff --git a/scanpipe/models.py b/scanpipe/models.py index 4c0f904c7e..9ff67691c1 100644 --- a/scanpipe/models.py +++ b/scanpipe/models.py @@ -1948,6 +1948,7 @@ def as_spdx(self): """Return this CodebaseResource as an SPDX Package entry.""" from scanpipe.pipes import spdx + # TODO: test_scanpipe_pipes_outputs_to_spdx spdx_license_keys = [ license["spdx_license_key"] for license in self.license_detections ] diff --git a/scanpipe/tests/data/alpine_3_15_4_scan_codebase.json b/scanpipe/tests/data/alpine_3_15_4_scan_codebase.json index 83d763c606..9f9f6194d5 100644 --- a/scanpipe/tests/data/alpine_3_15_4_scan_codebase.json +++ b/scanpipe/tests/data/alpine_3_15_4_scan_codebase.json @@ -132,8 +132,34 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "gpl-2.0", - "declared_license": "GPL-2.0-only", + "holder": "", + "declared_license_expression": "gpl-2.0", + "declared_license_expression_spdx": "GPL-2.0-only", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/spdx_license_id_gpl-2.0-only_for_gpl-2.0.RULE", + "start_line": 1, + "matched_text": "gpl-2.0-only", + "match_coverage": 100.0, + "matched_length": 4, + "rule_relevance": 100, + "rule_identifier": "spdx_license_id_gpl-2.0-only_for_gpl-2.0.RULE", + "license_expression": "gpl-2.0" + } + ], + "identifier": "gpl_2_0-7541c21a-b2c9-c697-2794-bf0cfcdf32f9", + "license_expression": "gpl-2.0" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": [], + "extracted_license_statement": "GPL-2.0-only", "notice_text": "", "source_packages": [ "pkg:alpine/alpine-baselayout@3.2.0-r18" @@ -175,8 +201,6 @@ ] }, "package_uid": "pkg:alpine/alpine-baselayout@3.2.0-r18?arch=x86_64&uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], @@ -216,8 +240,34 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "mit", - "declared_license": "MIT", + "holder": "", + "declared_license_expression": "mit", + "declared_license_expression_spdx": "MIT", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-spdx-id", + "end_line": 1, + "rule_url": null, + "start_line": 1, + "matched_text": "mit", + "match_coverage": 100.0, + "matched_length": 1, + "rule_relevance": 100, + "rule_identifier": "spdx-license-identifier-mit-1b937028f397e2c5fe4eb6a0abd781ab80f9eeff", + "license_expression": "mit" + } + ], + "identifier": "mit-704ced38-ea60-e53b-6c20-390fe781b1c3", + "license_expression": "mit" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": [], + "extracted_license_statement": "MIT", "notice_text": "", "source_packages": [ "pkg:alpine/alpine-keys@2.4-r1" @@ -379,8 +429,6 @@ ] }, "package_uid": "pkg:alpine/alpine-keys@2.4-r1?arch=x86_64&uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], @@ -420,16 +468,40 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "gpl-2.0", - "declared_license": "GPL-2.0-only", + "holder": "", + "declared_license_expression": "gpl-2.0", + "declared_license_expression_spdx": "GPL-2.0-only", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/spdx_license_id_gpl-2.0-only_for_gpl-2.0.RULE", + "start_line": 1, + "matched_text": "gpl-2.0-only", + "match_coverage": 100.0, + "matched_length": 4, + "rule_relevance": 100, + "rule_identifier": "spdx_license_id_gpl-2.0-only_for_gpl-2.0.RULE", + "license_expression": "gpl-2.0" + } + ], + "identifier": "gpl_2_0-7541c21a-b2c9-c697-2794-bf0cfcdf32f9", + "license_expression": "gpl-2.0" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": [], + "extracted_license_statement": "GPL-2.0-only", "notice_text": "", "source_packages": [ "pkg:alpine/apk-tools@2.12.7-r3" ], "extra_data": {}, "package_uid": "pkg:alpine/apk-tools@2.12.7-r3?arch=x86_64&uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], @@ -469,8 +541,34 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "gpl-2.0", - "declared_license": "GPL-2.0-only", + "holder": "", + "declared_license_expression": "gpl-2.0", + "declared_license_expression_spdx": "GPL-2.0-only", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/spdx_license_id_gpl-2.0-only_for_gpl-2.0.RULE", + "start_line": 1, + "matched_text": "gpl-2.0-only", + "match_coverage": 100.0, + "matched_length": 4, + "rule_relevance": 100, + "rule_identifier": "spdx_license_id_gpl-2.0-only_for_gpl-2.0.RULE", + "license_expression": "gpl-2.0" + } + ], + "identifier": "gpl_2_0-7541c21a-b2c9-c697-2794-bf0cfcdf32f9", + "license_expression": "gpl-2.0" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": [], + "extracted_license_statement": "GPL-2.0-only", "notice_text": "", "source_packages": [ "pkg:alpine/busybox@1.34.1-r5" @@ -488,8 +586,6 @@ ] }, "package_uid": "pkg:alpine/busybox@1.34.1-r5?arch=x86_64&uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], @@ -529,8 +625,34 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "mpl-2.0 AND mit", - "declared_license": "MPL-2.0 AND MIT", + "holder": "", + "declared_license_expression": "mpl-2.0 AND mit", + "declared_license_expression_spdx": "MPL-2.0 AND MIT", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-spdx-id", + "end_line": 1, + "rule_url": null, + "start_line": 1, + "matched_text": "mpl-2.0 AND mit", + "match_coverage": 100.0, + "matched_length": 5, + "rule_relevance": 100, + "rule_identifier": "spdx-license-identifier-mpl-2.0 AND mit-5514313e881fb20dc746d1ac1e3a53a643c808d7", + "license_expression": "mpl-2.0 AND mit" + } + ], + "identifier": "mpl_2_0_and_mit-988cb9df-c9be-c91d-c7e4-896f96e84eb8", + "license_expression": "mpl-2.0 AND mit" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": [], + "extracted_license_statement": "MPL-2.0 AND MIT", "notice_text": "", "source_packages": [ "pkg:alpine/ca-certificates@20211220-r0" @@ -548,8 +670,6 @@ ] }, "package_uid": "pkg:alpine/ca-certificates-bundle@20211220-r0?arch=x86_64&uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], @@ -589,16 +709,40 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "bsd-simplified AND bsd-new", - "declared_license": "BSD-2-Clause AND BSD-3-Clause", + "holder": "", + "declared_license_expression": "bsd-simplified AND bsd-new", + "declared_license_expression_spdx": "BSD-2-Clause AND BSD-3-Clause", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-spdx-id", + "end_line": 1, + "rule_url": null, + "start_line": 1, + "matched_text": "bsd-2-clause AND bsd-3-clause", + "match_coverage": 100.0, + "matched_length": 7, + "rule_relevance": 100, + "rule_identifier": "spdx-license-identifier-bsd-simplified AND bsd-new-dc707a661bb1da34ff773b7e9955e0235b3b3f74", + "license_expression": "bsd-simplified AND bsd-new" + } + ], + "identifier": "bsd_simplified_and_bsd_new-73e0acf3-001a-667e-f37b-135c6b8a5cad", + "license_expression": "bsd-simplified AND bsd-new" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": [], + "extracted_license_statement": "BSD-2-Clause AND BSD-3-Clause", "notice_text": "", "source_packages": [ "pkg:alpine/libc-dev@0.7.2-r3" ], "extra_data": {}, "package_uid": "pkg:alpine/libc-utils@0.7.2-r3?arch=x86_64&uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], @@ -638,8 +782,34 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "openssl-ssleay", - "declared_license": "OpenSSL", + "holder": "", + "declared_license_expression": "openssl-ssleay", + "declared_license_expression_spdx": "OpenSSL", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-spdx-id", + "end_line": 1, + "rule_url": null, + "start_line": 1, + "matched_text": "openssl", + "match_coverage": 100.0, + "matched_length": 1, + "rule_relevance": 100, + "rule_identifier": "spdx-license-identifier-openssl-ssleay-b5dd48b21e3399670d584d4ade9a9791a24c58cd", + "license_expression": "openssl-ssleay" + } + ], + "identifier": "openssl_ssleay-5eedc4a6-a77c-b373-2ac4-55bb8c004773", + "license_expression": "openssl-ssleay" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": [], + "extracted_license_statement": "OpenSSL", "notice_text": "", "source_packages": [ "pkg:alpine/openssl@1.1.1n-r0" @@ -681,8 +851,6 @@ ] }, "package_uid": "pkg:alpine/libcrypto1.1@1.1.1n-r0?arch=x86_64&uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], @@ -722,8 +890,34 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "isc AND (bsd-new OR mit)", - "declared_license": "ISC AND (BSD-3-Clause OR MIT)", + "holder": "", + "declared_license_expression": "isc AND (bsd-new OR mit)", + "declared_license_expression_spdx": "ISC AND (BSD-3-Clause OR MIT)", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-spdx-id", + "end_line": 1, + "rule_url": null, + "start_line": 1, + "matched_text": "isc AND (bsd-3-clause OR mit)", + "match_coverage": 100.0, + "matched_length": 7, + "rule_relevance": 100, + "rule_identifier": "spdx-license-identifier-isc AND (bsd-new OR mit)-7471dfe24fdc3b7a8943273ac320469f644d2688", + "license_expression": "isc AND (bsd-new OR mit)" + } + ], + "identifier": "isc_and__bsd_new_or_mit-d4c1876e-a168-ee43-975a-1df35f85f171", + "license_expression": "isc AND (bsd-new OR mit)" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": [], + "extracted_license_statement": "ISC AND (BSD-3-Clause OR MIT)", "notice_text": "", "source_packages": [ "pkg:alpine/libretls@3.3.4-r3" @@ -741,8 +935,6 @@ ] }, "package_uid": "pkg:alpine/libretls@3.3.4-r3?arch=x86_64&uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], @@ -782,8 +974,34 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "openssl-ssleay", - "declared_license": "OpenSSL", + "holder": "", + "declared_license_expression": "openssl-ssleay", + "declared_license_expression_spdx": "OpenSSL", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-spdx-id", + "end_line": 1, + "rule_url": null, + "start_line": 1, + "matched_text": "openssl", + "match_coverage": 100.0, + "matched_length": 1, + "rule_relevance": 100, + "rule_identifier": "spdx-license-identifier-openssl-ssleay-b5dd48b21e3399670d584d4ade9a9791a24c58cd", + "license_expression": "openssl-ssleay" + } + ], + "identifier": "openssl_ssleay-5eedc4a6-a77c-b373-2ac4-55bb8c004773", + "license_expression": "openssl-ssleay" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": [], + "extracted_license_statement": "OpenSSL", "notice_text": "", "source_packages": [ "pkg:alpine/openssl@1.1.1n-r0" @@ -801,8 +1019,6 @@ ] }, "package_uid": "pkg:alpine/libssl1.1@1.1.1n-r0?arch=x86_64&uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], @@ -842,8 +1058,34 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "mit", - "declared_license": "MIT", + "holder": "", + "declared_license_expression": "mit", + "declared_license_expression_spdx": "MIT", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-spdx-id", + "end_line": 1, + "rule_url": null, + "start_line": 1, + "matched_text": "mit", + "match_coverage": 100.0, + "matched_length": 1, + "rule_relevance": 100, + "rule_identifier": "spdx-license-identifier-mit-1b937028f397e2c5fe4eb6a0abd781ab80f9eeff", + "license_expression": "mit" + } + ], + "identifier": "mit-704ced38-ea60-e53b-6c20-390fe781b1c3", + "license_expression": "mit" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": [], + "extracted_license_statement": "MIT", "notice_text": "", "source_packages": [ "pkg:alpine/musl@1.2.2-r7" @@ -861,8 +1103,6 @@ ] }, "package_uid": "pkg:alpine/musl@1.2.2-r7?arch=x86_64&uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], @@ -902,16 +1142,40 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "mit AND bsd-new AND gpl-2.0-plus", - "declared_license": "MIT BSD GPL2+", + "holder": "", + "declared_license_expression": "mit AND bsd-new AND gpl-2.0-plus", + "declared_license_expression_spdx": "MIT AND BSD-3-Clause AND GPL-2.0-or-later", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-spdx-id", + "end_line": 1, + "rule_url": null, + "start_line": 1, + "matched_text": "mit AND bsd-3-clause AND gpl-2.0-or-later", + "match_coverage": 100.0, + "matched_length": 11, + "rule_relevance": 100, + "rule_identifier": "spdx-license-identifier-mit AND bsd-new AND gpl-2.0-plus-a42688b31c355df3bef97265e8ca20360250716e", + "license_expression": "mit AND bsd-new AND gpl-2.0-plus" + } + ], + "identifier": "mit_and_bsd_new_and_gpl_2_0_plus-57deb96b-d294-ad77-12c0-3e0e3c5d55f3", + "license_expression": "mit AND bsd-new AND gpl-2.0-plus" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": [], + "extracted_license_statement": "MIT BSD GPL2+", "notice_text": "", "source_packages": [ "pkg:alpine/musl@1.2.2-r7" ], "extra_data": {}, "package_uid": "pkg:alpine/musl-utils@1.2.2-r7?arch=x86_64&uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], @@ -951,16 +1215,40 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "gpl-2.0", - "declared_license": "GPL-2.0-only", + "holder": "", + "declared_license_expression": "gpl-2.0", + "declared_license_expression_spdx": "GPL-2.0-only", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/spdx_license_id_gpl-2.0-only_for_gpl-2.0.RULE", + "start_line": 1, + "matched_text": "gpl-2.0-only", + "match_coverage": 100.0, + "matched_length": 4, + "rule_relevance": 100, + "rule_identifier": "spdx_license_id_gpl-2.0-only_for_gpl-2.0.RULE", + "license_expression": "gpl-2.0" + } + ], + "identifier": "gpl_2_0-7541c21a-b2c9-c697-2794-bf0cfcdf32f9", + "license_expression": "gpl-2.0" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": [], + "extracted_license_statement": "GPL-2.0-only", "notice_text": "", "source_packages": [ "pkg:alpine/pax-utils@1.3.3-r0" ], "extra_data": {}, "package_uid": "pkg:alpine/scanelf@1.3.3-r0?arch=x86_64&uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], @@ -1000,16 +1288,40 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "gpl-2.0", - "declared_license": "GPL-2.0-only", + "holder": "", + "declared_license_expression": "gpl-2.0", + "declared_license_expression_spdx": "GPL-2.0-only", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/spdx_license_id_gpl-2.0-only_for_gpl-2.0.RULE", + "start_line": 1, + "matched_text": "gpl-2.0-only", + "match_coverage": 100.0, + "matched_length": 4, + "rule_relevance": 100, + "rule_identifier": "spdx_license_id_gpl-2.0-only_for_gpl-2.0.RULE", + "license_expression": "gpl-2.0" + } + ], + "identifier": "gpl_2_0-7541c21a-b2c9-c697-2794-bf0cfcdf32f9", + "license_expression": "gpl-2.0" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": [], + "extracted_license_statement": "GPL-2.0-only", "notice_text": "", "source_packages": [ "pkg:alpine/busybox@1.34.1-r5" ], "extra_data": {}, "package_uid": "pkg:alpine/ssl_client@1.34.1-r5?arch=x86_64&uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], @@ -1049,8 +1361,34 @@ "sha256": "", "sha512": "", "copyright": "", - "license_expression": "zlib", - "declared_license": "Zlib", + "holder": "", + "declared_license_expression": "zlib", + "declared_license_expression_spdx": "Zlib", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-spdx-id", + "end_line": 1, + "rule_url": null, + "start_line": 1, + "matched_text": "zlib", + "match_coverage": 100.0, + "matched_length": 1, + "rule_relevance": 100, + "rule_identifier": "spdx-license-identifier-zlib-2023583c09c2e5aa14d564036e304041c0f1ace3", + "license_expression": "zlib" + } + ], + "identifier": "zlib-f742edbd-d484-7a19-19f0-f4582738f149", + "license_expression": "zlib" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": [], + "extracted_license_statement": "Zlib", "notice_text": "", "source_packages": [ "pkg:alpine/zlib@1.2.12-r0" @@ -1068,8 +1406,6 @@ ] }, "package_uid": "pkg:alpine/zlib@1.2.12-r0?arch=x86_64&uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], @@ -1095,8 +1431,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1123,8 +1462,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1153,8 +1495,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1181,8 +1526,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1209,8 +1557,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1237,8 +1588,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1265,8 +1619,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1293,8 +1650,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1321,8 +1681,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1351,8 +1714,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1381,8 +1747,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1411,8 +1780,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1441,8 +1813,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1471,8 +1846,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1499,8 +1877,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1527,8 +1908,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1555,8 +1939,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1583,8 +1970,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1611,8 +2001,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1641,8 +2034,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1671,8 +2067,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1701,8 +2100,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1731,8 +2133,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1761,8 +2166,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1789,8 +2197,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1819,8 +2230,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1847,8 +2261,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1875,8 +2292,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1905,8 +2325,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1933,8 +2356,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1963,8 +2389,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1993,8 +2422,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2023,8 +2455,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2053,8 +2488,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2083,8 +2521,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2111,8 +2552,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2141,8 +2585,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2169,8 +2616,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2197,8 +2647,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2225,8 +2678,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2253,8 +2709,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2281,8 +2740,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2309,8 +2771,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2337,8 +2802,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2367,8 +2835,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2395,8 +2866,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2423,8 +2897,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2453,8 +2930,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2481,8 +2961,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2509,8 +2992,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2537,8 +3023,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2565,8 +3054,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2593,8 +3085,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2621,8 +3116,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2651,8 +3149,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2679,8 +3180,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2709,8 +3213,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2739,8 +3246,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2769,8 +3279,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2799,8 +3312,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2829,8 +3345,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2859,8 +3378,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2889,8 +3411,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2919,8 +3444,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2947,8 +3475,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2975,8 +3506,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3005,8 +3539,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3033,8 +3570,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3063,8 +3603,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3093,8 +3636,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3123,8 +3669,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3151,8 +3700,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3181,8 +3733,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3209,8 +3764,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3239,8 +3797,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3267,8 +3828,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3295,8 +3859,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3323,8 +3890,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3351,8 +3921,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3379,8 +3952,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3407,8 +3983,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3435,8 +4014,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3463,8 +4045,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3491,8 +4076,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3521,8 +4109,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3551,8 +4142,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3581,8 +4175,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3611,8 +4208,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3641,8 +4241,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3669,8 +4272,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3697,8 +4303,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3725,8 +4334,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3755,8 +4367,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3783,8 +4398,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3811,8 +4429,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3839,8 +4460,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3867,8 +4491,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3895,8 +4522,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3923,8 +4553,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3951,8 +4584,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3979,8 +4615,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4007,8 +4646,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4035,8 +4677,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4065,8 +4710,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4095,8 +4743,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4125,8 +4776,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4153,8 +4807,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4181,8 +4838,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4209,8 +4869,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4237,8 +4900,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4265,8 +4931,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4295,8 +4964,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4325,8 +4997,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4355,8 +5030,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4385,8 +5063,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4415,8 +5096,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4445,8 +5129,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4473,8 +5160,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4501,8 +5191,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4531,8 +5224,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4561,8 +5257,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4591,8 +5290,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4621,8 +5323,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4649,8 +5354,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4677,8 +5385,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4705,8 +5416,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4733,8 +5447,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4761,8 +5478,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4789,8 +5509,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4817,8 +5540,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4845,8 +5571,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4873,8 +5602,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4901,8 +5633,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4931,8 +5666,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4961,8 +5699,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4991,8 +5732,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5021,8 +5765,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5051,8 +5798,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5081,8 +5831,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5111,8 +5864,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5141,8 +5897,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5171,8 +5930,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5201,8 +5963,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5231,8 +5996,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5261,8 +6029,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5291,8 +6062,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5321,8 +6095,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5351,8 +6128,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5381,8 +6161,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5411,8 +6194,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5439,8 +6225,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5467,8 +6256,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5495,8 +6287,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5523,8 +6318,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5551,8 +6349,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5579,8 +6380,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5607,8 +6411,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5635,8 +6442,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5663,8 +6473,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5691,8 +6504,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5719,8 +6535,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5749,8 +6568,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5777,8 +6599,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5805,8 +6630,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5833,8 +6661,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5861,8 +6692,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5889,8 +6723,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5917,8 +6754,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5945,8 +6785,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5973,8 +6816,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6001,8 +6847,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6029,8 +6878,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6057,8 +6909,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6085,8 +6940,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6113,8 +6971,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6141,8 +7002,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6169,8 +7033,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6197,8 +7064,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6225,8 +7095,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], diff --git a/scanpipe/tests/data/asgiref-3.3.0_load_inventory_expected.json b/scanpipe/tests/data/asgiref-3.3.0_load_inventory_expected.json index ca7780f18e..197dabf27e 100644 --- a/scanpipe/tests/data/asgiref-3.3.0_load_inventory_expected.json +++ b/scanpipe/tests/data/asgiref-3.3.0_load_inventory_expected.json @@ -70,13 +70,52 @@ "sha512": "", "copyright": "", "holder": "", - "declared_license_expression": "", - "declared_license_expression_spdx": "", - "license_detections": {}, + "declared_license_expression": "bsd-new", + "declared_license_expression_spdx": "BSD-3-Clause", + "license_detections": [ + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_89.RULE", + "start_line": 1, + "matched_text": "license BSD", + "match_coverage": 100.0, + "matched_length": 2, + "rule_relevance": 99, + "rule_identifier": "bsd-new_89.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-261898a0-0118-87c4-7092-14e4ff134882", + "license_expression": "bsd-new" + }, + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_bsd_license.RULE", + "start_line": 1, + "matched_text": "['License :: OSI Approved :: BSD License']", + "match_coverage": 100.0, + "matched_length": 5, + "rule_relevance": 99, + "rule_identifier": "pypi_bsd_license.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-f4e99f86-00ab-18d9-a65d-a3a12767dcf5", + "license_expression": "bsd-new" + } + ], "other_license_expression": "", "other_license_expression_spdx": "", - "other_license_detections": {}, - "extracted_license_statement": "", + "other_license_detections": [], + "extracted_license_statement": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", "notice_text": "", "source_packages": [], "extra_data": { @@ -85,8 +124,6 @@ "Further Documentation": "https://docs.djangoproject.com/en/stable/topics/async/#async-adapter-functions" }, "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], @@ -140,13 +177,52 @@ "sha512": "", "copyright": "", "holder": "", - "declared_license_expression": "", - "declared_license_expression_spdx": "", - "license_detections": {}, + "declared_license_expression": "bsd-new", + "declared_license_expression_spdx": "BSD-3-Clause", + "license_detections": [ + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_89.RULE", + "start_line": 1, + "matched_text": "license BSD", + "match_coverage": 100.0, + "matched_length": 2, + "rule_relevance": 99, + "rule_identifier": "bsd-new_89.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-261898a0-0118-87c4-7092-14e4ff134882", + "license_expression": "bsd-new" + }, + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_bsd_license.RULE", + "start_line": 1, + "matched_text": "['License :: OSI Approved :: BSD License']", + "match_coverage": 100.0, + "matched_length": 5, + "rule_relevance": 99, + "rule_identifier": "pypi_bsd_license.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-f4e99f86-00ab-18d9-a65d-a3a12767dcf5", + "license_expression": "bsd-new" + } + ], "other_license_expression": "", "other_license_expression_spdx": "", - "other_license_detections": {}, - "extracted_license_statement": "", + "other_license_detections": [], + "extracted_license_statement": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", "notice_text": "", "source_packages": [], "extra_data": { @@ -155,8 +231,6 @@ "Further Documentation": "https://docs.djangoproject.com/en/stable/topics/async/#async-adapter-functions" }, "package_uid": "pkg:pypi/asgiref@3.3.0?uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], @@ -166,10 +240,10 @@ "dependencies": [ { "purl": "pkg:pypi/pytest", - "extracted_requirement": "", + "extracted_requirement": "pytest; extra == \"tests\"", "scope": "tests", "is_runtime": true, - "is_optional": false, + "is_optional": true, "is_resolved": false, "dependency_uid": "pkg:pypi/pytest?uuid=fixed-uid-done-for-testing-5642512d1758", "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=fixed-uid-done-for-testing-5642512d1758", @@ -179,10 +253,10 @@ }, { "purl": "pkg:pypi/pytest", - "extracted_requirement": "", + "extracted_requirement": "pytest; extra == \"tests\"", "scope": "tests", "is_runtime": true, - "is_optional": false, + "is_optional": true, "is_resolved": false, "dependency_uid": "pkg:pypi/pytest?uuid=fixed-uid-done-for-testing-5642512d1758", "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=fixed-uid-done-for-testing-5642512d1758", @@ -192,10 +266,10 @@ }, { "purl": "pkg:pypi/pytest-asyncio", - "extracted_requirement": "", + "extracted_requirement": "pytest-asyncio; extra == \"tests\"", "scope": "tests", "is_runtime": true, - "is_optional": false, + "is_optional": true, "is_resolved": false, "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=fixed-uid-done-for-testing-5642512d1758", "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=fixed-uid-done-for-testing-5642512d1758", @@ -205,10 +279,10 @@ }, { "purl": "pkg:pypi/pytest-asyncio", - "extracted_requirement": "", + "extracted_requirement": "pytest-asyncio; extra == \"tests\"", "scope": "tests", "is_runtime": true, - "is_optional": false, + "is_optional": true, "is_resolved": false, "dependency_uid": "pkg:pypi/pytest-asyncio?uuid=fixed-uid-done-for-testing-5642512d1758", "for_package_uid": "pkg:pypi/asgiref@3.3.0?uuid=fixed-uid-done-for-testing-5642512d1758", @@ -235,8 +309,11 @@ "is_archive": true, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": 0.0, "copyrights": [], "holders": [], "authors": [], @@ -247,6 +324,7 @@ "purl": "pkg:pypi/asgiref@3.3.0", "sha1": null, "type": "pypi", + "holder": null, "sha256": null, "sha512": null, "parties": [ @@ -290,20 +368,22 @@ { "purl": "pkg:pypi/pytest", "scope": "tests", + "extra_data": {}, "is_runtime": true, - "is_optional": false, + "is_optional": true, "is_resolved": false, "resolved_package": {}, - "extracted_requirement": null + "extracted_requirement": "pytest; extra == \"tests\"" }, { "purl": "pkg:pypi/pytest-asyncio", "scope": "tests", + "extra_data": {}, "is_runtime": true, - "is_optional": false, + "is_optional": true, "is_resolved": false, "resolved_package": {}, - "extracted_requirement": null + "extracted_requirement": "pytest-asyncio; extra == \"tests\"" } ], "download_url": null, @@ -427,16 +507,55 @@ ], "source_packages": [], "bug_tracking_url": null, - "declared_license": { - "license": "BSD", - "classifiers": [ - "License :: OSI Approved :: BSD License" - ] - }, "primary_language": "Python", - "license_expression": "bsd-new AND bsd-new", + "license_detections": [ + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_89.RULE", + "start_line": 1, + "matched_text": "license BSD", + "match_coverage": 100.0, + "matched_length": 2, + "rule_relevance": 99, + "rule_identifier": "bsd-new_89.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-261898a0-0118-87c4-7092-14e4ff134882", + "license_expression": "bsd-new" + }, + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_bsd_license.RULE", + "start_line": 1, + "matched_text": "['License :: OSI Approved :: BSD License']", + "match_coverage": 100.0, + "matched_length": 5, + "rule_relevance": 99, + "rule_identifier": "pypi_bsd_license.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-f4e99f86-00ab-18d9-a65d-a3a12767dcf5", + "license_expression": "bsd-new" + } + ], "repository_download_url": "https://pypi.org/packages/source/a/asgiref/asgiref-3.3.0.tar.gz", - "repository_homepage_url": "https://pypi.org/project/asgiref" + "repository_homepage_url": "https://pypi.org/project/asgiref", + "other_license_detections": [], + "other_license_expression": null, + "declared_license_expression": "bsd-new", + "extracted_license_statement": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", + "other_license_expression_spdx": null, + "declared_license_expression_spdx": "BSD-3-Clause" } ], "for_packages": [ @@ -463,8 +582,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": 0.0, "copyrights": [], "holders": [], "authors": [], @@ -491,8 +613,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": 0.0, "copyrights": [], "holders": [], "authors": [], @@ -519,8 +644,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": 0.0, "copyrights": [], "holders": [], "authors": [], @@ -534,7 +662,7 @@ "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/LICENSE", "type": "file", "name": "LICENSE", - "status": "", + "status": "application-package", "tag": "", "extension": "", "md5": "f09eb47206614a4954c51db8a94840fa", @@ -547,49 +675,30 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [ + "detected_license_expression": "bsd-new", + "detected_license_expression_spdx": "BSD-3-Clause", + "license_detections": [ { - "key": "bsd-new", - "name": "BSD-3-Clause", - "owner": "Regents of the University of California", - "score": 100.0, - "category": "Permissive", - "end_line": 27, - "spdx_url": "https://spdx.org/licenses/BSD-3-Clause", - "text_url": "http://www.opensource.org/licenses/BSD-3-Clause", - "is_unknown": false, - "short_name": "BSD-3-Clause", - "start_line": 4, - "homepage_url": "http://www.opensource.org/licenses/BSD-3-Clause", - "is_exception": false, - "matched_rule": { - "matcher": "2-aho", - "licenses": [ - "bsd-new" - ], - "identifier": "bsd-new_683.RULE", - "has_unknown": false, - "rule_length": 214, - "is_license_tag": false, - "match_coverage": 100.0, - "matched_length": 214, - "rule_relevance": 100, - "is_license_text": true, - "is_license_intro": false, - "is_license_notice": false, - "license_expression": "bsd-new", - "is_license_reference": false, - "referenced_filenames": [] - }, - "reference_url": "https://scancode-licensedb.aboutcode.org/bsd-new", - "spdx_license_key": "BSD-3-Clause", - "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/bsd-new.yml", - "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/bsd-new.LICENSE" + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 27, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_683.RULE", + "start_line": 4, + "match_coverage": 100.0, + "matched_length": 214, + "rule_relevance": 100, + "rule_identifier": "bsd-new_683.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-72cae3bc-4423-3a9e-be84-ee8bb5120a4d", + "license_expression": "bsd-new" } ], - "license_expressions": [ - "bsd-new" - ], + "license_clues": [], + "percentage_of_license_text": 95.11, "copyrights": [ { "end_line": 1, @@ -606,7 +715,9 @@ ], "authors": [], "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:pypi/asgiref@3.3.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "emails": [], "urls": [], "extra_data": {} @@ -628,88 +739,48 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [ + "detected_license_expression": "bsd-new", + "detected_license_expression_spdx": "BSD-3-Clause", + "license_detections": [ { - "key": "bsd-new", - "name": "BSD-3-Clause", - "owner": "Regents of the University of California", - "score": 99.0, - "category": "Permissive", - "end_line": 8, - "spdx_url": "https://spdx.org/licenses/BSD-3-Clause", - "text_url": "http://www.opensource.org/licenses/BSD-3-Clause", - "is_unknown": false, - "short_name": "BSD-3-Clause", - "start_line": 8, - "homepage_url": "http://www.opensource.org/licenses/BSD-3-Clause", - "is_exception": false, - "matched_rule": { - "matcher": "2-aho", - "licenses": [ - "bsd-new" - ], - "identifier": "bsd-new_89.RULE", - "has_unknown": false, - "rule_length": 2, - "is_license_tag": true, - "match_coverage": 100.0, - "matched_length": 2, - "rule_relevance": 99, - "is_license_text": false, - "is_license_intro": false, - "is_license_notice": false, - "license_expression": "bsd-new", - "is_license_reference": false, - "referenced_filenames": [] - }, - "reference_url": "https://scancode-licensedb.aboutcode.org/bsd-new", - "spdx_license_key": "BSD-3-Clause", - "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/bsd-new.yml", - "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/bsd-new.LICENSE" + "matches": [ + { + "score": 99.0, + "matcher": "2-aho", + "end_line": 8, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_89.RULE", + "start_line": 8, + "match_coverage": 100.0, + "matched_length": 2, + "rule_relevance": 99, + "rule_identifier": "bsd-new_89.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-261898a0-0118-87c4-7092-14e4ff134882", + "license_expression": "bsd-new" }, { - "key": "bsd-new", - "name": "BSD-3-Clause", - "owner": "Regents of the University of California", - "score": 99.0, - "category": "Permissive", - "end_line": 16, - "spdx_url": "https://spdx.org/licenses/BSD-3-Clause", - "text_url": "http://www.opensource.org/licenses/BSD-3-Clause", - "is_unknown": false, - "short_name": "BSD-3-Clause", - "start_line": 16, - "homepage_url": "http://www.opensource.org/licenses/BSD-3-Clause", - "is_exception": false, - "matched_rule": { - "matcher": "2-aho", - "licenses": [ - "bsd-new" - ], - "identifier": "pypi_bsd_license.RULE", - "has_unknown": false, - "rule_length": 5, - "is_license_tag": true, - "match_coverage": 100.0, - "matched_length": 5, - "rule_relevance": 99, - "is_license_text": false, - "is_license_intro": false, - "is_license_notice": false, - "license_expression": "bsd-new", - "is_license_reference": false, - "referenced_filenames": [] - }, - "reference_url": "https://scancode-licensedb.aboutcode.org/bsd-new", - "spdx_license_key": "BSD-3-Clause", - "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/bsd-new.yml", - "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/bsd-new.LICENSE" + "matches": [ + { + "score": 99.0, + "matcher": "2-aho", + "end_line": 16, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_bsd_license.RULE", + "start_line": 16, + "match_coverage": 100.0, + "matched_length": 5, + "rule_relevance": 99, + "rule_identifier": "pypi_bsd_license.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-f4e99f86-00ab-18d9-a65d-a3a12767dcf5", + "license_expression": "bsd-new" } ], - "license_expressions": [ - "bsd-new", - "bsd-new" - ], + "license_clues": [], + "percentage_of_license_text": 0.54, "copyrights": [], "holders": [], "authors": [ @@ -726,6 +797,7 @@ "purl": "pkg:pypi/asgiref@3.3.0", "sha1": null, "type": "pypi", + "holder": null, "sha256": null, "sha512": null, "parties": [ @@ -769,20 +841,22 @@ { "purl": "pkg:pypi/pytest", "scope": "tests", + "extra_data": {}, "is_runtime": true, - "is_optional": false, + "is_optional": true, "is_resolved": false, "resolved_package": {}, - "extracted_requirement": null + "extracted_requirement": "pytest; extra == \"tests\"" }, { "purl": "pkg:pypi/pytest-asyncio", "scope": "tests", + "extra_data": {}, "is_runtime": true, - "is_optional": false, + "is_optional": true, "is_resolved": false, "resolved_package": {}, - "extracted_requirement": null + "extracted_requirement": "pytest-asyncio; extra == \"tests\"" } ], "download_url": null, @@ -906,16 +980,55 @@ ], "source_packages": [], "bug_tracking_url": null, - "declared_license": { - "license": "BSD", - "classifiers": [ - "License :: OSI Approved :: BSD License" - ] - }, "primary_language": "Python", - "license_expression": "bsd-new AND bsd-new", + "license_detections": [ + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/bsd-new_89.RULE", + "start_line": 1, + "matched_text": "license BSD", + "match_coverage": 100.0, + "matched_length": 2, + "rule_relevance": 99, + "rule_identifier": "bsd-new_89.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-261898a0-0118-87c4-7092-14e4ff134882", + "license_expression": "bsd-new" + }, + { + "matches": [ + { + "score": 99.0, + "matcher": "1-hash", + "end_line": 1, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_bsd_license.RULE", + "start_line": 1, + "matched_text": "['License :: OSI Approved :: BSD License']", + "match_coverage": 100.0, + "matched_length": 5, + "rule_relevance": 99, + "rule_identifier": "pypi_bsd_license.RULE", + "license_expression": "bsd-new" + } + ], + "identifier": "bsd_new-f4e99f86-00ab-18d9-a65d-a3a12767dcf5", + "license_expression": "bsd-new" + } + ], "repository_download_url": "https://pypi.org/packages/source/a/asgiref/asgiref-3.3.0.tar.gz", - "repository_homepage_url": "https://pypi.org/project/asgiref" + "repository_homepage_url": "https://pypi.org/project/asgiref", + "other_license_detections": [], + "other_license_expression": null, + "declared_license_expression": "bsd-new", + "extracted_license_statement": "{'license': 'BSD', 'classifiers': ['License :: OSI Approved :: BSD License']}", + "other_license_expression_spdx": null, + "declared_license_expression_spdx": "BSD-3-Clause" } ], "for_packages": [ @@ -929,7 +1042,7 @@ "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/RECORD", "type": "file", "name": "RECORD", - "status": "", + "status": "application-package", "tag": "", "extension": "", "md5": "38e56802a5adcafeae35efc6e3d218ba", @@ -942,13 +1055,18 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": 0.0, "copyrights": [], "holders": [], "authors": [], "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:pypi/asgiref@3.3.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "emails": [], "urls": [], "extra_data": {} @@ -957,7 +1075,7 @@ "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/WHEEL", "type": "file", "name": "WHEEL", - "status": "", + "status": "application-package", "tag": "", "extension": "", "md5": "5ccc7519eb42f1dfceee6e7d685f1ff5", @@ -970,13 +1088,18 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": 0.0, "copyrights": [], "holders": [], "authors": [], "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:pypi/asgiref@3.3.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "emails": [], "urls": [], "extra_data": {} @@ -985,7 +1108,7 @@ "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref-3.3.0.dist-info/top_level.txt", "type": "file", "name": "top_level.txt", - "status": "", + "status": "application-package", "tag": "", "extension": ".txt", "md5": "680e61db4d95c8d9501b7a49fa2bf0b2", @@ -998,13 +1121,18 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": 0.0, "copyrights": [], "holders": [], "authors": [], "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:pypi/asgiref@3.3.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "emails": [], "urls": [], "extra_data": {} @@ -1013,7 +1141,7 @@ "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/__init__.py", "type": "file", "name": "__init__.py", - "status": "", + "status": "application-package", "tag": "", "extension": ".py", "md5": "4910b756f4e611055140e80f757d9325", @@ -1026,13 +1154,18 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": 0.0, "copyrights": [], "holders": [], "authors": [], "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:pypi/asgiref@3.3.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "emails": [], "urls": [], "extra_data": {} @@ -1041,7 +1174,7 @@ "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/compatibility.py", "type": "file", "name": "compatibility.py", - "status": "", + "status": "application-package", "tag": "", "extension": ".py", "md5": "5231077fd0628314246fcba7817b561e", @@ -1054,13 +1187,18 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": 0.0, "copyrights": [], "holders": [], "authors": [], "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:pypi/asgiref@3.3.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "emails": [], "urls": [], "extra_data": {} @@ -1069,7 +1207,7 @@ "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/current_thread_executor.py", "type": "file", "name": "current_thread_executor.py", - "status": "", + "status": "application-package", "tag": "", "extension": ".py", "md5": "b4c45f37055d88dd11b15eb4de51b074", @@ -1082,13 +1220,18 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": 0.0, "copyrights": [], "holders": [], "authors": [], "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:pypi/asgiref@3.3.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "emails": [], "urls": [], "extra_data": {} @@ -1097,7 +1240,7 @@ "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/local.py", "type": "file", "name": "local.py", - "status": "", + "status": "application-package", "tag": "", "extension": ".py", "md5": "e4103a2fcd6a3f23a036307c978271d7", @@ -1110,13 +1253,18 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": 0.0, "copyrights": [], "holders": [], "authors": [], "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:pypi/asgiref@3.3.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "emails": [], "urls": [], "extra_data": {} @@ -1125,7 +1273,7 @@ "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/server.py", "type": "file", "name": "server.py", - "status": "", + "status": "application-package", "tag": "", "extension": ".py", "md5": "5b7619584de19d8f1a00fb5a43349153", @@ -1138,13 +1286,18 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": 0.0, "copyrights": [], "holders": [], "authors": [], "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:pypi/asgiref@3.3.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "emails": [], "urls": [], "extra_data": {} @@ -1153,7 +1306,7 @@ "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/sync.py", "type": "file", "name": "sync.py", - "status": "", + "status": "application-package", "tag": "", "extension": ".py", "md5": "44ec43af7ee367c7d6a5808d37133144", @@ -1166,13 +1319,18 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": 0.0, "copyrights": [], "holders": [], "authors": [], "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:pypi/asgiref@3.3.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "emails": [], "urls": [], "extra_data": {} @@ -1181,7 +1339,7 @@ "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/testing.py", "type": "file", "name": "testing.py", - "status": "", + "status": "application-package", "tag": "", "extension": ".py", "md5": "aff31de5fa753643adacf0311aa553f4", @@ -1194,13 +1352,18 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": 0.0, "copyrights": [], "holders": [], "authors": [], "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:pypi/asgiref@3.3.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "emails": [], "urls": [], "extra_data": {} @@ -1209,7 +1372,7 @@ "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/timeout.py", "type": "file", "name": "timeout.py", - "status": "", + "status": "application-package", "tag": "", "extension": ".py", "md5": "8114ef1d7c1488ebf3a1766dbd39d427", @@ -1222,54 +1385,37 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [ + "detected_license_expression": "apache-2.0", + "detected_license_expression_spdx": "Apache-2.0", + "license_detections": [ { - "key": "apache-2.0", - "name": "Apache License 2.0", - "owner": "Apache Software Foundation", - "score": 100.0, - "category": "Permissive", - "end_line": 2, - "spdx_url": "https://spdx.org/licenses/Apache-2.0", - "text_url": "http://www.apache.org/licenses/LICENSE-2.0", - "is_unknown": false, - "short_name": "Apache 2.0", - "start_line": 2, - "homepage_url": "http://www.apache.org/licenses/", - "is_exception": false, - "matched_rule": { - "matcher": "2-aho", - "licenses": [ - "apache-2.0" - ], - "identifier": "apache-2.0_174.RULE", - "has_unknown": false, - "rule_length": 6, - "is_license_tag": false, - "match_coverage": 100.0, - "matched_length": 6, - "rule_relevance": 100, - "is_license_text": false, - "is_license_intro": false, - "is_license_notice": true, - "license_expression": "apache-2.0", - "is_license_reference": false, - "referenced_filenames": [] - }, - "reference_url": "https://scancode-licensedb.aboutcode.org/apache-2.0", - "spdx_license_key": "Apache-2.0", - "scancode_data_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/apache-2.0.yml", - "scancode_text_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/apache-2.0.LICENSE" + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 2, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/apache-2.0_174.RULE", + "start_line": 2, + "match_coverage": 100.0, + "matched_length": 6, + "rule_relevance": 100, + "rule_identifier": "apache-2.0_174.RULE", + "license_expression": "apache-2.0" + } + ], + "identifier": "apache_2_0-5a90b5fa-5d10-5a98-d2a7-ef089c46a900", + "license_expression": "apache-2.0" } ], - "license_expressions": [ - "apache-2.0" - ], + "license_clues": [], + "percentage_of_license_text": 1.22, "copyrights": [], "holders": [], "authors": [], "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:pypi/asgiref@3.3.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "emails": [], "urls": [], "extra_data": {} @@ -1278,7 +1424,7 @@ "path": "asgiref-3.3.0-py3-none-any.whl-extract/asgiref/wsgi.py", "type": "file", "name": "wsgi.py", - "status": "", + "status": "application-package", "tag": "", "extension": ".py", "md5": "4eed1361d0e454149f95fca85c84f33f", @@ -1291,13 +1437,18 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": 0.0, "copyrights": [], "holders": [], "authors": [], "package_data": [], - "for_packages": [], + "for_packages": [ + "pkg:pypi/asgiref@3.3.0?uuid=fixed-uid-done-for-testing-5642512d1758" + ], "emails": [], "urls": [], "extra_data": {} diff --git a/scanpipe/tests/data/basic-rootfs_root_filesystems.json b/scanpipe/tests/data/basic-rootfs_root_filesystems.json index 5a4d6809cc..d0555047da 100644 --- a/scanpipe/tests/data/basic-rootfs_root_filesystems.json +++ b/scanpipe/tests/data/basic-rootfs_root_filesystems.json @@ -167,7 +167,7 @@ ], "other_license_expression": "", "other_license_expression_spdx": "", - "other_license_detections": {}, + "other_license_detections": [], "extracted_license_statement": "", "notice_text": "", "source_packages": [ @@ -177,8 +177,6 @@ "multi_arch": "same" }, "package_uid": "pkg:deb/libncurses5@6.1-1ubuntu1.18.04?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [ @@ -356,8 +354,6 @@ "multi_arch": "same" }, "package_uid": "pkg:deb/libndp0@1.4-2ubuntu0.16.04.1?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [ @@ -385,8 +381,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -413,8 +412,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -441,8 +443,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -469,8 +474,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -497,8 +505,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -525,8 +536,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -553,8 +567,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -700,8 +717,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -728,8 +748,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -844,8 +867,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -872,8 +898,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -900,8 +929,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -928,8 +960,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -956,8 +991,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -984,8 +1022,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1012,8 +1053,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], diff --git a/scanpipe/tests/data/daglib-0.6.0-py3-none-any.whl_scan_codebase.json b/scanpipe/tests/data/daglib-0.6.0-py3-none-any.whl_scan_codebase.json index 507f6e6446..31d6bbf595 100644 --- a/scanpipe/tests/data/daglib-0.6.0-py3-none-any.whl_scan_codebase.json +++ b/scanpipe/tests/data/daglib-0.6.0-py3-none-any.whl_scan_codebase.json @@ -110,7 +110,7 @@ ], "other_license_expression": "", "other_license_expression_spdx": "", - "other_license_detections": {}, + "other_license_detections": [], "extracted_license_statement": "{'license': 'MIT', 'classifiers': ['License :: OSI Approved :: MIT License']}", "notice_text": "", "source_packages": [], @@ -118,8 +118,6 @@ "Documentation": "https://mharrisb1.github.io/daglib/" }, "package_uid": "pkg:pypi/daglib@0.6.0?uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], @@ -208,7 +206,7 @@ ], "other_license_expression": "", "other_license_expression_spdx": "", - "other_license_detections": {}, + "other_license_detections": [], "extracted_license_statement": "{'license': 'MIT', 'classifiers': ['License :: OSI Approved :: MIT License']}", "notice_text": "", "source_packages": [], @@ -216,8 +214,6 @@ "Documentation": "https://mharrisb1.github.io/daglib/" }, "package_uid": "pkg:pypi/daglib@0.6.0?uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], @@ -348,8 +344,11 @@ "is_archive": true, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -571,8 +570,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -599,8 +601,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -627,8 +632,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -655,8 +663,31 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "mit", + "detected_license_expression_spdx": "MIT", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 19, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.LICENSE", + "start_line": 3, + "matched_text": "Permission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.", + "match_coverage": 100.0, + "matched_length": 161, + "rule_relevance": 100, + "rule_identifier": "mit.LICENSE", + "license_expression": "mit" + } + ], + "identifier": "mit-cacd5c0c-204a-85c2-affc-e4c125b2492a", + "license_expression": "mit" + } + ], + "license_clues": [], + "percentage_of_license_text": 96.99, "copyrights": [ { "end_line": 1, @@ -697,8 +728,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -920,8 +954,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -950,8 +987,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -980,8 +1020,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1010,8 +1053,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1040,8 +1086,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], diff --git a/scanpipe/tests/data/debian_scan_codebase.json b/scanpipe/tests/data/debian_scan_codebase.json index 985d9458bc..f85d03caa5 100644 --- a/scanpipe/tests/data/debian_scan_codebase.json +++ b/scanpipe/tests/data/debian_scan_codebase.json @@ -217,7 +217,7 @@ ], "other_license_expression": "", "other_license_expression_spdx": "", - "other_license_detections": {}, + "other_license_detections": [], "extracted_license_statement": "", "notice_text": "", "source_packages": [ @@ -261,8 +261,6 @@ ] }, "package_uid": "pkg:deb/libncurses5@6.1-1ubuntu1.18.04?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], @@ -456,8 +454,6 @@ ] }, "package_uid": "pkg:deb/libndp0@1.4-2ubuntu0.16.04.1?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], @@ -483,8 +479,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -511,8 +510,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -539,8 +541,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -567,8 +572,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -595,8 +603,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -623,8 +634,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -651,8 +665,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -681,8 +698,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -709,8 +729,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -739,8 +762,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -767,8 +793,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -795,8 +824,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -823,8 +855,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -851,8 +886,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -881,8 +919,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -911,8 +952,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], diff --git a/scanpipe/tests/data/flume-ng-node-d2d.json b/scanpipe/tests/data/flume-ng-node-d2d.json index 019f2aad66..0fb48aa12b 100644 --- a/scanpipe/tests/data/flume-ng-node-d2d.json +++ b/scanpipe/tests/data/flume-ng-node-d2d.json @@ -41,8 +41,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -69,8 +72,11 @@ "is_archive": true, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -97,8 +103,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -125,8 +134,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -153,8 +165,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -181,8 +196,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -209,8 +227,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -237,8 +258,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -265,8 +289,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -293,8 +320,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -321,8 +351,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -349,8 +382,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -377,8 +413,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -405,8 +444,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -433,8 +475,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -461,8 +506,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -489,8 +537,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -517,8 +568,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -545,8 +599,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -573,8 +630,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -601,8 +661,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -629,8 +692,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -657,8 +723,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -685,8 +754,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -713,8 +785,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -741,8 +816,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -769,8 +847,11 @@ "is_archive": true, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -797,8 +878,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -825,8 +909,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -853,8 +940,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -881,8 +971,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -909,8 +1002,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -937,8 +1033,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -965,8 +1064,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -993,8 +1095,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1021,8 +1126,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1049,8 +1157,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1077,8 +1188,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1105,8 +1219,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1133,8 +1250,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1161,8 +1281,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1189,8 +1312,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1217,8 +1343,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1245,8 +1374,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1273,8 +1405,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1301,8 +1436,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1329,8 +1467,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1357,8 +1498,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1385,8 +1529,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1413,8 +1560,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1441,8 +1591,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1469,8 +1622,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1497,8 +1653,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1525,8 +1684,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1553,8 +1715,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1581,8 +1746,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1609,8 +1777,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], diff --git a/scanpipe/tests/data/gcr_io_distroless_base_scan_codebase.json b/scanpipe/tests/data/gcr_io_distroless_base_scan_codebase.json index 79af372583..5f09605d30 100644 --- a/scanpipe/tests/data/gcr_io_distroless_base_scan_codebase.json +++ b/scanpipe/tests/data/gcr_io_distroless_base_scan_codebase.json @@ -155,10 +155,10 @@ "holder": "", "declared_license_expression": "", "declared_license_expression_spdx": "", - "license_detections": {}, + "license_detections": [], "other_license_expression": "", "other_license_expression_spdx": "", - "other_license_detections": {}, + "other_license_detections": [], "extracted_license_statement": "", "notice_text": "", "source_packages": [], @@ -166,8 +166,6 @@ "multi_arch": "foreign" }, "package_uid": "pkg:deb/distroless/base-files@11.1%2Bdeb11u3?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], @@ -212,10 +210,10 @@ "holder": "", "declared_license_expression": "", "declared_license_expression_spdx": "", - "license_detections": {}, + "license_detections": [], "other_license_expression": "", "other_license_expression_spdx": "", - "other_license_detections": {}, + "other_license_detections": [], "extracted_license_statement": "", "notice_text": "", "source_packages": [ @@ -225,8 +223,6 @@ "multi_arch": "same" }, "package_uid": "pkg:deb/distroless/libc6@2.31-13%2Bdeb11u3?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], @@ -271,10 +267,10 @@ "holder": "", "declared_license_expression": "", "declared_license_expression_spdx": "", - "license_detections": {}, + "license_detections": [], "other_license_expression": "", "other_license_expression_spdx": "", - "other_license_detections": {}, + "other_license_detections": [], "extracted_license_statement": "", "notice_text": "", "source_packages": [ @@ -284,8 +280,6 @@ "multi_arch": "same" }, "package_uid": "pkg:deb/distroless/libssl1.1@1.1.1n-0%2Bdeb11u2?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], @@ -330,10 +324,10 @@ "holder": "", "declared_license_expression": "", "declared_license_expression_spdx": "", - "license_detections": {}, + "license_detections": [], "other_license_expression": "", "other_license_expression_spdx": "", - "other_license_detections": {}, + "other_license_detections": [], "extracted_license_statement": "", "notice_text": "", "source_packages": [], @@ -341,8 +335,6 @@ "multi_arch": "foreign" }, "package_uid": "pkg:deb/distroless/netbase@6.3?architecture=all&uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], @@ -387,10 +379,10 @@ "holder": "", "declared_license_expression": "", "declared_license_expression_spdx": "", - "license_detections": {}, + "license_detections": [], "other_license_expression": "", "other_license_expression_spdx": "", - "other_license_detections": {}, + "other_license_detections": [], "extracted_license_statement": "", "notice_text": "", "source_packages": [], @@ -398,8 +390,6 @@ "multi_arch": "foreign" }, "package_uid": "pkg:deb/distroless/openssl@1.1.1n-0%2Bdeb11u2?architecture=amd64&uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], @@ -444,10 +434,10 @@ "holder": "", "declared_license_expression": "", "declared_license_expression_spdx": "", - "license_detections": {}, + "license_detections": [], "other_license_expression": "", "other_license_expression_spdx": "", - "other_license_detections": {}, + "other_license_detections": [], "extracted_license_statement": "", "notice_text": "", "source_packages": [], @@ -455,8 +445,6 @@ "multi_arch": "foreign" }, "package_uid": "pkg:deb/distroless/tzdata@2021a-1%2Bdeb11u4?architecture=all&uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], @@ -482,8 +470,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -510,8 +501,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -538,8 +532,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -566,8 +563,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -594,8 +594,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -622,8 +625,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -650,8 +656,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -678,8 +687,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -706,8 +718,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -734,8 +749,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -762,8 +780,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -790,8 +811,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -818,8 +842,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -846,8 +873,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -874,8 +904,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -902,8 +935,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -930,8 +966,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -958,8 +997,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -986,8 +1028,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1014,8 +1059,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1042,8 +1090,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1070,8 +1121,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1098,8 +1152,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1126,8 +1183,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1154,8 +1214,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1182,8 +1245,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1210,8 +1276,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1238,8 +1307,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1266,8 +1338,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1294,8 +1369,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1322,8 +1400,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1350,8 +1431,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1378,8 +1462,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1406,8 +1493,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1434,8 +1524,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1462,8 +1555,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1490,8 +1586,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1518,8 +1617,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1546,8 +1648,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1574,8 +1679,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1602,8 +1710,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1630,8 +1741,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1658,8 +1772,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1686,8 +1803,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1714,8 +1834,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1742,8 +1865,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1770,8 +1896,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1798,8 +1927,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1826,8 +1958,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1854,8 +1989,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1882,8 +2020,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1910,8 +2051,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1938,8 +2082,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1966,8 +2113,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -1994,8 +2144,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2022,8 +2175,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2050,8 +2206,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2078,8 +2237,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2106,8 +2268,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2134,8 +2299,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2162,8 +2330,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2190,8 +2361,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2218,8 +2392,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2246,8 +2423,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2274,8 +2454,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2302,8 +2485,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2330,8 +2516,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2358,8 +2547,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2386,8 +2578,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2414,8 +2609,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2442,8 +2640,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2470,8 +2671,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2498,8 +2702,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2526,8 +2733,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2554,8 +2764,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2582,8 +2795,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2610,8 +2826,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2638,8 +2857,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2666,8 +2888,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2694,8 +2919,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2722,8 +2950,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2750,8 +2981,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2778,8 +3012,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2806,8 +3043,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2834,8 +3074,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2862,8 +3105,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2890,8 +3136,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2918,8 +3167,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2946,8 +3198,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -2974,8 +3229,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3002,8 +3260,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3030,8 +3291,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3058,8 +3322,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3086,8 +3353,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3114,8 +3384,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3142,8 +3415,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3170,8 +3446,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3198,8 +3477,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3226,8 +3508,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3254,8 +3539,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3282,8 +3570,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3310,8 +3601,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3338,8 +3632,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3366,8 +3663,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3394,8 +3694,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3422,8 +3725,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3450,8 +3756,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3478,8 +3787,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3506,8 +3818,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3534,8 +3849,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3562,8 +3880,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3590,8 +3911,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3618,8 +3942,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3646,8 +3973,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3674,8 +4004,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3702,8 +4035,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3730,8 +4066,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3758,8 +4097,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3786,8 +4128,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3814,8 +4159,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3842,8 +4190,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3870,8 +4221,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3898,8 +4252,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3926,8 +4283,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3954,8 +4314,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -3982,8 +4345,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4010,8 +4376,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4038,8 +4407,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4066,8 +4438,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4094,8 +4469,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4122,8 +4500,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4150,8 +4531,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4178,8 +4562,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4206,8 +4593,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4234,8 +4624,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4262,8 +4655,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4290,8 +4686,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4318,8 +4717,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4346,8 +4748,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4374,8 +4779,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4402,8 +4810,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4430,8 +4841,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4458,8 +4872,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4486,8 +4903,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4514,8 +4934,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4542,8 +4965,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4570,8 +4996,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4598,8 +5027,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4626,8 +5058,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4654,8 +5089,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4682,8 +5120,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4710,8 +5151,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4738,8 +5182,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4766,8 +5213,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4794,8 +5244,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4822,8 +5275,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4850,8 +5306,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4878,8 +5337,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4906,8 +5368,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4934,8 +5399,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4962,8 +5430,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -4990,8 +5461,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5018,8 +5492,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5046,8 +5523,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5074,8 +5554,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5102,8 +5585,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5130,8 +5616,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5158,8 +5647,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5186,8 +5678,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5214,8 +5709,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5242,8 +5740,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5270,8 +5771,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5298,8 +5802,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5326,8 +5833,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5354,8 +5864,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5382,8 +5895,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5410,8 +5926,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5438,8 +5957,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5466,8 +5988,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5494,8 +6019,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5522,8 +6050,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5550,8 +6081,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5578,8 +6112,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5606,8 +6143,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5634,8 +6174,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5662,8 +6205,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5690,8 +6236,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5718,8 +6267,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5746,8 +6298,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5774,8 +6329,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5802,8 +6360,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5830,8 +6391,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5858,8 +6422,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5886,8 +6453,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5914,8 +6484,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5942,8 +6515,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5970,8 +6546,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -5998,8 +6577,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6026,8 +6608,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6054,8 +6639,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6082,8 +6670,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6110,8 +6701,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6138,8 +6732,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6166,8 +6763,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6194,8 +6794,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6222,8 +6825,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6250,8 +6856,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6278,8 +6887,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6306,8 +6918,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6334,8 +6949,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6362,8 +6980,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6390,8 +7011,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6418,8 +7042,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6446,8 +7073,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6474,8 +7104,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6502,8 +7135,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6530,8 +7166,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6558,8 +7197,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6586,8 +7228,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6614,8 +7259,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6642,8 +7290,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6670,8 +7321,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6698,8 +7352,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6726,8 +7383,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6754,8 +7414,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6782,8 +7445,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6810,8 +7476,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6838,8 +7507,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6866,8 +7538,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6894,8 +7569,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6922,8 +7600,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6950,8 +7631,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -6978,8 +7662,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7006,8 +7693,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7034,8 +7724,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7062,8 +7755,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7090,8 +7786,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7118,8 +7817,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7146,8 +7848,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7174,8 +7879,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7202,8 +7910,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7230,8 +7941,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7258,8 +7972,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7286,8 +8003,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7314,8 +8034,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7342,8 +8065,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7370,8 +8096,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7398,8 +8127,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7426,8 +8158,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7454,8 +8189,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7482,8 +8220,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7510,8 +8251,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7538,8 +8282,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7566,8 +8313,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7594,8 +8344,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7622,8 +8375,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7650,8 +8406,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7678,8 +8437,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7706,8 +8468,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7734,8 +8499,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7762,8 +8530,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7790,8 +8561,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7818,8 +8592,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7846,8 +8623,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7874,8 +8654,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7902,8 +8685,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7930,8 +8716,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7958,8 +8747,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -7986,8 +8778,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8014,8 +8809,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8042,8 +8840,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8070,8 +8871,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8098,8 +8902,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8126,8 +8933,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8154,8 +8964,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8182,8 +8995,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8210,8 +9026,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8238,8 +9057,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8266,8 +9088,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8294,8 +9119,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8322,8 +9150,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8350,8 +9181,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8378,8 +9212,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8406,8 +9243,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8434,8 +9274,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8462,8 +9305,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8490,8 +9336,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8518,8 +9367,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8546,8 +9398,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8574,8 +9429,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8602,8 +9460,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8630,8 +9491,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8658,8 +9522,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8686,8 +9553,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8714,8 +9584,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8742,8 +9615,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8770,8 +9646,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8798,8 +9677,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8826,8 +9708,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8854,8 +9739,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8882,8 +9770,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8910,8 +9801,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8938,8 +9832,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8966,8 +9863,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -8994,8 +9894,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9022,8 +9925,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9050,8 +9956,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9078,8 +9987,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9106,8 +10018,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9134,8 +10049,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9162,8 +10080,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9190,8 +10111,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9218,8 +10142,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9248,8 +10175,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9276,8 +10206,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9304,8 +10237,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9332,8 +10268,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9360,8 +10299,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9390,8 +10332,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9418,8 +10363,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9446,8 +10394,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9474,8 +10425,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9502,8 +10456,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9530,8 +10487,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9558,8 +10518,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9586,8 +10549,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9614,8 +10580,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9642,8 +10611,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9670,8 +10642,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9698,8 +10673,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9726,8 +10704,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9754,8 +10735,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9784,8 +10768,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9812,8 +10799,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9840,8 +10830,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9868,8 +10861,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9896,8 +10892,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9924,8 +10923,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9952,8 +10954,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -9980,8 +10985,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10008,8 +11016,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10036,8 +11047,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10064,8 +11078,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10092,8 +11109,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10120,8 +11140,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10148,8 +11171,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10176,8 +11202,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10204,8 +11233,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10232,8 +11264,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10260,8 +11295,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10288,8 +11326,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10316,8 +11357,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10344,8 +11388,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10372,8 +11419,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10400,8 +11450,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10428,8 +11481,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10456,8 +11512,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10484,8 +11543,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10512,8 +11574,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10540,8 +11605,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10568,8 +11636,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10596,8 +11667,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10624,8 +11698,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10652,8 +11729,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10680,8 +11760,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10708,8 +11791,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10736,8 +11822,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10764,8 +11853,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10792,8 +11884,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10820,8 +11915,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10848,8 +11946,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10876,8 +11977,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10904,8 +12008,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10932,8 +12039,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10960,8 +12070,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -10988,8 +12101,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11016,8 +12132,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11044,8 +12163,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11072,8 +12194,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11100,8 +12225,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11128,8 +12256,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11156,8 +12287,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11184,8 +12318,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11212,8 +12349,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11240,8 +12380,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11268,8 +12411,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11296,8 +12442,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11324,8 +12473,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11352,8 +12504,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11380,8 +12535,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11408,8 +12566,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11436,8 +12597,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11464,8 +12628,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11492,8 +12659,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11520,8 +12690,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11548,8 +12721,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11576,8 +12752,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11604,8 +12783,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11632,8 +12814,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11660,8 +12845,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11688,8 +12876,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11716,8 +12907,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11744,8 +12938,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11772,8 +12969,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11800,8 +13000,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11828,8 +13031,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11856,8 +13062,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11884,8 +13093,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11912,8 +13124,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11940,8 +13155,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11968,8 +13186,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -11996,8 +13217,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12024,8 +13248,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12052,8 +13279,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12080,8 +13310,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12108,8 +13341,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12148,8 +13384,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12188,8 +13427,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12228,8 +13470,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12256,8 +13501,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12284,8 +13532,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12312,8 +13563,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12340,8 +13594,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12368,8 +13625,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12396,8 +13656,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12424,8 +13687,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12452,8 +13718,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12480,8 +13749,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12508,8 +13780,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12536,8 +13811,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12564,8 +13842,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12592,8 +13873,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12620,8 +13904,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12648,8 +13935,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12676,8 +13966,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12704,8 +13997,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12732,8 +14028,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12760,8 +14059,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12788,8 +14090,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12816,8 +14121,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12844,8 +14152,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12872,8 +14183,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12900,8 +14214,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12928,8 +14245,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12956,8 +14276,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -12984,8 +14307,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13012,8 +14338,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13040,8 +14369,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13068,8 +14400,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13096,8 +14431,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13124,8 +14462,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13152,8 +14493,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13180,8 +14524,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13208,8 +14555,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13236,8 +14586,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13264,8 +14617,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13292,8 +14648,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13320,8 +14679,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13348,8 +14710,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13418,8 +14783,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13446,8 +14814,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13474,8 +14845,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13502,8 +14876,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13530,8 +14907,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13558,8 +14938,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13586,8 +14969,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13614,8 +15000,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13642,8 +15031,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13670,8 +15062,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13698,8 +15093,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13726,8 +15124,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13754,8 +15155,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13782,8 +15186,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13810,8 +15217,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13838,8 +15248,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13866,8 +15279,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13894,8 +15310,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13922,8 +15341,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13950,8 +15372,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -13978,8 +15403,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14006,8 +15434,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14034,8 +15465,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14062,8 +15496,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14090,8 +15527,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14118,8 +15558,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14146,8 +15589,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14174,8 +15620,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14202,8 +15651,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14230,8 +15682,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14258,8 +15713,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14286,8 +15744,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14314,8 +15775,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14342,8 +15806,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14372,8 +15839,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14400,8 +15870,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14548,8 +16021,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14576,8 +16052,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14604,8 +16083,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14634,8 +16116,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14662,8 +16147,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14690,8 +16178,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14718,8 +16209,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14746,8 +16240,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14776,8 +16273,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14804,8 +16304,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14832,8 +16335,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14860,8 +16366,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14888,8 +16397,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14916,8 +16428,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14944,8 +16459,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -14972,8 +16490,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15000,8 +16521,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15028,8 +16552,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15056,8 +16583,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15084,8 +16614,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15112,8 +16645,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15140,8 +16676,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15168,8 +16707,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15196,8 +16738,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15224,8 +16769,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15252,8 +16800,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15280,8 +16831,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15308,8 +16862,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15336,8 +16893,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15364,8 +16924,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15392,8 +16955,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15420,8 +16986,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15448,8 +17017,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15476,8 +17048,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15504,8 +17079,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15532,8 +17110,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15560,8 +17141,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15588,8 +17172,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15616,8 +17203,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15644,8 +17234,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15672,8 +17265,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15700,8 +17296,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15728,8 +17327,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15756,8 +17358,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15784,8 +17389,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15812,8 +17420,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15840,8 +17451,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15868,8 +17482,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15896,8 +17513,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15924,8 +17544,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15952,8 +17575,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -15980,8 +17606,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16008,8 +17637,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16036,8 +17668,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16064,8 +17699,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16092,8 +17730,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16120,8 +17761,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16148,8 +17792,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16176,8 +17823,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16204,8 +17854,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16232,8 +17885,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16260,8 +17916,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16288,8 +17947,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16316,8 +17978,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16344,8 +18009,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16372,8 +18040,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16400,8 +18071,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16428,8 +18102,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16456,8 +18133,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16484,8 +18164,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16512,8 +18195,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16540,8 +18226,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16568,8 +18257,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16596,8 +18288,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16624,8 +18319,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16652,8 +18350,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16680,8 +18381,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16708,8 +18412,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16736,8 +18443,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16764,8 +18474,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16792,8 +18505,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16820,8 +18536,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16848,8 +18567,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16876,8 +18598,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16904,8 +18629,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16932,8 +18660,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16960,8 +18691,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -16988,8 +18722,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17016,8 +18753,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17044,8 +18784,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17072,8 +18815,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17100,8 +18846,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17128,8 +18877,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17156,8 +18908,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17184,8 +18939,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17212,8 +18970,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17240,8 +19001,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17268,8 +19032,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17296,8 +19063,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17324,8 +19094,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17352,8 +19125,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17380,8 +19156,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17408,8 +19187,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17436,8 +19218,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17464,8 +19249,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17492,8 +19280,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17520,8 +19311,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17548,8 +19342,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17576,8 +19373,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17604,8 +19404,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17632,8 +19435,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17660,8 +19466,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17688,8 +19497,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17716,8 +19528,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17744,8 +19559,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17772,8 +19590,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17800,8 +19621,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17828,8 +19652,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17856,8 +19683,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17884,8 +19714,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17912,8 +19745,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17940,8 +19776,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17968,8 +19807,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -17996,8 +19838,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18024,8 +19869,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18052,8 +19900,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18080,8 +19931,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18108,8 +19962,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18136,8 +19993,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18164,8 +20024,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18192,8 +20055,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18220,8 +20086,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18248,8 +20117,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18276,8 +20148,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18304,8 +20179,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18332,8 +20210,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18360,8 +20241,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18388,8 +20272,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18416,8 +20303,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18444,8 +20334,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18472,8 +20365,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18500,8 +20396,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18528,8 +20427,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18556,8 +20458,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18584,8 +20489,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18612,8 +20520,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18640,8 +20551,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18668,8 +20582,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18696,8 +20613,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18724,8 +20644,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18752,8 +20675,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18780,8 +20706,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18808,8 +20737,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18836,8 +20768,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18864,8 +20799,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18892,8 +20830,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18920,8 +20861,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18948,8 +20892,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -18976,8 +20923,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19004,8 +20954,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19032,8 +20985,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19060,8 +21016,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19088,8 +21047,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19116,8 +21078,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19144,8 +21109,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19172,8 +21140,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19200,8 +21171,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19228,8 +21202,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19256,8 +21233,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19284,8 +21264,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19312,8 +21295,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19340,8 +21326,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19368,8 +21357,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19396,8 +21388,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19424,8 +21419,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19452,8 +21450,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19480,8 +21481,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19508,8 +21512,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19536,8 +21543,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19564,8 +21574,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19592,8 +21605,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19620,8 +21636,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19648,8 +21667,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19676,8 +21698,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19704,8 +21729,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19732,8 +21760,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19760,8 +21791,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19788,8 +21822,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19816,8 +21853,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19844,8 +21884,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19872,8 +21915,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19900,8 +21946,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19928,8 +21977,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19956,8 +22008,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -19984,8 +22039,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20012,8 +22070,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20040,8 +22101,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20068,8 +22132,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20096,8 +22163,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20124,8 +22194,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20152,8 +22225,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20180,8 +22256,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20208,8 +22287,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20236,8 +22318,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20264,8 +22349,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20292,8 +22380,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20320,8 +22411,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20348,8 +22442,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20376,8 +22473,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20404,8 +22504,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20432,8 +22535,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20460,8 +22566,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20488,8 +22597,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20516,8 +22628,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20544,8 +22659,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20572,8 +22690,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20600,8 +22721,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20628,8 +22752,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20656,8 +22783,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20684,8 +22814,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20712,8 +22845,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20740,8 +22876,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20768,8 +22907,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20796,8 +22938,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20824,8 +22969,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20852,8 +23000,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20880,8 +23031,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20908,8 +23062,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20936,8 +23093,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20964,8 +23124,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -20992,8 +23155,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21020,8 +23186,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21048,8 +23217,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21076,8 +23248,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21104,8 +23279,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21132,8 +23310,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21160,8 +23341,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21188,8 +23372,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21216,8 +23403,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21244,8 +23434,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21272,8 +23465,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21300,8 +23496,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21328,8 +23527,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21356,8 +23558,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21384,8 +23589,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21412,8 +23620,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21440,8 +23651,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21468,8 +23682,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21496,8 +23713,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21524,8 +23744,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21552,8 +23775,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21580,8 +23806,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21608,8 +23837,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21636,8 +23868,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21664,8 +23899,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21692,8 +23930,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21720,8 +23961,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21748,8 +23992,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21776,8 +24023,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21804,8 +24054,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21832,8 +24085,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21860,8 +24116,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21888,8 +24147,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21916,8 +24178,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21944,8 +24209,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -21972,8 +24240,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22000,8 +24271,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22028,8 +24302,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22056,8 +24333,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22084,8 +24364,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22112,8 +24395,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22140,8 +24426,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22168,8 +24457,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22196,8 +24488,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22224,8 +24519,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22252,8 +24550,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22280,8 +24581,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22308,8 +24612,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22336,8 +24643,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22364,8 +24674,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22392,8 +24705,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22420,8 +24736,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22448,8 +24767,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22476,8 +24798,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22504,8 +24829,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22532,8 +24860,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22560,8 +24891,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22588,8 +24922,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22616,8 +24953,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22644,8 +24984,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22672,8 +25015,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22700,8 +25046,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22728,8 +25077,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22756,8 +25108,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22784,8 +25139,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22812,8 +25170,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22840,8 +25201,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22868,8 +25232,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22896,8 +25263,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22924,8 +25294,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22952,8 +25325,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -22980,8 +25356,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23008,8 +25387,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23036,8 +25418,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23064,8 +25449,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23092,8 +25480,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23120,8 +25511,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23148,8 +25542,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23176,8 +25573,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23204,8 +25604,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23232,8 +25635,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23260,8 +25666,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23288,8 +25697,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23316,8 +25728,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23344,8 +25759,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23372,8 +25790,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23400,8 +25821,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23428,8 +25852,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23456,8 +25883,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23484,8 +25914,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23512,8 +25945,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23540,8 +25976,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23568,8 +26007,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23596,8 +26038,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23624,8 +26069,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23652,8 +26100,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23680,8 +26131,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23708,8 +26162,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23736,8 +26193,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23764,8 +26224,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23792,8 +26255,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23820,8 +26286,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23848,8 +26317,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23876,8 +26348,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23904,8 +26379,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23932,8 +26410,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23960,8 +26441,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -23988,8 +26472,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24016,8 +26503,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24044,8 +26534,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24072,8 +26565,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24100,8 +26596,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24128,8 +26627,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24156,8 +26658,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24184,8 +26689,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24212,8 +26720,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24240,8 +26751,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24268,8 +26782,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24296,8 +26813,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24324,8 +26844,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24352,8 +26875,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24380,8 +26906,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24408,8 +26937,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24436,8 +26968,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24464,8 +26999,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24492,8 +27030,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24520,8 +27061,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24548,8 +27092,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24576,8 +27123,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24604,8 +27154,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24632,8 +27185,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24660,8 +27216,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24688,8 +27247,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24716,8 +27278,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24744,8 +27309,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24772,8 +27340,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24800,8 +27371,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24828,8 +27402,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24856,8 +27433,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24884,8 +27464,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24912,8 +27495,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24940,8 +27526,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24968,8 +27557,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -24996,8 +27588,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25024,8 +27619,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25052,8 +27650,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25080,8 +27681,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25108,8 +27712,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25136,8 +27743,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25164,8 +27774,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25192,8 +27805,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25220,8 +27836,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25248,8 +27867,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25276,8 +27898,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25304,8 +27929,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25332,8 +27960,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25360,8 +27991,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25388,8 +28022,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25416,8 +28053,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25444,8 +28084,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25472,8 +28115,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25500,8 +28146,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25528,8 +28177,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25556,8 +28208,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25584,8 +28239,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25612,8 +28270,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25640,8 +28301,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25668,8 +28332,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25696,8 +28363,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25724,8 +28394,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25752,8 +28425,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25780,8 +28456,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25808,8 +28487,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25836,8 +28518,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25864,8 +28549,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25892,8 +28580,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25920,8 +28611,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25948,8 +28642,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -25976,8 +28673,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26004,8 +28704,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26032,8 +28735,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26060,8 +28766,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26088,8 +28797,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26116,8 +28828,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26144,8 +28859,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26172,8 +28890,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26200,8 +28921,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26228,8 +28952,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26256,8 +28983,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26284,8 +29014,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26312,8 +29045,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26340,8 +29076,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26368,8 +29107,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26396,8 +29138,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26424,8 +29169,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26452,8 +29200,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26480,8 +29231,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26508,8 +29262,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26536,8 +29293,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26564,8 +29324,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26592,8 +29355,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26620,8 +29386,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26648,8 +29417,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26676,8 +29448,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26704,8 +29479,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26732,8 +29510,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26760,8 +29541,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26788,8 +29572,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26816,8 +29603,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26844,8 +29634,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26872,8 +29665,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26900,8 +29696,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26928,8 +29727,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26956,8 +29758,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -26984,8 +29789,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27012,8 +29820,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27040,8 +29851,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27068,8 +29882,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27096,8 +29913,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27124,8 +29944,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27152,8 +29975,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27180,8 +30006,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27208,8 +30037,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27236,8 +30068,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27264,8 +30099,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27292,8 +30130,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27320,8 +30161,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27348,8 +30192,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27376,8 +30223,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27404,8 +30254,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27432,8 +30285,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27460,8 +30316,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27488,8 +30347,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27516,8 +30378,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27544,8 +30409,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27572,8 +30440,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27600,8 +30471,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27628,8 +30502,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27656,8 +30533,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27684,8 +30564,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27712,8 +30595,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27740,8 +30626,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27768,8 +30657,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27796,8 +30688,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27824,8 +30719,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27852,8 +30750,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27880,8 +30781,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27908,8 +30812,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27936,8 +30843,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27964,8 +30874,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -27992,8 +30905,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28020,8 +30936,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28048,8 +30967,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28076,8 +30998,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28104,8 +31029,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28132,8 +31060,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28160,8 +31091,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28188,8 +31122,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28216,8 +31153,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28244,8 +31184,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28272,8 +31215,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28300,8 +31246,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28328,8 +31277,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28356,8 +31308,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28384,8 +31339,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28412,8 +31370,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28440,8 +31401,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28468,8 +31432,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28496,8 +31463,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28524,8 +31494,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28552,8 +31525,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28580,8 +31556,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28608,8 +31587,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28636,8 +31618,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28664,8 +31649,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28692,8 +31680,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28720,8 +31711,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28748,8 +31742,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28776,8 +31773,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28804,8 +31804,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28832,8 +31835,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28860,8 +31866,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28888,8 +31897,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28916,8 +31928,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28944,8 +31959,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -28972,8 +31990,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29000,8 +32021,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29028,8 +32052,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29056,8 +32083,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29084,8 +32114,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29112,8 +32145,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29140,8 +32176,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29168,8 +32207,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29196,8 +32238,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29224,8 +32269,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29252,8 +32300,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29280,8 +32331,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29308,8 +32362,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29336,8 +32393,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29364,8 +32424,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29392,8 +32455,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29420,8 +32486,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29448,8 +32517,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29476,8 +32548,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29504,8 +32579,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29532,8 +32610,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29560,8 +32641,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29588,8 +32672,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29616,8 +32703,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29644,8 +32734,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29672,8 +32765,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29700,8 +32796,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29728,8 +32827,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29756,8 +32858,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29784,8 +32889,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29812,8 +32920,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29840,8 +32951,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29868,8 +32982,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29896,8 +33013,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29924,8 +33044,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29952,8 +33075,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -29980,8 +33106,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30008,8 +33137,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30036,8 +33168,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30064,8 +33199,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30092,8 +33230,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30120,8 +33261,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30148,8 +33292,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30176,8 +33323,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30204,8 +33354,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30232,8 +33385,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30260,8 +33416,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30288,8 +33447,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30316,8 +33478,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30344,8 +33509,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30372,8 +33540,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30400,8 +33571,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30428,8 +33602,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30456,8 +33633,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30484,8 +33664,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30512,8 +33695,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30540,8 +33726,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30568,8 +33757,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30596,8 +33788,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30624,8 +33819,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30652,8 +33850,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30680,8 +33881,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30708,8 +33912,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30736,8 +33943,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30764,8 +33974,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30792,8 +34005,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30820,8 +34036,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30848,8 +34067,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30876,8 +34098,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30904,8 +34129,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30932,8 +34160,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30960,8 +34191,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -30988,8 +34222,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31016,8 +34253,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31044,8 +34284,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31072,8 +34315,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31100,8 +34346,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31128,8 +34377,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31156,8 +34408,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31184,8 +34439,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31212,8 +34470,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31240,8 +34501,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31268,8 +34532,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31296,8 +34563,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31324,8 +34594,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31352,8 +34625,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31380,8 +34656,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31408,8 +34687,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31436,8 +34718,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31464,8 +34749,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31492,8 +34780,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31520,8 +34811,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31548,8 +34842,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31576,8 +34873,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31604,8 +34904,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31632,8 +34935,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31660,8 +34966,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31688,8 +34997,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31716,8 +35028,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31744,8 +35059,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31772,8 +35090,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31800,8 +35121,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31828,8 +35152,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31856,8 +35183,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31884,8 +35214,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31912,8 +35245,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31940,8 +35276,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31968,8 +35307,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -31996,8 +35338,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32024,8 +35369,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32052,8 +35400,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32080,8 +35431,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32108,8 +35462,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32136,8 +35493,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32164,8 +35524,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32192,8 +35555,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32220,8 +35586,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32248,8 +35617,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32276,8 +35648,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32304,8 +35679,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32332,8 +35710,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32360,8 +35741,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32388,8 +35772,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32416,8 +35803,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32444,8 +35834,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32472,8 +35865,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32500,8 +35896,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32528,8 +35927,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32556,8 +35958,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32584,8 +35989,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32612,8 +36020,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32640,8 +36051,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32668,8 +36082,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32696,8 +36113,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32724,8 +36144,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32752,8 +36175,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32780,8 +36206,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32808,8 +36237,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32836,8 +36268,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32864,8 +36299,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32892,8 +36330,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32920,8 +36361,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32948,8 +36392,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -32976,8 +36423,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33004,8 +36454,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33032,8 +36485,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33060,8 +36516,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33088,8 +36547,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33116,8 +36578,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33144,8 +36609,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33172,8 +36640,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33200,8 +36671,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33228,8 +36702,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33256,8 +36733,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33284,8 +36764,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33312,8 +36795,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33340,8 +36826,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33368,8 +36857,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33396,8 +36888,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33424,8 +36919,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33452,8 +36950,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33480,8 +36981,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33508,8 +37012,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33536,8 +37043,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33564,8 +37074,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33592,8 +37105,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33620,8 +37136,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33648,8 +37167,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33676,8 +37198,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33704,8 +37229,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33732,8 +37260,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33760,8 +37291,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33788,8 +37322,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33816,8 +37353,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33844,8 +37384,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33872,8 +37415,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33900,8 +37446,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33928,8 +37477,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33956,8 +37508,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -33984,8 +37539,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34012,8 +37570,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34040,8 +37601,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34068,8 +37632,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34096,8 +37663,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34124,8 +37694,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34152,8 +37725,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34180,8 +37756,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34208,8 +37787,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34236,8 +37818,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34264,8 +37849,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34292,8 +37880,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34320,8 +37911,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34348,8 +37942,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34376,8 +37973,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34404,8 +38004,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34432,8 +38035,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34460,8 +38066,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34488,8 +38097,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34516,8 +38128,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34544,8 +38159,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34572,8 +38190,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34600,8 +38221,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34628,8 +38252,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34656,8 +38283,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34684,8 +38314,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34712,8 +38345,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34740,8 +38376,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34768,8 +38407,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34796,8 +38438,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34824,8 +38469,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34852,8 +38500,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34880,8 +38531,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34908,8 +38562,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34936,8 +38593,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34964,8 +38624,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -34992,8 +38655,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35020,8 +38686,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35048,8 +38717,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35076,8 +38748,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35104,8 +38779,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35132,8 +38810,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35160,8 +38841,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35188,8 +38872,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35216,8 +38903,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35244,8 +38934,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35272,8 +38965,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35300,8 +38996,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35328,8 +39027,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35356,8 +39058,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35384,8 +39089,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35412,8 +39120,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35440,8 +39151,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35468,8 +39182,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35496,8 +39213,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35524,8 +39244,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35552,8 +39275,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35580,8 +39306,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35608,8 +39337,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35636,8 +39368,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35664,8 +39399,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35692,8 +39430,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35720,8 +39461,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35748,8 +39492,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35776,8 +39523,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35804,8 +39554,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35832,8 +39585,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35860,8 +39616,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35888,8 +39647,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35916,8 +39678,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35944,8 +39709,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -35972,8 +39740,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36000,8 +39771,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36028,8 +39802,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36056,8 +39833,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36084,8 +39864,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36112,8 +39895,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36140,8 +39926,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36168,8 +39957,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36196,8 +39988,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36224,8 +40019,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36252,8 +40050,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36280,8 +40081,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36308,8 +40112,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36336,8 +40143,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36364,8 +40174,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36392,8 +40205,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36420,8 +40236,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36448,8 +40267,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36476,8 +40298,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36504,8 +40329,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36532,8 +40360,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36560,8 +40391,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36588,8 +40422,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36616,8 +40453,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36644,8 +40484,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36672,8 +40515,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36700,8 +40546,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36728,8 +40577,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36756,8 +40608,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36784,8 +40639,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36812,8 +40670,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36840,8 +40701,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36868,8 +40732,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36896,8 +40763,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36924,8 +40794,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36952,8 +40825,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -36980,8 +40856,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37008,8 +40887,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37036,8 +40918,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37064,8 +40949,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37092,8 +40980,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37120,8 +41011,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37148,8 +41042,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37176,8 +41073,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37204,8 +41104,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37232,8 +41135,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37260,8 +41166,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37288,8 +41197,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37316,8 +41228,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37344,8 +41259,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37372,8 +41290,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37400,8 +41321,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37428,8 +41352,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37456,8 +41383,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37484,8 +41414,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37512,8 +41445,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37540,8 +41476,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37568,8 +41507,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37596,8 +41538,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37624,8 +41569,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37652,8 +41600,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37680,8 +41631,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37708,8 +41662,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37736,8 +41693,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37764,8 +41724,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37792,8 +41755,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37820,8 +41786,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37848,8 +41817,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37876,8 +41848,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37904,8 +41879,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37932,8 +41910,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37960,8 +41941,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -37988,8 +41972,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38016,8 +42003,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38044,8 +42034,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38072,8 +42065,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38100,8 +42096,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38128,8 +42127,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38156,8 +42158,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38184,8 +42189,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38212,8 +42220,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38240,8 +42251,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38268,8 +42282,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38296,8 +42313,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38324,8 +42344,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38352,8 +42375,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38380,8 +42406,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38408,8 +42437,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38436,8 +42468,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38464,8 +42499,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38492,8 +42530,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38520,8 +42561,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38548,8 +42592,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38576,8 +42623,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38604,8 +42654,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38632,8 +42685,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38660,8 +42716,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38688,8 +42747,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38716,8 +42778,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38744,8 +42809,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38772,8 +42840,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38800,8 +42871,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38828,8 +42902,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38856,8 +42933,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38884,8 +42964,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38912,8 +42995,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38940,8 +43026,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38968,8 +43057,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -38996,8 +43088,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39024,8 +43119,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39052,8 +43150,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39080,8 +43181,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39108,8 +43212,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39136,8 +43243,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39164,8 +43274,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39192,8 +43305,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39220,8 +43336,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39248,8 +43367,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39276,8 +43398,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39304,8 +43429,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39332,8 +43460,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39360,8 +43491,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39388,8 +43522,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39416,8 +43553,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39444,8 +43584,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39472,8 +43615,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39500,8 +43646,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39528,8 +43677,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39556,8 +43708,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39584,8 +43739,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39612,8 +43770,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39640,8 +43801,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39668,8 +43832,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39696,8 +43863,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39724,8 +43894,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39752,8 +43925,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39780,8 +43956,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39808,8 +43987,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39836,8 +44018,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39864,8 +44049,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39892,8 +44080,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39920,8 +44111,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39948,8 +44142,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -39976,8 +44173,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40004,8 +44204,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40032,8 +44235,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40060,8 +44266,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40088,8 +44297,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40116,8 +44328,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40144,8 +44359,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40172,8 +44390,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40200,8 +44421,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40228,8 +44452,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40256,8 +44483,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40284,8 +44514,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40312,8 +44545,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40340,8 +44576,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40368,8 +44607,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40396,8 +44638,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40424,8 +44669,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40452,8 +44700,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40480,8 +44731,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40508,8 +44762,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40536,8 +44793,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40564,8 +44824,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40592,8 +44855,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40620,8 +44886,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40648,8 +44917,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40676,8 +44948,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40704,8 +44979,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40732,8 +45010,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40760,8 +45041,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40788,8 +45072,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40816,8 +45103,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40844,8 +45134,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40872,8 +45165,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40900,8 +45196,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40928,8 +45227,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40956,8 +45258,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -40984,8 +45289,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41012,8 +45320,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41040,8 +45351,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41068,8 +45382,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41096,8 +45413,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41124,8 +45444,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41152,8 +45475,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41180,8 +45506,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41208,8 +45537,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41236,8 +45568,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41264,8 +45599,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41292,8 +45630,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41320,8 +45661,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41348,8 +45692,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41376,8 +45723,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41404,8 +45754,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41432,8 +45785,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41460,8 +45816,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41488,8 +45847,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41516,8 +45878,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41544,8 +45909,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41572,8 +45940,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41600,8 +45971,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41628,8 +46002,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41656,8 +46033,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41684,8 +46064,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41712,8 +46095,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41740,8 +46126,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41768,8 +46157,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41796,8 +46188,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41824,8 +46219,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41852,8 +46250,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41880,8 +46281,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41908,8 +46312,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41936,8 +46343,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41964,8 +46374,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -41992,8 +46405,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42020,8 +46436,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42048,8 +46467,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42076,8 +46498,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42104,8 +46529,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42132,8 +46560,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42160,8 +46591,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42188,8 +46622,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42216,8 +46653,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42244,8 +46684,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42272,8 +46715,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42300,8 +46746,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42328,8 +46777,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42356,8 +46808,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42384,8 +46839,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42412,8 +46870,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42440,8 +46901,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42468,8 +46932,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42496,8 +46963,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42524,8 +46994,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42552,8 +47025,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42580,8 +47056,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42608,8 +47087,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42636,8 +47118,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42664,8 +47149,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42692,8 +47180,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42720,8 +47211,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42748,8 +47242,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42776,8 +47273,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42804,8 +47304,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42832,8 +47335,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42860,8 +47366,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42888,8 +47397,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42916,8 +47428,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42944,8 +47459,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -42972,8 +47490,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43000,8 +47521,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43028,8 +47552,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43056,8 +47583,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43084,8 +47614,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43112,8 +47645,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43140,8 +47676,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43168,8 +47707,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43196,8 +47738,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43224,8 +47769,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43252,8 +47800,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43280,8 +47831,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43308,8 +47862,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43336,8 +47893,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43364,8 +47924,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43392,8 +47955,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43420,8 +47986,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43448,8 +48017,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43476,8 +48048,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43504,8 +48079,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43532,8 +48110,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43560,8 +48141,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43588,8 +48172,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43616,8 +48203,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43644,8 +48234,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43672,8 +48265,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43700,8 +48296,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43728,8 +48327,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43756,8 +48358,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43784,8 +48389,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43812,8 +48420,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43840,8 +48451,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43868,8 +48482,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43896,8 +48513,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43924,8 +48544,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43952,8 +48575,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -43980,8 +48606,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44008,8 +48637,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44036,8 +48668,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44064,8 +48699,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44092,8 +48730,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44120,8 +48761,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44148,8 +48792,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44176,8 +48823,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44204,8 +48854,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44232,8 +48885,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44260,8 +48916,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44288,8 +48947,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44316,8 +48978,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44344,8 +49009,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44372,8 +49040,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44400,8 +49071,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44428,8 +49102,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44456,8 +49133,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44484,8 +49164,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44512,8 +49195,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44540,8 +49226,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44568,8 +49257,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44596,8 +49288,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44624,8 +49319,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44652,8 +49350,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44680,8 +49381,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44708,8 +49412,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44736,8 +49443,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44764,8 +49474,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44792,8 +49505,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44820,8 +49536,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44848,8 +49567,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44876,8 +49598,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44904,8 +49629,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44932,8 +49660,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44960,8 +49691,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -44988,8 +49722,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45016,8 +49753,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45044,8 +49784,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45072,8 +49815,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45100,8 +49846,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45128,8 +49877,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45156,8 +49908,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45184,8 +49939,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45212,8 +49970,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45240,8 +50001,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45268,8 +50032,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45296,8 +50063,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45324,8 +50094,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45352,8 +50125,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45380,8 +50156,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45408,8 +50187,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45436,8 +50218,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45464,8 +50249,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45492,8 +50280,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45520,8 +50311,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45548,8 +50342,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45576,8 +50373,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45604,8 +50404,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45632,8 +50435,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45660,8 +50466,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45688,8 +50497,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45716,8 +50528,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45744,8 +50559,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45772,8 +50590,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45800,8 +50621,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45828,8 +50652,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45856,8 +50683,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45884,8 +50714,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45912,8 +50745,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45940,8 +50776,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45968,8 +50807,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -45996,8 +50838,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46024,8 +50869,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46052,8 +50900,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46080,8 +50931,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46108,8 +50962,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46136,8 +50993,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46164,8 +51024,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46192,8 +51055,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46220,8 +51086,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46248,8 +51117,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46276,8 +51148,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46304,8 +51179,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46332,8 +51210,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46360,8 +51241,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46388,8 +51272,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46416,8 +51303,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46444,8 +51334,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46472,8 +51365,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46500,8 +51396,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46528,8 +51427,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46556,8 +51458,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46584,8 +51489,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46612,8 +51520,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46640,8 +51551,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46668,8 +51582,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46696,8 +51613,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46724,8 +51644,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46752,8 +51675,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46780,8 +51706,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46808,8 +51737,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46836,8 +51768,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46864,8 +51799,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46892,8 +51830,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46920,8 +51861,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46948,8 +51892,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -46976,8 +51923,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47004,8 +51954,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47032,8 +51985,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47060,8 +52016,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47088,8 +52047,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47116,8 +52078,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47144,8 +52109,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47172,8 +52140,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47200,8 +52171,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47228,8 +52202,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47256,8 +52233,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47284,8 +52264,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47312,8 +52295,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47340,8 +52326,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47368,8 +52357,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47396,8 +52388,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47424,8 +52419,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47452,8 +52450,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47480,8 +52481,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47508,8 +52512,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47536,8 +52543,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47564,8 +52574,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47592,8 +52605,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47620,8 +52636,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47648,8 +52667,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47676,8 +52698,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47704,8 +52729,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47732,8 +52760,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47760,8 +52791,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47788,8 +52822,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47816,8 +52853,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47844,8 +52884,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47872,8 +52915,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47900,8 +52946,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47928,8 +52977,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47956,8 +53008,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -47984,8 +53039,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48012,8 +53070,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48040,8 +53101,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48068,8 +53132,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48096,8 +53163,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48124,8 +53194,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48152,8 +53225,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48180,8 +53256,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48208,8 +53287,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48236,8 +53318,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48264,8 +53349,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48292,8 +53380,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48320,8 +53411,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48348,8 +53442,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48376,8 +53473,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48404,8 +53504,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48432,8 +53535,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48460,8 +53566,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48488,8 +53597,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48516,8 +53628,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48544,8 +53659,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48572,8 +53690,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48600,8 +53721,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48628,8 +53752,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48656,8 +53783,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48684,8 +53814,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48712,8 +53845,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48740,8 +53876,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48768,8 +53907,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48796,8 +53938,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48824,8 +53969,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48852,8 +54000,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48880,8 +54031,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48908,8 +54062,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48936,8 +54093,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48964,8 +54124,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -48992,8 +54155,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49020,8 +54186,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49048,8 +54217,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49076,8 +54248,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49104,8 +54279,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49132,8 +54310,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49160,8 +54341,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49188,8 +54372,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49216,8 +54403,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49244,8 +54434,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49272,8 +54465,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49300,8 +54496,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49328,8 +54527,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49356,8 +54558,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49384,8 +54589,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49412,8 +54620,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49440,8 +54651,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49468,8 +54682,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49496,8 +54713,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49524,8 +54744,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49552,8 +54775,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49580,8 +54806,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49614,8 +54843,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49648,8 +54880,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49688,8 +54923,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49716,8 +54954,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49744,8 +54985,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49772,8 +55016,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49800,8 +55047,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49828,8 +55078,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -49856,8 +55109,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], diff --git a/scanpipe/tests/data/image-with-symlinks/minitag.tar-expected-scan.json b/scanpipe/tests/data/image-with-symlinks/minitag.tar-expected-scan.json index 7a65178b5e..52cd1208a4 100644 --- a/scanpipe/tests/data/image-with-symlinks/minitag.tar-expected-scan.json +++ b/scanpipe/tests/data/image-with-symlinks/minitag.tar-expected-scan.json @@ -93,8 +93,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, + "detected_license_expression": "", + "detected_license_expression_spdx": "", "license_detections": [], - "detected_license_expression": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -121,8 +124,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, + "detected_license_expression": "", + "detected_license_expression_spdx": "", "license_detections": [], - "detected_license_expression": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -149,8 +155,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, + "detected_license_expression": "", + "detected_license_expression_spdx": "", "license_detections": [], - "detected_license_expression": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -177,8 +186,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, + "detected_license_expression": "", + "detected_license_expression_spdx": "", "license_detections": [], - "detected_license_expression": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -205,8 +217,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, + "detected_license_expression": "", + "detected_license_expression_spdx": "", "license_detections": [], - "detected_license_expression": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -233,8 +248,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, + "detected_license_expression": "", + "detected_license_expression_spdx": "", "license_detections": [], - "detected_license_expression": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -261,8 +279,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, + "detected_license_expression": "", + "detected_license_expression_spdx": "", "license_detections": [], - "detected_license_expression": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -289,8 +310,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, + "detected_license_expression": "", + "detected_license_expression_spdx": "", "license_detections": [], - "detected_license_expression": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], diff --git a/scanpipe/tests/data/is-npm-1.0.0_scan_codebase.json b/scanpipe/tests/data/is-npm-1.0.0_scan_codebase.json index 0c3fc301cf..be3b88d7a6 100644 --- a/scanpipe/tests/data/is-npm-1.0.0_scan_codebase.json +++ b/scanpipe/tests/data/is-npm-1.0.0_scan_codebase.json @@ -94,14 +94,12 @@ ], "other_license_expression": "", "other_license_expression_spdx": "", - "other_license_detections": {}, + "other_license_detections": [], "extracted_license_statement": "['MIT']", "notice_text": "", "source_packages": [], "extra_data": {}, "package_uid": "pkg:npm/is-npm@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], @@ -141,8 +139,11 @@ "is_archive": true, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -169,8 +170,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -197,8 +201,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -225,8 +232,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -255,8 +265,11 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "", + "detected_license_expression_spdx": "", + "license_detections": [], + "license_clues": [], + "percentage_of_license_text": null, "copyrights": [], "holders": [], "authors": [], @@ -373,8 +386,31 @@ "is_archive": false, "is_media": false, "is_key_file": false, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "mit", + "detected_license_expression_spdx": "MIT", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 30, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/mit_30.RULE", + "start_line": 28, + "matched_text": "## License\n\nMIT \u00a9 [Sindre Sorhus](http://sindresorhus.com)", + "match_coverage": 100.0, + "matched_length": 2, + "rule_relevance": 100, + "rule_identifier": "mit_30.RULE", + "license_expression": "mit" + } + ], + "identifier": "mit-3fce6ea2-8abd-6c6b-3ede-a37af7c6efee", + "license_expression": "mit" + } + ], + "license_clues": [], + "percentage_of_license_text": 2.78, "copyrights": [ { "end_line": 30, diff --git a/scanpipe/tests/regen_test_data.py b/scanpipe/tests/regen_test_data.py index 33f2ca9db9..945d4aee27 100644 --- a/scanpipe/tests/regen_test_data.py +++ b/scanpipe/tests/regen_test_data.py @@ -49,6 +49,9 @@ class RegenTestData(TestCase): - Docker: $ docker compose run --volume "$(pwd)":/app web \ ./manage.py test --pattern "regen*.py" + + Warning: Once the test data is updated, run the whole test suite with the + `SCANCODEIO_TEST_FIXTURES_REGEN` setting enabled to regen the expected files. """ data_location = Path(__file__).parent / "data" diff --git a/scanpipe/tests/test_api.py b/scanpipe/tests/test_api.py index b7b1e206fe..163d6c09c5 100644 --- a/scanpipe/tests/test_api.py +++ b/scanpipe/tests/test_api.py @@ -721,7 +721,7 @@ def test_scanpipe_api_serializer_get_model_serializer(self): def test_scanpipe_api_serializer_get_serializer_fields(self): self.assertEqual(42, len(get_serializer_fields(DiscoveredPackage))) self.assertEqual(11, len(get_serializer_fields(DiscoveredDependency))) - self.assertEqual(30, len(get_serializer_fields(CodebaseResource))) + self.assertEqual(33, len(get_serializer_fields(CodebaseResource))) self.assertEqual(3, len(get_serializer_fields(CodebaseRelation))) self.assertEqual(6, len(get_serializer_fields(ProjectError))) From e538e70160f90620e50e2496ef04d698c8f51413 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Mon, 8 May 2023 13:07:40 +0400 Subject: [PATCH 19/53] Fix unit test #569 Signed-off-by: Thomas Druez --- scanpipe/pipes/scancode.py | 11 +-- ...ple-is-npm-1.0.0_scan_package_summary.json | 79 +++++++++++++++++-- scanpipe/tests/test_pipelines.py | 3 +- 3 files changed, 79 insertions(+), 14 deletions(-) diff --git a/scanpipe/pipes/scancode.py b/scanpipe/pipes/scancode.py index 31c1d0ac53..46c9f6646b 100644 --- a/scanpipe/pipes/scancode.py +++ b/scanpipe/pipes/scancode.py @@ -542,14 +542,15 @@ def _get_license_matches_grouped(project): license_expression. """ license_matches = defaultdict(list) + resources_with_license = project.codebaseresources.has_licenses() - for resource in project.codebaseresources.has_licenses(): + for resource in resources_with_license: file_cache = [] - for license in resource.license_detections: - matched_rule = license.get("matched_rule", {}) - license_expression = matched_rule.get("license_expression") - matched_text = license.get("matched_text") + # TODO: + for match in resource.license_detections[0].get("matches", []): + license_expression = match.get("license_expression") + matched_text = match.get("matched_text") # Do not include duplicated matched_text for a given license_expression # within the same file diff --git a/scanpipe/tests/data/multiple-is-npm-1.0.0_scan_package_summary.json b/scanpipe/tests/data/multiple-is-npm-1.0.0_scan_package_summary.json index 9f9be0559e..94602839a3 100644 --- a/scanpipe/tests/data/multiple-is-npm-1.0.0_scan_package_summary.json +++ b/scanpipe/tests/data/multiple-is-npm-1.0.0_scan_package_summary.json @@ -24,7 +24,26 @@ } ], "other_languages": [], - "license_matches": {}, + "license_matches": { + "mit": [ + { + "path": "is-npm/node_modules/is-npm/package.json", + "matched_text": " \"license\": \"MIT\"," + }, + { + "path": "is-npm/node_modules/is-npm/readme.md", + "matched_text": "## License\n\nMIT \u00a9 [Sindre Sorhus](http://sindresorhus.com)" + }, + { + "path": "is-npm/package.json", + "matched_text": " \"license\": \"MIT\"," + }, + { + "path": "is-npm/readme.md", + "matched_text": "## License\n\nMIT \u00a9 [Sindre Sorhus](http://sindresorhus.com)" + } + ] + }, "key_files": [ { "path": "is-npm/package.json", @@ -43,8 +62,31 @@ "is_archive": false, "is_media": false, "is_key_file": true, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "mit", + "detected_license_expression_spdx": "MIT", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 5, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/mit_30.RULE", + "start_line": 5, + "matched_text": " \"license\": \"MIT\",", + "match_coverage": 100.0, + "matched_length": 2, + "rule_relevance": 100, + "rule_identifier": "mit_30.RULE", + "license_expression": "mit" + } + ], + "identifier": "mit-3fce6ea2-8abd-6c6b-3ede-a37af7c6efee", + "license_expression": "mit" + } + ], + "license_clues": [], + "percentage_of_license_text": 3.33, "copyrights": [], "holders": [], "authors": [], @@ -174,8 +216,31 @@ "is_archive": false, "is_media": false, "is_key_file": true, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "mit", + "detected_license_expression_spdx": "MIT", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 30, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/mit_30.RULE", + "start_line": 28, + "matched_text": "## License\n\nMIT \u00a9 [Sindre Sorhus](http://sindresorhus.com)", + "match_coverage": 100.0, + "matched_length": 2, + "rule_relevance": 100, + "rule_identifier": "mit_30.RULE", + "license_expression": "mit" + } + ], + "identifier": "mit-3fce6ea2-8abd-6c6b-3ede-a37af7c6efee", + "license_expression": "mit" + } + ], + "license_clues": [], + "percentage_of_license_text": 2.78, "copyrights": [ { "end_line": 30, @@ -290,14 +355,12 @@ ], "other_license_expression": "", "other_license_expression_spdx": "", - "other_license_detections": {}, + "other_license_detections": [], "extracted_license_statement": "['MIT']", "notice_text": "", "source_packages": [], "extra_data": {}, "package_uid": "pkg:npm/is-npm@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], diff --git a/scanpipe/tests/test_pipelines.py b/scanpipe/tests/test_pipelines.py index 8925c6c567..f46f86af44 100644 --- a/scanpipe/tests/test_pipelines.py +++ b/scanpipe/tests/test_pipelines.py @@ -380,7 +380,8 @@ def test_scanpipe_scan_package_pipeline_integration_multiple_packages_test(self) scancode_file = project1.get_latest_output(filename="scancode") expected_file = self.data_location / "multiple-is-npm-1.0.0_scan_package.json" - self.assertPipelineResultEqual(expected_file, scancode_file) + # Do not override the regen as this file is generated in regen_test_data + self.assertPipelineResultEqual(expected_file, scancode_file, regen=1) summary_file = project1.get_latest_output(filename="summary") expected_file = ( From 2a294e817d9e4f0c293c5c5ae49df0087fffac0f Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Mon, 8 May 2023 13:20:55 +0400 Subject: [PATCH 20/53] Refine migration files in 3 steps #569 Signed-off-by: Thomas Druez --- ...0030_scancode_toolkit_v32_model_updates.py | 43 +++------------- ...cancode_toolkit_v32_post_data_migration.py | 49 +++++++++++++++++++ scanpipe/models.py | 1 + 3 files changed, 58 insertions(+), 35 deletions(-) create mode 100644 scanpipe/migrations/0032_scancode_toolkit_v32_post_data_migration.py diff --git a/scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py b/scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py index 8982d21743..7e3e274004 100644 --- a/scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py +++ b/scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py @@ -9,14 +9,6 @@ class Migration(migrations.Migration): ] operations = [ - migrations.RemoveField( - model_name="discoveredpackage", - name="contains_source_code", - ), - migrations.RemoveField( - model_name="discoveredpackage", - name="manifest_path", - ), migrations.RemoveIndex( model_name="discoveredpackage", name="scanpipe_di_license_e8ce32_idx", @@ -97,42 +89,23 @@ class Migration(migrations.Migration): help_text="The other SPDX license expression for this package converted from its other_license_expression.", ), ), - migrations.AddIndex( - model_name="discoveredpackage", - index=models.Index( - fields=["declared_license_expression"], - name="scanpipe_di_declare_4b8499_idx", - ), - ), - migrations.AddIndex( - model_name="discoveredpackage", - index=models.Index( - fields=["other_license_expression"], - name="scanpipe_di_other_l_1f1616_idx", - ), - ), - - # CodebaseResource - migrations.RenameField( - model_name="codebaseresource", - old_name="license_expressions", - new_name="detected_license_expression", - ), - migrations.AlterField( + migrations.AddField( model_name="codebaseresource", name="detected_license_expression", field=models.TextField(blank=True, help_text="TODO"), ), - migrations.RenameField( - model_name="codebaseresource", - old_name="licenses", - new_name="license_detections", - ), migrations.AddField( model_name="codebaseresource", name="detected_license_expression_spdx", field=models.TextField(blank=True, help_text="TODO"), ), + migrations.AddField( + model_name="codebaseresource", + name="license_detections", + field=models.JSONField( + blank=True, default=list, help_text="List of license detection details." + ), + ), migrations.AddField( model_name="codebaseresource", name="license_clues", diff --git a/scanpipe/migrations/0032_scancode_toolkit_v32_post_data_migration.py b/scanpipe/migrations/0032_scancode_toolkit_v32_post_data_migration.py new file mode 100644 index 0000000000..0abf19c8b9 --- /dev/null +++ b/scanpipe/migrations/0032_scancode_toolkit_v32_post_data_migration.py @@ -0,0 +1,49 @@ +# Generated by Django 4.2 on 2023-05-08 09:08 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("scanpipe", "0031_scancode_toolkit_v32_data_updates"), + ] + + operations = [ + migrations.RemoveField( + model_name="discoveredpackage", + name="contains_source_code", + ), + migrations.RemoveField( + model_name="discoveredpackage", + name="manifest_path", + ), + migrations.RemoveField( + model_name="codebaseresource", + name="license_expressions", + ), + migrations.RemoveField( + model_name="codebaseresource", + name="licenses", + ), + migrations.AddIndex( + model_name="discoveredpackage", + index=models.Index( + fields=["declared_license_expression"], + name="scanpipe_di_declare_4b8499_idx", + ), + ), + migrations.AddIndex( + model_name="discoveredpackage", + index=models.Index( + fields=["other_license_expression"], + name="scanpipe_di_other_l_1f1616_idx", + ), + ), + migrations.AddIndex( + model_name="codebaseresource", + index=models.Index( + fields=["detected_license_expression"], + name="scanpipe_co_detecte_f3f97d_idx", + ), + ), + ] diff --git a/scanpipe/models.py b/scanpipe/models.py index 9ff67691c1..0cd09f8b01 100644 --- a/scanpipe/models.py +++ b/scanpipe/models.py @@ -1662,6 +1662,7 @@ class Meta: models.Index(fields=["mime_type"]), models.Index(fields=["tag"]), models.Index(fields=["sha1"]), + models.Index(fields=["detected_license_expression"]), models.Index(fields=["compliance_alert"]), models.Index(fields=["is_binary"]), models.Index(fields=["is_text"]), From 4a087bf9c81ee562013e2ab7ae0bc4d8e1547674 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Mon, 8 May 2023 18:51:03 +0400 Subject: [PATCH 21/53] Add data mgiration for detected_license_expression #569 Signed-off-by: Thomas Druez --- .../0031_scancode_toolkit_v32_data_updates.py | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py b/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py index 08f259009d..f4ef5cfcba 100644 --- a/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py +++ b/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py @@ -22,6 +22,30 @@ def compute_package_declared_license_expression_spdx(apps, schema_editor): package.save() +def compute_resource_detected_license_expression(apps, schema_editor): + """ + Compute CodebaseResource `detected_license_expression` and + `detected_license_expression_spdx` from old `license_expressions` field. + """ + from license_expression import combine_expressions + from licensedcode.cache import build_spdx_license_expression + + CodebaseResource = apps.get_model('scanpipe', 'CodebaseResource') + resources = CodebaseResource.objects.filter(~Q(license_expressions=[])) + + for resource in resources: + license_expression = str(combine_expressions(resource.license_expressions)) + license_expression_spdx = build_spdx_license_expression(license_expression) + resource.declared_license_expression = license_expression + resource.declared_license_expression_spdx = license_expression_spdx + resource.save() + + +def compute_resource_license_detections(apps, schema_editor): + """Compute CodebaseResource `license_detections` from old `licenses` field.""" + pass + + class Migration(migrations.Migration): dependencies = [ ("scanpipe", "0030_scancode_toolkit_v32_model_updates"), @@ -32,4 +56,12 @@ class Migration(migrations.Migration): compute_package_declared_license_expression_spdx, reverse_code=migrations.RunPython.noop, ), + # migrations.RunPython( + # compute_resource_detected_license_expression, + # reverse_code=migrations.RunPython.noop, + # ), + # migrations.RunPython( + # compute_resource_license_detections, + # reverse_code=migrations.RunPython.noop, + # ), ] From f2b301f574e36be45ae7eeea639e6ebb33d17839 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Fri, 12 May 2023 13:58:20 +0400 Subject: [PATCH 22/53] Remove licenses_categories #569 Signed-off-by: Thomas Druez --- docs/custom-pipelines.rst | 1 + scanpipe/models.py | 10 +++--- .../templates/scanpipe/project_charts.html | 2 -- scanpipe/tests/test_models.py | 34 ------------------- scanpipe/views.py | 2 -- 5 files changed, 7 insertions(+), 42 deletions(-) diff --git a/docs/custom-pipelines.rst b/docs/custom-pipelines.rst index 5e9491ac5f..540356b040 100644 --- a/docs/custom-pipelines.rst +++ b/docs/custom-pipelines.rst @@ -113,6 +113,7 @@ the file's directory in the :ref:`scancodeio_settings_pipelines_dirs`. from scanpipe.pipelines.scan_codebase import ScanCodebase + # TODO: Rewrite this following v32 changes class ScanAndReport(ScanCodebase): """ Runs the ScanCodebase built-in pipeline steps and generate a licenses report. diff --git a/scanpipe/models.py b/scanpipe/models.py index 14a7f9f41f..587c34254b 100644 --- a/scanpipe/models.py +++ b/scanpipe/models.py @@ -1409,11 +1409,13 @@ def has_package_data(self): return self.filter(~Q(package_data=[])) def licenses_categories(self, categories): - return self.json_list_contains( - field_name="licenses", - key="category", - values=categories, + import warnings + + warnings.warn( + "licenses_categories is deprecated due to the removal of the category " + "value from scancode-toolkit v32 scan data.", ) + return [] def unknown_license(self): return self.filter(detected_license_expression__icontains="unknown") diff --git a/scanpipe/templates/scanpipe/project_charts.html b/scanpipe/templates/scanpipe/project_charts.html index b248f2913a..8fb948a438 100644 --- a/scanpipe/templates/scanpipe/project_charts.html +++ b/scanpipe/templates/scanpipe/project_charts.html @@ -77,7 +77,6 @@

{{ holders|json_script:"holders" }} {{ copyrights|json_script:"copyrights" }} {{ file_license_keys|json_script:"file_license_keys" }} - {{ file_license_categories|json_script:"file_license_categories" }} {{ file_compliance_alert|json_script:"file_compliance_alert" }} {% endif %} {% if project.package_count %} @@ -172,7 +171,6 @@

makeChart("holders", "#holders_chart", "Holder"); makeChart("copyrights", "#copyrights_chart", "Copyright"); makeChart("file_license_keys", "#license_key_chart", "License\nKey"); - makeChart("file_license_categories", "#license_category_chart", "License\nCategory"); makeChart("file_compliance_alert", "#compliance_alert_chart", "Compliance\nAlert"); {% endblock %} \ No newline at end of file diff --git a/scanpipe/tests/test_models.py b/scanpipe/tests/test_models.py index 15d71a9649..464ad1a630 100644 --- a/scanpipe/tests/test_models.py +++ b/scanpipe/tests/test_models.py @@ -1108,40 +1108,6 @@ def test_scanpipe_codebase_resource_queryset_methods(self): self.assertEqual(1, CodebaseResource.objects.from_codebase().count()) self.assertEqual(2, CodebaseResource.objects.to_codebase().count()) - def test_scanpipe_codebase_resource_queryset_licenses_categories(self): - CodebaseResource.objects.all().delete() - - resource1 = CodebaseResource.objects.create( - project=self.project1, - path="1", - license_detections=[{"key": "gpl-3.0", "category": "Copyleft"}], - ) - - resource2 = CodebaseResource.objects.create( - project=self.project1, - path="2", - license_detections=[ - {"key": "lgpl-3.0-plus", "category": "Copyleft Limited"} - ], - ) - - resource_qs = self.project1.codebaseresources - - categories = ["Permissive"] - self.assertQuerySetEqual([], resource_qs.licenses_categories(categories)) - - categories = ["Copyleft"] - expected = [resource1] - self.assertQuerySetEqual(expected, resource_qs.licenses_categories(categories)) - - categories = ["Copyleft Limited"] - expected = [resource2] - self.assertQuerySetEqual(expected, resource_qs.licenses_categories(categories)) - - categories = ["Copyleft", "Copyleft Limited"] - expected = [resource1, resource2] - self.assertQuerySetEqual(expected, resource_qs.licenses_categories(categories)) - def _create_resources_for_queryset_methods(self): resource1 = CodebaseResource.objects.create(project=self.project1, path="1") resource1.holders = [ diff --git a/scanpipe/views.py b/scanpipe/views.py index a43b555217..7313fc1635 100644 --- a/scanpipe/views.py +++ b/scanpipe/views.py @@ -638,7 +638,6 @@ def get_context_data(self, **kwargs): file_holders = files.values_from_json_field("holders", "holder") file_copyrights = files.values_from_json_field("copyrights", "copyright") file_license_keys = files.values_from_json_field("licenses", "key") - file_license_categories = files.values_from_json_field("licenses", "category") file_compliance_alert = [] if scanpipe_app.policies_enabled: @@ -661,7 +660,6 @@ def get_context_data(self, **kwargs): "holders": self.get_summary(file_holders), "copyrights": self.get_summary(file_copyrights), "file_license_keys": self.get_summary(file_license_keys), - "file_license_categories": self.get_summary(file_license_categories), "file_compliance_alert": self.get_summary(file_compliance_alert), "package_licenses": self.get_summary(package_licenses), "package_types": self.get_summary(package_types), From 4d968577552bf04f87765630dcd021881666eb7c Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Fri, 12 May 2023 14:07:30 +0400 Subject: [PATCH 23/53] Migrate attribution to new model fields #569 Signed-off-by: Thomas Druez --- scanpipe/pipes/output.py | 4 +- scanpipe/templates/scanpipe/attribution.html | 2 +- .../data/outputs/expected_attribution.html | 122 +++++++++--------- scanpipe/tests/pipes/test_output.py | 4 +- 4 files changed, 65 insertions(+), 67 deletions(-) diff --git a/scanpipe/pipes/output.py b/scanpipe/pipes/output.py index 24d40ce19a..689b9b1f40 100644 --- a/scanpipe/pipes/output.py +++ b/scanpipe/pipes/output.py @@ -680,8 +680,8 @@ def to_attribution(project): license_symbols = [] for package in packages: - if package.license_expression: - parsed = licensing.parse(package.license_expression) + if package.declared_license_expression: + parsed = licensing.parse(package.declared_license_expression) package.expression_links = get_expression_as_attribution_links(parsed) # .decompose() is required for LicenseWithExceptionSymbol support for symbol in parsed.symbols: diff --git a/scanpipe/templates/scanpipe/attribution.html b/scanpipe/templates/scanpipe/attribution.html index dd20241021..e3ed410f55 100644 --- a/scanpipe/templates/scanpipe/attribution.html +++ b/scanpipe/templates/scanpipe/attribution.html @@ -57,7 +57,7 @@

{{ package }}

{{ package.copyright }}
{% endif %} {# 5. License expression #} - {% if package.license_expression %} + {% if package.declared_license_expression %}

This package is licensed under {{ package.expression_links|safe }}

{% endif %} {# 6. Notice text #} diff --git a/scanpipe/tests/data/outputs/expected_attribution.html b/scanpipe/tests/data/outputs/expected_attribution.html index 5c6fa6046d..ece93ad06a 100644 --- a/scanpipe/tests/data/outputs/expected_attribution.html +++ b/scanpipe/tests/data/outputs/expected_attribution.html @@ -94,21 +94,20 @@

Classpath-exception-2.0

which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement -from your version. - +from your version.

GPL-2.0-only

                    GNU GENERAL PUBLIC LICENSE
                        Version 2, June 1991
-
+ 
  Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
-
+ 
                             Preamble
-
+ 
   The licenses for most software are designed to take away your
 freedom to share and change it.  By contrast, the GNU General Public
 License is intended to guarantee your freedom to share and change free
@@ -118,48 +117,48 @@ 

GPL-2.0-only

using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. - + When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. - + To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. - + For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. - + We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. - + Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. - + Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. - + The precise terms and conditions for copying, distribution and modification follow. - + GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - + 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, @@ -169,14 +168,14 @@

GPL-2.0-only

either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". - + Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. - + 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate @@ -184,23 +183,23 @@

GPL-2.0-only

notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. - + You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. - + 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: - + a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. - + b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. - + c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an @@ -211,7 +210,7 @@

GPL-2.0-only

License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) - + These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in @@ -221,38 +220,38 @@

GPL-2.0-only

on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. - + Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. - + In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. - + 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: - + a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, - + b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, - + c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) - + The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any @@ -263,13 +262,13 @@

GPL-2.0-only

form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. - + If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. - + 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is @@ -277,7 +276,7 @@

GPL-2.0-only

However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. - + 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are @@ -286,7 +285,7 @@

GPL-2.0-only

Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. - + 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to @@ -294,7 +293,7 @@

GPL-2.0-only

restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. - + 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or @@ -307,12 +306,12 @@

GPL-2.0-only

all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. - + If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. - + It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the @@ -323,10 +322,10 @@

GPL-2.0-only

system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. - + This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. - + 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License @@ -334,12 +333,12 @@

GPL-2.0-only

those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. - + 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - + Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions @@ -347,7 +346,7 @@

GPL-2.0-only

Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. - + 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free @@ -355,9 +354,9 @@

GPL-2.0-only

make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. - + NO WARRANTY - + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES @@ -367,7 +366,7 @@

GPL-2.0-only

TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, @@ -377,68 +376,67 @@

GPL-2.0-only

YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - + END OF TERMS AND CONDITIONS - + How to Apply These Terms to Your New Programs - + If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. - + To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. - + <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - + Also add information on how to contact you by electronic and paper mail. - + If the program is interactive, make it output a short notice like this when it starts in an interactive mode: - + Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. - + The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. - + You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: - + Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. - + <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice - + This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. -
+Public License instead of this License.

MIT

diff --git a/scanpipe/tests/pipes/test_output.py b/scanpipe/tests/pipes/test_output.py index 8e6d63c4bb..47286b870b 100644 --- a/scanpipe/tests/pipes/test_output.py +++ b/scanpipe/tests/pipes/test_output.py @@ -305,7 +305,7 @@ def test_scanpipe_pipes_outputs_to_attribution(self): project = Project.objects.create(name="Analysis") package_data = dict(package_data1) expression_with_exception = "mit AND gpl-2.0 with classpath-exception-2.0" - package_data["license_expression"] = expression_with_exception + package_data["declared_license_expression"] = expression_with_exception package_data["notice_text"] = "Notice text" pipes.update_or_create_package(project, package_data) @@ -313,7 +313,7 @@ def test_scanpipe_pipes_outputs_to_attribution(self): output_file = output.to_attribution(project=project) expected_file = self.data_path / "outputs" / "expected_attribution.html" - self.assertResultsEqual(expected_file, output_file.read_text()) + self.assertResultsEqual(expected_file, output_file.read_text(), 1) config_directory = make_config_directory(project) custom_template_dir = config_directory / "templates" From f494896c342813bde9b6f13ee1286d3ab2116fbe Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Fri, 12 May 2023 14:22:42 +0400 Subject: [PATCH 24/53] Migrate charts for detected_license_expression #569 Signed-off-by: Thomas Druez --- scanpipe/templates/scanpipe/project_charts.html | 8 ++++---- scanpipe/views.py | 6 ++++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/scanpipe/templates/scanpipe/project_charts.html b/scanpipe/templates/scanpipe/project_charts.html index 8fb948a438..9b850e343b 100644 --- a/scanpipe/templates/scanpipe/project_charts.html +++ b/scanpipe/templates/scanpipe/project_charts.html @@ -55,8 +55,8 @@

{% include "scanpipe/includes/resource_chart_column.html" with field_name="copyrights" %}
- {% include "scanpipe/includes/resource_chart_column.html" with field_name="license_key" lookup_field="license_key" %} - {% include "scanpipe/includes/resource_chart_column.html" with field_name="license_category" lookup_field="license_category" %} + {% include "scanpipe/includes/resource_chart_column.html" with field_name="file_license_expressions" %} +
{% if file_compliance_alert %}
@@ -76,7 +76,7 @@

{{ mime_types|json_script:"mime_types" }} {{ holders|json_script:"holders" }} {{ copyrights|json_script:"copyrights" }} - {{ file_license_keys|json_script:"file_license_keys" }} + {{ file_license_expressions|json_script:"file_license_expressions" }} {{ file_compliance_alert|json_script:"file_compliance_alert" }} {% endif %} {% if project.package_count %} @@ -170,7 +170,7 @@

makeChart("mime_types", "#mime_type_chart", "Mime\nType"); makeChart("holders", "#holders_chart", "Holder"); makeChart("copyrights", "#copyrights_chart", "Copyright"); - makeChart("file_license_keys", "#license_key_chart", "License\nKey"); + makeChart("file_license_expressions", "#file_license_expressions_chart", "License\nExpressions"); makeChart("file_compliance_alert", "#compliance_alert_chart", "Compliance\nAlert"); {% endblock %} \ No newline at end of file diff --git a/scanpipe/views.py b/scanpipe/views.py index 7313fc1635..96ad873dd9 100644 --- a/scanpipe/views.py +++ b/scanpipe/views.py @@ -637,7 +637,9 @@ def get_context_data(self, **kwargs): file_mime_types = files.values_list("mime_type", flat=True) file_holders = files.values_from_json_field("holders", "holder") file_copyrights = files.values_from_json_field("copyrights", "copyright") - file_license_keys = files.values_from_json_field("licenses", "key") + file_license_expressions = files.values_list( + "detected_license_expression", flat=True + ) file_compliance_alert = [] if scanpipe_app.policies_enabled: @@ -659,7 +661,7 @@ def get_context_data(self, **kwargs): "mime_types": self.get_summary(file_mime_types), "holders": self.get_summary(file_holders), "copyrights": self.get_summary(file_copyrights), - "file_license_keys": self.get_summary(file_license_keys), + "file_license_expressions": self.get_summary(file_license_expressions), "file_compliance_alert": self.get_summary(file_compliance_alert), "package_licenses": self.get_summary(package_licenses), "package_types": self.get_summary(package_types), From bd17cb3713a4d842fb6db41b0fead2466d152b2a Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Fri, 12 May 2023 14:33:02 +0400 Subject: [PATCH 25/53] Migrate spdx to new model fields #569 Signed-off-by: Thomas Druez --- scanpipe/models.py | 6 +-- scanpipe/tests/data/asgiref-3.3.0.spdx.json | 50 ++++++++++----------- scanpipe/tests/pipes/test_output.py | 2 +- 3 files changed, 27 insertions(+), 31 deletions(-) diff --git a/scanpipe/models.py b/scanpipe/models.py index 587c34254b..3c0524d6ef 100644 --- a/scanpipe/models.py +++ b/scanpipe/models.py @@ -1958,10 +1958,6 @@ def as_spdx(self): """Return this CodebaseResource as an SPDX Package entry.""" from scanpipe.pipes import spdx - # TODO: test_scanpipe_pipes_outputs_to_spdx - spdx_license_keys = [ - license["spdx_license_key"] for license in self.license_detections - ] copyrights = [copyright["copyright"] for copyright in self.copyrights] holders = [holder["holder"] for holder in self.holders] authors = [author["author"] for author in self.authors] @@ -1970,7 +1966,7 @@ def as_spdx(self): spdx_id=self.spdx_id, name=f"./{self.path}", checksums=[spdx.Checksum(algorithm="sha1", value=self.sha1)], - license_in_files=list(set(spdx_license_keys)), + license_concluded=self.detected_license_expression_spdx, copyright_text=", ".join(copyrights), contributors=list(set(holders + authors)), types=self.get_spdx_types(), diff --git a/scanpipe/tests/data/asgiref-3.3.0.spdx.json b/scanpipe/tests/data/asgiref-3.3.0.spdx.json index 17d9d73218..88ccc416ad 100644 --- a/scanpipe/tests/data/asgiref-3.3.0.spdx.json +++ b/scanpipe/tests/data/asgiref-3.3.0.spdx.json @@ -3,7 +3,7 @@ "dataLicense": "CC0-1.0", "SPDXID": "SPDXRef-DOCUMENT", "name": "scancodeio_asgiref", - "documentNamespace": "https://scancode.io/spdxdocs/4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "documentNamespace": "https://scancode.io/spdxdocs/cbd609b2-525a-4052-9860-201b879b20d9", "creationInfo": { "created": "2000-01-01T01:02:03Z", "creators": [ @@ -14,13 +14,13 @@ "packages": [ { "name": "asgiref", - "SPDXID": "SPDXRef-scancodeio-discoveredpackage-d4227045-439f-41b8-98ff-067c55276b2f", + "SPDXID": "SPDXRef-scancodeio-discoveredpackage-8fa7433f-c05e-45b3-960d-60a5423327f7", "downloadLocation": "NOASSERTION", - "licenseConcluded": "BSD-3-Clause AND BSD-3-Clause", + "licenseConcluded": "BSD-3-Clause", "copyrightText": "NOASSERTION", "filesAnalyzed": false, "versionInfo": "3.3.0", - "licenseDeclared": "BSD-3-Clause AND BSD-3-Clause", + "licenseDeclared": "BSD-3-Clause", "homepage": "https://github.com/django/asgiref/", "description": "ASGI specs, helper code, and adapters\nasgiref\n=======\n\n.. image:: https://api.travis-ci.org/django/asgiref.svg\n :target: https://travis-ci.org/django/asgiref\n\n.. image:: https://img.shields.io/pypi/v/asgiref.svg\n :target: https://pypi.python.org/pypi/asgiref\n\nASGI is a standard for Python asynchronous web apps and servers to communicate\nwith each other, and positioned as an asynchronous successor to WSGI. You can\nread more at https://asgi.readthedocs.io/en/latest/\n\nThis package includes ASGI base libraries, such as:\n\n* Sync-to-async and async-to-sync function wrappers, ``asgiref.sync``\n* Server base classes, ``asgiref.server``\n* A WSGI-to-ASGI adapter, in ``asgiref.wsgi``\n\n\nFunction wrappers\n-----------------\n\nThese allow you to wrap or decorate async or sync functions to call them from\nthe other style (so you can call async functions from a synchronous thread,\nor vice-versa).\n\nIn particular:\n\n* AsyncToSync lets a synchronous subthread stop and wait while the async\n function is called on the main thread's event loop, and then control is\n returned to the thread when the async function is finished.\n\n* SyncToAsync lets async code call a synchronous function, which is run in\n a threadpool and control returned to the async coroutine when the synchronous\n function completes.\n\nThe idea is to make it easier to call synchronous APIs from async code and\nasynchronous APIs from synchronous code so it's easier to transition code from\none style to the other. In the case of Channels, we wrap the (synchronous)\nDjango view system with SyncToAsync to allow it to run inside the (asynchronous)\nASGI server.\n\nNote that exactly what threads things run in is very specific, and aimed to\nkeep maximum compatibility with old synchronous code. See\n\"Synchronous code & Threads\" below for a full explanation. By default,\n``sync_to_async`` will run all synchronous code in the program in the same\nthread for safety reasons; you can disable this for more performance with\n``@sync_to_async(thread_sensitive=False)``, but make sure that your code does\nnot rely on anything bound to threads (like database connections) when you do.\n\n\nThreadlocal replacement\n-----------------------\n\nThis is a drop-in replacement for ``threading.local`` that works with both\nthreads and asyncio Tasks. Even better, it will proxy values through from a\ntask-local context to a thread-local context when you use ``sync_to_async``\nto run things in a threadpool, and vice-versa for ``async_to_sync``.\n\nIf you instead want true thread- and task-safety, you can set\n``thread_critical`` on the Local object to ensure this instead.\n\n\nServer base classes\n-------------------\n\nIncludes a ``StatelessServer`` class which provides all the hard work of\nwriting a stateless server (as in, does not handle direct incoming sockets\nbut instead consumes external streams or sockets to work out what is happening).\n\nAn example of such a server would be a chatbot server that connects out to\na central chat server and provides a \"connection scope\" per user chatting to\nit. There's only one actual connection, but the server has to separate things\ninto several scopes for easier writing of the code.\n\nYou can see an example of this being used in `frequensgi `_.\n\n\nWSGI-to-ASGI adapter\n--------------------\n\nAllows you to wrap a WSGI application so it appears as a valid ASGI application.\n\nSimply wrap it around your WSGI application like so::\n\n asgi_application = WsgiToAsgi(wsgi_application)\n\nThe WSGI application will be run in a synchronous threadpool, and the wrapped\nASGI application will be one that accepts ``http`` class messages.\n\nPlease note that not all extended features of WSGI may be supported (such as\nfile handles for incoming POST bodies).\n\n\nDependencies\n------------\n\n``asgiref`` requires Python 3.5 or higher.\n\n\nContributing\n------------\n\nPlease refer to the\n`main Channels contributing docs `_.\n\n\nTesting\n'''''''\n\nTo run tests, make sure you have installed the ``tests`` extra with the package::\n\n cd asgiref/\n pip install -e .[tests]\n pytest\n\n\nBuilding the documentation\n''''''''''''''''''''''''''\n\nThe documentation uses `Sphinx `_::\n\n cd asgiref/docs/\n pip install sphinx\n\nTo build the docs, you can use the default tools::\n\n sphinx-build -b html . _build/html # or `make html`, if you've got make set up\n cd _build/html\n python -m http.server\n\n...or you can use ``sphinx-autobuild`` to run a server and rebuild/reload\nyour documentation changes automatically::\n\n pip install sphinx-autobuild\n sphinx-autobuild . _build/html\n\n\nImplementation Details\n----------------------\n\nSynchronous code & threads\n''''''''''''''''''''''''''\n\nThe ``asgiref.sync`` module provides two wrappers that let you go between\nasynchronous and synchronous code at will, while taking care of the rough edges\nfor you.\n\nUnfortunately, the rough edges are numerous, and the code has to work especially\nhard to keep things in the same thread as much as possible. Notably, the\nrestrictions we are working with are:\n\n* All synchronous code called through ``SyncToAsync`` and marked with\n ``thread_sensitive`` should run in the same thread as each other (and if the\n outer layer of the program is synchronous, the main thread)\n\n* If a thread already has a running async loop, ``AsyncToSync`` can't run things\n on that loop if it's blocked on synchronous code that is above you in the\n call stack.\n\nThe first compromise you get to might be that ``thread_sensitive`` code should\njust run in the same thread and not spawn in a sub-thread, fulfilling the first\nrestriction, but that immediately runs you into the second restriction.\n\nThe only real solution is to essentially have a variant of ThreadPoolExecutor\nthat executes any ``thread_sensitive`` code on the outermost synchronous\nthread - either the main thread, or a single spawned subthread.\n\nThis means you now have two basic states:\n\n* If the outermost layer of your program is synchronous, then all async code\n run through ``AsyncToSync`` will run in a per-call event loop in arbitary\n sub-threads, while all ``thread_sensitive`` code will run in the main thread.\n\n* If the outermost layer of your program is asynchronous, then all async code\n runs on the main thread's event loop, and all ``thread_sensitive`` synchronous\n code will run in a single shared sub-thread.\n\nCruicially, this means that in both cases there is a thread which is a shared\nresource that all ``thread_sensitive`` code must run on, and there is a chance\nthat this thread is currently blocked on its own ``AsyncToSync`` call. Thus,\n``AsyncToSync`` needs to act as an executor for thread code while it's blocking.\n\nThe ``CurrentThreadExecutor`` class provides this functionality; rather than\nsimply waiting on a Future, you can call its ``run_until_future`` method and\nit will run submitted code until that Future is done. This means that code\ninside the call can then run code on your thread.\n\n\nMaintenance and Security\n------------------------\n\nTo report security issues, please contact security@djangoproject.com. For GPG\nsignatures and more security process information, see\nhttps://docs.djangoproject.com/en/dev/internals/security/.\n\nTo report bugs or request new features, please open a new GitHub issue.\n\nThis repository is part of the Channels project. For the shepherd and maintenance team, please see the\n`main Channels readme `_.", "externalRefs": [ @@ -33,13 +33,13 @@ }, { "name": "asgiref", - "SPDXID": "SPDXRef-scancodeio-discoveredpackage-92213ebf-c2f0-4bd6-9d4a-38ea138d2f63", + "SPDXID": "SPDXRef-scancodeio-discoveredpackage-bef22e34-f8c3-463d-9d3e-46a55c3170e8", "downloadLocation": "NOASSERTION", - "licenseConcluded": "BSD-3-Clause AND BSD-3-Clause", + "licenseConcluded": "BSD-3-Clause", "copyrightText": "NOASSERTION", "filesAnalyzed": false, "versionInfo": "3.3.0", - "licenseDeclared": "BSD-3-Clause AND BSD-3-Clause", + "licenseDeclared": "BSD-3-Clause", "homepage": "https://github.com/django/asgiref/", "description": "ASGI specs, helper code, and adapters\nasgiref\n=======\n\n.. image:: https://api.travis-ci.org/django/asgiref.svg\n :target: https://travis-ci.org/django/asgiref\n\n.. image:: https://img.shields.io/pypi/v/asgiref.svg\n :target: https://pypi.python.org/pypi/asgiref\n\nASGI is a standard for Python asynchronous web apps and servers to communicate\nwith each other, and positioned as an asynchronous successor to WSGI. You can\nread more at https://asgi.readthedocs.io/en/latest/\n\nThis package includes ASGI base libraries, such as:\n\n* Sync-to-async and async-to-sync function wrappers, ``asgiref.sync``\n* Server base classes, ``asgiref.server``\n* A WSGI-to-ASGI adapter, in ``asgiref.wsgi``\n\n\nFunction wrappers\n-----------------\n\nThese allow you to wrap or decorate async or sync functions to call them from\nthe other style (so you can call async functions from a synchronous thread,\nor vice-versa).\n\nIn particular:\n\n* AsyncToSync lets a synchronous subthread stop and wait while the async\n function is called on the main thread's event loop, and then control is\n returned to the thread when the async function is finished.\n\n* SyncToAsync lets async code call a synchronous function, which is run in\n a threadpool and control returned to the async coroutine when the synchronous\n function completes.\n\nThe idea is to make it easier to call synchronous APIs from async code and\nasynchronous APIs from synchronous code so it's easier to transition code from\none style to the other. In the case of Channels, we wrap the (synchronous)\nDjango view system with SyncToAsync to allow it to run inside the (asynchronous)\nASGI server.\n\nNote that exactly what threads things run in is very specific, and aimed to\nkeep maximum compatibility with old synchronous code. See\n\"Synchronous code & Threads\" below for a full explanation. By default,\n``sync_to_async`` will run all synchronous code in the program in the same\nthread for safety reasons; you can disable this for more performance with\n``@sync_to_async(thread_sensitive=False)``, but make sure that your code does\nnot rely on anything bound to threads (like database connections) when you do.\n\n\nThreadlocal replacement\n-----------------------\n\nThis is a drop-in replacement for ``threading.local`` that works with both\nthreads and asyncio Tasks. Even better, it will proxy values through from a\ntask-local context to a thread-local context when you use ``sync_to_async``\nto run things in a threadpool, and vice-versa for ``async_to_sync``.\n\nIf you instead want true thread- and task-safety, you can set\n``thread_critical`` on the Local object to ensure this instead.\n\n\nServer base classes\n-------------------\n\nIncludes a ``StatelessServer`` class which provides all the hard work of\nwriting a stateless server (as in, does not handle direct incoming sockets\nbut instead consumes external streams or sockets to work out what is happening).\n\nAn example of such a server would be a chatbot server that connects out to\na central chat server and provides a \"connection scope\" per user chatting to\nit. There's only one actual connection, but the server has to separate things\ninto several scopes for easier writing of the code.\n\nYou can see an example of this being used in `frequensgi `_.\n\n\nWSGI-to-ASGI adapter\n--------------------\n\nAllows you to wrap a WSGI application so it appears as a valid ASGI application.\n\nSimply wrap it around your WSGI application like so::\n\n asgi_application = WsgiToAsgi(wsgi_application)\n\nThe WSGI application will be run in a synchronous threadpool, and the wrapped\nASGI application will be one that accepts ``http`` class messages.\n\nPlease note that not all extended features of WSGI may be supported (such as\nfile handles for incoming POST bodies).\n\n\nDependencies\n------------\n\n``asgiref`` requires Python 3.5 or higher.\n\n\nContributing\n------------\n\nPlease refer to the\n`main Channels contributing docs `_.\n\n\nTesting\n'''''''\n\nTo run tests, make sure you have installed the ``tests`` extra with the package::\n\n cd asgiref/\n pip install -e .[tests]\n pytest\n\n\nBuilding the documentation\n''''''''''''''''''''''''''\n\nThe documentation uses `Sphinx `_::\n\n cd asgiref/docs/\n pip install sphinx\n\nTo build the docs, you can use the default tools::\n\n sphinx-build -b html . _build/html # or `make html`, if you've got make set up\n cd _build/html\n python -m http.server\n\n...or you can use ``sphinx-autobuild`` to run a server and rebuild/reload\nyour documentation changes automatically::\n\n pip install sphinx-autobuild\n sphinx-autobuild . _build/html\n\n\nImplementation Details\n----------------------\n\nSynchronous code & threads\n''''''''''''''''''''''''''\n\nThe ``asgiref.sync`` module provides two wrappers that let you go between\nasynchronous and synchronous code at will, while taking care of the rough edges\nfor you.\n\nUnfortunately, the rough edges are numerous, and the code has to work especially\nhard to keep things in the same thread as much as possible. Notably, the\nrestrictions we are working with are:\n\n* All synchronous code called through ``SyncToAsync`` and marked with\n ``thread_sensitive`` should run in the same thread as each other (and if the\n outer layer of the program is synchronous, the main thread)\n\n* If a thread already has a running async loop, ``AsyncToSync`` can't run things\n on that loop if it's blocked on synchronous code that is above you in the\n call stack.\n\nThe first compromise you get to might be that ``thread_sensitive`` code should\njust run in the same thread and not spawn in a sub-thread, fulfilling the first\nrestriction, but that immediately runs you into the second restriction.\n\nThe only real solution is to essentially have a variant of ThreadPoolExecutor\nthat executes any ``thread_sensitive`` code on the outermost synchronous\nthread - either the main thread, or a single spawned subthread.\n\nThis means you now have two basic states:\n\n* If the outermost layer of your program is synchronous, then all async code\n run through ``AsyncToSync`` will run in a per-call event loop in arbitary\n sub-threads, while all ``thread_sensitive`` code will run in the main thread.\n\n* If the outermost layer of your program is asynchronous, then all async code\n runs on the main thread's event loop, and all ``thread_sensitive`` synchronous\n code will run in a single shared sub-thread.\n\nCruicially, this means that in both cases there is a thread which is a shared\nresource that all ``thread_sensitive`` code must run on, and there is a chance\nthat this thread is currently blocked on its own ``AsyncToSync`` call. Thus,\n``AsyncToSync`` needs to act as an executor for thread code while it's blocking.\n\nThe ``CurrentThreadExecutor`` class provides this functionality; rather than\nsimply waiting on a Future, you can call its ``run_until_future`` method and\nit will run submitted code until that Future is done. This means that code\ninside the call can then run code on your thread.\n\n\nMaintenance and Security\n------------------------\n\nTo report security issues, please contact security@djangoproject.com. For GPG\nsignatures and more security process information, see\nhttps://docs.djangoproject.com/en/dev/internals/security/.\n\nTo report bugs or request new features, please open a new GitHub issue.\n\nThis repository is part of the Channels project. For the shepherd and maintenance team, please see the\n`main Channels readme `_.", "externalRefs": [ @@ -52,7 +52,7 @@ }, { "name": "pytest", - "SPDXID": "SPDXRef-scancodeio-discovereddependency-pkg:pypi/pytest?uuid=ebec93f1-d78e-49ee-a1f5-80c26a0dc32b", + "SPDXID": "SPDXRef-scancodeio-discovereddependency-pkg:pypi/pytest?uuid=ea2921dd-6dfd-4d20-b018-6d611f2c71e5", "downloadLocation": "NOASSERTION", "licenseConcluded": "NOASSERTION", "copyrightText": "NOASSERTION", @@ -68,7 +68,7 @@ }, { "name": "pytest", - "SPDXID": "SPDXRef-scancodeio-discovereddependency-pkg:pypi/pytest?uuid=cd04cbe8-ba3e-412b-9c1d-7eb6a617f1d1", + "SPDXID": "SPDXRef-scancodeio-discovereddependency-pkg:pypi/pytest?uuid=d5506e2e-5172-4435-93e0-b4929f31d8d7", "downloadLocation": "NOASSERTION", "licenseConcluded": "NOASSERTION", "copyrightText": "NOASSERTION", @@ -84,7 +84,7 @@ }, { "name": "pytest-asyncio", - "SPDXID": "SPDXRef-scancodeio-discovereddependency-pkg:pypi/pytest-asyncio?uuid=1ea67643-91ab-49af-a05d-d9d3f64506d1", + "SPDXID": "SPDXRef-scancodeio-discovereddependency-pkg:pypi/pytest-asyncio?uuid=cd6e2840-3615-4f33-9e9b-1222026a1b90", "downloadLocation": "NOASSERTION", "licenseConcluded": "NOASSERTION", "copyrightText": "NOASSERTION", @@ -100,7 +100,7 @@ }, { "name": "pytest-asyncio", - "SPDXID": "SPDXRef-scancodeio-discovereddependency-pkg:pypi/pytest-asyncio?uuid=c8e504e9-3581-4b3d-bd9a-ac815d4bd63b", + "SPDXID": "SPDXRef-scancodeio-discovereddependency-pkg:pypi/pytest-asyncio?uuid=ab7f2ac4-cf40-4717-8d41-067e66bad5aa", "downloadLocation": "NOASSERTION", "licenseConcluded": "NOASSERTION", "copyrightText": "NOASSERTION", @@ -116,33 +116,33 @@ } ], "documentDescribes": [ - "SPDXRef-scancodeio-discoveredpackage-d4227045-439f-41b8-98ff-067c55276b2f", - "SPDXRef-scancodeio-discoveredpackage-92213ebf-c2f0-4bd6-9d4a-38ea138d2f63", - "SPDXRef-scancodeio-discovereddependency-pkg:pypi/pytest?uuid=ebec93f1-d78e-49ee-a1f5-80c26a0dc32b", - "SPDXRef-scancodeio-discovereddependency-pkg:pypi/pytest?uuid=cd04cbe8-ba3e-412b-9c1d-7eb6a617f1d1", - "SPDXRef-scancodeio-discovereddependency-pkg:pypi/pytest-asyncio?uuid=1ea67643-91ab-49af-a05d-d9d3f64506d1", - "SPDXRef-scancodeio-discovereddependency-pkg:pypi/pytest-asyncio?uuid=c8e504e9-3581-4b3d-bd9a-ac815d4bd63b" + "SPDXRef-scancodeio-discoveredpackage-8fa7433f-c05e-45b3-960d-60a5423327f7", + "SPDXRef-scancodeio-discoveredpackage-bef22e34-f8c3-463d-9d3e-46a55c3170e8", + "SPDXRef-scancodeio-discovereddependency-pkg:pypi/pytest?uuid=ea2921dd-6dfd-4d20-b018-6d611f2c71e5", + "SPDXRef-scancodeio-discovereddependency-pkg:pypi/pytest?uuid=d5506e2e-5172-4435-93e0-b4929f31d8d7", + "SPDXRef-scancodeio-discovereddependency-pkg:pypi/pytest-asyncio?uuid=cd6e2840-3615-4f33-9e9b-1222026a1b90", + "SPDXRef-scancodeio-discovereddependency-pkg:pypi/pytest-asyncio?uuid=ab7f2ac4-cf40-4717-8d41-067e66bad5aa" ], "files": [], "relationships": [ { - "spdxElementId": "SPDXRef-scancodeio-discovereddependency-pkg:pypi/pytest?uuid=ebec93f1-d78e-49ee-a1f5-80c26a0dc32b", - "relatedSpdxElement": "SPDXRef-scancodeio-discoveredpackage-d4227045-439f-41b8-98ff-067c55276b2f", + "spdxElementId": "SPDXRef-scancodeio-discovereddependency-pkg:pypi/pytest?uuid=ea2921dd-6dfd-4d20-b018-6d611f2c71e5", + "relatedSpdxElement": "SPDXRef-scancodeio-discoveredpackage-8fa7433f-c05e-45b3-960d-60a5423327f7", "relationshipType": "DEPENDENCY_OF" }, { - "spdxElementId": "SPDXRef-scancodeio-discovereddependency-pkg:pypi/pytest?uuid=cd04cbe8-ba3e-412b-9c1d-7eb6a617f1d1", - "relatedSpdxElement": "SPDXRef-scancodeio-discoveredpackage-92213ebf-c2f0-4bd6-9d4a-38ea138d2f63", + "spdxElementId": "SPDXRef-scancodeio-discovereddependency-pkg:pypi/pytest?uuid=d5506e2e-5172-4435-93e0-b4929f31d8d7", + "relatedSpdxElement": "SPDXRef-scancodeio-discoveredpackage-bef22e34-f8c3-463d-9d3e-46a55c3170e8", "relationshipType": "DEPENDENCY_OF" }, { - "spdxElementId": "SPDXRef-scancodeio-discovereddependency-pkg:pypi/pytest-asyncio?uuid=1ea67643-91ab-49af-a05d-d9d3f64506d1", - "relatedSpdxElement": "SPDXRef-scancodeio-discoveredpackage-d4227045-439f-41b8-98ff-067c55276b2f", + "spdxElementId": "SPDXRef-scancodeio-discovereddependency-pkg:pypi/pytest-asyncio?uuid=cd6e2840-3615-4f33-9e9b-1222026a1b90", + "relatedSpdxElement": "SPDXRef-scancodeio-discoveredpackage-8fa7433f-c05e-45b3-960d-60a5423327f7", "relationshipType": "DEPENDENCY_OF" }, { - "spdxElementId": "SPDXRef-scancodeio-discovereddependency-pkg:pypi/pytest-asyncio?uuid=c8e504e9-3581-4b3d-bd9a-ac815d4bd63b", - "relatedSpdxElement": "SPDXRef-scancodeio-discoveredpackage-92213ebf-c2f0-4bd6-9d4a-38ea138d2f63", + "spdxElementId": "SPDXRef-scancodeio-discovereddependency-pkg:pypi/pytest-asyncio?uuid=ab7f2ac4-cf40-4717-8d41-067e66bad5aa", + "relatedSpdxElement": "SPDXRef-scancodeio-discoveredpackage-bef22e34-f8c3-463d-9d3e-46a55c3170e8", "relationshipType": "DEPENDENCY_OF" } ], diff --git a/scanpipe/tests/pipes/test_output.py b/scanpipe/tests/pipes/test_output.py index 47286b870b..0a3c0484fa 100644 --- a/scanpipe/tests/pipes/test_output.py +++ b/scanpipe/tests/pipes/test_output.py @@ -258,7 +258,7 @@ def test_scanpipe_pipes_outputs_to_spdx(self): results = json.dumps(results_json, indent=2) expected_file = self.data_path / "asgiref-3.3.0.spdx.json" - self.assertResultsEqual(expected_file, results, regen=False) + self.assertResultsEqual(expected_file, results) # Make sure the output can be generated even if the work_directory was wiped shutil.rmtree(project.work_directory) From 6736f8709b7cf84a4d239b3a5b9083c0e52d3483 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Fri, 12 May 2023 16:50:32 +0400 Subject: [PATCH 26/53] Add proper help text for new fields #569 Signed-off-by: Thomas Druez --- ...0030_scancode_toolkit_v32_model_updates.py | 8 ++++---- scanpipe/models.py | 20 +++++++++++++++---- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py b/scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py index 7e3e274004..f62d001671 100644 --- a/scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py +++ b/scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py @@ -92,12 +92,12 @@ class Migration(migrations.Migration): migrations.AddField( model_name="codebaseresource", name="detected_license_expression", - field=models.TextField(blank=True, help_text="TODO"), + field=models.TextField(blank=True, help_text="The license expression summarizing the license info for this resource, combined from all the license detections"), ), migrations.AddField( model_name="codebaseresource", name="detected_license_expression_spdx", - field=models.TextField(blank=True, help_text="TODO"), + field=models.TextField(blank=True, help_text="The detected license expression for this file, with SPDX license keys"), ), migrations.AddField( model_name="codebaseresource", @@ -110,12 +110,12 @@ class Migration(migrations.Migration): model_name="codebaseresource", name="license_clues", field=models.JSONField( - blank=True, default=list, help_text="List of license clues." + blank=True, default=list, help_text="List of license matches that are not proper detections and potentially just clues to licenses or likely false positives. Those are not included in computing the detected license expression for the resource." ), ), migrations.AddField( model_name="codebaseresource", name="percentage_of_license_text", - field=models.FloatField(blank=True, help_text="TODO", null=True), + field=models.FloatField(blank=True, help_text="The percentage of words in the whole resource which are legal words, i.e. words that typically contain license related information.", null=True), ), ] diff --git a/scanpipe/models.py b/scanpipe/models.py index 3c0524d6ef..67dcb9d282 100644 --- a/scanpipe/models.py +++ b/scanpipe/models.py @@ -1452,11 +1452,16 @@ class ScanFieldsModelMixin(models.Model): detected_license_expression = models.TextField( blank=True, - help_text=_("TODO"), + help_text=_( + "The license expression summarizing the license info for this resource, " + "combined from all the license detections" + ), ) detected_license_expression_spdx = models.TextField( blank=True, - help_text=_("TODO"), + help_text=_( + "The detected license expression for this file, with SPDX license keys" + ), ) license_detections = models.JSONField( blank=True, @@ -1466,12 +1471,19 @@ class ScanFieldsModelMixin(models.Model): license_clues = models.JSONField( blank=True, default=list, - help_text=_("List of license clues."), + help_text=_( + "List of license matches that are not proper detections and potentially " + "just clues to licenses or likely false positives. Those are not included " + "in computing the detected license expression for the resource." + ), ) percentage_of_license_text = models.FloatField( blank=True, null=True, - help_text=_("TODO"), + help_text=_( + "The percentage of words in the whole resource which are legal words, " + "i.e. words that typically contain license related information." + ), ) copyrights = models.JSONField( blank=True, From 333731498e3049ce46c8169bcc19777540a23d20 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Fri, 12 May 2023 17:12:14 +0400 Subject: [PATCH 27/53] Fix chart and filter for detected_license_expression #569 Signed-off-by: Thomas Druez --- scanpipe/filters.py | 11 +---------- scanpipe/models.py | 3 +-- scanpipe/templates/scanpipe/project_charts.html | 4 ++-- scanpipe/templates/scanpipe/resource_list.html | 2 +- scanpipe/tests/data/cyclonedx/asgiref-3.3.0.bom.json | 6 +++--- 5 files changed, 8 insertions(+), 18 deletions(-) diff --git a/scanpipe/filters.py b/scanpipe/filters.py index b649f4d9f1..c1dc17440b 100644 --- a/scanpipe/filters.py +++ b/scanpipe/filters.py @@ -322,6 +322,7 @@ class ResourceFilterSet(FilterSetUtilsMixin, django_filters.FilterSet): "type", "size", "name", + "detected_license_expression", "extension", "programming_language", "mime_type", @@ -331,15 +332,6 @@ class ResourceFilterSet(FilterSetUtilsMixin, django_filters.FilterSet): "related_from__from_resource__path", ], ) - # TODO: We will have to compute those fields as not available anymore - # license_key = JSONContainsFilter( - # label="License key", - # field_name="licenses", - # ) - # license_category = JSONContainsFilter( - # label="License category", - # field_name="licenses", - # ) compliance_alert = django_filters.ChoiceFilter( choices=CodebaseResource.Compliance.choices + [("EMPTY", "EMPTY")] ) @@ -374,7 +366,6 @@ class Meta: "copyrights", "holders", "authors", - # "license_category", "detected_license_expression", "detected_license_expression_spdx", "license_detections", diff --git a/scanpipe/models.py b/scanpipe/models.py index 67dcb9d282..3044423867 100644 --- a/scanpipe/models.py +++ b/scanpipe/models.py @@ -946,10 +946,9 @@ def less_common(self, field_name, limit=most_common_limit): `field_name` starting at the `limit`. """ json_fields_mapping = { - "license_key": ("license_detections", "key"), - "license_category": ("license_detections", "category"), "copyrights": ("copyrights", "copyright"), "holders": ("holders", "holder"), + "authors": ("authors", "author"), } if field_name in json_fields_mapping: diff --git a/scanpipe/templates/scanpipe/project_charts.html b/scanpipe/templates/scanpipe/project_charts.html index 9b850e343b..940a04949d 100644 --- a/scanpipe/templates/scanpipe/project_charts.html +++ b/scanpipe/templates/scanpipe/project_charts.html @@ -55,7 +55,7 @@

{% include "scanpipe/includes/resource_chart_column.html" with field_name="copyrights" %}
- {% include "scanpipe/includes/resource_chart_column.html" with field_name="file_license_expressions" %} + {% include "scanpipe/includes/resource_chart_column.html" with field_name="detected_license_expression" %}
{% if file_compliance_alert %} @@ -170,7 +170,7 @@

makeChart("mime_types", "#mime_type_chart", "Mime\nType"); makeChart("holders", "#holders_chart", "Holder"); makeChart("copyrights", "#copyrights_chart", "Copyright"); - makeChart("file_license_expressions", "#file_license_expressions_chart", "License\nExpressions"); + makeChart("file_license_expressions", "#detected_license_expression_chart", "Detected\nLicense\nExpression"); makeChart("file_compliance_alert", "#compliance_alert_chart", "Compliance\nAlert"); {% endblock %} \ No newline at end of file diff --git a/scanpipe/templates/scanpipe/resource_list.html b/scanpipe/templates/scanpipe/resource_list.html index 52813676e2..e12ef24e67 100644 --- a/scanpipe/templates/scanpipe/resource_list.html +++ b/scanpipe/templates/scanpipe/resource_list.html @@ -55,7 +55,7 @@ {{ resource.tag }} - {{ resource.detected_license_expression }} + {{ resource.detected_license_expression }} {% if include_compliance_alert %} diff --git a/scanpipe/tests/data/cyclonedx/asgiref-3.3.0.bom.json b/scanpipe/tests/data/cyclonedx/asgiref-3.3.0.bom.json index 083eebcf0e..14bad2b134 100644 --- a/scanpipe/tests/data/cyclonedx/asgiref-3.3.0.bom.json +++ b/scanpipe/tests/data/cyclonedx/asgiref-3.3.0.bom.json @@ -13,7 +13,7 @@ ], "component": { "type": "library", - "bom-ref": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "bom-ref": "cbd609b2-525a-4052-9860-201b879b20d9", "name": "asgiref" }, "properties": [ @@ -32,7 +32,7 @@ "description": "ASGI specs, helper code, and adapters\nasgiref\n=======\n\n.. image:: https://api.travis-ci.org/django/asgiref.svg\n :target: https://travis-ci.org/django/asgiref\n\n.. image:: https://img.shields.io/pypi/v/asgiref.svg\n :target: https://pypi.python.org/pypi/asgiref\n\nASGI is a standard for Python asynchronous web apps and servers to communicate\nwith each other, and positioned as an asynchronous successor to WSGI. You can\nread more at https://asgi.readthedocs.io/en/latest/\n\nThis package includes ASGI base libraries, such as:\n\n* Sync-to-async and async-to-sync function wrappers, ``asgiref.sync``\n* Server base classes, ``asgiref.server``\n* A WSGI-to-ASGI adapter, in ``asgiref.wsgi``\n\n\nFunction wrappers\n-----------------\n\nThese allow you to wrap or decorate async or sync functions to call them from\nthe other style (so you can call async functions from a synchronous thread,\nor vice-versa).\n\nIn particular:\n\n* AsyncToSync lets a synchronous subthread stop and wait while the async\n function is called on the main thread's event loop, and then control is\n returned to the thread when the async function is finished.\n\n* SyncToAsync lets async code call a synchronous function, which is run in\n a threadpool and control returned to the async coroutine when the synchronous\n function completes.\n\nThe idea is to make it easier to call synchronous APIs from async code and\nasynchronous APIs from synchronous code so it's easier to transition code from\none style to the other. In the case of Channels, we wrap the (synchronous)\nDjango view system with SyncToAsync to allow it to run inside the (asynchronous)\nASGI server.\n\nNote that exactly what threads things run in is very specific, and aimed to\nkeep maximum compatibility with old synchronous code. See\n\"Synchronous code & Threads\" below for a full explanation. By default,\n``sync_to_async`` will run all synchronous code in the program in the same\nthread for safety reasons; you can disable this for more performance with\n``@sync_to_async(thread_sensitive=False)``, but make sure that your code does\nnot rely on anything bound to threads (like database connections) when you do.\n\n\nThreadlocal replacement\n-----------------------\n\nThis is a drop-in replacement for ``threading.local`` that works with both\nthreads and asyncio Tasks. Even better, it will proxy values through from a\ntask-local context to a thread-local context when you use ``sync_to_async``\nto run things in a threadpool, and vice-versa for ``async_to_sync``.\n\nIf you instead want true thread- and task-safety, you can set\n``thread_critical`` on the Local object to ensure this instead.\n\n\nServer base classes\n-------------------\n\nIncludes a ``StatelessServer`` class which provides all the hard work of\nwriting a stateless server (as in, does not handle direct incoming sockets\nbut instead consumes external streams or sockets to work out what is happening).\n\nAn example of such a server would be a chatbot server that connects out to\na central chat server and provides a \"connection scope\" per user chatting to\nit. There's only one actual connection, but the server has to separate things\ninto several scopes for easier writing of the code.\n\nYou can see an example of this being used in `frequensgi `_.\n\n\nWSGI-to-ASGI adapter\n--------------------\n\nAllows you to wrap a WSGI application so it appears as a valid ASGI application.\n\nSimply wrap it around your WSGI application like so::\n\n asgi_application = WsgiToAsgi(wsgi_application)\n\nThe WSGI application will be run in a synchronous threadpool, and the wrapped\nASGI application will be one that accepts ``http`` class messages.\n\nPlease note that not all extended features of WSGI may be supported (such as\nfile handles for incoming POST bodies).\n\n\nDependencies\n------------\n\n``asgiref`` requires Python 3.5 or higher.\n\n\nContributing\n------------\n\nPlease refer to the\n`main Channels contributing docs `_.\n\n\nTesting\n'''''''\n\nTo run tests, make sure you have installed the ``tests`` extra with the package::\n\n cd asgiref/\n pip install -e .[tests]\n pytest\n\n\nBuilding the documentation\n''''''''''''''''''''''''''\n\nThe documentation uses `Sphinx `_::\n\n cd asgiref/docs/\n pip install sphinx\n\nTo build the docs, you can use the default tools::\n\n sphinx-build -b html . _build/html # or `make html`, if you've got make set up\n cd _build/html\n python -m http.server\n\n...or you can use ``sphinx-autobuild`` to run a server and rebuild/reload\nyour documentation changes automatically::\n\n pip install sphinx-autobuild\n sphinx-autobuild . _build/html\n\n\nImplementation Details\n----------------------\n\nSynchronous code & threads\n''''''''''''''''''''''''''\n\nThe ``asgiref.sync`` module provides two wrappers that let you go between\nasynchronous and synchronous code at will, while taking care of the rough edges\nfor you.\n\nUnfortunately, the rough edges are numerous, and the code has to work especially\nhard to keep things in the same thread as much as possible. Notably, the\nrestrictions we are working with are:\n\n* All synchronous code called through ``SyncToAsync`` and marked with\n ``thread_sensitive`` should run in the same thread as each other (and if the\n outer layer of the program is synchronous, the main thread)\n\n* If a thread already has a running async loop, ``AsyncToSync`` can't run things\n on that loop if it's blocked on synchronous code that is above you in the\n call stack.\n\nThe first compromise you get to might be that ``thread_sensitive`` code should\njust run in the same thread and not spawn in a sub-thread, fulfilling the first\nrestriction, but that immediately runs you into the second restriction.\n\nThe only real solution is to essentially have a variant of ThreadPoolExecutor\nthat executes any ``thread_sensitive`` code on the outermost synchronous\nthread - either the main thread, or a single spawned subthread.\n\nThis means you now have two basic states:\n\n* If the outermost layer of your program is synchronous, then all async code\n run through ``AsyncToSync`` will run in a per-call event loop in arbitary\n sub-threads, while all ``thread_sensitive`` code will run in the main thread.\n\n* If the outermost layer of your program is asynchronous, then all async code\n runs on the main thread's event loop, and all ``thread_sensitive`` synchronous\n code will run in a single shared sub-thread.\n\nCruicially, this means that in both cases there is a thread which is a shared\nresource that all ``thread_sensitive`` code must run on, and there is a chance\nthat this thread is currently blocked on its own ``AsyncToSync`` call. Thus,\n``AsyncToSync`` needs to act as an executor for thread code while it's blocking.\n\nThe ``CurrentThreadExecutor`` class provides this functionality; rather than\nsimply waiting on a Future, you can call its ``run_until_future`` method and\nit will run submitted code until that Future is done. This means that code\ninside the call can then run code on your thread.\n\n\nMaintenance and Security\n------------------------\n\nTo report security issues, please contact security@djangoproject.com. For GPG\nsignatures and more security process information, see\nhttps://docs.djangoproject.com/en/dev/internals/security/.\n\nTo report bugs or request new features, please open a new GitHub issue.\n\nThis repository is part of the Channels project. For the shepherd and maintenance team, please see the\n`main Channels readme `_.", "licenses": [ { - "expression": "BSD-3-Clause AND BSD-3-Clause" + "expression": "BSD-3-Clause" } ], "purl": "pkg:pypi/asgiref@3.3.0", @@ -64,7 +64,7 @@ ], "dependencies": [ { - "ref": "4c7f2e2e-0c41-45d2-a6cc-7bbde9a9f440", + "ref": "cbd609b2-525a-4052-9860-201b879b20d9", "dependsOn": [ "pkg:pypi/asgiref@3.3.0" ] From e029568fd802950e45827595a8da9c20113ccead Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Fri, 12 May 2023 17:28:48 +0400 Subject: [PATCH 28/53] Fix the policy and compliance with new field #569 Signed-off-by: Thomas Druez --- scanpipe/models.py | 23 +++--- .../is-npm-1.0.0_scan_package_summary.json | 71 ++++++++++++++++--- scanpipe/tests/pipes/test_scancode.py | 9 ++- scanpipe/tests/test_models.py | 58 +++++++-------- scanpipe/tests/test_views.py | 7 +- 5 files changed, 117 insertions(+), 51 deletions(-) diff --git a/scanpipe/models.py b/scanpipe/models.py index 3044423867..aafde04df8 100644 --- a/scanpipe/models.py +++ b/scanpipe/models.py @@ -1701,28 +1701,29 @@ def __str__(self): @classmethod def from_db(cls, db, field_names, values): """ - Store the `licenses` field on creating this instance from the database value. + Store the `license_detections` field on loading this instance from the + database value. The cached value is then used to detect changes on `save()`. """ new = super().from_db(db, field_names, values) if "license_detections" in field_names: - new._loaded_licenses = values[field_names.index("license_detections")] + field_index = field_names.index("license_detections") + new._loaded_license_detections = values[field_index] return new def save(self, codebase=None, *args, **kwargs): """ Save the current resource instance. - Injects policies—if the feature is enabled—when the `licenses` field value is + Injects policies, if the feature is enabled, when the `licenses` field value is changed. `codebase` is not used in this context but required for compatibility with the commoncode.resource.Codebase class API. """ - # TODO: Review and test this if scanpipe_app.policies_enabled: - loaded_licenses = getattr(self, "_loaded_licenses", []) + loaded_licenses = getattr(self, "_loaded_license_detections", []) if self.license_detections != loaded_licenses: self.inject_licenses_policy(scanpipe_app.license_policies_index) self.compliance_alert = self.compute_compliance_alert() @@ -1731,10 +1732,9 @@ def save(self, codebase=None, *args, **kwargs): def inject_licenses_policy(self, policies_index): """Inject license policies from the `policies_index` into the licenses field.""" - for license_data in self.license_detections: - # TODO: key is not available anymore, license_expression only - key = license_data.get("key") - license_data["policy"] = policies_index.get(key, None) + for detection_data in self.license_detections: + license_expression = detection_data.get("license_expression") + detection_data["policy"] = policies_index.get(license_expression, None) @property def location_path(self): @@ -1765,7 +1765,6 @@ def is_symlink(self): def compute_compliance_alert(self): """Compute and return the compliance_alert value from the licenses policies.""" - # TODO: Base this on self.detected_license_expression if not self.license_detections: return "" @@ -1775,8 +1774,8 @@ def compute_compliance_alert(self): missing = self.Compliance.MISSING alerts = [] - for license_data in self.license_detections: - policy = license_data.get("policy") + for detection_data in self.license_detections: + policy = detection_data.get("policy") if policy: alerts.append(policy.get("compliance_alert") or ok) else: diff --git a/scanpipe/tests/data/is-npm-1.0.0_scan_package_summary.json b/scanpipe/tests/data/is-npm-1.0.0_scan_package_summary.json index fe8bd7cf5f..174442b6d8 100644 --- a/scanpipe/tests/data/is-npm-1.0.0_scan_package_summary.json +++ b/scanpipe/tests/data/is-npm-1.0.0_scan_package_summary.json @@ -24,7 +24,18 @@ } ], "other_languages": [], - "license_matches": {}, + "license_matches": { + "mit": [ + { + "path": "package/package.json", + "matched_text": " \"license\": \"MIT\"," + }, + { + "path": "package/readme.md", + "matched_text": "## License\n\nMIT \u00a9 [Sindre Sorhus](http://sindresorhus.com)" + } + ] + }, "key_files": [ { "path": "package/package.json", @@ -43,8 +54,31 @@ "is_archive": false, "is_media": false, "is_key_file": true, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "mit", + "detected_license_expression_spdx": "MIT", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 5, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/mit_30.RULE", + "start_line": 5, + "matched_text": " \"license\": \"MIT\",", + "match_coverage": 100.0, + "matched_length": 2, + "rule_relevance": 100, + "rule_identifier": "mit_30.RULE", + "license_expression": "mit" + } + ], + "identifier": "mit-3fce6ea2-8abd-6c6b-3ede-a37af7c6efee", + "license_expression": "mit" + } + ], + "license_clues": [], + "percentage_of_license_text": 3.33, "copyrights": [], "holders": [], "authors": [], @@ -174,8 +208,31 @@ "is_archive": false, "is_media": false, "is_key_file": true, - "licenses": [], - "license_expressions": [], + "detected_license_expression": "mit", + "detected_license_expression_spdx": "MIT", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 30, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/mit_30.RULE", + "start_line": 28, + "matched_text": "## License\n\nMIT \u00a9 [Sindre Sorhus](http://sindresorhus.com)", + "match_coverage": 100.0, + "matched_length": 2, + "rule_relevance": 100, + "rule_identifier": "mit_30.RULE", + "license_expression": "mit" + } + ], + "identifier": "mit-3fce6ea2-8abd-6c6b-3ede-a37af7c6efee", + "license_expression": "mit" + } + ], + "license_clues": [], + "percentage_of_license_text": 2.78, "copyrights": [ { "end_line": 30, @@ -290,14 +347,12 @@ ], "other_license_expression": "", "other_license_expression_spdx": "", - "other_license_detections": {}, + "other_license_detections": [], "extracted_license_statement": "['MIT']", "notice_text": "", "source_packages": [], "extra_data": {}, "package_uid": "pkg:npm/is-npm@1.0.0?uuid=fixed-uid-done-for-testing-5642512d1758", - "manifest_path": "", - "contains_source_code": null, "datasource_id": "", "file_references": [], "missing_resources": [], diff --git a/scanpipe/tests/pipes/test_scancode.py b/scanpipe/tests/pipes/test_scancode.py index 496565f4a5..5e59d1f1b6 100644 --- a/scanpipe/tests/pipes/test_scancode.py +++ b/scanpipe/tests/pipes/test_scancode.py @@ -387,12 +387,17 @@ def test_scanpipe_pipes_scancode_create_codebase_resources_inject_policy(self): resources = project.codebaseresources resource1 = resources.get(path__endswith="asgiref-3.3.0.dist-info/LICENSE") - self.assertEqual("bsd-new", resource1.license_detections[0]["key"]) + self.assertEqual( + "bsd-new", resource1.license_detections[0]["license_expression"] + ) self.assertNotIn("bsd-new", license_policies_index) self.assertIsNone(resource1.license_detections[0]["policy"]) resource2 = resources.get(path__endswith="asgiref/timeout.py") - self.assertEqual("apache-2.0", resource2.license_detections[0]["key"]) + self.assertEqual( + "apache-2.0", resource2.license_detections[0]["license_expression"] + ) + self.assertIn("apache-2.0", license_policies_index) expected = { "label": "Approved License", "color_code": "#008000", diff --git a/scanpipe/tests/test_models.py b/scanpipe/tests/test_models.py index 464ad1a630..db13c93cf6 100644 --- a/scanpipe/tests/test_models.py +++ b/scanpipe/tests/test_models.py @@ -837,16 +837,16 @@ def test_scanpipe_codebase_resource_model_file_content(self): def test_scanpipe_pipes_codebase_resources_inject_licenses_policy(self): resource = CodebaseResource( license_detections=[ - {"key": "mit"}, - {"key": "apache-2.0"}, - {"key": "gpl-3.0"}, + {"license_expression": "mit"}, + {"license_expression": "apache-2.0"}, + {"license_expression": "gpl-3.0"}, ] ) expected = [ - {"key": "mit", "policy": None}, + {"license_expression": "mit", "policy": None}, { - "key": "apache-2.0", + "license_expression": "apache-2.0", "policy": { "color_code": "#008000", "compliance_alert": "", @@ -855,7 +855,7 @@ def test_scanpipe_pipes_codebase_resources_inject_licenses_policy(self): }, }, { - "key": "gpl-3.0", + "license_expression": "gpl-3.0", "policy": { "color_code": "#c83025", "compliance_alert": "error", @@ -872,11 +872,13 @@ def test_scanpipe_pipes_scancode_codebase_resources_inject_policy_on_save(self): scanpipe_app.license_policies_index = license_policies_index resource = CodebaseResource.objects.create( - project=self.project1, path="file", license_detections=[{"key": "gpl-3.0"}] + project=self.project1, + path="file", + license_detections=[{"license_expression": "gpl-3.0"}], ) expected = [ { - "key": "gpl-3.0", + "license_expression": "gpl-3.0", "policy": { "color_code": "#c83025", "compliance_alert": "error", @@ -887,16 +889,16 @@ def test_scanpipe_pipes_scancode_codebase_resources_inject_policy_on_save(self): ] self.assertEqual(expected, resource.license_detections) - resource.license_detections = [{"key": "not-in-index"}] + resource.license_detections = [{"license_expression": "not-in-index"}] resource.save() - expected = [{"key": "not-in-index", "policy": None}] + expected = [{"license_expression": "not-in-index", "policy": None}] self.assertEqual(expected, resource.license_detections) - resource.license_detections = [{"key": "apache-2.0"}] + resource.license_detections = [{"license_expression": "apache-2.0"}] resource.save() expected = [ { - "key": "apache-2.0", + "license_expression": "apache-2.0", "policy": { "color_code": "#008000", "compliance_alert": "", @@ -912,34 +914,34 @@ def test_scanpipe_codebase_resource_model_compliance_alert(self): resource = CodebaseResource.objects.create(project=self.project1, path="file") self.assertEqual("", resource.compliance_alert) - license_key = "bsd-new" - self.assertNotIn(license_key, scanpipe_app.license_policies_index) - resource.license_detections = [{"key": license_key}] + license_expression = "bsd-new" + self.assertNotIn(license_expression, scanpipe_app.license_policies_index) + resource.license_detections = [{"license_expression": license_expression}] resource.save() self.assertEqual("missing", resource.compliance_alert) - license_key = "apache-2.0" - self.assertIn(license_key, scanpipe_app.license_policies_index) - resource.license_detections = [{"key": license_key}] + license_expression = "apache-2.0" + self.assertIn(license_expression, scanpipe_app.license_policies_index) + resource.license_detections = [{"license_expression": license_expression}] resource.save() self.assertEqual("ok", resource.compliance_alert) - license_key = "mpl-2.0" - self.assertIn(license_key, scanpipe_app.license_policies_index) - resource.license_detections = [{"key": license_key}] + license_expression = "mpl-2.0" + self.assertIn(license_expression, scanpipe_app.license_policies_index) + resource.license_detections = [{"license_expression": license_expression}] resource.save() self.assertEqual("warning", resource.compliance_alert) - license_key = "gpl-3.0" - self.assertIn(license_key, scanpipe_app.license_policies_index) - resource.license_detections = [{"key": license_key}] + license_expression = "gpl-3.0" + self.assertIn(license_expression, scanpipe_app.license_policies_index) + resource.license_detections = [{"license_expression": license_expression}] resource.save() self.assertEqual("error", resource.compliance_alert) resource.license_detections = [ - {"key": "apache-2.0"}, - {"key": "mpl-2.0"}, - {"key": "gpl-3.0"}, + {"license_expression": "apache-2.0"}, + {"license_expression": "mpl-2.0"}, + {"license_expression": "gpl-3.0"}, ] resource.save() self.assertEqual("error", resource.compliance_alert) @@ -1039,7 +1041,7 @@ def test_scanpipe_codebase_resource_queryset_methods(self): self.assertIn(directory, qs) self.assertNotIn(symlink, qs) - file.license_detections = [{"key": "bsd-new", "name": "BSD-3-Clause"}] + file.license_detections = [{"license_expression": "bsd-new"}] file.save() qs = CodebaseResource.objects.has_licenses() self.assertEqual(1, len(qs)) diff --git a/scanpipe/tests/test_views.py b/scanpipe/tests/test_views.py index 0444b47303..69cb95a879 100644 --- a/scanpipe/tests/test_views.py +++ b/scanpipe/tests/test_views.py @@ -454,7 +454,12 @@ def test_scanpipe_views_codebase_resource_details_annotations_missing_policy(sel project=self.project1, path="resource1", license_detections=[ - {"key": "key", "policy": None, "start_line": 1, "end_line": 2} + { + "license_expression": "key", + "policy": None, + "start_line": 1, + "end_line": 2, + } ], ) url = resource1.get_absolute_url() From 66fb266cfe801bda9701834f89459699cdf24d29 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Fri, 12 May 2023 17:49:36 +0400 Subject: [PATCH 29/53] Refine loaded_license_expression using the expression #569 Signed-off-by: Thomas Druez --- scanpipe/filters.py | 2 +- scanpipe/models.py | 29 ++++++++++------------------- scanpipe/pipes/scancode.py | 2 +- scanpipe/tests/test_models.py | 4 ++-- 4 files changed, 14 insertions(+), 23 deletions(-) diff --git a/scanpipe/filters.py b/scanpipe/filters.py index c1dc17440b..7d49f4fe16 100644 --- a/scanpipe/filters.py +++ b/scanpipe/filters.py @@ -333,7 +333,7 @@ class ResourceFilterSet(FilterSetUtilsMixin, django_filters.FilterSet): ], ) compliance_alert = django_filters.ChoiceFilter( - choices=CodebaseResource.Compliance.choices + [("EMPTY", "EMPTY")] + choices=CodebaseResource.Compliance.choices + [("_EMPTY_", "EMPTY")] ) in_package = InPackageFilter(label="In a Package") status = StatusFilter(empty_label="All") diff --git a/scanpipe/models.py b/scanpipe/models.py index aafde04df8..666e0f4fa8 100644 --- a/scanpipe/models.py +++ b/scanpipe/models.py @@ -1398,24 +1398,15 @@ def symlinks(self): def without_symlinks(self): return self.filter(~Q(type=self.model.Type.SYMLINK)) - def has_licenses(self): + def has_license_detections(self): return self.filter(~Q(license_detections=[])) - def has_no_licenses(self): + def has_no_license_detections(self): return self.filter(license_detections=[]) def has_package_data(self): return self.filter(~Q(package_data=[])) - def licenses_categories(self, categories): - import warnings - - warnings.warn( - "licenses_categories is deprecated due to the removal of the category " - "value from scancode-toolkit v32 scan data.", - ) - return [] - def unknown_license(self): return self.filter(detected_license_expression__icontains="unknown") @@ -1701,30 +1692,30 @@ def __str__(self): @classmethod def from_db(cls, db, field_names, values): """ - Store the `license_detections` field on loading this instance from the + Store the `detected_license_expression` field on loading this instance from the database value. The cached value is then used to detect changes on `save()`. """ new = super().from_db(db, field_names, values) - if "license_detections" in field_names: - field_index = field_names.index("license_detections") - new._loaded_license_detections = values[field_index] + if "detected_license_expression" in field_names: + field_index = field_names.index("detected_license_expression") + new._loaded_license_expression = values[field_index] return new def save(self, codebase=None, *args, **kwargs): """ Save the current resource instance. - Injects policies, if the feature is enabled, when the `licenses` field value is - changed. + Injects policies, if the feature is enabled, when the + `detected_license_expression` field value is changed. `codebase` is not used in this context but required for compatibility with the commoncode.resource.Codebase class API. """ if scanpipe_app.policies_enabled: - loaded_licenses = getattr(self, "_loaded_license_detections", []) - if self.license_detections != loaded_licenses: + loaded_license_expression = getattr(self, "_loaded_license_expression", []) + if self.detected_license_expression != loaded_license_expression: self.inject_licenses_policy(scanpipe_app.license_policies_index) self.compliance_alert = self.compute_compliance_alert() diff --git a/scanpipe/pipes/scancode.py b/scanpipe/pipes/scancode.py index 46c9f6646b..c5a2734df4 100644 --- a/scanpipe/pipes/scancode.py +++ b/scanpipe/pipes/scancode.py @@ -542,7 +542,7 @@ def _get_license_matches_grouped(project): license_expression. """ license_matches = defaultdict(list) - resources_with_license = project.codebaseresources.has_licenses() + resources_with_license = project.codebaseresources.has_license_detections() for resource in resources_with_license: file_cache = [] diff --git a/scanpipe/tests/test_models.py b/scanpipe/tests/test_models.py index db13c93cf6..0e8657fb80 100644 --- a/scanpipe/tests/test_models.py +++ b/scanpipe/tests/test_models.py @@ -1043,13 +1043,13 @@ def test_scanpipe_codebase_resource_queryset_methods(self): file.license_detections = [{"license_expression": "bsd-new"}] file.save() - qs = CodebaseResource.objects.has_licenses() + qs = CodebaseResource.objects.has_license_detections() self.assertEqual(1, len(qs)) self.assertIn(file, qs) self.assertNotIn(directory, qs) self.assertNotIn(symlink, qs) - qs = CodebaseResource.objects.has_no_licenses() + qs = CodebaseResource.objects.has_no_license_detections() self.assertEqual(2, len(qs)) self.assertNotIn(file, qs) self.assertIn(directory, qs) From 7965f7d2513e07c8dfaf9a5e73139cf13c9c9824 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Fri, 12 May 2023 18:15:20 +0400 Subject: [PATCH 30/53] Data migration for detection fields #569 Signed-off-by: Thomas Druez --- .../0031_scancode_toolkit_v32_data_updates.py | 81 ++++++++++++++++--- 1 file changed, 70 insertions(+), 11 deletions(-) diff --git a/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py b/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py index f4ef5cfcba..a8f990dc85 100644 --- a/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py +++ b/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py @@ -11,7 +11,7 @@ def compute_package_declared_license_expression_spdx(apps, schema_editor): """ from licensedcode.cache import build_spdx_license_expression - DiscoveredPackage = apps.get_model('scanpipe', 'DiscoveredPackage') + DiscoveredPackage = apps.get_model("scanpipe", "DiscoveredPackage") packages = DiscoveredPackage.objects.filter( ~Q(declared_license_expression="") & Q(declared_license_expression_spdx="") ) @@ -30,7 +30,7 @@ def compute_resource_detected_license_expression(apps, schema_editor): from license_expression import combine_expressions from licensedcode.cache import build_spdx_license_expression - CodebaseResource = apps.get_model('scanpipe', 'CodebaseResource') + CodebaseResource = apps.get_model("scanpipe", "CodebaseResource") resources = CodebaseResource.objects.filter(~Q(license_expressions=[])) for resource in resources: @@ -41,9 +41,68 @@ def compute_resource_detected_license_expression(apps, schema_editor): resource.save() +def _convert_matches_to_detections(license_matches): + """ + Return a list of scancode v32 LicenseDetection mappings from provided + ``license_matches``: a list of the scancode v31 LicenseMatch mappings. + """ + from license_expression import combine_expressions + from licensedcode.detection import get_uuid_on_content + from commoncode.text import python_safe_name + + match_attributes = ["score", "start_line", "end_line", "matched_text"] + rule_attributes = [ + "matched_length", + "match_coverage", + "matcher", + "rule_relevance", + ] + license_detection = {} + detection_matches = [] + + for match in license_matches: + detection_match = {} + + for attribute in match_attributes: + detection_match[attribute] = match[attribute] + for attribute in rule_attributes: + detection_match[attribute] = match["matched_rule"][attribute] + + detection_match["rule_identifier"] = match["matched_rule"]["identifier"] + detection_match["license_expression"] = match["matched_rule"][ + "license_expression" + ] + detection_match["rule_url"] = None + detection_matches.append(detection_match) + + license_expressions = [match["license_expression"] for match in detection_matches] + hashable_details = tuple( + [ + (match["score"], match["rule_identifier"], match["matched_text"]) + for match in detection_matches + ] + ) + uuid = get_uuid_on_content(hashable_details) + + license_detection["matches"] = detection_matches + license_detection["license_expression"] = str( + combine_expressions(license_expressions) + ) + license_detection["identifier"] = "{}-{}".format( + python_safe_name(license_detection["license_expression"]), uuid + ) + + return [license_detection] + + def compute_resource_license_detections(apps, schema_editor): """Compute CodebaseResource `license_detections` from old `licenses` field.""" - pass + CodebaseResource = apps.get_model("scanpipe", "CodebaseResource") + resources = CodebaseResource.objects.filter(~Q(licenses=[])) + for resource in resources: + detections = _convert_matches_to_detections(resource.licenses) + resource.license_detections = detections + resource.save() class Migration(migrations.Migration): @@ -56,12 +115,12 @@ class Migration(migrations.Migration): compute_package_declared_license_expression_spdx, reverse_code=migrations.RunPython.noop, ), - # migrations.RunPython( - # compute_resource_detected_license_expression, - # reverse_code=migrations.RunPython.noop, - # ), - # migrations.RunPython( - # compute_resource_license_detections, - # reverse_code=migrations.RunPython.noop, - # ), + migrations.RunPython( + compute_resource_detected_license_expression, + reverse_code=migrations.RunPython.noop, + ), + migrations.RunPython( + compute_resource_license_detections, + reverse_code=migrations.RunPython.noop, + ), ] From 60a705e4b6bbd044302b12b489175cd87f534f69 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Fri, 12 May 2023 18:15:57 +0400 Subject: [PATCH 31/53] Fix QS method call #569 Signed-off-by: Thomas Druez --- scanpipe/pipes/flag.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scanpipe/pipes/flag.py b/scanpipe/pipes/flag.py index bb89433e54..1d9b655d90 100644 --- a/scanpipe/pipes/flag.py +++ b/scanpipe/pipes/flag.py @@ -123,7 +123,7 @@ def flag_ignored_paths(project, paths): def analyze_scanned_files(project): """Set the status for CodebaseResource to unknown or no license.""" scanned_files = project.codebaseresources.files().status(SCANNED) - scanned_files.has_no_licenses().update(status=NO_LICENSES) + scanned_files.has_no_license_detections().update(status=NO_LICENSES) scanned_files.unknown_license().update(status=UNKNOWN_LICENSE) From 11fffe2cfb3f8c7fdc41321eaa9369c565629e73 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Mon, 15 May 2023 09:37:08 +0400 Subject: [PATCH 32/53] Add basic progress logging to data migrations #569 Signed-off-by: Thomas Druez --- .../0031_scancode_toolkit_v32_data_updates.py | 35 +++++++++++++++---- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py b/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py index a8f990dc85..f408ddace3 100644 --- a/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py +++ b/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py @@ -16,7 +16,13 @@ def compute_package_declared_license_expression_spdx(apps, schema_editor): ~Q(declared_license_expression="") & Q(declared_license_expression_spdx="") ) - for package in packages: + package_count = packages.count() + print(f"Compute declared_license_expression_spdx for {package_count:,} packages.") + + chunk_size = 2000 + for index, package in enumerate(packages.iterator(chunk_size=chunk_size)): + if not (index % chunk_size): + print(f" {index:,} / {package_count:,}") if spdx := build_spdx_license_expression(package.declared_license_expression): package.declared_license_expression_spdx = spdx package.save() @@ -33,10 +39,17 @@ def compute_resource_detected_license_expression(apps, schema_editor): CodebaseResource = apps.get_model("scanpipe", "CodebaseResource") resources = CodebaseResource.objects.filter(~Q(license_expressions=[])) - for resource in resources: - license_expression = str(combine_expressions(resource.license_expressions)) - license_expression_spdx = build_spdx_license_expression(license_expression) - resource.declared_license_expression = license_expression + resource_count = resources.count() + print(f"Compute detected_license_expression for {resource_count:,} resources.") + + chunk_size = 2000 + for index, resource in enumerate(resources.iterator(chunk_size=chunk_size)): + if not (index % chunk_size): + print(f" {index:,} / {resource_count:,}") + + combined_expression = str(combine_expressions(resource.license_expressions)) + license_expression_spdx = build_spdx_license_expression(combined_expression) + resource.declared_license_expression = combined_expression resource.declared_license_expression_spdx = license_expression_spdx resource.save() @@ -98,8 +111,16 @@ def _convert_matches_to_detections(license_matches): def compute_resource_license_detections(apps, schema_editor): """Compute CodebaseResource `license_detections` from old `licenses` field.""" CodebaseResource = apps.get_model("scanpipe", "CodebaseResource") - resources = CodebaseResource.objects.filter(~Q(licenses=[])) - for resource in resources: + resources = CodebaseResource.objects.filter(~Q(licenses=[])).only("licenses") + + resource_count = resources.count() + print(f"Compute license_detections for {resource_count:,} resources.") + + chunk_size = 2000 + for index, resource in enumerate(resources.iterator(chunk_size=chunk_size)): + if not (index % chunk_size): + print(f" {index:,} / {resource_count:,}") + detections = _convert_matches_to_detections(resource.licenses) resource.license_detections = detections resource.save() From 29ff6a15fbe956c8eb886fd2b883db8b9054e2b8 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Mon, 15 May 2023 10:53:47 +0400 Subject: [PATCH 33/53] Optimize data migration using bulk_update #569 Signed-off-by: Thomas Druez --- .../0031_scancode_toolkit_v32_data_updates.py | 96 ++++++++++++++----- 1 file changed, 71 insertions(+), 25 deletions(-) diff --git a/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py b/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py index f408ddace3..4b68195388 100644 --- a/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py +++ b/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py @@ -12,20 +12,31 @@ def compute_package_declared_license_expression_spdx(apps, schema_editor): from licensedcode.cache import build_spdx_license_expression DiscoveredPackage = apps.get_model("scanpipe", "DiscoveredPackage") - packages = DiscoveredPackage.objects.filter( + queryset = DiscoveredPackage.objects.filter( ~Q(declared_license_expression="") & Q(declared_license_expression_spdx="") - ) + ).only("declared_license_expression") - package_count = packages.count() - print(f"Compute declared_license_expression_spdx for {package_count:,} packages.") + object_count = queryset.count() + print(f"\nCompute declared_license_expression_spdx for {object_count:,} packages.") chunk_size = 2000 - for index, package in enumerate(packages.iterator(chunk_size=chunk_size)): - if not (index % chunk_size): - print(f" {index:,} / {package_count:,}") + iterator = queryset.iterator(chunk_size=chunk_size) + + unsaved_objects = [] + for index, package in enumerate(iterator, start=1): if spdx := build_spdx_license_expression(package.declared_license_expression): package.declared_license_expression_spdx = spdx - package.save() + unsaved_objects.append(package) + + if not (index % chunk_size) and unsaved_objects: + print(f" {index:,} / {object_count:,} computed") + + print("Updating DB objects...") + DiscoveredPackage.objects.bulk_update( + objs=unsaved_objects, + fields=["declared_license_expression_spdx"], + batch_size=1000, + ) def compute_resource_detected_license_expression(apps, schema_editor): @@ -37,21 +48,44 @@ def compute_resource_detected_license_expression(apps, schema_editor): from licensedcode.cache import build_spdx_license_expression CodebaseResource = apps.get_model("scanpipe", "CodebaseResource") - resources = CodebaseResource.objects.filter(~Q(license_expressions=[])) + queryset = CodebaseResource.objects.filter(~Q(license_expressions=[])).only( + "license_expressions" + ) - resource_count = resources.count() - print(f"Compute detected_license_expression for {resource_count:,} resources.") + object_count = queryset.count() + print(f"\nCompute detected_license_expression for {object_count:,} resources.") chunk_size = 2000 - for index, resource in enumerate(resources.iterator(chunk_size=chunk_size)): - if not (index % chunk_size): - print(f" {index:,} / {resource_count:,}") + iterator = queryset.iterator(chunk_size=chunk_size) + unsaved_objects = [] + for index, resource in enumerate(iterator, start=1): combined_expression = str(combine_expressions(resource.license_expressions)) - license_expression_spdx = build_spdx_license_expression(combined_expression) - resource.declared_license_expression = combined_expression - resource.declared_license_expression_spdx = license_expression_spdx - resource.save() + # TODO: + # gpl-2.0 OR broadcom-linking-unmodified OR proprietary-license + # build_spdx_license_expression("broadcom-linking-unmodified") + # AttributeError: 'LicenseSymbol' object has no attribute 'wrapped' + try: + license_expression_spdx = build_spdx_license_expression(combined_expression) + except AttributeError: + continue + + resource.detected_license_expression = combined_expression + resource.detected_license_expression_spdx = license_expression_spdx + unsaved_objects.append(resource) + + if not (index % chunk_size) and unsaved_objects: + print(f" {index:,} / {object_count:,} computed") + + print("Updating DB objects...") + CodebaseResource.objects.bulk_update( + objs=unsaved_objects, + fields=[ + "detected_license_expression", + "detected_license_expression_spdx", + ], + batch_size=1000, + ) def _convert_matches_to_detections(license_matches): @@ -111,19 +145,31 @@ def _convert_matches_to_detections(license_matches): def compute_resource_license_detections(apps, schema_editor): """Compute CodebaseResource `license_detections` from old `licenses` field.""" CodebaseResource = apps.get_model("scanpipe", "CodebaseResource") - resources = CodebaseResource.objects.filter(~Q(licenses=[])).only("licenses") + queryset = CodebaseResource.objects.filter(~Q(licenses=[])).only("licenses") - resource_count = resources.count() - print(f"Compute license_detections for {resource_count:,} resources.") + object_count = queryset.count() + print(f"\nCompute license_detections for {object_count:,} resources.") chunk_size = 2000 - for index, resource in enumerate(resources.iterator(chunk_size=chunk_size)): - if not (index % chunk_size): - print(f" {index:,} / {resource_count:,}") + iterator = queryset.iterator(chunk_size=chunk_size) + unsaved_objects = [] + for index, resource in enumerate(iterator, start=1): detections = _convert_matches_to_detections(resource.licenses) resource.license_detections = detections - resource.save() + unsaved_objects.append(resource) + + if not (index % chunk_size): + print(f" {index:,} / {object_count:,} computed") + + print("Updating DB objects...") + # Keeping the batch_size small as the `license_detections` content is often large, + # and it may raise `django.db.utils.OperationalError: out of memory` + CodebaseResource.objects.bulk_update( + objs=unsaved_objects, + fields=["license_detections"], + batch_size=50, + ) class Migration(migrations.Migration): From 9b7eb487394b7debf24baf9ea2144f5b8c780f40 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Mon, 15 May 2023 12:04:15 +0400 Subject: [PATCH 34/53] Display warning if one pipeline was run with old toolkit #569 Signed-off-by: Thomas Druez --- .../scanpipe/includes/project_pipelines.html | 2 +- .../templates/scanpipe/project_detail.html | 2 +- scanpipe/views.py | 20 +++++++++++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/scanpipe/templates/scanpipe/includes/project_pipelines.html b/scanpipe/templates/scanpipe/includes/project_pipelines.html index 1a658cf9ac..4f67405655 100644 --- a/scanpipe/templates/scanpipe/includes/project_pipelines.html +++ b/scanpipe/templates/scanpipe/includes/project_pipelines.html @@ -2,7 +2,7 @@

Pipelines

- {% for run in project.runs.all %} + {% for run in pipeline_runs %} {{ run.pipeline_name }} {% include "scanpipe/includes/run_status_tag.html" with run=run display_current_step=True only %} diff --git a/scanpipe/templates/scanpipe/project_detail.html b/scanpipe/templates/scanpipe/project_detail.html index 841e63697b..de298d1c0b 100644 --- a/scanpipe/templates/scanpipe/project_detail.html +++ b/scanpipe/templates/scanpipe/project_detail.html @@ -62,7 +62,7 @@ - {% elif not project.runs.all %} + {% elif not pipeline_runs %}

diff --git a/scanpipe/views.py b/scanpipe/views.py index 96ad873dd9..30baa3e81c 100644 --- a/scanpipe/views.py +++ b/scanpipe/views.py @@ -509,6 +509,22 @@ def get_scan_summary_data(scan_summary_json): return summary_data + def check_run_scancode_version(self, pipeline_runs, version_limit="32.2.0"): + """ + Display a warning message if one of the ``pipeline_runs`` scancodeio_version + is prior to or currently is ``old_version``. + """ + if run_versions := [run.scancodeio_version for run in pipeline_runs]: + message = ( + "WARNING: Some this project pipelines have been run with an " + "out of date ScanCode-toolkit version.\n" + "The scan data was migrated, but it is recommended to reset the " + "project and re-run the pipelines to benefit from the latest " + "scan results improvements." + ) + if min(run_versions) <= version_limit: + messages.warning(self.request, message) + def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) project = self.object @@ -544,6 +560,9 @@ def get_context_data(self, **kwargs): resource_status_summary = count_group_by(project.codebaseresources, "status") + pipeline_runs = project.runs.all() + self.check_run_scancode_version(pipeline_runs) + context.update( { "inputs_with_source": inputs, @@ -553,6 +572,7 @@ def get_context_data(self, **kwargs): "resource_status_summary": resource_status_summary, "license_clarity": license_clarity, "scan_summary": scan_summary, + "pipeline_runs": pipeline_runs, "codebase_root": codebase_root, } ) From 17d416b877660b9bfd6237660c3e962a0d0bd42c Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Mon, 15 May 2023 12:50:48 +0400 Subject: [PATCH 35/53] Add package_assembly_codebase.json in the regen stack #569 Signed-off-by: Thomas Druez --- .../tests/data/package_assembly_codebase.json | 240 ------------ .../scancode/package_assembly_codebase.json | 364 ++++++++++++++++++ .../scancode/package_assembly_codebase.tar.gz | Bin 0 -> 414 bytes scanpipe/tests/pipes/test_scancode.py | 9 +- scanpipe/tests/regen_test_data.py | 16 + 5 files changed, 386 insertions(+), 243 deletions(-) delete mode 100644 scanpipe/tests/data/package_assembly_codebase.json create mode 100644 scanpipe/tests/data/scancode/package_assembly_codebase.json create mode 100644 scanpipe/tests/data/scancode/package_assembly_codebase.tar.gz diff --git a/scanpipe/tests/data/package_assembly_codebase.json b/scanpipe/tests/data/package_assembly_codebase.json deleted file mode 100644 index c64c572b20..0000000000 --- a/scanpipe/tests/data/package_assembly_codebase.json +++ /dev/null @@ -1,240 +0,0 @@ -{ - "headers": [ - { - "tool_name": "scancode-toolkit", - "tool_version": "31.0.0rc5", - "options": { - "input": [ - "/tmp/test" - ], - "--info": true, - "--json-pp": "/home/jono/Desktop/package_assembly_codebase.json", - "--package": true - }, - "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", - "start_timestamp": "2022-08-12T011956.852635", - "end_timestamp": "2022-08-12T011959.120759", - "output_format_version": "2.0.0", - "duration": 2.2681386470794678, - "message": null, - "errors": [], - "warnings": [], - "extra_data": { - "system_environment": { - "operating_system": "linux", - "cpu_architecture": "64", - "platform": "Linux-5.4.0-122-generic-x86_64-with-glibc2.27", - "platform_version": "#138~18.04.1-Ubuntu SMP Fri Jun 24 14:14:03 UTC 2022", - "python_version": "3.10.4 (main, May 22 2022, 00:46:26) [GCC 7.5.0]" - }, - "spdx_license_list_version": "3.18", - "files_count": 3 - } - } - ], - "dependencies": [], - "packages": [], - "files": [ - { - "path": "test", - "type": "directory", - "name": "test", - "base_name": "test", - "extension": "", - "size": 0, - "date": null, - "sha1": null, - "md5": null, - "sha256": null, - "mime_type": null, - "file_type": null, - "programming_language": null, - "is_binary": false, - "is_text": false, - "is_archive": false, - "is_media": false, - "is_source": false, - "is_script": false, - "package_data": [], - "for_packages": [], - "files_count": 3, - "dirs_count": 2, - "size_count": 63, - "scan_errors": [] - }, - { - "path": "test/get_package_resources", - "type": "directory", - "name": "get_package_resources", - "base_name": "get_package_resources", - "extension": "", - "size": 0, - "date": null, - "sha1": null, - "md5": null, - "sha256": null, - "mime_type": null, - "file_type": null, - "programming_language": null, - "is_binary": false, - "is_text": false, - "is_archive": false, - "is_media": false, - "is_source": false, - "is_script": false, - "package_data": [], - "for_packages": [], - "files_count": 3, - "dirs_count": 1, - "size_count": 63, - "scan_errors": [] - }, - { - "path": "test/get_package_resources/package.json", - "type": "file", - "name": "package.json", - "base_name": "package", - "extension": ".json", - "size": 63, - "date": "2022-07-27", - "sha1": "47ad6746a065a22a4c2a119cb425c250bddfbf88", - "md5": "5cbb43ca814ec801e8673e348e8eec19", - "sha256": "aac331f407d4d662a2897eafeb4f05a1c2343218220d99779c9553d3b92bd4ac", - "mime_type": "application/json", - "file_type": "JSON data", - "programming_language": null, - "is_binary": false, - "is_text": true, - "is_archive": false, - "is_media": false, - "is_source": false, - "is_script": false, - "package_data": [ - { - "type": "npm", - "namespace": null, - "name": "test", - "version": "0.1.0", - "qualifiers": {}, - "subpath": null, - "primary_language": "JavaScript", - "description": null, - "release_date": null, - "parties": [], - "keywords": [], - "homepage_url": null, - "download_url": "https://registry.npmjs.org/test/-/test-0.1.0.tgz", - "size": null, - "sha1": null, - "md5": null, - "sha256": null, - "sha512": null, - "bug_tracking_url": null, - "code_view_url": null, - "vcs_url": null, - "copyright": null, - "license_expression": "mit", - "declared_license": [ - "MIT" - ], - "notice_text": null, - "source_packages": [], - "file_references": [], - "extra_data": {}, - "dependencies": [], - "repository_homepage_url": "https://www.npmjs.com/package/test", - "repository_download_url": "https://registry.npmjs.org/test/-/test-0.1.0.tgz", - "api_data_url": "https://registry.npmjs.org/test/0.1.0", - "datasource_id": "npm_package_json", - "purl": "pkg:npm/test@0.1.0" - } - ], - "for_packages": [], - "files_count": 0, - "dirs_count": 0, - "size_count": 0, - "scan_errors": [] - }, - { - "path": "test/get_package_resources/this-should-be-returned", - "type": "file", - "name": "this-should-be-returned", - "base_name": "this-should-be-returned", - "extension": "", - "size": 0, - "date": "2022-07-27", - "sha1": null, - "md5": null, - "sha256": null, - "mime_type": "inode/x-empty", - "file_type": "empty", - "programming_language": null, - "is_binary": false, - "is_text": true, - "is_archive": false, - "is_media": false, - "is_source": false, - "is_script": false, - "package_data": [], - "for_packages": [], - "files_count": 0, - "dirs_count": 0, - "size_count": 0, - "scan_errors": [] - }, - { - "path": "test/get_package_resources/node_modules", - "type": "directory", - "name": "node_modules", - "base_name": "node_modules", - "extension": "", - "size": 0, - "date": null, - "sha1": null, - "md5": null, - "sha256": null, - "mime_type": null, - "file_type": null, - "programming_language": null, - "is_binary": false, - "is_text": false, - "is_archive": false, - "is_media": false, - "is_source": false, - "is_script": false, - "package_data": [], - "for_packages": [], - "files_count": 1, - "dirs_count": 0, - "size_count": 0, - "scan_errors": [] - }, - { - "path": "test/get_package_resources/node_modules/this-should-not-be-returned", - "type": "file", - "name": "this-should-not-be-returned", - "base_name": "this-should-not-be-returned", - "extension": "", - "size": 0, - "date": "2022-07-27", - "sha1": null, - "md5": null, - "sha256": null, - "mime_type": "inode/x-empty", - "file_type": "empty", - "programming_language": null, - "is_binary": false, - "is_text": true, - "is_archive": false, - "is_media": false, - "is_source": false, - "is_script": false, - "package_data": [], - "for_packages": [], - "files_count": 0, - "dirs_count": 0, - "size_count": 0, - "scan_errors": [] - } - ] -} \ No newline at end of file diff --git a/scanpipe/tests/data/scancode/package_assembly_codebase.json b/scanpipe/tests/data/scancode/package_assembly_codebase.json new file mode 100644 index 0000000000..5f604b3c48 --- /dev/null +++ b/scanpipe/tests/data/scancode/package_assembly_codebase.json @@ -0,0 +1,364 @@ +{ + "headers": [ + { + "tool_name": "scancode-toolkit", + "tool_version": "32.0.0rc4", + "options": { + "input": [ + "/private/var/folders/ph/tpf7js_n0r554mngmvykl7lm0000gn/T/tmpy38obltd/projects/package_assembly-62319862/codebase/package_assembly_codebase.tar.gz-extract" + ], + "--info": true, + "--json-pp": "/Volumes/nexB/repos/scancode.io/scanpipe/tests/data/scancode/package_assembly_codebase.json", + "--package": true, + "--processes": "-1", + "--verbose": true + }, + "notice": "Generated with ScanCode and provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES\nOR CONDITIONS OF ANY KIND, either express or implied. No content created from\nScanCode should be considered or used as legal advice. Consult an Attorney\nfor any legal advice.\nScanCode is a free software code scanning tool from nexB Inc. and others.\nVisit https://github.com/nexB/scancode-toolkit/ for support and download.", + "start_timestamp": "2023-05-15T084938.496922", + "end_timestamp": "2023-05-15T084939.909428", + "output_format_version": "3.0.0", + "duration": 1.412513017654419, + "message": null, + "errors": [], + "warnings": [], + "extra_data": { + "system_environment": { + "operating_system": "mac", + "cpu_architecture": "64", + "platform": "macOS-13.3.1-arm64-arm-64bit", + "platform_version": "Darwin Kernel Version 22.4.0: Mon Mar 6 20:59:28 PST 2023; root:xnu-8796.101.5~3/RELEASE_ARM64_T6000", + "python_version": "3.10.10 (v3.10.10:aad5f6a891, Feb 7 2023, 08:47:40) [Clang 13.0.0 (clang-1300.0.29.30)]" + }, + "spdx_license_list_version": "3.20", + "files_count": 3 + } + } + ], + "packages": [ + { + "type": "npm", + "namespace": null, + "name": "test", + "version": "0.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/test/-/test-0.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "holder": null, + "declared_license_expression": "mit", + "declared_license_expression_spdx": "MIT", + "license_detections": [ + { + "license_expression": "mit", + "matches": [ + { + "score": 100.0, + "start_line": 1, + "end_line": 1, + "matched_length": 1, + "match_coverage": 100.0, + "matcher": "1-spdx-id", + "license_expression": "mit", + "rule_identifier": "spdx-license-identifier-mit-5da48780aba670b0860c46d899ed42a0f243ff06", + "rule_relevance": 100, + "rule_url": null, + "matched_text": "MIT" + } + ], + "identifier": "mit-a822f434-d61f-f2b1-c792-8b8cb9e7b9bf" + } + ], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": "['MIT']", + "notice_text": null, + "source_packages": [], + "extra_data": {}, + "repository_homepage_url": "https://www.npmjs.com/package/test", + "repository_download_url": "https://registry.npmjs.org/test/-/test-0.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/test/0.1.0", + "package_uid": "pkg:npm/test@0.1.0?uuid=99415083-f4db-4163-b96e-d2e5f1b6b875", + "datafile_paths": [ + "package_assembly_codebase.tar.gz-extract/test/get_package_resources/package.json" + ], + "datasource_ids": [ + "npm_package_json" + ], + "purl": "pkg:npm/test@0.1.0" + } + ], + "dependencies": [], + "files": [ + { + "path": "package_assembly_codebase.tar.gz-extract", + "type": "directory", + "name": "package_assembly_codebase.tar.gz-extract", + "base_name": "package_assembly_codebase.tar.gz-extract", + "extension": "", + "size": 0, + "date": null, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "package_data": [], + "for_packages": [], + "files_count": 3, + "dirs_count": 3, + "size_count": 276, + "scan_errors": [] + }, + { + "path": "package_assembly_codebase.tar.gz-extract/test", + "type": "directory", + "name": "test", + "base_name": "test", + "extension": "", + "size": 0, + "date": null, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "package_data": [], + "for_packages": [], + "files_count": 3, + "dirs_count": 2, + "size_count": 276, + "scan_errors": [] + }, + { + "path": "package_assembly_codebase.tar.gz-extract/test/get_package_resources", + "type": "directory", + "name": "get_package_resources", + "base_name": "get_package_resources", + "extension": "", + "size": 0, + "date": null, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "package_data": [], + "for_packages": [], + "files_count": 3, + "dirs_count": 1, + "size_count": 276, + "scan_errors": [] + }, + { + "path": "package_assembly_codebase.tar.gz-extract/test/get_package_resources/package.json", + "type": "file", + "name": "package.json", + "base_name": "package", + "extension": ".json", + "size": 276, + "date": "2023-05-12", + "sha1": "d8d1136ce3c69ea3662f55d3da246ed5013a696e", + "md5": "b4da04c192e6366bc56087fcf9c634b7", + "sha256": "386f5dfcc92eef62a974d8c2338e59c7d744fb5422ff5b1c63c7c2a5bbb8816b", + "mime_type": "application/json", + "file_type": "JSON text data", + "programming_language": null, + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "package_data": [ + { + "type": "npm", + "namespace": null, + "name": "test", + "version": "0.1.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "JavaScript", + "description": null, + "release_date": null, + "parties": [], + "keywords": [], + "homepage_url": null, + "download_url": "https://registry.npmjs.org/test/-/test-0.1.0.tgz", + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": null, + "vcs_url": null, + "copyright": null, + "holder": null, + "declared_license_expression": "mit", + "declared_license_expression_spdx": "MIT", + "license_detections": [ + { + "license_expression": "mit", + "matches": [ + { + "score": 100.0, + "start_line": 1, + "end_line": 1, + "matched_length": 1, + "match_coverage": 100.0, + "matcher": "1-spdx-id", + "license_expression": "mit", + "rule_identifier": "spdx-license-identifier-mit-5da48780aba670b0860c46d899ed42a0f243ff06", + "rule_relevance": 100, + "rule_url": null, + "matched_text": "MIT" + } + ], + "identifier": "mit-a822f434-d61f-f2b1-c792-8b8cb9e7b9bf" + } + ], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": "['MIT']", + "notice_text": null, + "source_packages": [], + "file_references": [], + "extra_data": {}, + "dependencies": [], + "repository_homepage_url": "https://www.npmjs.com/package/test", + "repository_download_url": "https://registry.npmjs.org/test/-/test-0.1.0.tgz", + "api_data_url": "https://registry.npmjs.org/test/0.1.0", + "datasource_id": "npm_package_json", + "purl": "pkg:npm/test@0.1.0" + } + ], + "for_packages": [ + "pkg:npm/test@0.1.0?uuid=99415083-f4db-4163-b96e-d2e5f1b6b875" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "package_assembly_codebase.tar.gz-extract/test/get_package_resources/this-should-be-returned", + "type": "file", + "name": "this-should-be-returned", + "base_name": "this-should-be-returned", + "extension": "", + "size": 0, + "date": "2020-02-23", + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": "inode/x-empty", + "file_type": "empty", + "programming_language": null, + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "package_data": [], + "for_packages": [ + "pkg:npm/test@0.1.0?uuid=99415083-f4db-4163-b96e-d2e5f1b6b875" + ], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "package_assembly_codebase.tar.gz-extract/test/get_package_resources/node_modules", + "type": "directory", + "name": "node_modules", + "base_name": "node_modules", + "extension": "", + "size": 0, + "date": null, + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": null, + "file_type": null, + "programming_language": null, + "is_binary": false, + "is_text": false, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "package_data": [], + "for_packages": [], + "files_count": 1, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + }, + { + "path": "package_assembly_codebase.tar.gz-extract/test/get_package_resources/node_modules/this-should-not-be-returned", + "type": "file", + "name": "this-should-not-be-returned", + "base_name": "this-should-not-be-returned", + "extension": "", + "size": 0, + "date": "2020-02-23", + "sha1": null, + "md5": null, + "sha256": null, + "mime_type": "inode/x-empty", + "file_type": "empty", + "programming_language": null, + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_source": false, + "is_script": false, + "package_data": [], + "for_packages": [], + "files_count": 0, + "dirs_count": 0, + "size_count": 0, + "scan_errors": [] + } + ] +} \ No newline at end of file diff --git a/scanpipe/tests/data/scancode/package_assembly_codebase.tar.gz b/scanpipe/tests/data/scancode/package_assembly_codebase.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..65b44747fd0e1358d588c922875f7d2057c66c03 GIT binary patch literal 414 zcmV;P0b%|hiwFRXYF=aj1MSsMZ-Ouw25`=P3c`810lD4=Q z<9A#6Qcj_je&aREv2^Yr)ui@4AS?IjgTBXQX{?cp;?`r(+t&Zd^zh<(|*3 z{9HSgv5EG5Z?2^38h7gcA7$(QXJ98~k}i@NOf(o(=@iW6Rz;uwX&AZw85v{$H__4m zAsNk$l4s3P7wnq-wtpJYrhi6w?E2?1bN!PG{l`xKy#LL>cLJFd5Ip!ny&QtOeYOH^ zawY4SjKUFVasejQd1(*#nz%^vqtE+6#zmX$A<|GPlUt?N?Q{X_ccn!=^7ZYIC6&#T zZvWgePeGd9Lq0#fH0iXO9nFxb0!p`N+uszhdV~_B0GZ}+G+cbnUA!Iqb|<&g@%~FC zU{WYiEzdj*dhP!)so#I*whP?+blOjlc{PchEmz#6owjXr6q`ybDY}$cm2oX zh{k*zM(+HND0fE!?*BK?(SN)0K6QW5zyFZ35c@|6A%qY@2qA Date: Mon, 15 May 2023 16:06:40 +0400 Subject: [PATCH 36/53] Do not run the data migration operation during tests #569 Signed-off-by: Thomas Druez --- .../0031_scancode_toolkit_v32_data_updates.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py b/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py index 4b68195388..3d03a48469 100644 --- a/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py +++ b/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py @@ -2,6 +2,7 @@ from django.db import migrations from django.db.models import Q +from django.conf import settings def compute_package_declared_license_expression_spdx(apps, schema_editor): @@ -11,6 +12,9 @@ def compute_package_declared_license_expression_spdx(apps, schema_editor): """ from licensedcode.cache import build_spdx_license_expression + if settings.IS_TESTS: + return + DiscoveredPackage = apps.get_model("scanpipe", "DiscoveredPackage") queryset = DiscoveredPackage.objects.filter( ~Q(declared_license_expression="") & Q(declared_license_expression_spdx="") @@ -47,6 +51,9 @@ def compute_resource_detected_license_expression(apps, schema_editor): from license_expression import combine_expressions from licensedcode.cache import build_spdx_license_expression + if settings.IS_TESTS: + return + CodebaseResource = apps.get_model("scanpipe", "CodebaseResource") queryset = CodebaseResource.objects.filter(~Q(license_expressions=[])).only( "license_expressions" @@ -144,6 +151,9 @@ def _convert_matches_to_detections(license_matches): def compute_resource_license_detections(apps, schema_editor): """Compute CodebaseResource `license_detections` from old `licenses` field.""" + if settings.IS_TESTS: + return + CodebaseResource = apps.get_model("scanpipe", "CodebaseResource") queryset = CodebaseResource.objects.filter(~Q(licenses=[])).only("licenses") From 6f5762a70372d7ba9d71c3ba8a8cb81131f0ae8a Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Mon, 15 May 2023 16:11:13 +0400 Subject: [PATCH 37/53] Add changelog entry #569 Signed-off-by: Thomas Druez --- CHANGELOG.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 709cafe0c1..27ea6bf386 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -4,6 +4,12 @@ Changelog v33.0.0 (unreleased) -------------------- +- Upgrade ScanCode-toolkit to latest v32.0.0 + Warning: This upgrade required schema and data migrations. + Refer to https://github.com/nexB/scancode-toolkit/blob/develop/CHANGELOG.rst#v3200-next-roadmap + for the full list of changes. + https://github.com/nexB/scancode.io/issues/569 + - Add a new ``deploy_to_develop`` pipeline specialized in creating relations between the development source code and binaries or deployed code. This pipeline is expecting 2 archive files with "from-" and "to-" filename prefixes From 13b5c8fbb62d31ce544eb6f94d825a624b2917fc Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Mon, 15 May 2023 16:26:59 +0400 Subject: [PATCH 38/53] Update "Custom Pipeline Example" in documentation #569 Signed-off-by: Thomas Druez --- CHANGELOG.rst | 4 +++- docs/custom-pipelines.rst | 19 +++++++++---------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 27ea6bf386..a6e0c790bb 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -5,7 +5,9 @@ v33.0.0 (unreleased) -------------------- - Upgrade ScanCode-toolkit to latest v32.0.0 - Warning: This upgrade required schema and data migrations. + Warning: This upgrade required schema and data migrations (both included). + It is recommended to reset and re-run the pipelines to benefit from the latest + ScanCode detection improvements. Refer to https://github.com/nexB/scancode-toolkit/blob/develop/CHANGELOG.rst#v3200-next-roadmap for the full list of changes. https://github.com/nexB/scancode.io/issues/569 diff --git a/docs/custom-pipelines.rst b/docs/custom-pipelines.rst index 540356b040..15cd871b6e 100644 --- a/docs/custom-pipelines.rst +++ b/docs/custom-pipelines.rst @@ -113,7 +113,6 @@ the file's directory in the :ref:`scancodeio_settings_pipelines_dirs`. from scanpipe.pipelines.scan_codebase import ScanCodebase - # TODO: Rewrite this following v32 changes class ScanAndReport(ScanCodebase): """ Runs the ScanCodebase built-in pipeline steps and generate a licenses report. @@ -142,20 +141,20 @@ the file's directory in the :ref:`scancodeio_settings_pipelines_dirs`. def report_licenses_with_resources(self): """ - Retrieves codebase resources filtered by license categories, - Generates a licenses report file from a template. + Retrieves codebase resources and generates a licenses report file using + a Jinja template. """ - categories = ["Commercial", "Copyleft"] - resources = self.project.codebaseresources.licenses_categories(categories) + resources = self.project.codebaseresources.has_license_detections() - resources_by_licenses = defaultdict(list) + resources_by_matched_text = defaultdict(list) for resource in resources: - for license_data in resource.licenses: - matched_text = license_data.get("matched_text") - resources_by_licenses[matched_text].append(resource.path) + for detection_data in resource.license_detections: + for match in detection_data.get("matches", []): + matched_text = match.get("matched_text") + resources_by_matched_text[matched_text].append(resource.path) template = Template(self.report_template, lstrip_blocks=True, trim_blocks=True) - report_stream = template.stream(resources=resources_by_licenses) + report_stream = template.stream(resources=resources_by_matched_text) report_file = self.project.get_output_file_path("license-report", "txt") report_stream.dump(str(report_file)) From a41a3894fe933abbf864476d6a331ac94bd7876b Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Mon, 15 May 2023 16:53:10 +0400 Subject: [PATCH 39/53] Add unit test for spdx_package_to_discovered_package_data #569 Signed-off-by: Thomas Druez --- scanpipe/tests/pipes/test_resolve.py | 32 ++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/scanpipe/tests/pipes/test_resolve.py b/scanpipe/tests/pipes/test_resolve.py index 79fa6ec5d2..0a8367deee 100644 --- a/scanpipe/tests/pipes/test_resolve.py +++ b/scanpipe/tests/pipes/test_resolve.py @@ -25,7 +25,10 @@ from django.test import TestCase +from scanpipe import pipes +from scanpipe.models import Project from scanpipe.pipes import resolve +from scanpipe.tests import package_data1 class ScanPipeResolvePipesTest(TestCase): @@ -123,3 +126,32 @@ def test_scanpipe_pipes_resolve_resolve_about_packages(self): package = resolve.resolve_about_packages(str(input_location)) expected = {"name": "project"} self.assertEqual([expected], package) + + def test_scanpipe_pipes_resolve_spdx_package_to_discovered_package_data(self): + p1 = Project.objects.create(name="Analysis") + package = pipes.update_or_create_package(p1, package_data1) + package_spdx = package.as_spdx() + package_data = resolve.spdx_package_to_discovered_package_data(package_spdx) + expected = { + "name": "adduser", + "download_url": "https://download.url/package.zip", + "declared_license_expression": "gpl-2.0 AND gpl-2.0-plus", + "declared_license_expression_spdx": "GPL-2.0-only AND GPL-2.0-or-later", + "extracted_license_statement": "GPL-2.0-only AND GPL-2.0-or-later", + "copyright": ( + "Copyright (c) 2000 Roland Bauerschmidt \n" + "Copyright (c) 1997, 1998, 1999 Guy Maor \n" + "Copyright (c) 1995 Ted Hajek \n" + "portions Copyright (c) 1994 Debian Association, Inc." + ), + "version": "3.118", + "homepage_url": "https://packages.debian.org", + "filename": "package.zip", + "description": "add and remove users and groups", + "release_date": "1999-10-10", + "type": "deb", + "namespace": "debian", + "qualifiers": "arch=all", + "md5": "76cf50f29e47676962645632737365a7", + } + self.assertEqual(expected, package_data) From 0edc4c2d3340c1c96de10560b7c2193481e55563 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Mon, 15 May 2023 17:33:44 +0400 Subject: [PATCH 40/53] Fix _get_license_matches_grouped and improve testing #569 Signed-off-by: Thomas Druez --- scanpipe/pipes/scancode.py | 41 +- .../data/scancode/is-npm-1.0.0_summary.json | 386 ++++++++++++++++++ scanpipe/tests/pipes/test_output.py | 7 +- scanpipe/tests/pipes/test_scancode.py | 31 +- scanpipe/tests/test_pipelines.py | 2 +- 5 files changed, 433 insertions(+), 34 deletions(-) create mode 100644 scanpipe/tests/data/scancode/is-npm-1.0.0_summary.json diff --git a/scanpipe/pipes/scancode.py b/scanpipe/pipes/scancode.py index c5a2734df4..7ef20496fa 100644 --- a/scanpipe/pipes/scancode.py +++ b/scanpipe/pipes/scancode.py @@ -547,25 +547,25 @@ def _get_license_matches_grouped(project): for resource in resources_with_license: file_cache = [] - # TODO: - for match in resource.license_detections[0].get("matches", []): - license_expression = match.get("license_expression") - matched_text = match.get("matched_text") - - # Do not include duplicated matched_text for a given license_expression - # within the same file - cache_key = ":".join([license_expression, resource.path, matched_text]) - cache_key = hashlib.md5(cache_key.encode()).hexdigest() - if cache_key in file_cache: - continue - file_cache.append(cache_key) - - license_matches[license_expression].append( - { - "path": resource.path, - "matched_text": matched_text, - } - ) + for detection_data in resource.license_detections: + for match in detection_data.get("matches", []): + license_expression = match.get("license_expression") + matched_text = match.get("matched_text") + + # Do not include duplicated matched_text for a given license_expression + # within the same file + cache_key = ":".join([license_expression, resource.path, matched_text]) + cache_key = hashlib.md5(cache_key.encode()).hexdigest() + if cache_key in file_cache: + continue + file_cache.append(cache_key) + + license_matches[license_expression].append( + { + "path": resource.path, + "matched_text": matched_text, + } + ) return dict(license_matches) @@ -584,7 +584,8 @@ def make_results_summary(project, scan_results_location): summary = scan_data.get("summary") - # Inject the generated `license_matches` in the summary + # Inject the generated `license_matches` in the summary from the project + # codebase resources. summary["license_matches"] = _get_license_matches_grouped(project) # Inject the `key_files` and their file content in the summary diff --git a/scanpipe/tests/data/scancode/is-npm-1.0.0_summary.json b/scanpipe/tests/data/scancode/is-npm-1.0.0_summary.json new file mode 100644 index 0000000000..c7df30a9fa --- /dev/null +++ b/scanpipe/tests/data/scancode/is-npm-1.0.0_summary.json @@ -0,0 +1,386 @@ +{ + "declared_license_expression": "mit", + "license_clarity_score": { + "score": 90, + "declared_license": true, + "identification_precision": true, + "has_license_text": false, + "declared_copyrights": true, + "conflicting_license_categories": false, + "ambiguous_compound_licensing": false + }, + "declared_holder": "Sindre Sorhus", + "primary_language": "JavaScript", + "other_license_expressions": [ + { + "value": null, + "count": 1 + } + ], + "other_holders": [ + { + "value": null, + "count": 2 + } + ], + "other_languages": [], + "license_matches": { + "mit": [ + { + "path": "package/package.json", + "matched_text": " \"license\": \"MIT\"," + }, + { + "path": "package/readme.md", + "matched_text": "## License\n\nMIT \u00a9 [Sindre Sorhus](http://sindresorhus.com)" + } + ] + }, + "key_files": [ + { + "path": "package/package.json", + "type": "file", + "name": "package.json", + "status": "application-package", + "tag": "", + "extension": ".json", + "size": 563, + "md5": "c843e88ecb274d5d573c71be330bff8b", + "sha1": "943efb8abda9b9cdaa4ea73f5709563b948af50b", + "sha256": "522879426298e078881de533b9b3a82fa3bece1336a84bddacf4620008b5d0a3", + "sha512": "", + "mime_type": "application/json", + "file_type": "JSON text data", + "programming_language": "", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_key_file": true, + "detected_license_expression": "mit", + "detected_license_expression_spdx": "MIT", + "license_detections": [ + { + "policy": { + "icon": "far fa-thumbs-up", + "label": "Recommended License", + "color_code": "#002fff", + "license_key": "mit", + "compliance_alert": "" + }, + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 5, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/mit_30.RULE", + "start_line": 5, + "matched_text": " \"license\": \"MIT\",", + "match_coverage": 100.0, + "matched_length": 2, + "rule_relevance": 100, + "rule_identifier": "mit_30.RULE", + "license_expression": "mit" + } + ], + "identifier": "mit-3fce6ea2-8abd-6c6b-3ede-a37af7c6efee", + "license_expression": "mit" + } + ], + "license_clues": [], + "percentage_of_license_text": 3.33, + "compliance_alert": "ok", + "copyrights": [], + "holders": [], + "authors": [], + "package_data": [ + { + "md5": null, + "name": "is-npm", + "purl": "pkg:npm/is-npm@1.0.0", + "sha1": null, + "size": null, + "type": "npm", + "holder": null, + "sha256": null, + "sha512": null, + "parties": [ + { + "url": "http://sindresorhus.com", + "name": "Sindre Sorhus", + "role": "author", + "type": "person", + "email": "sindresorhus@gmail.com" + } + ], + "subpath": null, + "vcs_url": "https://github.com/sindresorhus/is-npm", + "version": "1.0.0", + "keywords": [ + "npm", + "is", + "check", + "detect", + "env", + "environment" + ], + "copyright": null, + "namespace": null, + "extra_data": {}, + "qualifiers": {}, + "description": "Check if your code is running as an npm script", + "notice_text": null, + "api_data_url": "https://registry.npmjs.org/is-npm/1.0.0", + "dependencies": [ + { + "purl": "pkg:npm/ava", + "scope": "devDependencies", + "extra_data": {}, + "is_runtime": false, + "is_optional": true, + "is_resolved": false, + "resolved_package": {}, + "extracted_requirement": "0.0.3" + } + ], + "download_url": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "homepage_url": null, + "release_date": null, + "code_view_url": null, + "datasource_id": "npm_package_json", + "file_references": [], + "source_packages": [], + "bug_tracking_url": null, + "primary_language": "JavaScript", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-spdx-id", + "end_line": 1, + "rule_url": null, + "start_line": 1, + "matched_text": "MIT", + "match_coverage": 100.0, + "matched_length": 1, + "rule_relevance": 100, + "rule_identifier": "spdx-license-identifier-mit-5da48780aba670b0860c46d899ed42a0f243ff06", + "license_expression": "mit" + } + ], + "identifier": "mit-a822f434-d61f-f2b1-c792-8b8cb9e7b9bf", + "license_expression": "mit" + } + ], + "repository_download_url": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "repository_homepage_url": "https://www.npmjs.com/package/is-npm", + "other_license_detections": [], + "other_license_expression": null, + "declared_license_expression": "mit", + "extracted_license_statement": "['MIT']", + "other_license_expression_spdx": null, + "declared_license_expression_spdx": "MIT" + } + ], + "for_packages": [ + "pkg:npm/is-npm@1.0.0?uuid=3fa5ecb6-859b-4c19-a1cf-a567ec45fc54" + ], + "emails": [ + { + "email": "sindresorhus@gmail.com", + "end_line": 9, + "start_line": 9 + } + ], + "urls": [ + { + "url": "http://sindresorhus.com/", + "end_line": 10, + "start_line": 10 + } + ], + "extra_data": {}, + "content": "{\n \"name\": \"is-npm\",\n \"version\": \"1.0.0\",\n \"description\": \"Check if your code is running as an npm script\",\n \"license\": \"MIT\",\n \"repository\": \"sindresorhus/is-npm\",\n \"author\": {\n \"name\": \"Sindre Sorhus\",\n \"email\": \"sindresorhus@gmail.com\",\n \"url\": \"http://sindresorhus.com\"\n },\n \"engines\": {\n \"node\": \">=0.10.0\"\n },\n \"scripts\": {\n \"test\": \"node test.js\"\n },\n \"files\": [\n \"index.js\"\n ],\n \"keywords\": [\n \"npm\",\n \"is\",\n \"check\",\n \"detect\",\n \"env\",\n \"environment\"\n ],\n \"devDependencies\": {\n \"ava\": \"0.0.3\"\n }\n}\n" + }, + { + "path": "package/readme.md", + "type": "file", + "name": "readme.md", + "status": "application-package", + "tag": "", + "extension": ".md", + "size": 477, + "md5": "a743e0abf08c28a37ecc4bef4dc02f8c", + "sha1": "b77832e53cb8239edd733c2ca02b1fc01ca3c2b6", + "sha256": "e98b263545fe62a00c73b57412cbdbcd0792e013a76f9c88342623ab5e8467c1", + "sha512": "", + "mime_type": "text/plain", + "file_type": "Unicode text, UTF-8 text", + "programming_language": "", + "is_binary": false, + "is_text": true, + "is_archive": false, + "is_media": false, + "is_key_file": true, + "detected_license_expression": "mit", + "detected_license_expression_spdx": "MIT", + "license_detections": [ + { + "policy": { + "icon": "far fa-thumbs-up", + "label": "Recommended License", + "color_code": "#002fff", + "license_key": "mit", + "compliance_alert": "" + }, + "matches": [ + { + "score": 100.0, + "matcher": "2-aho", + "end_line": 30, + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/mit_30.RULE", + "start_line": 28, + "matched_text": "## License\n\nMIT \u00a9 [Sindre Sorhus](http://sindresorhus.com)", + "match_coverage": 100.0, + "matched_length": 2, + "rule_relevance": 100, + "rule_identifier": "mit_30.RULE", + "license_expression": "mit" + } + ], + "identifier": "mit-3fce6ea2-8abd-6c6b-3ede-a37af7c6efee", + "license_expression": "mit" + } + ], + "license_clues": [], + "percentage_of_license_text": 2.78, + "compliance_alert": "ok", + "copyrights": [ + { + "end_line": 30, + "copyright": "(c) Sindre Sorhus (http://sindresorhus.com)", + "start_line": 30 + } + ], + "holders": [ + { + "holder": "Sindre Sorhus", + "end_line": 30, + "start_line": 30 + } + ], + "authors": [], + "package_data": [], + "for_packages": [ + "pkg:npm/is-npm@1.0.0?uuid=3fa5ecb6-859b-4c19-a1cf-a567ec45fc54" + ], + "emails": [], + "urls": [ + { + "url": "https://travis-ci.org/sindresorhus/is-npm.svg?branch=master", + "end_line": 1, + "start_line": 1 + }, + { + "url": "https://travis-ci.org/sindresorhus/is-npm", + "end_line": 1, + "start_line": 1 + }, + { + "url": "https://www.npmjs.org/doc/misc/npm-scripts.html", + "end_line": 3, + "start_line": 3 + }, + { + "url": "http://sindresorhus.com/", + "end_line": 30, + "start_line": 30 + } + ], + "extra_data": {}, + "content": "# is-npm [![Build Status](https://travis-ci.org/sindresorhus/is-npm.svg?branch=master)](https://travis-ci.org/sindresorhus/is-npm)\n\n> Check if your code is running as an [npm script](https://www.npmjs.org/doc/misc/npm-scripts.html)\n\n\n## Install\n\n```sh\n$ npm install --save is-npm\n```\n\n\n## Usage\n\n```js\nvar isNpm = require('is-npm');\nconsole.log(isNpm);\n```\n\n```sh\n$ node foo.js\n#=> false\n$ npm run foo\n#=> true\n```\n\n\n## License\n\nMIT \u00a9 [Sindre Sorhus](http://sindresorhus.com)\n" + } + ], + "key_files_packages": [ + { + "purl": "pkg:npm/is-npm@1.0.0", + "type": "npm", + "namespace": "", + "name": "is-npm", + "version": "1.0.0", + "qualifiers": "", + "subpath": "", + "primary_language": "JavaScript", + "description": "Check if your code is running as an npm script", + "release_date": null, + "parties": [ + { + "url": "http://sindresorhus.com", + "name": "Sindre Sorhus", + "role": "author", + "type": "person", + "email": "sindresorhus@gmail.com" + } + ], + "keywords": [ + "npm", + "is", + "check", + "detect", + "env", + "environment" + ], + "homepage_url": "", + "download_url": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "bug_tracking_url": "", + "code_view_url": "", + "vcs_url": "https://github.com/sindresorhus/is-npm", + "repository_homepage_url": "https://www.npmjs.com/package/is-npm", + "repository_download_url": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "api_data_url": "https://registry.npmjs.org/is-npm/1.0.0", + "size": null, + "md5": "", + "sha1": "", + "sha256": "", + "sha512": "", + "copyright": "", + "holder": "", + "declared_license_expression": "mit", + "declared_license_expression_spdx": "MIT", + "license_detections": [ + { + "matches": [ + { + "score": 100.0, + "matcher": "1-spdx-id", + "end_line": 1, + "rule_url": null, + "start_line": 1, + "matched_text": "MIT", + "match_coverage": 100.0, + "matched_length": 1, + "rule_relevance": 100, + "rule_identifier": "spdx-license-identifier-mit-5da48780aba670b0860c46d899ed42a0f243ff06", + "license_expression": "mit" + } + ], + "identifier": "mit-a822f434-d61f-f2b1-c792-8b8cb9e7b9bf", + "license_expression": "mit" + } + ], + "other_license_expression": "", + "other_license_expression_spdx": "", + "other_license_detections": [], + "extracted_license_statement": "['MIT']", + "notice_text": "", + "source_packages": [], + "extra_data": {}, + "package_uid": "pkg:npm/is-npm@1.0.0?uuid=3fa5ecb6-859b-4c19-a1cf-a567ec45fc54", + "datasource_id": "", + "file_references": [], + "missing_resources": [], + "modified_resources": [] + } + ] +} \ No newline at end of file diff --git a/scanpipe/tests/pipes/test_output.py b/scanpipe/tests/pipes/test_output.py index 0a3c0484fa..316acd4a04 100644 --- a/scanpipe/tests/pipes/test_output.py +++ b/scanpipe/tests/pipes/test_output.py @@ -41,6 +41,7 @@ from scanpipe.models import Project from scanpipe.models import ProjectError from scanpipe.pipes import output +from scanpipe.tests import FIXTURES_REGEN from scanpipe.tests import mocked_now from scanpipe.tests import package_data1 @@ -57,7 +58,7 @@ def make_config_directory(project): class ScanPipeOutputPipesTest(TestCase): data_path = Path(__file__).parent.parent / "data" - def assertResultsEqual(self, expected_file, results, regen=False): + def assertResultsEqual(self, expected_file, results, regen=FIXTURES_REGEN): """ Set `regen` to True to regenerate the expected results. """ @@ -215,7 +216,7 @@ def test_scanpipe_pipes_outputs_to_xlsx(self): output_file = output.to_xlsx(project=project) self.assertIn(output_file.name, project.output_root) - def test_scanpipe_pipes_outputs_to_cyclonedx(self, regen=False): + def test_scanpipe_pipes_outputs_to_cyclonedx(self, regen=FIXTURES_REGEN): fixtures = self.data_path / "asgiref-3.3.0_fixtures.json" call_command("loaddata", fixtures, **{"verbosity": 0}) @@ -313,7 +314,7 @@ def test_scanpipe_pipes_outputs_to_attribution(self): output_file = output.to_attribution(project=project) expected_file = self.data_path / "outputs" / "expected_attribution.html" - self.assertResultsEqual(expected_file, output_file.read_text(), 1) + self.assertResultsEqual(expected_file, output_file.read_text()) config_directory = make_config_directory(project) custom_template_dir = config_directory / "templates" diff --git a/scanpipe/tests/pipes/test_scancode.py b/scanpipe/tests/pipes/test_scancode.py index d63e53ac26..69dbfebe5f 100644 --- a/scanpipe/tests/pipes/test_scancode.py +++ b/scanpipe/tests/pipes/test_scancode.py @@ -43,6 +43,7 @@ from scanpipe.pipes import output from scanpipe.pipes import scancode from scanpipe.pipes.input import copy_input +from scanpipe.tests import FIXTURES_REGEN from scanpipe.tests import license_policies_index scanpipe_app = apps.get_app_config("scanpipe") @@ -428,17 +429,27 @@ def test_scanpipe_pipes_scancode_run_scancode_cli_options(self, mock_run_command scancode.run_scancode(location=None, output_file=None, options=[]) self.assertIn("--processes 10", mock_run_command.call_args[0][0]) - def test_scanpipe_pipes_scancode_make_results_summary(self): - project = Project.objects.create(name="Analysis") - scan_results_location = self.data_location / "is-npm-1.0.0_scan_package.json" - summary = scancode.make_results_summary(project, scan_results_location) - self.assertEqual(10, len(summary.keys())) + def test_scanpipe_pipes_scancode_make_results_summary(self, regen=FIXTURES_REGEN): + # Run the scan_package pipeline to have a proper DB and local files setup + pipeline_name = "scan_package" + project1 = Project.objects.create(name="Analysis") - scan_results_location = ( - self.data_location / "multiple-is-npm-1.0.0_scan_package.json" - ) - summary = scancode.make_results_summary(project, scan_results_location) - self.assertEqual(10, len(summary.keys())) + input_location = self.data_location / "is-npm-1.0.0.tgz" + project1.copy_input_from(input_location) + + run = project1.add_pipeline(pipeline_name) + pipeline = run.make_pipeline_instance() + exitcode, out = pipeline.execute() + self.assertEqual(0, exitcode, msg=out) + + scan_output_location = project1.get_latest_output("scancode") + summary = scancode.make_results_summary(project1, scan_output_location) + + expected_location = self.data_location / "scancode/is-npm-1.0.0_summary.json" + if regen: + expected_location.write_text(json.dumps(summary, indent=2)) + + self.assertJSONEqual(expected_location.read_text(), summary) def test_scanpipe_pipes_scancode_load_inventory_from_toolkit_scan(self): project = Project.objects.create(name="Analysis") diff --git a/scanpipe/tests/test_pipelines.py b/scanpipe/tests/test_pipelines.py index a5ecf114a4..3b457d39b9 100644 --- a/scanpipe/tests/test_pipelines.py +++ b/scanpipe/tests/test_pipelines.py @@ -381,7 +381,7 @@ def test_scanpipe_scan_package_pipeline_integration_multiple_packages_test(self) scancode_file = project1.get_latest_output(filename="scancode") expected_file = self.data_location / "multiple-is-npm-1.0.0_scan_package.json" # Do not override the regen as this file is generated in regen_test_data - self.assertPipelineResultEqual(expected_file, scancode_file, regen=1) + self.assertPipelineResultEqual(expected_file, scancode_file, regen=False) summary_file = project1.get_latest_output(filename="summary") expected_file = ( From 49a9eb6171489367811a779003ca9810164bb8eb Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Mon, 15 May 2023 18:31:08 +0400 Subject: [PATCH 41/53] Enhance unit tests #569 Signed-off-by: Thomas Druez --- .../tests/data/scancode/is-npm-1.0.0_summary.json | 6 +++--- scanpipe/tests/pipes/test_scancode.py | 8 +++++++- scanpipe/tests/test_api.py | 11 +++++++++-- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/scanpipe/tests/data/scancode/is-npm-1.0.0_summary.json b/scanpipe/tests/data/scancode/is-npm-1.0.0_summary.json index c7df30a9fa..5dc6561f56 100644 --- a/scanpipe/tests/data/scancode/is-npm-1.0.0_summary.json +++ b/scanpipe/tests/data/scancode/is-npm-1.0.0_summary.json @@ -184,7 +184,7 @@ } ], "for_packages": [ - "pkg:npm/is-npm@1.0.0?uuid=3fa5ecb6-859b-4c19-a1cf-a567ec45fc54" + "pkg:npm/is-npm@1.0.0?uuid=ba110d49-b6f2-4c86-8d89-a6fd34838ca8" ], "emails": [ { @@ -273,7 +273,7 @@ "authors": [], "package_data": [], "for_packages": [ - "pkg:npm/is-npm@1.0.0?uuid=3fa5ecb6-859b-4c19-a1cf-a567ec45fc54" + "pkg:npm/is-npm@1.0.0?uuid=ba110d49-b6f2-4c86-8d89-a6fd34838ca8" ], "emails": [], "urls": [ @@ -376,7 +376,7 @@ "notice_text": "", "source_packages": [], "extra_data": {}, - "package_uid": "pkg:npm/is-npm@1.0.0?uuid=3fa5ecb6-859b-4c19-a1cf-a567ec45fc54", + "package_uid": "pkg:npm/is-npm@1.0.0?uuid=ba110d49-b6f2-4c86-8d89-a6fd34838ca8", "datasource_id": "", "file_references": [], "missing_resources": [], diff --git a/scanpipe/tests/pipes/test_scancode.py b/scanpipe/tests/pipes/test_scancode.py index 69dbfebe5f..45cc1cbb37 100644 --- a/scanpipe/tests/pipes/test_scancode.py +++ b/scanpipe/tests/pipes/test_scancode.py @@ -442,7 +442,13 @@ def test_scanpipe_pipes_scancode_make_results_summary(self, regen=FIXTURES_REGEN exitcode, out = pipeline.execute() self.assertEqual(0, exitcode, msg=out) - scan_output_location = project1.get_latest_output("scancode") + # Forcing package_uid for proper assertion with expected results + package = project1.discoveredpackages.get() + uuid = "ba110d49-b6f2-4c86-8d89-a6fd34838ca8" + package.package_uid = f"pkg:npm/is-npm@1.0.0?uuid={uuid}" + package.save() + + scan_output_location = self.data_location / "is-npm-1.0.0_scan_package.json" summary = scancode.make_results_summary(project1, scan_output_location) expected_location = self.data_location / "scancode/is-npm-1.0.0_summary.json" diff --git a/scanpipe/tests/test_api.py b/scanpipe/tests/test_api.py index 163d6c09c5..786ef5668d 100644 --- a/scanpipe/tests/test_api.py +++ b/scanpipe/tests/test_api.py @@ -367,8 +367,15 @@ def test_scanpipe_api_project_action_resources(self): ) self.assertEqual("", resource["compliance_alert"]) - self.resource1.compliance_alert = CodebaseResource.Compliance.ERROR - self.resource1.save() + + # Using update() to bypass the `compute_compliance_alert` call triggered + # when using save(). + # The purpose of this test is not to assert on the compliance_alert computation + # but rather to test the render in the REST API. + CodebaseResource.objects.filter(id=self.resource1.id).update( + compliance_alert=CodebaseResource.Compliance.ERROR + ) + response = self.csrf_client.get(url) self.assertEqual("error", response.data["results"][0]["compliance_alert"]) From c4e277fa2fab950e474171fa2101c1450b929a03 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Mon, 15 May 2023 18:52:21 +0400 Subject: [PATCH 42/53] Ensure the policies index is empty #569 Signed-off-by: Thomas Druez --- .../data/scancode/is-npm-1.0.0_summary.json | 18 ++---------------- scanpipe/tests/pipes/test_scancode.py | 2 ++ 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/scanpipe/tests/data/scancode/is-npm-1.0.0_summary.json b/scanpipe/tests/data/scancode/is-npm-1.0.0_summary.json index 5dc6561f56..47470d7d01 100644 --- a/scanpipe/tests/data/scancode/is-npm-1.0.0_summary.json +++ b/scanpipe/tests/data/scancode/is-npm-1.0.0_summary.json @@ -61,13 +61,6 @@ "detected_license_expression_spdx": "MIT", "license_detections": [ { - "policy": { - "icon": "far fa-thumbs-up", - "label": "Recommended License", - "color_code": "#002fff", - "license_key": "mit", - "compliance_alert": "" - }, "matches": [ { "score": 100.0, @@ -89,7 +82,7 @@ ], "license_clues": [], "percentage_of_license_text": 3.33, - "compliance_alert": "ok", + "compliance_alert": "", "copyrights": [], "holders": [], "authors": [], @@ -227,13 +220,6 @@ "detected_license_expression_spdx": "MIT", "license_detections": [ { - "policy": { - "icon": "far fa-thumbs-up", - "label": "Recommended License", - "color_code": "#002fff", - "license_key": "mit", - "compliance_alert": "" - }, "matches": [ { "score": 100.0, @@ -255,7 +241,7 @@ ], "license_clues": [], "percentage_of_license_text": 2.78, - "compliance_alert": "ok", + "compliance_alert": "", "copyrights": [ { "end_line": 30, diff --git a/scanpipe/tests/pipes/test_scancode.py b/scanpipe/tests/pipes/test_scancode.py index 45cc1cbb37..6ce9a9e57a 100644 --- a/scanpipe/tests/pipes/test_scancode.py +++ b/scanpipe/tests/pipes/test_scancode.py @@ -430,6 +430,8 @@ def test_scanpipe_pipes_scancode_run_scancode_cli_options(self, mock_run_command self.assertIn("--processes 10", mock_run_command.call_args[0][0]) def test_scanpipe_pipes_scancode_make_results_summary(self, regen=FIXTURES_REGEN): + # Ensure the policies index is empty to avoid any side effect on results + scanpipe_app.license_policies_index = None # Run the scan_package pipeline to have a proper DB and local files setup pipeline_name = "scan_package" project1 = Project.objects.create(name="Analysis") From 932046f00ffbac52442b5d55673600eb65f77254 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Mon, 15 May 2023 20:50:25 +0400 Subject: [PATCH 43/53] Store AttributeError as ProjectError during data migration #569 Signed-off-by: Thomas Druez --- .../migrations/0031_scancode_toolkit_v32_data_updates.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py b/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py index 3d03a48469..111969ae93 100644 --- a/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py +++ b/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py @@ -68,13 +68,17 @@ def compute_resource_detected_license_expression(apps, schema_editor): unsaved_objects = [] for index, resource in enumerate(iterator, start=1): combined_expression = str(combine_expressions(resource.license_expressions)) - # TODO: # gpl-2.0 OR broadcom-linking-unmodified OR proprietary-license # build_spdx_license_expression("broadcom-linking-unmodified") # AttributeError: 'LicenseSymbol' object has no attribute 'wrapped' try: license_expression_spdx = build_spdx_license_expression(combined_expression) - except AttributeError: + except AttributeError as error: + resource.project.add_error( + error=error, + model=resource.__class__, + details={"combined_expression": combined_expression} + ) continue resource.detected_license_expression = combined_expression From d01a9e198aeace9bd49385a046fca8df4b68419c Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Tue, 16 May 2023 17:18:02 +0400 Subject: [PATCH 44/53] Use proper model creation for ProjectError in data migration #569 Signed-off-by: Thomas Druez --- .../migrations/0031_scancode_toolkit_v32_data_updates.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py b/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py index 111969ae93..072e16f7c9 100644 --- a/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py +++ b/scanpipe/migrations/0031_scancode_toolkit_v32_data_updates.py @@ -55,6 +55,7 @@ def compute_resource_detected_license_expression(apps, schema_editor): return CodebaseResource = apps.get_model("scanpipe", "CodebaseResource") + ProjectError = apps.get_model("scanpipe", "ProjectError") queryset = CodebaseResource.objects.filter(~Q(license_expressions=[])).only( "license_expressions" ) @@ -74,8 +75,9 @@ def compute_resource_detected_license_expression(apps, schema_editor): try: license_expression_spdx = build_spdx_license_expression(combined_expression) except AttributeError as error: - resource.project.add_error( - error=error, + ProjectError.objects.create( + project=resource.project, + message=str(error), model=resource.__class__, details={"combined_expression": combined_expression} ) From 5dc949965e56f6799747ccbca4cbcecb414a9454 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Tue, 16 May 2023 20:12:59 +0400 Subject: [PATCH 45/53] Refactored the compliance alert implementation #569 Signed-off-by: Thomas Druez --- scanpipe/models.py | 50 +++++++------- scanpipe/tests/pipes/test_scancode.py | 37 ----------- scanpipe/tests/test_models.py | 93 +++------------------------ scanpipe/tests/test_views.py | 21 ------ scanpipe/views.py | 57 ++++++++-------- 5 files changed, 61 insertions(+), 197 deletions(-) diff --git a/scanpipe/models.py b/scanpipe/models.py index 65e459f360..1969fec069 100644 --- a/scanpipe/models.py +++ b/scanpipe/models.py @@ -68,6 +68,7 @@ from cyclonedx.model import component as cyclonedx_component from formattedcode.output_cyclonedx import CycloneDxExternalRef from licensedcode.cache import build_spdx_license_expression +from licensedcode.cache import get_licensing from packageurl import PackageURL from packageurl import normalize_qualifiers from packageurl.contrib.django.models import PackageURLMixin @@ -1739,17 +1740,10 @@ def save(self, codebase=None, *args, **kwargs): if scanpipe_app.policies_enabled: loaded_license_expression = getattr(self, "_loaded_license_expression", []) if self.detected_license_expression != loaded_license_expression: - self.inject_licenses_policy(scanpipe_app.license_policies_index) self.compliance_alert = self.compute_compliance_alert() super().save(*args, **kwargs) - def inject_licenses_policy(self, policies_index): - """Inject license policies from the `policies_index` into the licenses field.""" - for detection_data in self.license_detections: - license_expression = detection_data.get("license_expression") - detection_data["policy"] = policies_index.get(license_expression, None) - @property def location_path(self): """Return the location of the resource as a Path instance.""" @@ -1779,29 +1773,33 @@ def is_symlink(self): def compute_compliance_alert(self): """Compute and return the compliance_alert value from the licenses policies.""" - if not self.license_detections: + if not self.detected_license_expression: return "" - ok = self.Compliance.OK - error = self.Compliance.ERROR - warning = self.Compliance.WARNING - missing = self.Compliance.MISSING - alerts = [] - for detection_data in self.license_detections: - policy = detection_data.get("policy") - if policy: - alerts.append(policy.get("compliance_alert") or ok) + policy_index = scanpipe_app.license_policies_index + + licensing = get_licensing() + parsed = licensing.parse(self.detected_license_expression, simple=True) + license_keys = licensing.license_keys(parsed) + + for license_key in license_keys: + if policy := policy_index.get(license_key): + alerts.append(policy.get("compliance_alert") or self.Compliance.OK) else: - alerts.append(missing) - - if error in alerts: - return error - elif warning in alerts: - return warning - elif missing in alerts: - return missing - return ok + alerts.append(self.Compliance.MISSING) + + compliance_ordered_by_severity = [ + self.Compliance.ERROR, + self.Compliance.WARNING, + self.Compliance.MISSING, + ] + + for compliance_severity in compliance_ordered_by_severity: + if compliance_severity in alerts: + return compliance_severity + + return self.Compliance.OK def parent_path(self): """Return the parent path for this CodebaseResource or None.""" diff --git a/scanpipe/tests/pipes/test_scancode.py b/scanpipe/tests/pipes/test_scancode.py index 6ce9a9e57a..e0662d3887 100644 --- a/scanpipe/tests/pipes/test_scancode.py +++ b/scanpipe/tests/pipes/test_scancode.py @@ -44,7 +44,6 @@ from scanpipe.pipes import scancode from scanpipe.pipes.input import copy_input from scanpipe.tests import FIXTURES_REGEN -from scanpipe.tests import license_policies_index scanpipe_app = apps.get_app_config("scanpipe") from_docker_image = os.environ.get("FROM_DOCKER_IMAGE") @@ -371,42 +370,6 @@ def test_scanpipe_pipes_scancode_virtual_codebase(self): self.assertEqual(1, DiscoveredPackage.objects.count()) self.assertEqual(1, DiscoveredDependency.objects.count()) - def test_scanpipe_pipes_scancode_create_codebase_resources_inject_policy(self): - project = Project.objects.create(name="asgiref") - # We are using `asgiref-3.3.0_toolkit_scan.json` instead of - # `asgiref-3.3.0_scanpipe_output.json` because it is not exactly the same - # format as a scancode-toolkit scan - input_location = self.data_location / "asgiref-3.3.0_toolkit_scan.json" - virtual_codebase = scancode.get_virtual_codebase(project, input_location) - - scanpipe_app.license_policies_index = license_policies_index - scancode.create_discovered_packages(project, virtual_codebase) - scancode.create_codebase_resources(project, virtual_codebase) - scancode.create_discovered_dependencies( - project, virtual_codebase, strip_datafile_path_root=True - ) - resources = project.codebaseresources - - resource1 = resources.get(path__endswith="asgiref-3.3.0.dist-info/LICENSE") - self.assertEqual( - "bsd-new", resource1.license_detections[0]["license_expression"] - ) - self.assertNotIn("bsd-new", license_policies_index) - self.assertIsNone(resource1.license_detections[0]["policy"]) - - resource2 = resources.get(path__endswith="asgiref/timeout.py") - self.assertEqual( - "apache-2.0", resource2.license_detections[0]["license_expression"] - ) - self.assertIn("apache-2.0", license_policies_index) - expected = { - "label": "Approved License", - "color_code": "#008000", - "license_key": "apache-2.0", - "compliance_alert": "", - } - self.assertEqual(expected, resource2.license_detections[0]["policy"]) - def test_scanpipe_pipes_scancode_run_scancode(self): project = Project.objects.create(name="name with space") exitcode, output = scancode.run_scancode( diff --git a/scanpipe/tests/test_models.py b/scanpipe/tests/test_models.py index 8687ce8291..1a0cd0cd82 100644 --- a/scanpipe/tests/test_models.py +++ b/scanpipe/tests/test_models.py @@ -850,81 +850,6 @@ def test_scanpipe_codebase_resource_model_file_content(self): line_count = len(resource.file_content.split("\n")) self.assertEqual(101, line_count) - def test_scanpipe_pipes_codebase_resources_inject_licenses_policy(self): - resource = CodebaseResource( - license_detections=[ - {"license_expression": "mit"}, - {"license_expression": "apache-2.0"}, - {"license_expression": "gpl-3.0"}, - ] - ) - - expected = [ - {"license_expression": "mit", "policy": None}, - { - "license_expression": "apache-2.0", - "policy": { - "color_code": "#008000", - "compliance_alert": "", - "label": "Approved License", - "license_key": "apache-2.0", - }, - }, - { - "license_expression": "gpl-3.0", - "policy": { - "color_code": "#c83025", - "compliance_alert": "error", - "label": "Prohibited License", - "license_key": "gpl-3.0", - }, - }, - ] - - resource.inject_licenses_policy(license_policies_index) - self.assertEqual(expected, resource.license_detections) - - def test_scanpipe_pipes_scancode_codebase_resources_inject_policy_on_save(self): - scanpipe_app.license_policies_index = license_policies_index - - resource = CodebaseResource.objects.create( - project=self.project1, - path="file", - license_detections=[{"license_expression": "gpl-3.0"}], - ) - expected = [ - { - "license_expression": "gpl-3.0", - "policy": { - "color_code": "#c83025", - "compliance_alert": "error", - "label": "Prohibited License", - "license_key": "gpl-3.0", - }, - } - ] - self.assertEqual(expected, resource.license_detections) - - resource.license_detections = [{"license_expression": "not-in-index"}] - resource.save() - expected = [{"license_expression": "not-in-index", "policy": None}] - self.assertEqual(expected, resource.license_detections) - - resource.license_detections = [{"license_expression": "apache-2.0"}] - resource.save() - expected = [ - { - "license_expression": "apache-2.0", - "policy": { - "color_code": "#008000", - "compliance_alert": "", - "label": "Approved License", - "license_key": "apache-2.0", - }, - } - ] - self.assertEqual(expected, resource.license_detections) - def test_scanpipe_codebase_resource_model_compliance_alert(self): scanpipe_app.license_policies_index = license_policies_index resource = CodebaseResource.objects.create(project=self.project1, path="file") @@ -932,36 +857,36 @@ def test_scanpipe_codebase_resource_model_compliance_alert(self): license_expression = "bsd-new" self.assertNotIn(license_expression, scanpipe_app.license_policies_index) - resource.license_detections = [{"license_expression": license_expression}] + resource.detected_license_expression = license_expression resource.save() self.assertEqual("missing", resource.compliance_alert) license_expression = "apache-2.0" self.assertIn(license_expression, scanpipe_app.license_policies_index) - resource.license_detections = [{"license_expression": license_expression}] + resource.detected_license_expression = license_expression resource.save() self.assertEqual("ok", resource.compliance_alert) license_expression = "mpl-2.0" self.assertIn(license_expression, scanpipe_app.license_policies_index) - resource.license_detections = [{"license_expression": license_expression}] + resource.detected_license_expression = license_expression resource.save() self.assertEqual("warning", resource.compliance_alert) license_expression = "gpl-3.0" self.assertIn(license_expression, scanpipe_app.license_policies_index) - resource.license_detections = [{"license_expression": license_expression}] + resource.detected_license_expression = license_expression resource.save() self.assertEqual("error", resource.compliance_alert) - resource.license_detections = [ - {"license_expression": "apache-2.0"}, - {"license_expression": "mpl-2.0"}, - {"license_expression": "gpl-3.0"}, - ] + license_expression = "apache-2.0 AND mpl-2.0 OR gpl-3.0" + resource.detected_license_expression = license_expression resource.save() self.assertEqual("error", resource.compliance_alert) + # Reset the index value + scanpipe_app.license_policies_index = None + def test_scanpipe_scan_fields_model_mixin_methods(self): expected = [ "detected_license_expression", diff --git a/scanpipe/tests/test_views.py b/scanpipe/tests/test_views.py index 69cb95a879..3c3ddb735e 100644 --- a/scanpipe/tests/test_views.py +++ b/scanpipe/tests/test_views.py @@ -449,27 +449,6 @@ def test_scanpipe_views_run_status_view(self): expected = 'Stopped' self.assertContains(response, expected) - def test_scanpipe_views_codebase_resource_details_annotations_missing_policy(self): - resource1 = CodebaseResource.objects.create( - project=self.project1, - path="resource1", - license_detections=[ - { - "license_expression": "key", - "policy": None, - "start_line": 1, - "end_line": 2, - } - ], - ) - url = resource1.get_absolute_url() - - response = self.client.get(url) - expected = ( - '{"start_line": 1, "end_line": 2, "text": null, "className": "ace_info"}' - ) - self.assertContains(response, expected) - def test_scanpipe_views_codebase_relation_list_view_count(self): url = reverse("project_relations", args=[self.project1.uuid]) diff --git a/scanpipe/views.py b/scanpipe/views.py index 30baa3e81c..6da1f58510 100644 --- a/scanpipe/views.py +++ b/scanpipe/views.py @@ -1119,59 +1119,58 @@ class CodebaseResourceDetailsView( } @staticmethod - def get_annotation_text(entry, field_name, value_key): - """ - Get the license_expression until the data structure is updated on the - ScanCode-toolkit side. - https://github.com/nexB/scancode-results-analyzer/blob/6c132bc20153d5c96929c - f378bd0f06d83db9005/src/results_analyze/analyzer_plugin.py#L131-L198 - """ - if field_name == "license_detections": - return entry.get("matched_rule", {}).get("license_expression") - return entry.get(value_key) - - def get_annotations(self, field_name, value_key="value"): + def get_annotations(entries, value_key): annotations = [] + annotation_type = "info" - for entry in getattr(self.object, field_name): - annotation_type = "info" - - # Customize the annotation icon based on the policy compliance_alert - policy = entry.get("policy") - if policy: - compliance_alert = policy.get("compliance_alert", None) - annotation_type = self.annotation_types.get(compliance_alert) - + for entry in entries: annotations.append( { "start_line": entry.get("start_line"), "end_line": entry.get("end_line"), - "text": self.get_annotation_text(entry, field_name, value_key), + "text": entry.get(value_key), "className": f"ace_{annotation_type}", } ) return annotations + def get_license_annotations(self, field_name): + annotations = [] + + for entry in getattr(self.object, field_name): + matches = entry.get("matches", []) + annotations.extend(self.get_annotations(matches, "license_expression")) + + return annotations + def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) + resource = self.object try: - context["file_content"] = self.object.file_content + context["file_content"] = resource.file_content except OSError: context["missing_file_content"] = True message = "WARNING: This resource is not available on disk." messages.warning(self.request, message) + license_annotations = self.get_license_annotations("license_detections") context["detected_values"] = { - "licenses": self.get_annotations("license_detections"), - "copyrights": self.get_annotations("copyrights"), - "holders": self.get_annotations("holders"), - "authors": self.get_annotations("authors"), - "emails": self.get_annotations("emails", value_key="email"), - "urls": self.get_annotations("urls", value_key="url"), + "licenses": license_annotations, } + fields = [ + ("copyrights", "copyright"), + ("holders", "holder"), + ("authors", "author"), + ("emails", "email"), + ("urls", "url"), + ] + for field_name, value_key in fields: + annotations = self.get_annotations(getattr(resource, field_name), value_key) + context["detected_values"][field_name] = annotations + return context From 62549d61f9a65f2f8034ca4a778b3877a569b29e Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Tue, 16 May 2023 20:52:31 +0400 Subject: [PATCH 46/53] Fix problematic path in expected files #569 Signed-off-by: Thomas Druez --- scanpipe/tests/data/asgiref-3.3.0_fixtures.json | 2 +- scanpipe/tests/data/asgiref-3.3.0_toolkit_scan.json | 4 ++-- scanpipe/tests/data/asgiref-3.3.0_walk_test_fixtures.json | 2 +- scanpipe/tests/data/scancode/package_assembly_codebase.json | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/scanpipe/tests/data/asgiref-3.3.0_fixtures.json b/scanpipe/tests/data/asgiref-3.3.0_fixtures.json index 86569a1d5e..0224c20eb8 100644 --- a/scanpipe/tests/data/asgiref-3.3.0_fixtures.json +++ b/scanpipe/tests/data/asgiref-3.3.0_fixtures.json @@ -6,7 +6,7 @@ "extra_data": {}, "created_date": "2023-05-08T04:34:00.013Z", "name": "asgiref", - "work_directory": "/private/var/folders/ph/tpf7js_n0r554mngmvykl7lm0000gn/T/tmph8hp21h7/projects/asgiref-cbd609b2", + "work_directory": "/tmp/tmp1kvnzy78/projects/asgiref-4c7f2e2e", "input_sources": { "asgiref-3.3.0-py3-none-any.whl": "-" }, diff --git a/scanpipe/tests/data/asgiref-3.3.0_toolkit_scan.json b/scanpipe/tests/data/asgiref-3.3.0_toolkit_scan.json index 47667421a3..743f688c8e 100644 --- a/scanpipe/tests/data/asgiref-3.3.0_toolkit_scan.json +++ b/scanpipe/tests/data/asgiref-3.3.0_toolkit_scan.json @@ -5,11 +5,11 @@ "tool_version": "32.0.0rc4", "options": { "input": [ - "/private/var/folders/ph/tpf7js_n0r554mngmvykl7lm0000gn/T/tmph8hp21h7/projects/asgiref-cbd609b2/codebase" + "/tmp/tmp1kvnzy78/projects/asgiref-4c7f2e2e/codebase" ], "--copyright": true, "--info": true, - "--json-pp": "/Volumes/nexB/repos/scancode.io/scanpipe/tests/data/asgiref-3.3.0_toolkit_scan.json", + "--json-pp": "scancode.io/scanpipe/tests/data/asgiref-3.3.0_toolkit_scan.json", "--license": true, "--package": true, "--processes": "-1", diff --git a/scanpipe/tests/data/asgiref-3.3.0_walk_test_fixtures.json b/scanpipe/tests/data/asgiref-3.3.0_walk_test_fixtures.json index b3f0dde29e..59657ffe6b 100644 --- a/scanpipe/tests/data/asgiref-3.3.0_walk_test_fixtures.json +++ b/scanpipe/tests/data/asgiref-3.3.0_walk_test_fixtures.json @@ -6,7 +6,7 @@ "extra_data": {}, "created_date": "2023-05-08T04:34:00.013Z", "name": "asgiref", - "work_directory": "/private/var/folders/ph/tpf7js_n0r554mngmvykl7lm0000gn/T/tmph8hp21h7/projects/asgiref-cbd609b2", + "work_directory": "/tmp/tmp1kvnzy78/projects/asgiref-4c7f2e2e", "input_sources": { "asgiref-3.3.0-py3-none-any.whl": "-" }, diff --git a/scanpipe/tests/data/scancode/package_assembly_codebase.json b/scanpipe/tests/data/scancode/package_assembly_codebase.json index 5f604b3c48..272763e895 100644 --- a/scanpipe/tests/data/scancode/package_assembly_codebase.json +++ b/scanpipe/tests/data/scancode/package_assembly_codebase.json @@ -5,10 +5,10 @@ "tool_version": "32.0.0rc4", "options": { "input": [ - "/private/var/folders/ph/tpf7js_n0r554mngmvykl7lm0000gn/T/tmpy38obltd/projects/package_assembly-62319862/codebase/package_assembly_codebase.tar.gz-extract" + "/tmp/tmp1kvnzy78/projects/asgiref-4c7f2e2e/codebase/package_assembly_codebase.tar.gz-extract" ], "--info": true, - "--json-pp": "/Volumes/nexB/repos/scancode.io/scanpipe/tests/data/scancode/package_assembly_codebase.json", + "--json-pp": "scancode.io/scanpipe/tests/data/scancode/package_assembly_codebase.json", "--package": true, "--processes": "-1", "--verbose": true From acc96caf6ed86a5b5fc04865c42aafc36c3f82e3 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Tue, 16 May 2023 20:57:28 +0400 Subject: [PATCH 47/53] Add debug statement #569 Signed-off-by: Thomas Druez --- scanpipe/tests/pipes/test_scancode.py | 1 + setup.cfg | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/scanpipe/tests/pipes/test_scancode.py b/scanpipe/tests/pipes/test_scancode.py index e0662d3887..4d451b937a 100644 --- a/scanpipe/tests/pipes/test_scancode.py +++ b/scanpipe/tests/pipes/test_scancode.py @@ -417,6 +417,7 @@ def test_scanpipe_pipes_scancode_make_results_summary(self, regen=FIXTURES_REGEN summary = scancode.make_results_summary(project1, scan_output_location) expected_location = self.data_location / "scancode/is-npm-1.0.0_summary.json" + print(json.dumps(summary, indent=2)) if regen: expected_location.write_text(json.dumps(summary, indent=2)) diff --git a/setup.cfg b/setup.cfg index 83f0fa99cd..d73da070f9 100644 --- a/setup.cfg +++ b/setup.cfg @@ -71,7 +71,7 @@ install_requires = # Docker container-inspector==32.0.1 # ScanCode-toolkit - scancode-toolkit[packages]==v32.0.0rc4 + scancode-toolkit[packages]==32.0.0rc4 extractcode[full]==31.0.0 commoncode==31.0.2 # FetchCode From ab8df204737bb293110729f356eff9d888768456 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Tue, 16 May 2023 21:14:31 +0400 Subject: [PATCH 48/53] Fix failing test expected file #569 Signed-off-by: Thomas Druez --- scanpipe/tests/data/scancode/is-npm-1.0.0_summary.json | 4 ++-- scanpipe/tests/pipes/test_scancode.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scanpipe/tests/data/scancode/is-npm-1.0.0_summary.json b/scanpipe/tests/data/scancode/is-npm-1.0.0_summary.json index 47470d7d01..b96a04270d 100644 --- a/scanpipe/tests/data/scancode/is-npm-1.0.0_summary.json +++ b/scanpipe/tests/data/scancode/is-npm-1.0.0_summary.json @@ -50,7 +50,7 @@ "sha256": "522879426298e078881de533b9b3a82fa3bece1336a84bddacf4620008b5d0a3", "sha512": "", "mime_type": "application/json", - "file_type": "JSON text data", + "file_type": "JSON data", "programming_language": "", "is_binary": false, "is_text": true, @@ -209,7 +209,7 @@ "sha256": "e98b263545fe62a00c73b57412cbdbcd0792e013a76f9c88342623ab5e8467c1", "sha512": "", "mime_type": "text/plain", - "file_type": "Unicode text, UTF-8 text", + "file_type": "UTF-8 Unicode text", "programming_language": "", "is_binary": false, "is_text": true, diff --git a/scanpipe/tests/pipes/test_scancode.py b/scanpipe/tests/pipes/test_scancode.py index 4d451b937a..b92612fb6e 100644 --- a/scanpipe/tests/pipes/test_scancode.py +++ b/scanpipe/tests/pipes/test_scancode.py @@ -392,6 +392,7 @@ def test_scanpipe_pipes_scancode_run_scancode_cli_options(self, mock_run_command scancode.run_scancode(location=None, output_file=None, options=[]) self.assertIn("--processes 10", mock_run_command.call_args[0][0]) + @skipIf(sys.platform != "linux", "file_type inconsistent across OS.") def test_scanpipe_pipes_scancode_make_results_summary(self, regen=FIXTURES_REGEN): # Ensure the policies index is empty to avoid any side effect on results scanpipe_app.license_policies_index = None @@ -417,7 +418,6 @@ def test_scanpipe_pipes_scancode_make_results_summary(self, regen=FIXTURES_REGEN summary = scancode.make_results_summary(project1, scan_output_location) expected_location = self.data_location / "scancode/is-npm-1.0.0_summary.json" - print(json.dumps(summary, indent=2)) if regen: expected_location.write_text(json.dumps(summary, indent=2)) From 7b54a4d7b305bfcfc7c1b80e09bac702b2bd2aab Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Wed, 17 May 2023 11:28:36 +0400 Subject: [PATCH 49/53] Improve performances of the charts view (25x faster) #569 Signed-off-by: Thomas Druez --- scanpipe/templates/scanpipe/base.html | 1 + .../templates/scanpipe/project_charts.html | 69 +++++------ scanpipe/tests/test_views.py | 31 ++++- scanpipe/views.py | 113 ++++++++---------- 4 files changed, 110 insertions(+), 104 deletions(-) diff --git a/scanpipe/templates/scanpipe/base.html b/scanpipe/templates/scanpipe/base.html index b06fc41aa8..533045df86 100644 --- a/scanpipe/templates/scanpipe/base.html +++ b/scanpipe/templates/scanpipe/base.html @@ -40,6 +40,7 @@ #project-extra-data pre {background-color: initial; color: initial; padding: initial; white-space: pre-wrap; word-break: break-all;} #inputs-panel .panel-block.dropdown:hover {background-color: #f5f5f5;} #inputs-panel .dropdown-menu {width: 85%;} + a.panel-block {word-break: break-all;} .is-wider .dropdown-menu {min-width: 18rem;} .is-tooltip .dropdown-content {background-color: #363636;} .is-tooltip .dropdown-item {font-weight: normal; color: #fff;} diff --git a/scanpipe/templates/scanpipe/project_charts.html b/scanpipe/templates/scanpipe/project_charts.html index 940a04949d..203ec55b18 100644 --- a/scanpipe/templates/scanpipe/project_charts.html +++ b/scanpipe/templates/scanpipe/project_charts.html @@ -2,7 +2,7 @@ {% if project.package_count %}


-

+

Discovered Packages {{ project.package_count|intcomma }}

@@ -18,13 +18,13 @@

{% if project.dependency_count %}
-

+

Discovered Dependencies {{ project.dependency_count|intcomma }}

-
+
@@ -71,24 +71,18 @@

{% endif %} {% block scripts %} - {% if project.file_count %} - {{ programming_languages|json_script:"programming_languages" }} - {{ mime_types|json_script:"mime_types" }} - {{ holders|json_script:"holders" }} - {{ copyrights|json_script:"copyrights" }} - {{ file_license_expressions|json_script:"file_license_expressions" }} - {{ file_compliance_alert|json_script:"file_compliance_alert" }} - {% endif %} - {% if project.package_count %} - {{ package_licenses|json_script:"package_licenses" }} - {{ package_types|json_script:"package_types" }} - {% endif %} - {% if project.dependency_count %} - {{ dependency_package_type|json_script:"dependency_package_type" }} - {{ dependency_is_runtime|json_script:"dependency_is_runtime" }} - {{ dependency_is_optional|json_script:"dependency_is_optional" }} - {{ dependency_is_resolved|json_script:"dependency_is_resolved" }} - {% endif %} + {{ file_programming_language|json_script:"file_programming_language" }} + {{ file_mime_type|json_script:"file_mime_type" }} + {{ file_holders|json_script:"file_holders" }} + {{ file_copyrights|json_script:"file_copyrights" }} + {{ file_detected_license_expression|json_script:"file_detected_license_expression" }} + {{ file_compliance_alert|json_script:"file_compliance_alert" }} + {{ package_declared_license_expression|json_script:"package_declared_license_expression" }} + {{ package_type|json_script:"package_type" }} + {{ dependency_type|json_script:"dependency_type" }} + {{ dependency_is_runtime|json_script:"dependency_is_runtime" }} + {{ dependency_is_optional|json_script:"dependency_is_optional" }} + {{ dependency_is_resolved|json_script:"dependency_is_resolved" }} {% endblock %} \ No newline at end of file diff --git a/scanpipe/tests/test_views.py b/scanpipe/tests/test_views.py index 3c3ddb735e..410d27902c 100644 --- a/scanpipe/tests/test_views.py +++ b/scanpipe/tests/test_views.py @@ -33,7 +33,6 @@ from scanpipe.models import Project from scanpipe.pipes import make_relation from scanpipe.pipes.input import copy_inputs -from scanpipe.tests import license_policies_index from scanpipe.tests import make_resource_file from scanpipe.views import ProjectDetailView @@ -212,25 +211,47 @@ def test_scanpipe_views_project_details_add_pipelines(self): self.assertEqual("docker", run.pipeline_name) self.assertIsNone(run.task_start_date) + def test_scanpipe_views_project_details_charts_view(self): + url = reverse("project_charts", args=[self.project1.uuid]) + + with self.assertNumQueries(9): + response = self.client.get(url) + + self.assertNotContains(response, 'id="package-charts"') + self.assertNotContains(response, 'id="dependency-charts"') + self.assertNotContains(response, 'id="resource-charts-charts"') + + CodebaseResource.objects.create( + project=self.project1, + programming_language="Python", + type=CodebaseResource.Type.FILE, + ) + + with self.assertNumQueries(12): + response = self.client.get(url) + self.assertContains(response, '{"Python": 1}') + def test_scanpipe_views_project_details_charts_compliance_alert(self): url = reverse("project_charts", args=[self.project1.uuid]) expected = 'id="compliance_alert_chart"' - scanpipe_app.license_policies_index = None response = self.client.get(url) self.assertNotContains(response, expected) - scanpipe_app.license_policies_index = license_policies_index response = self.client.get(url) self.assertNotContains(response, expected) - CodebaseResource.objects.create( + resource = CodebaseResource.objects.create( project=self.project1, - compliance_alert="error", type=CodebaseResource.Type.FILE, ) + CodebaseResource.objects.filter(id=resource.id).update( + compliance_alert=CodebaseResource.Compliance.ERROR + ) + response = self.client.get(url) self.assertContains(response, expected) + self.assertContains(response, '{"error": 1}') def test_scanpipe_views_project_details_scan_summary_panels(self): url = self.project1.get_absolute_url() diff --git a/scanpipe/views.py b/scanpipe/views.py index 6da1f58510..d537052beb 100644 --- a/scanpipe/views.py +++ b/scanpipe/views.py @@ -610,9 +610,15 @@ class ProjectChartsView(ConditionalLoginRequired, ProjectViewMixin, generic.Deta @staticmethod def get_summary(values_list, limit=settings.SCANCODEIO_MOST_COMMON_LIMIT): - most_common = dict(Counter(values_list).most_common(limit)) + counter = Counter(values_list) - other = len(values_list) - sum(most_common.values()) + has_only_empty_string = list(counter.keys()) == [""] + if has_only_empty_string: + return {} + + most_common = dict(counter.most_common(limit)) + + other = counter.total() - sum(most_common.values()) if other > 0: most_common["Other"] = other @@ -626,72 +632,53 @@ def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) project = self.object - files_qs = project.codebaseresources.files() + file_filter = self.request.GET.get("file-filter") + context["file_filter"] = file_filter - file_filter = self.request.GET.get("file-filter", "all") + files = project.codebaseresources.files() if file_filter == "in-a-package": - files_qs = files_qs.in_package() + files = files.in_package() elif file_filter == "not-in-a-package": - files_qs = files_qs.not_in_package() - - files = files_qs.only( - "programming_language", - "mime_type", - "holders", - "copyrights", - "detected_license_expression", - ) - - packages = project.discoveredpackages.all().only( - "type", - "declared_license_expression", - ) - - dependencies = project.discovereddependencies.all().only( - "is_runtime", - "is_optional", - "is_resolved", - ) - - file_languages = files.values_list("programming_language", flat=True) - file_mime_types = files.values_list("mime_type", flat=True) - file_holders = files.values_from_json_field("holders", "holder") - file_copyrights = files.values_from_json_field("copyrights", "copyright") - file_license_expressions = files.values_list( - "detected_license_expression", flat=True - ) - - file_compliance_alert = [] - if scanpipe_app.policies_enabled: - file_compliance_alert = files.values_list("compliance_alert", flat=True) - - package_licenses = packages.values_list( - "declared_license_expression", flat=True - ) - package_types = packages.values_list("type", flat=True) + files = files.not_in_package() + + charts = { + "file": { + "queryset": files, + "fields": [ + "programming_language", + "mime_type", + "holders", + "copyrights", + "detected_license_expression", + "compliance_alert", + ], + }, + "package": { + "queryset": project.discoveredpackages, + "fields": ["type", "declared_license_expression"], + }, + "dependency": { + "queryset": project.discovereddependencies, + "fields": ["type", "is_runtime", "is_optional", "is_resolved"], + }, + } - dependency_package_type = dependencies.values_list("type", flat=True) - dependency_is_runtime = dependencies.values_list("is_runtime", flat=True) - dependency_is_optional = dependencies.values_list("is_optional", flat=True) - dependency_is_resolved = dependencies.values_list("is_resolved", flat=True) + for group_name, spec in charts.items(): + fields = spec["fields"] + # Clear the un-needed ordering to get faster queries + qs_values = spec["queryset"].values(*fields).order_by() + + for field_name in fields: + if field_name in ["holders", "copyrights"]: + field_values = ( + data.get(field_name[:-1]) + for entry in qs_values + for data in entry.get(field_name, []) + ) + else: + field_values = (entry[field_name] for entry in qs_values) - context.update( - { - "programming_languages": self.get_summary(file_languages), - "mime_types": self.get_summary(file_mime_types), - "holders": self.get_summary(file_holders), - "copyrights": self.get_summary(file_copyrights), - "file_license_expressions": self.get_summary(file_license_expressions), - "file_compliance_alert": self.get_summary(file_compliance_alert), - "package_licenses": self.get_summary(package_licenses), - "package_types": self.get_summary(package_types), - "dependency_package_type": self.get_summary(dependency_package_type), - "dependency_is_runtime": self.get_summary(dependency_is_runtime), - "dependency_is_optional": self.get_summary(dependency_is_optional), - "dependency_is_resolved": self.get_summary(dependency_is_resolved), - "file_filter": file_filter, - } - ) + context[f"{group_name}_{field_name}"] = self.get_summary(field_values) return context From 3cf3d5853c98c9a84fe7020ce9ef85e9ed246e37 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Wed, 17 May 2023 11:37:53 +0400 Subject: [PATCH 50/53] Add missing DB indexes on Project model #569 Signed-off-by: Thomas Druez --- ...cancode_toolkit_v32_post_data_migration.py | 46 +++++++++++++++++++ scanpipe/models.py | 9 ++-- 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/scanpipe/migrations/0032_scancode_toolkit_v32_post_data_migration.py b/scanpipe/migrations/0032_scancode_toolkit_v32_post_data_migration.py index 0abf19c8b9..ed8ce8f858 100644 --- a/scanpipe/migrations/0032_scancode_toolkit_v32_post_data_migration.py +++ b/scanpipe/migrations/0032_scancode_toolkit_v32_post_data_migration.py @@ -46,4 +46,50 @@ class Migration(migrations.Migration): name="scanpipe_co_detecte_f3f97d_idx", ), ), + # Extra fields alterations and index additions + migrations.AlterField( + model_name="discoveredpackage", + name="package_uid", + field=models.CharField( + blank=True, + help_text="Unique identifier for this package.", + max_length=1024, + ), + ), + migrations.AlterField( + model_name="project", + name="created_date", + field=models.DateTimeField( + auto_now_add=True, help_text="Creation date for this project." + ), + ), + migrations.AlterField( + model_name="project", + name="name", + field=models.CharField( + help_text="Name for this project.", max_length=100, unique=True + ), + ), + migrations.AddIndex( + model_name="discoveredpackage", + index=models.Index( + fields=["package_uid"], name="scanpipe_di_package_379c99_idx" + ), + ), + migrations.AddIndex( + model_name="project", + index=models.Index( + fields=["-created_date"], name="scanpipe_pr_created_258a96_idx" + ), + ), + migrations.AddIndex( + model_name="project", + index=models.Index( + fields=["is_archived"], name="scanpipe_pr_is_arch_6af64f_idx" + ), + ), + migrations.AddIndex( + model_name="project", + index=models.Index(fields=["name"], name="scanpipe_pr_name_c81038_idx"), + ), ] diff --git a/scanpipe/models.py b/scanpipe/models.py index 1969fec069..c0ac3d9576 100644 --- a/scanpipe/models.py +++ b/scanpipe/models.py @@ -455,12 +455,10 @@ class Project(UUIDPKModel, ExtraDataFieldMixin, models.Model): created_date = models.DateTimeField( auto_now_add=True, - db_index=True, help_text=_("Creation date for this project."), ) name = models.CharField( unique=True, - db_index=True, max_length=100, help_text=_("Name for this project."), ) @@ -485,6 +483,11 @@ class Project(UUIDPKModel, ExtraDataFieldMixin, models.Model): class Meta: ordering = ["-created_date"] + indexes = [ + models.Index(fields=["-created_date"]), + models.Index(fields=["is_archived"]), + models.Index(fields=["name"]), + ] def __str__(self): return self.name @@ -2264,7 +2267,6 @@ class DiscoveredPackage( package_uid = models.CharField( max_length=1024, blank=True, - db_index=True, help_text=_("Unique identifier for this package."), ) keywords = models.JSONField(default=list, blank=True) @@ -2279,6 +2281,7 @@ class Meta: models.Index(fields=["namespace"]), models.Index(fields=["name"]), models.Index(fields=["filename"]), + models.Index(fields=["package_uid"]), models.Index(fields=["primary_language"]), models.Index(fields=["declared_license_expression"]), models.Index(fields=["other_license_expression"]), From f94a76e00826a16408599fe3e47cce966da16828 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Wed, 17 May 2023 12:00:20 +0400 Subject: [PATCH 51/53] Bump version to not display warning on new runs #569 Signed-off-by: Thomas Druez --- scancodeio/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scancodeio/__init__.py b/scancodeio/__init__.py index 9154a6df45..9bb4166670 100644 --- a/scancodeio/__init__.py +++ b/scancodeio/__init__.py @@ -25,7 +25,7 @@ import warnings from pathlib import Path -__version__ = "32.2.0" +__version__ = "33.0.0-dev" SCAN_NOTICE = Path(__file__).resolve().parent.joinpath("scan.NOTICE").read_text() From 4293f91cc7107f339ad1940feafff67babd55d37 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Wed, 17 May 2023 18:50:52 +0400 Subject: [PATCH 52/53] Replace Counter.total as not available before py3.10 #569 Signed-off-by: Thomas Druez --- scanpipe/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scanpipe/views.py b/scanpipe/views.py index d537052beb..3c3462cbec 100644 --- a/scanpipe/views.py +++ b/scanpipe/views.py @@ -618,7 +618,7 @@ def get_summary(values_list, limit=settings.SCANCODEIO_MOST_COMMON_LIMIT): most_common = dict(counter.most_common(limit)) - other = counter.total() - sum(most_common.values()) + other = sum(counter.values()) - sum(most_common.values()) if other > 0: most_common["Other"] = other From 8fd42e228bd2ff48638fa0cc1980448fd7e9c503 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Thu, 18 May 2023 11:54:51 +0400 Subject: [PATCH 53/53] Update help_text for percentage_of_license_text field #569 Signed-off-by: Thomas Druez --- CHANGELOG.rst | 2 +- .../migrations/0030_scancode_toolkit_v32_model_updates.py | 2 +- scanpipe/models.py | 5 +---- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index a09fdcb76b..1ef7a2bff5 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -5,7 +5,7 @@ v33.0.0 (unreleased) -------------------- - Upgrade ScanCode-toolkit to latest v32.0.0 - Warning: This upgrade required schema and data migrations (both included). + Warning: This upgrade requires schema and data migrations (both included). It is recommended to reset and re-run the pipelines to benefit from the latest ScanCode detection improvements. Refer to https://github.com/nexB/scancode-toolkit/blob/develop/CHANGELOG.rst#v3200-next-roadmap diff --git a/scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py b/scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py index f62d001671..4847787a11 100644 --- a/scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py +++ b/scanpipe/migrations/0030_scancode_toolkit_v32_model_updates.py @@ -116,6 +116,6 @@ class Migration(migrations.Migration): migrations.AddField( model_name="codebaseresource", name="percentage_of_license_text", - field=models.FloatField(blank=True, help_text="The percentage of words in the whole resource which are legal words, i.e. words that typically contain license related information.", null=True), + field=models.FloatField(blank=True, help_text="Percentage of file words detected as license text or notice.", null=True), ), ] diff --git a/scanpipe/models.py b/scanpipe/models.py index c0ac3d9576..e0fbd5e26c 100644 --- a/scanpipe/models.py +++ b/scanpipe/models.py @@ -1497,10 +1497,7 @@ class ScanFieldsModelMixin(models.Model): percentage_of_license_text = models.FloatField( blank=True, null=True, - help_text=_( - "The percentage of words in the whole resource which are legal words, " - "i.e. words that typically contain license related information." - ), + help_text=_("Percentage of file words detected as license text or notice."), ) copyrights = models.JSONField( blank=True,