Output Format Changes in packages Between Versions: 30.1.0 and 31.0.0b4

Versions and Options

Scancode Versions

  • v31.0.0b4

  • v30.1.0

Scancode Output Format Version

  • v30.1.0 has output format version 1.0.0.

  • v31.0.0b4 has output format version 2.0.0.

CLI Args

  • --packages

The input for the scan was this folder.

See scancode-toolkit CLI reference for more details.

Changes in Output Data

Changes [Addition]

Header extra_data changes:

  • A new header level extra_data attribute system_environment has been added. It has the following attributes: operating_system, cpu_architecture, platform, platform_version, python_version.

Top-level/Codebase-level changes:

  • A new codebase level attribute packages has been added.

  • A new codebase level attribute dependencies has been added.

Resource-level changes:

  • There is a new resource-level attribute for_packages.

Changes in package-data (Resource level attribute):

  • The package_data attribute dependencies now has a new attribute resolved_package.

Changes [Modification/Deletion]

Resource-level changes:

  • The resource level attribute packages has been renamed to package_data.

Changes in package-data (Resource level attribute):

  • The package_data attribute root_path has been deleted from package_data.

  • The package_data attribute requirement is renamed to extracted_requirement.

Explanation

There are major changes in package detection and reporting. Codebase-level attribute packages created from one or more package_data and files for the packages are reported.

The specific changes made are:

  • The resource level attribute packages has been renamed to package_data, as these are really package data that are being detected, such as manifests, lockfiles or other package data.

  • A new top-level attribute packages has been added which contains package instances created from package_data detected in the codebase. This has the data attributes of a package_data field plus others: package_uuid, package_data_files and files.

  • A new codebase level attribute dependencies has been added which contains dependency instances created from lockfiles detected in the codebase.

  • The package attribute root_path has been deleted from package_data in favour of the new format where there is no root conceptually, just a list of files for each package.

  • There is a new resource-level attribute for_packages which refers to packages through package_uuids (pURL + uuid string).

  • The package_data attribute dependencies (which is a list of DependentPackages), now has a new attribute resolved_package with a package data mapping. Also the requirement attribute is renamed to extracted_requirement.

There are additions in the header level extra_data for holding system and system_environment data for better reporting:

  • A new header level extra_data attribute system_environment has been added. It has the following attributes: operating_system, cpu_architecture, platform, platform_version, python_version.

As there are major modifications and deletions in the result data structure, the output format version has been increased to 2.0.0 from 1.0.0.

YAML Diff

--- /home/docs/checkouts/readthedocs.org/user_builds/scancode-toolkit-reference-scans/checkouts/latest/docs/source/outputs/latest/yaml/scancode-30.1.0-packages-37d4e0a.yaml
+++ /home/docs/checkouts/readthedocs.org/user_builds/scancode-toolkit-reference-scans/checkouts/latest/docs/source/outputs/latest/yaml/scancode-31.0.0b4-packages-37d4e0a.yaml
@@ -1,6 +1,6 @@
 headers:
     -   tool_name: scancode-toolkit
-        tool_version: 30.1.0
+        tool_version: 31.0.0b4
         options:
             --package: yes
         notice: |
@@ -10,52 +10,321 @@
             for any legal advice.
             ScanCode is a free software code scanning tool from nexB Inc. and others.
             Visit https://github.com/nexB/scancode-toolkit/ for support and download.
-        output_format_version: 1.0.0
-        duration: '1.2510056495666504'
+        output_format_version: 2.0.0
+        duration: '1.3074486255645752'
         message:
         errors: []
         warnings: []
         extra_data:
-            spdx_license_list_version: '3.14'
-            OUTDATED: 'WARNING: Outdated ScanCode Toolkit version! You are using an outdated
-                version of ScanCode Toolkit: 30.1.0 released on: 2021-09-24. A new version is
-                available with important improvements including bug and security fixes, updated
-                license, copyright and package detection, and improved scanning accuracy. Please
-                download and install the latest version of ScanCode. Visit https://github.com/nexB/scancode-toolkit/releases
-                for details.'
+            system_environment:
+                operating_system: linux
+                cpu_architecture: 64
+                platform: Linux-5.14.0-1032-oem-x86_64-with-glibc2.29
+                platform_version: '#35-Ubuntu SMP Thu Mar 31 12:49:29 UTC 2022'
+                python_version: "3.8.10 (default, Mar 15 2022, 12:22:08) \n[GCC 9.4.0]"
+            spdx_license_list_version: '3.16'
             files_count: 12
+dependencies:
+    -   purl: pkg:pypi/aboutcode-toolkit@6.0.0
+        extracted_requirement: ==6.0.0
+        scope: development
+        is_runtime: no
+        is_optional: yes
+        is_resolved: yes
+        resolved_package: {}
+        dependency_uid: pkg:pypi/aboutcode-toolkit@6.0.0?uuid=4a0a0670-ceba-4ba5-acc4-299e384a53fa
+        for_package_uid:
+        datafile_path: python-sample/requirements-dev.txt
+        datasource_id: pip_requirements
+    -   purl: pkg:pypi/py@1.10.0
+        extracted_requirement: ==1.10.0
+        scope: development
+        is_runtime: no
+        is_optional: yes
+        is_resolved: yes
+        resolved_package: {}
+        dependency_uid: pkg:pypi/py@1.10.0?uuid=e2836a6f-b630-483e-8d0a-03e9fd0491ea
+        for_package_uid:
+        datafile_path: python-sample/requirements-dev.txt
+        datasource_id: pip_requirements
+    -   purl: pkg:pypi/pytest@6.2.4
+        extracted_requirement: ==6.2.4
+        scope: development
+        is_runtime: no
+        is_optional: yes
+        is_resolved: yes
+        resolved_package: {}
+        dependency_uid: pkg:pypi/pytest@6.2.4?uuid=5da35db0-bc1a-4552-bcce-2d5d1163711c
+        for_package_uid:
+        datafile_path: python-sample/requirements-dev.txt
+        datasource_id: pip_requirements
+    -   purl: pkg:pypi/commoncode@30.0.0
+        extracted_requirement: ==30.0.0
+        scope: install
+        is_runtime: yes
+        is_optional: no
+        is_resolved: yes
+        resolved_package: {}
+        dependency_uid: pkg:pypi/commoncode@30.0.0?uuid=9a74538a-0a00-4c1a-adbe-18bec72d80cd
+        for_package_uid:
+        datafile_path: python-sample/requirements.txt
+        datasource_id: pip_requirements
+    -   purl: pkg:pypi/extractcode@21.7.23
+        extracted_requirement: ==21.7.23
+        scope: install
+        is_runtime: yes
+        is_optional: no
+        is_resolved: yes
+        resolved_package: {}
+        dependency_uid: pkg:pypi/extractcode@21.7.23?uuid=71acfaa0-78aa-46af-a216-45a574233a6f
+        for_package_uid:
+        datafile_path: python-sample/requirements.txt
+        datasource_id: pip_requirements
+    -   purl: pkg:pypi/license-expression@21.6.14
+        extracted_requirement: ==21.6.14
+        scope: install
+        is_runtime: yes
+        is_optional: no
+        is_resolved: yes
+        resolved_package: {}
+        dependency_uid: pkg:pypi/license-expression@21.6.14?uuid=1d4ba82d-eb31-4ca7-aafd-8a27be545f4f
+        for_package_uid:
+        datafile_path: python-sample/requirements.txt
+        datasource_id: pip_requirements
+    -   purl: pkg:pypi/plugincode@21.1.21
+        extracted_requirement: ==21.1.21
+        scope: install
+        is_runtime: yes
+        is_optional: no
+        is_resolved: yes
+        resolved_package: {}
+        dependency_uid: pkg:pypi/plugincode@21.1.21?uuid=0e5659ee-8f8e-49ab-b284-9ba87f4fbf36
+        for_package_uid:
+        datafile_path: python-sample/requirements.txt
+        datasource_id: pip_requirements
+    -   purl: pkg:pypi/typecode@21.6.1
+        extracted_requirement: ==21.6.1
+        scope: install
+        is_runtime: yes
+        is_optional: no
+        is_resolved: yes
+        resolved_package: {}
+        dependency_uid: pkg:pypi/typecode@21.6.1?uuid=9e762641-3eb8-41ba-b48c-13da61695a80
+        for_package_uid:
+        datafile_path: python-sample/requirements.txt
+        datasource_id: pip_requirements
+    -   purl: pkg:pypi/commoncode
+        extracted_requirement: '>=30.0.0'
+        scope: install
+        is_runtime: yes
+        is_optional: no
+        is_resolved: no
+        resolved_package: {}
+        dependency_uid: pkg:pypi/commoncode?uuid=9a3c7ec9-6ada-4fd6-aeb8-bcc04242506f
+        for_package_uid: pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d
+        datafile_path: python-sample/setup.cfg
+        datasource_id: pypi_setup_cfg
+    -   purl: pkg:pypi/plugincode
+        extracted_requirement: '>=21.1.21'
+        scope: install
+        is_runtime: yes
+        is_optional: no
+        is_resolved: no
+        resolved_package: {}
+        dependency_uid: pkg:pypi/plugincode?uuid=c209c0a1-40de-4373-a3dd-9bc4ad01147a
+        for_package_uid: pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d
+        datafile_path: python-sample/setup.cfg
+        datasource_id: pypi_setup_cfg
+    -   purl: pkg:pypi/typecode
+        extracted_requirement: '>=21.6.1'
+        scope: install
+        is_runtime: yes
+        is_optional: no
+        is_resolved: no
+        resolved_package: {}
+        dependency_uid: pkg:pypi/typecode?uuid=44b4224a-45c6-47e1-9571-45ff81ebdde7
+        for_package_uid: pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d
+        datafile_path: python-sample/setup.cfg
+        datasource_id: pypi_setup_cfg
+    -   purl: pkg:pypi/extractcode
+        extracted_requirement: '>=21.7.23'
+        scope: install
+        is_runtime: yes
+        is_optional: no
+        is_resolved: no
+        resolved_package: {}
+        dependency_uid: pkg:pypi/extractcode?uuid=a48de9bd-ea04-403a-ab70-5790eae7a1c8
+        for_package_uid: pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d
+        datafile_path: python-sample/setup.cfg
+        datasource_id: pypi_setup_cfg
+    -   purl: pkg:pypi/rpm-inspector-rpm
+        extracted_requirement: '>=4.16.1.3'
+        scope: install
+        is_runtime: yes
+        is_optional: no
+        is_resolved: no
+        resolved_package: {}
+        dependency_uid: pkg:pypi/rpm-inspector-rpm?uuid=a9bef8a5-c2d3-49aa-9815-73d1ba1f2107
+        for_package_uid: pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d
+        datafile_path: python-sample/setup.cfg
+        datasource_id: pypi_setup_cfg
+    -   purl: pkg:pypi/regipy
+        extracted_requirement: '>=2.0.0'
+        scope: install
+        is_runtime: yes
+        is_optional: no
+        is_resolved: no
+        resolved_package: {}
+        dependency_uid: pkg:pypi/regipy?uuid=ae98c173-6cb7-4289-9e72-70c22bef2e28
+        for_package_uid: pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d
+        datafile_path: python-sample/setup.cfg
+        datasource_id: pypi_setup_cfg
+    -   purl: pkg:pypi/packagedcode-msitools
+        extracted_requirement: '>=0.101.210706'
+        scope: install
+        is_runtime: yes
+        is_optional: no
+        is_resolved: no
+        resolved_package: {}
+        dependency_uid: pkg:pypi/packagedcode-msitools?uuid=70041d69-b034-427c-92b4-239b2318a985
+        for_package_uid: pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d
+        datafile_path: python-sample/setup.cfg
+        datasource_id: pypi_setup_cfg
+    -   purl: pkg:pypi/pytest
+        extracted_requirement: pytest
+        scope: install
+        is_runtime: yes
+        is_optional: no
+        is_resolved: no
+        resolved_package: {}
+        dependency_uid: pkg:pypi/pytest?uuid=6f58c064-9e85-4ba4-b953-ff597deb859d
+        for_package_uid: pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d
+        datafile_path: python-sample/setup.cfg
+        datasource_id: pypi_setup_cfg
+packages:
+    -   type: about
+        namespace:
+        name: scancode-toolkit
+        version:
+        qualifiers: {}
+        subpath:
+        primary_language:
+        description:
+        release_date:
+        parties:
+            -   type: person
+                role: owner
+                name: None
+                email:
+                url:
+        keywords: []
+        homepage_url: https://www.aboutcode.org/
+        download_url:
+        size:
+        sha1:
+        md5:
+        sha256:
+        sha512:
+        bug_tracking_url:
+        code_view_url:
+        vcs_url:
+        copyright: Copyright (c) nexB Inc. and others.
+        license_expression: apache-2.0 AND cc-by-4.0 AND other-permissive AND other-copyleft
+        declared_license: apache-2.0 AND cc-by-4.0 AND other-permissive AND other-copyleft
+        notice_text:
+        source_packages: []
+        extra_data:
+            missing_file_references:
+                -   path: .
+                    size: '0'
+                    sha1:
+                    md5:
+                    sha256:
+                    sha512:
+                    extra_data: {}
+        repository_homepage_url:
+        repository_download_url:
+        api_data_url:
+        package_uid: pkg:about/scancode-toolkit?uuid=f2148990-9f00-4d56-b388-58e9c8e3c8e0
+        datafile_paths:
+            - python-sample/scancode-toolkit.ABOUT
+        datasource_ids:
+            - about_file
+        purl: pkg:about/scancode-toolkit
+    -   type: pypi
+        namespace:
+        name: scancode-toolkit
+        version: 30.1.0
+        qualifiers: {}
+        subpath:
+        primary_language: Python
+        description:
+        release_date:
+        parties:
+            -   type: person
+                role: author
+                name: ScanCode
+                email: info@aboutcode.org
+                url:
+        keywords: []
+        homepage_url: https://github.com/nexB/scancode-toolkit
+        download_url:
+        size:
+        sha1:
+        md5:
+        sha256:
+        sha512:
+        bug_tracking_url:
+        code_view_url:
+        vcs_url:
+        copyright:
+        license_expression:
+        declared_license:
+        notice_text:
+        source_packages: []
+        extra_data: {}
+        repository_homepage_url:
+        repository_download_url:
+        api_data_url:
+        package_uid: pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d
+        datafile_paths:
+            - python-sample/setup.cfg
+        datasource_ids:
+            - pypi_setup_cfg
+        purl: pkg:pypi/scancode-toolkit@30.1.0
 files:
     -   path: python-sample
         type: directory
-        packages: []
+        package_data: []
+        for_packages: []
         scan_errors: []
     -   path: python-sample/apache-2.0.LICENSE
         type: file
-        packages: []
+        package_data: []
+        for_packages:
+            - pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d
         scan_errors: []
     -   path: python-sample/cc-by-4.0.LICENSE
         type: file
-        packages: []
+        package_data: []
+        for_packages:
+            - pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d
         scan_errors: []
     -   path: python-sample/MANIFEST.in
         type: file
-        packages: []
+        package_data: []
+        for_packages:
+            - pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d
         scan_errors: []
     -   path: python-sample/NOTICE
         type: file
-        packages: []
+        package_data: []
+        for_packages:
+            - pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d
         scan_errors: []
     -   path: python-sample/pyproject.toml
         type: file
-        packages: []
-        scan_errors: []
-    -   path: python-sample/README.rst
-        type: file
-        packages: []
-        scan_errors: []
-    -   path: python-sample/requirements-dev.txt
-        type: file
-        packages:
+        package_data:
             -   type: pypi
                 namespace:
                 name:
@@ -81,37 +350,27 @@
                 license_expression:
                 declared_license:
                 notice_text:
-                root_path: python-sample/requirements-dev.txt
-                dependencies:
-                    -   purl: pkg:pypi/aboutcode-toolkit@6.0.0
-                        requirement: ==6.0.0
-                        scope: install
-                        is_runtime: yes
-                        is_optional: no
-                        is_resolved: yes
-                    -   purl: pkg:pypi/py@1.10.0
-                        requirement: ==1.10.0
-                        scope: install
-                        is_runtime: yes
-                        is_optional: no
-                        is_resolved: yes
-                    -   purl: pkg:pypi/pytest@6.2.4
-                        requirement: ==6.2.4
-                        scope: install
-                        is_runtime: yes
-                        is_optional: no
-                        is_resolved: yes
-                contains_source_code:
                 source_packages: []
+                file_references: []
                 extra_data: {}
-                purl:
+                dependencies: []
                 repository_homepage_url:
                 repository_download_url:
                 api_data_url:
-        scan_errors: []
-    -   path: python-sample/requirements.txt
-        type: file
-        packages:
+                datasource_id: pypi_pyproject_toml
+                purl:
+        for_packages:
+            - pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d
+        scan_errors: []
+    -   path: python-sample/README.rst
+        type: file
+        package_data: []
+        for_packages:
+            - pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d
+        scan_errors: []
+    -   path: python-sample/requirements-dev.txt
+        type: file
+        package_data:
             -   type: pypi
                 namespace:
                 name:
@@ -137,49 +396,117 @@
                 license_expression:
                 declared_license:
                 notice_text:
-                root_path: python-sample/requirements.txt
+                source_packages: []
+                file_references: []
+                extra_data: {}
                 dependencies:
-                    -   purl: pkg:pypi/commoncode@30.0.0
-                        requirement: ==30.0.0
-                        scope: install
-                        is_runtime: yes
-                        is_optional: no
+                    -   purl: pkg:pypi/aboutcode-toolkit@6.0.0
+                        extracted_requirement: ==6.0.0
+                        scope: development
+                        is_runtime: no
+                        is_optional: yes
                         is_resolved: yes
-                    -   purl: pkg:pypi/extractcode@21.7.23
-                        requirement: ==21.7.23
-                        scope: install
-                        is_runtime: yes
-                        is_optional: no
+                        resolved_package: {}
+                    -   purl: pkg:pypi/py@1.10.0
+                        extracted_requirement: ==1.10.0
+                        scope: development
+                        is_runtime: no
+                        is_optional: yes
                         is_resolved: yes
-                    -   purl: pkg:pypi/license-expression@21.6.14
-                        requirement: ==21.6.14
-                        scope: install
-                        is_runtime: yes
-                        is_optional: no
+                        resolved_package: {}
+                    -   purl: pkg:pypi/pytest@6.2.4
+                        extracted_requirement: ==6.2.4
+                        scope: development
+                        is_runtime: no
+                        is_optional: yes
                         is_resolved: yes
-                    -   purl: pkg:pypi/plugincode@21.1.21
-                        requirement: ==21.1.21
-                        scope: install
-                        is_runtime: yes
-                        is_optional: no
-                        is_resolved: yes
-                    -   purl: pkg:pypi/typecode@21.6.1
-                        requirement: ==21.6.1
-                        scope: install
-                        is_runtime: yes
-                        is_optional: no
-                        is_resolved: yes
-                contains_source_code:
-                source_packages: []
-                extra_data: {}
-                purl:
+                        resolved_package: {}
                 repository_homepage_url:
                 repository_download_url:
                 api_data_url:
+                datasource_id: pip_requirements
+                purl:
+        for_packages:
+            - pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d
+        scan_errors: []
+    -   path: python-sample/requirements.txt
+        type: file
+        package_data:
+            -   type: pypi
+                namespace:
+                name:
+                version:
+                qualifiers: {}
+                subpath:
+                primary_language: Python
+                description:
+                release_date:
+                parties: []
+                keywords: []
+                homepage_url:
+                download_url:
+                size:
+                sha1:
+                md5:
+                sha256:
+                sha512:
+                bug_tracking_url:
+                code_view_url:
+                vcs_url:
+                copyright:
+                license_expression:
+                declared_license:
+                notice_text:
+                source_packages: []
+                file_references: []
+                extra_data: {}
+                dependencies:
+                    -   purl: pkg:pypi/commoncode@30.0.0
+                        extracted_requirement: ==30.0.0
+                        scope: install
+                        is_runtime: yes
+                        is_optional: no
+                        is_resolved: yes
+                        resolved_package: {}
+                    -   purl: pkg:pypi/extractcode@21.7.23
+                        extracted_requirement: ==21.7.23
+                        scope: install
+                        is_runtime: yes
+                        is_optional: no
+                        is_resolved: yes
+                        resolved_package: {}
+                    -   purl: pkg:pypi/license-expression@21.6.14
+                        extracted_requirement: ==21.6.14
+                        scope: install
+                        is_runtime: yes
+                        is_optional: no
+                        is_resolved: yes
+                        resolved_package: {}
+                    -   purl: pkg:pypi/plugincode@21.1.21
+                        extracted_requirement: ==21.1.21
+                        scope: install
+                        is_runtime: yes
+                        is_optional: no
+                        is_resolved: yes
+                        resolved_package: {}
+                    -   purl: pkg:pypi/typecode@21.6.1
+                        extracted_requirement: ==21.6.1
+                        scope: install
+                        is_runtime: yes
+                        is_optional: no
+                        is_resolved: yes
+                        resolved_package: {}
+                repository_homepage_url:
+                repository_download_url:
+                api_data_url:
+                datasource_id: pip_requirements
+                purl:
+        for_packages:
+            - pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d
         scan_errors: []
     -   path: python-sample/scancode-toolkit.ABOUT
         type: file
-        packages:
+        package_data:
             -   type: about
                 namespace:
                 name: scancode-toolkit
@@ -207,39 +534,55 @@
                 code_view_url:
                 vcs_url:
                 copyright: Copyright (c) nexB Inc. and others.
-                license_expression: (apache-2.0 AND cc-by-4.0) AND unknown
+                license_expression: apache-2.0 AND cc-by-4.0 AND other-permissive AND other-copyleft
                 declared_license: apache-2.0 AND cc-by-4.0 AND other-permissive AND other-copyleft
                 notice_text:
-                root_path: python-sample/scancode-toolkit.ABOUT
+                source_packages: []
+                file_references:
+                    -   path: .
+                        size: '0'
+                        sha1:
+                        md5:
+                        sha256:
+                        sha512:
+                        extra_data: {}
+                extra_data: {}
                 dependencies: []
-                contains_source_code:
-                source_packages: []
-                extra_data:
-                    about_resource: .
-                purl: pkg:about/scancode-toolkit
                 repository_homepage_url:
                 repository_download_url:
                 api_data_url:
+                datasource_id: about_file
+                purl: pkg:about/scancode-toolkit
+        for_packages:
+            - pkg:about/scancode-toolkit?uuid=f2148990-9f00-4d56-b388-58e9c8e3c8e0
+            - pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d
         scan_errors: []
     -   path: python-sample/setup-mini.cfg
         type: file
-        packages: []
+        package_data: []
+        for_packages:
+            - pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d
         scan_errors: []
     -   path: python-sample/setup.cfg
         type: file
-        packages:
+        package_data:
             -   type: pypi
                 namespace:
-                name:
-                version:
+                name: scancode-toolkit
+                version: 30.1.0
                 qualifiers: {}
                 subpath:
                 primary_language: Python
                 description:
                 release_date:
-                parties: []
+                parties:
+                    -   type: person
+                        role: author
+                        name: ScanCode
+                        email: info@aboutcode.org
+                        url:
                 keywords: []
-                homepage_url:
+                homepage_url: https://github.com/nexB/scancode-toolkit
                 download_url:
                 size:
                 sha1:
@@ -253,67 +596,77 @@
                 license_expression:
                 declared_license:
                 notice_text:
-                root_path: python-sample/setup.cfg
+                source_packages: []
+                file_references: []
+                extra_data: {}
                 dependencies:
                     -   purl: pkg:pypi/commoncode
-                        requirement: '>=30.0.0'
+                        extracted_requirement: '>=30.0.0'
                         scope: install
                         is_runtime: yes
                         is_optional: no
                         is_resolved: no
+                        resolved_package: {}
                     -   purl: pkg:pypi/plugincode
-                        requirement: '>=21.1.21'
+                        extracted_requirement: '>=21.1.21'
                         scope: install
                         is_runtime: yes
                         is_optional: no
                         is_resolved: no
+                        resolved_package: {}
                     -   purl: pkg:pypi/typecode
-                        requirement: '>=21.6.1'
+                        extracted_requirement: '>=21.6.1'
                         scope: install
                         is_runtime: yes
                         is_optional: no
                         is_resolved: no
+                        resolved_package: {}
                     -   purl: pkg:pypi/extractcode
-                        requirement: '>=21.7.23'
+                        extracted_requirement: '>=21.7.23'
                         scope: install
                         is_runtime: yes
                         is_optional: no
                         is_resolved: no
+                        resolved_package: {}
                     -   purl: pkg:pypi/rpm-inspector-rpm
-                        requirement: '>=4.16.1.3'
+                        extracted_requirement: '>=4.16.1.3'
                         scope: install
                         is_runtime: yes
                         is_optional: no
                         is_resolved: no
+                        resolved_package: {}
                     -   purl: pkg:pypi/regipy
-                        requirement: '>=2.0.0'
+                        extracted_requirement: '>=2.0.0'
                         scope: install
                         is_runtime: yes
                         is_optional: no
                         is_resolved: no
+                        resolved_package: {}
                     -   purl: pkg:pypi/packagedcode-msitools
-                        requirement: '>=0.101.210706'
+                        extracted_requirement: '>=0.101.210706'
                         scope: install
                         is_runtime: yes
                         is_optional: no
                         is_resolved: no
+                        resolved_package: {}
                     -   purl: pkg:pypi/pytest
-                        requirement: pytest
+                        extracted_requirement: pytest
                         scope: install
                         is_runtime: yes
                         is_optional: no
                         is_resolved: no
-                contains_source_code:
-                source_packages: []
-                extra_data: {}
-                purl:
+                        resolved_package: {}
                 repository_homepage_url:
                 repository_download_url:
                 api_data_url:
+                datasource_id: pypi_setup_cfg
+                purl: pkg:pypi/scancode-toolkit@30.1.0
+        for_packages:
+            - pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d
         scan_errors: []
     -   path: python-sample/setup.py
         type: file
-        packages:
+        package_data:
             -   type: pypi
                 namespace:
                 name:
@@ -339,13 +692,15 @@
                 license_expression:
                 declared_license: {}
                 notice_text:
-                root_path: python-sample/setup.py
+                source_packages: []
+                file_references: []
+                extra_data: {}
                 dependencies: []
-                contains_source_code:
-                source_packages: []
-                extra_data: {}
-                purl:
                 repository_homepage_url:
                 repository_download_url:
                 api_data_url:
-        scan_errors: []
+                datasource_id: pypi_setup_py
+                purl:
+        for_packages:
+            - pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d
+        scan_errors: []

JSON Diff

--- /home/docs/checkouts/readthedocs.org/user_builds/scancode-toolkit-reference-scans/checkouts/latest/docs/source/outputs/latest/json/scancode-30.1.0-packages-37d4e0a.json
+++ /home/docs/checkouts/readthedocs.org/user_builds/scancode-toolkit-reference-scans/checkouts/latest/docs/source/outputs/latest/json/scancode-31.0.0b4-packages-37d4e0a.json
@@ -2,70 +2,397 @@
   "headers": [
     {
       "tool_name": "scancode-toolkit",
-      "tool_version": "30.1.0",
+      "tool_version": "31.0.0b4",
       "options": {
         "--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.",
-      "output_format_version": "1.0.0",
-      "duration": 1.2510056495666504,
+      "output_format_version": "2.0.0",
+      "duration": 1.3074486255645752,
       "message": null,
       "errors": [],
       "warnings": [],
       "extra_data": {
-        "spdx_license_list_version": "3.14",
-        "OUTDATED": "WARNING: Outdated ScanCode Toolkit version! You are using an outdated version of ScanCode Toolkit: 30.1.0 released on: 2021-09-24. A new version is available with important improvements including bug and security fixes, updated license, copyright and package detection, and improved scanning accuracy. Please download and install the latest version of ScanCode. Visit https://github.com/nexB/scancode-toolkit/releases for details.",
+        "system_environment": {
+          "operating_system": "linux",
+          "cpu_architecture": "64",
+          "platform": "Linux-5.14.0-1032-oem-x86_64-with-glibc2.29",
+          "platform_version": "#35-Ubuntu SMP Thu Mar 31 12:49:29 UTC 2022",
+          "python_version": "3.8.10 (default, Mar 15 2022, 12:22:08) \n[GCC 9.4.0]"
+        },
+        "spdx_license_list_version": "3.16",
         "files_count": 12
       }
     }
   ],
+  "dependencies": [
+    {
+      "purl": "pkg:pypi/aboutcode-toolkit@6.0.0",
+      "extracted_requirement": "==6.0.0",
+      "scope": "development",
+      "is_runtime": false,
+      "is_optional": true,
+      "is_resolved": true,
+      "resolved_package": {},
+      "dependency_uid": "pkg:pypi/aboutcode-toolkit@6.0.0?uuid=4a0a0670-ceba-4ba5-acc4-299e384a53fa",
+      "for_package_uid": null,
+      "datafile_path": "python-sample/requirements-dev.txt",
+      "datasource_id": "pip_requirements"
+    },
+    {
+      "purl": "pkg:pypi/py@1.10.0",
+      "extracted_requirement": "==1.10.0",
+      "scope": "development",
+      "is_runtime": false,
+      "is_optional": true,
+      "is_resolved": true,
+      "resolved_package": {},
+      "dependency_uid": "pkg:pypi/py@1.10.0?uuid=e2836a6f-b630-483e-8d0a-03e9fd0491ea",
+      "for_package_uid": null,
+      "datafile_path": "python-sample/requirements-dev.txt",
+      "datasource_id": "pip_requirements"
+    },
+    {
+      "purl": "pkg:pypi/pytest@6.2.4",
+      "extracted_requirement": "==6.2.4",
+      "scope": "development",
+      "is_runtime": false,
+      "is_optional": true,
+      "is_resolved": true,
+      "resolved_package": {},
+      "dependency_uid": "pkg:pypi/pytest@6.2.4?uuid=5da35db0-bc1a-4552-bcce-2d5d1163711c",
+      "for_package_uid": null,
+      "datafile_path": "python-sample/requirements-dev.txt",
+      "datasource_id": "pip_requirements"
+    },
+    {
+      "purl": "pkg:pypi/commoncode@30.0.0",
+      "extracted_requirement": "==30.0.0",
+      "scope": "install",
+      "is_runtime": true,
+      "is_optional": false,
+      "is_resolved": true,
+      "resolved_package": {},
+      "dependency_uid": "pkg:pypi/commoncode@30.0.0?uuid=9a74538a-0a00-4c1a-adbe-18bec72d80cd",
+      "for_package_uid": null,
+      "datafile_path": "python-sample/requirements.txt",
+      "datasource_id": "pip_requirements"
+    },
+    {
+      "purl": "pkg:pypi/extractcode@21.7.23",
+      "extracted_requirement": "==21.7.23",
+      "scope": "install",
+      "is_runtime": true,
+      "is_optional": false,
+      "is_resolved": true,
+      "resolved_package": {},
+      "dependency_uid": "pkg:pypi/extractcode@21.7.23?uuid=71acfaa0-78aa-46af-a216-45a574233a6f",
+      "for_package_uid": null,
+      "datafile_path": "python-sample/requirements.txt",
+      "datasource_id": "pip_requirements"
+    },
+    {
+      "purl": "pkg:pypi/license-expression@21.6.14",
+      "extracted_requirement": "==21.6.14",
+      "scope": "install",
+      "is_runtime": true,
+      "is_optional": false,
+      "is_resolved": true,
+      "resolved_package": {},
+      "dependency_uid": "pkg:pypi/license-expression@21.6.14?uuid=1d4ba82d-eb31-4ca7-aafd-8a27be545f4f",
+      "for_package_uid": null,
+      "datafile_path": "python-sample/requirements.txt",
+      "datasource_id": "pip_requirements"
+    },
+    {
+      "purl": "pkg:pypi/plugincode@21.1.21",
+      "extracted_requirement": "==21.1.21",
+      "scope": "install",
+      "is_runtime": true,
+      "is_optional": false,
+      "is_resolved": true,
+      "resolved_package": {},
+      "dependency_uid": "pkg:pypi/plugincode@21.1.21?uuid=0e5659ee-8f8e-49ab-b284-9ba87f4fbf36",
+      "for_package_uid": null,
+      "datafile_path": "python-sample/requirements.txt",
+      "datasource_id": "pip_requirements"
+    },
+    {
+      "purl": "pkg:pypi/typecode@21.6.1",
+      "extracted_requirement": "==21.6.1",
+      "scope": "install",
+      "is_runtime": true,
+      "is_optional": false,
+      "is_resolved": true,
+      "resolved_package": {},
+      "dependency_uid": "pkg:pypi/typecode@21.6.1?uuid=9e762641-3eb8-41ba-b48c-13da61695a80",
+      "for_package_uid": null,
+      "datafile_path": "python-sample/requirements.txt",
+      "datasource_id": "pip_requirements"
+    },
+    {
+      "purl": "pkg:pypi/commoncode",
+      "extracted_requirement": ">=30.0.0",
+      "scope": "install",
+      "is_runtime": true,
+      "is_optional": false,
+      "is_resolved": false,
+      "resolved_package": {},
+      "dependency_uid": "pkg:pypi/commoncode?uuid=9a3c7ec9-6ada-4fd6-aeb8-bcc04242506f",
+      "for_package_uid": "pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d",
+      "datafile_path": "python-sample/setup.cfg",
+      "datasource_id": "pypi_setup_cfg"
+    },
+    {
+      "purl": "pkg:pypi/plugincode",
+      "extracted_requirement": ">=21.1.21",
+      "scope": "install",
+      "is_runtime": true,
+      "is_optional": false,
+      "is_resolved": false,
+      "resolved_package": {},
+      "dependency_uid": "pkg:pypi/plugincode?uuid=c209c0a1-40de-4373-a3dd-9bc4ad01147a",
+      "for_package_uid": "pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d",
+      "datafile_path": "python-sample/setup.cfg",
+      "datasource_id": "pypi_setup_cfg"
+    },
+    {
+      "purl": "pkg:pypi/typecode",
+      "extracted_requirement": ">=21.6.1",
+      "scope": "install",
+      "is_runtime": true,
+      "is_optional": false,
+      "is_resolved": false,
+      "resolved_package": {},
+      "dependency_uid": "pkg:pypi/typecode?uuid=44b4224a-45c6-47e1-9571-45ff81ebdde7",
+      "for_package_uid": "pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d",
+      "datafile_path": "python-sample/setup.cfg",
+      "datasource_id": "pypi_setup_cfg"
+    },
+    {
+      "purl": "pkg:pypi/extractcode",
+      "extracted_requirement": ">=21.7.23",
+      "scope": "install",
+      "is_runtime": true,
+      "is_optional": false,
+      "is_resolved": false,
+      "resolved_package": {},
+      "dependency_uid": "pkg:pypi/extractcode?uuid=a48de9bd-ea04-403a-ab70-5790eae7a1c8",
+      "for_package_uid": "pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d",
+      "datafile_path": "python-sample/setup.cfg",
+      "datasource_id": "pypi_setup_cfg"
+    },
+    {
+      "purl": "pkg:pypi/rpm-inspector-rpm",
+      "extracted_requirement": ">=4.16.1.3",
+      "scope": "install",
+      "is_runtime": true,
+      "is_optional": false,
+      "is_resolved": false,
+      "resolved_package": {},
+      "dependency_uid": "pkg:pypi/rpm-inspector-rpm?uuid=a9bef8a5-c2d3-49aa-9815-73d1ba1f2107",
+      "for_package_uid": "pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d",
+      "datafile_path": "python-sample/setup.cfg",
+      "datasource_id": "pypi_setup_cfg"
+    },
+    {
+      "purl": "pkg:pypi/regipy",
+      "extracted_requirement": ">=2.0.0",
+      "scope": "install",
+      "is_runtime": true,
+      "is_optional": false,
+      "is_resolved": false,
+      "resolved_package": {},
+      "dependency_uid": "pkg:pypi/regipy?uuid=ae98c173-6cb7-4289-9e72-70c22bef2e28",
+      "for_package_uid": "pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d",
+      "datafile_path": "python-sample/setup.cfg",
+      "datasource_id": "pypi_setup_cfg"
+    },
+    {
+      "purl": "pkg:pypi/packagedcode-msitools",
+      "extracted_requirement": ">=0.101.210706",
+      "scope": "install",
+      "is_runtime": true,
+      "is_optional": false,
+      "is_resolved": false,
+      "resolved_package": {},
+      "dependency_uid": "pkg:pypi/packagedcode-msitools?uuid=70041d69-b034-427c-92b4-239b2318a985",
+      "for_package_uid": "pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d",
+      "datafile_path": "python-sample/setup.cfg",
+      "datasource_id": "pypi_setup_cfg"
+    },
+    {
+      "purl": "pkg:pypi/pytest",
+      "extracted_requirement": "pytest",
+      "scope": "install",
+      "is_runtime": true,
+      "is_optional": false,
+      "is_resolved": false,
+      "resolved_package": {},
+      "dependency_uid": "pkg:pypi/pytest?uuid=6f58c064-9e85-4ba4-b953-ff597deb859d",
+      "for_package_uid": "pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d",
+      "datafile_path": "python-sample/setup.cfg",
+      "datasource_id": "pypi_setup_cfg"
+    }
+  ],
+  "packages": [
+    {
+      "type": "about",
+      "namespace": null,
+      "name": "scancode-toolkit",
+      "version": null,
+      "qualifiers": {},
+      "subpath": null,
+      "primary_language": null,
+      "description": null,
+      "release_date": null,
+      "parties": [
+        {
+          "type": "person",
+          "role": "owner",
+          "name": "None",
+          "email": null,
+          "url": null
+        }
+      ],
+      "keywords": [],
+      "homepage_url": "https://www.aboutcode.org/",
+      "download_url": null,
+      "size": null,
+      "sha1": null,
+      "md5": null,
+      "sha256": null,
+      "sha512": null,
+      "bug_tracking_url": null,
+      "code_view_url": null,
+      "vcs_url": null,
+      "copyright": "Copyright (c) nexB Inc. and others.",
+      "license_expression": "apache-2.0 AND cc-by-4.0 AND other-permissive AND other-copyleft",
+      "declared_license": "apache-2.0 AND cc-by-4.0 AND other-permissive AND other-copyleft",
+      "notice_text": null,
+      "source_packages": [],
+      "extra_data": {
+        "missing_file_references": [
+          {
+            "path": ".",
+            "size": 0,
+            "sha1": null,
+            "md5": null,
+            "sha256": null,
+            "sha512": null,
+            "extra_data": {}
+          }
+        ]
+      },
+      "repository_homepage_url": null,
+      "repository_download_url": null,
+      "api_data_url": null,
+      "package_uid": "pkg:about/scancode-toolkit?uuid=f2148990-9f00-4d56-b388-58e9c8e3c8e0",
+      "datafile_paths": [
+        "python-sample/scancode-toolkit.ABOUT"
+      ],
+      "datasource_ids": [
+        "about_file"
+      ],
+      "purl": "pkg:about/scancode-toolkit"
+    },
+    {
+      "type": "pypi",
+      "namespace": null,
+      "name": "scancode-toolkit",
+      "version": "30.1.0",
+      "qualifiers": {},
+      "subpath": null,
+      "primary_language": "Python",
+      "description": null,
+      "release_date": null,
+      "parties": [
+        {
+          "type": "person",
+          "role": "author",
+          "name": "ScanCode",
+          "email": "info@aboutcode.org",
+          "url": null
+        }
+      ],
+      "keywords": [],
+      "homepage_url": "https://github.com/nexB/scancode-toolkit",
+      "download_url": null,
+      "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": null,
+      "declared_license": null,
+      "notice_text": null,
+      "source_packages": [],
+      "extra_data": {},
+      "repository_homepage_url": null,
+      "repository_download_url": null,
+      "api_data_url": null,
+      "package_uid": "pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d",
+      "datafile_paths": [
+        "python-sample/setup.cfg"
+      ],
+      "datasource_ids": [
+        "pypi_setup_cfg"
+      ],
+      "purl": "pkg:pypi/scancode-toolkit@30.1.0"
+    }
+  ],
   "files": [
     {
       "path": "python-sample",
       "type": "directory",
-      "packages": [],
+      "package_data": [],
+      "for_packages": [],
       "scan_errors": []
     },
     {
       "path": "python-sample/apache-2.0.LICENSE",
       "type": "file",
-      "packages": [],
+      "package_data": [],
+      "for_packages": [
+        "pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d"
+      ],
       "scan_errors": []
     },
     {
       "path": "python-sample/cc-by-4.0.LICENSE",
       "type": "file",
-      "packages": [],
+      "package_data": [],
+      "for_packages": [
+        "pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d"
+      ],
       "scan_errors": []
     },
     {
       "path": "python-sample/MANIFEST.in",
       "type": "file",
-      "packages": [],
+      "package_data": [],
+      "for_packages": [
+        "pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d"
+      ],
       "scan_errors": []
     },
     {
       "path": "python-sample/NOTICE",
       "type": "file",
-      "packages": [],
+      "package_data": [],
+      "for_packages": [
+        "pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d"
+      ],
       "scan_errors": []
     },
     {
       "path": "python-sample/pyproject.toml",
       "type": "file",
-      "packages": [],
-      "scan_errors": []
-    },
-    {
-      "path": "python-sample/README.rst",
-      "type": "file",
-      "packages": [],
-      "scan_errors": []
-    },
-    {
-      "path": "python-sample/requirements-dev.txt",
-      "type": "file",
-      "packages": [
+      "package_data": [
         {
           "type": "pypi",
           "namespace": null,
@@ -92,48 +419,35 @@
           "license_expression": null,
           "declared_license": null,
           "notice_text": null,
-          "root_path": "python-sample/requirements-dev.txt",
-          "dependencies": [
-            {
-              "purl": "pkg:pypi/aboutcode-toolkit@6.0.0",
-              "requirement": "==6.0.0",
-              "scope": "install",
-              "is_runtime": true,
-              "is_optional": false,
-              "is_resolved": true
-            },
-            {
-              "purl": "pkg:pypi/py@1.10.0",
-              "requirement": "==1.10.0",
-              "scope": "install",
-              "is_runtime": true,
-              "is_optional": false,
-              "is_resolved": true
-            },
-            {
-              "purl": "pkg:pypi/pytest@6.2.4",
-              "requirement": "==6.2.4",
-              "scope": "install",
-              "is_runtime": true,
-              "is_optional": false,
-              "is_resolved": true
-            }
-          ],
-          "contains_source_code": null,
           "source_packages": [],
+          "file_references": [],
           "extra_data": {},
-          "purl": null,
+          "dependencies": [],
           "repository_homepage_url": null,
           "repository_download_url": null,
-          "api_data_url": null
+          "api_data_url": null,
+          "datasource_id": "pypi_pyproject_toml",
+          "purl": null
         }
       ],
-      "scan_errors": []
-    },
-    {
-      "path": "python-sample/requirements.txt",
-      "type": "file",
-      "packages": [
+      "for_packages": [
+        "pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d"
+      ],
+      "scan_errors": []
+    },
+    {
+      "path": "python-sample/README.rst",
+      "type": "file",
+      "package_data": [],
+      "for_packages": [
+        "pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d"
+      ],
+      "scan_errors": []
+    },
+    {
+      "path": "python-sample/requirements-dev.txt",
+      "type": "file",
+      "package_data": [
         {
           "type": "pypi",
           "namespace": null,
@@ -160,123 +474,54 @@
           "license_expression": null,
           "declared_license": null,
           "notice_text": null,
-          "root_path": "python-sample/requirements.txt",
+          "source_packages": [],
+          "file_references": [],
+          "extra_data": {},
           "dependencies": [
             {
-              "purl": "pkg:pypi/commoncode@30.0.0",
-              "requirement": "==30.0.0",
-              "scope": "install",
-              "is_runtime": true,
-              "is_optional": false,
-              "is_resolved": true
-            },
-            {
-              "purl": "pkg:pypi/extractcode@21.7.23",
-              "requirement": "==21.7.23",
-              "scope": "install",
-              "is_runtime": true,
-              "is_optional": false,
-              "is_resolved": true
-            },
-            {
-              "purl": "pkg:pypi/license-expression@21.6.14",
-              "requirement": "==21.6.14",
-              "scope": "install",
-              "is_runtime": true,
-              "is_optional": false,
-              "is_resolved": true
-            },
-            {
-              "purl": "pkg:pypi/plugincode@21.1.21",
-              "requirement": "==21.1.21",
-              "scope": "install",
-              "is_runtime": true,
-              "is_optional": false,
-              "is_resolved": true
-            },
-            {
-              "purl": "pkg:pypi/typecode@21.6.1",
-              "requirement": "==21.6.1",
-              "scope": "install",
-              "is_runtime": true,
-              "is_optional": false,
-              "is_resolved": true
+              "purl": "pkg:pypi/aboutcode-toolkit@6.0.0",
+              "extracted_requirement": "==6.0.0",
+              "scope": "development",
+              "is_runtime": false,
+              "is_optional": true,
+              "is_resolved": true,
+              "resolved_package": {}
+            },
+            {
+              "purl": "pkg:pypi/py@1.10.0",
+              "extracted_requirement": "==1.10.0",
+              "scope": "development",
+              "is_runtime": false,
+              "is_optional": true,
+              "is_resolved": true,
+              "resolved_package": {}
+            },
+            {
+              "purl": "pkg:pypi/pytest@6.2.4",
+              "extracted_requirement": "==6.2.4",
+              "scope": "development",
+              "is_runtime": false,
+              "is_optional": true,
+              "is_resolved": true,
+              "resolved_package": {}
             }
           ],
-          "contains_source_code": null,
-          "source_packages": [],
-          "extra_data": {},
-          "purl": null,
           "repository_homepage_url": null,
           "repository_download_url": null,
-          "api_data_url": null
+          "api_data_url": null,
+          "datasource_id": "pip_requirements",
+          "purl": null
         }
       ],
-      "scan_errors": []
-    },
-    {
-      "path": "python-sample/scancode-toolkit.ABOUT",
-      "type": "file",
-      "packages": [
-        {
-          "type": "about",
-          "namespace": null,
-          "name": "scancode-toolkit",
-          "version": null,
-          "qualifiers": {},
-          "subpath": null,
-          "primary_language": null,
-          "description": null,
-          "release_date": null,
-          "parties": [
-            {
-              "type": "person",
-              "role": "owner",
-              "name": "None",
-              "email": null,
-              "url": null
-            }
-          ],
-          "keywords": [],
-          "homepage_url": "https://www.aboutcode.org/",
-          "download_url": null,
-          "size": null,
-          "sha1": null,
-          "md5": null,
-          "sha256": null,
-          "sha512": null,
-          "bug_tracking_url": null,
-          "code_view_url": null,
-          "vcs_url": null,
-          "copyright": "Copyright (c) nexB Inc. and others.",
-          "license_expression": "(apache-2.0 AND cc-by-4.0) AND unknown",
-          "declared_license": "apache-2.0 AND cc-by-4.0 AND other-permissive AND other-copyleft",
-          "notice_text": null,
-          "root_path": "python-sample/scancode-toolkit.ABOUT",
-          "dependencies": [],
-          "contains_source_code": null,
-          "source_packages": [],
-          "extra_data": {
-            "about_resource": "."
-          },
-          "purl": "pkg:about/scancode-toolkit",
-          "repository_homepage_url": null,
-          "repository_download_url": null,
-          "api_data_url": null
-        }
-      ],
-      "scan_errors": []
-    },
-    {
-      "path": "python-sample/setup-mini.cfg",
-      "type": "file",
-      "packages": [],
-      "scan_errors": []
-    },
-    {
-      "path": "python-sample/setup.cfg",
-      "type": "file",
-      "packages": [
+      "for_packages": [
+        "pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d"
+      ],
+      "scan_errors": []
+    },
+    {
+      "path": "python-sample/requirements.txt",
+      "type": "file",
+      "package_data": [
         {
           "type": "pypi",
           "namespace": null,
@@ -303,88 +548,273 @@
           "license_expression": null,
           "declared_license": null,
           "notice_text": null,
-          "root_path": "python-sample/setup.cfg",
+          "source_packages": [],
+          "file_references": [],
+          "extra_data": {},
           "dependencies": [
             {
-              "purl": "pkg:pypi/commoncode",
-              "requirement": ">=30.0.0",
-              "scope": "install",
-              "is_runtime": true,
-              "is_optional": false,
-              "is_resolved": false
-            },
-            {
-              "purl": "pkg:pypi/plugincode",
-              "requirement": ">=21.1.21",
-              "scope": "install",
-              "is_runtime": true,
-              "is_optional": false,
-              "is_resolved": false
-            },
-            {
-              "purl": "pkg:pypi/typecode",
-              "requirement": ">=21.6.1",
-              "scope": "install",
-              "is_runtime": true,
-              "is_optional": false,
-              "is_resolved": false
-            },
-            {
-              "purl": "pkg:pypi/extractcode",
-              "requirement": ">=21.7.23",
-              "scope": "install",
-              "is_runtime": true,
-              "is_optional": false,
-              "is_resolved": false
-            },
-            {
-              "purl": "pkg:pypi/rpm-inspector-rpm",
-              "requirement": ">=4.16.1.3",
-              "scope": "install",
-              "is_runtime": true,
-              "is_optional": false,
-              "is_resolved": false
-            },
-            {
-              "purl": "pkg:pypi/regipy",
-              "requirement": ">=2.0.0",
-              "scope": "install",
-              "is_runtime": true,
-              "is_optional": false,
-              "is_resolved": false
-            },
-            {
-              "purl": "pkg:pypi/packagedcode-msitools",
-              "requirement": ">=0.101.210706",
-              "scope": "install",
-              "is_runtime": true,
-              "is_optional": false,
-              "is_resolved": false
-            },
-            {
-              "purl": "pkg:pypi/pytest",
-              "requirement": "pytest",
-              "scope": "install",
-              "is_runtime": true,
-              "is_optional": false,
-              "is_resolved": false
+              "purl": "pkg:pypi/commoncode@30.0.0",
+              "extracted_requirement": "==30.0.0",
+              "scope": "install",
+              "is_runtime": true,
+              "is_optional": false,
+              "is_resolved": true,
+              "resolved_package": {}
+            },
+            {
+              "purl": "pkg:pypi/extractcode@21.7.23",
+              "extracted_requirement": "==21.7.23",
+              "scope": "install",
+              "is_runtime": true,
+              "is_optional": false,
+              "is_resolved": true,
+              "resolved_package": {}
+            },
+            {
+              "purl": "pkg:pypi/license-expression@21.6.14",
+              "extracted_requirement": "==21.6.14",
+              "scope": "install",
+              "is_runtime": true,
+              "is_optional": false,
+              "is_resolved": true,
+              "resolved_package": {}
+            },
+            {
+              "purl": "pkg:pypi/plugincode@21.1.21",
+              "extracted_requirement": "==21.1.21",
+              "scope": "install",
+              "is_runtime": true,
+              "is_optional": false,
+              "is_resolved": true,
+              "resolved_package": {}
+            },
+            {
+              "purl": "pkg:pypi/typecode@21.6.1",
+              "extracted_requirement": "==21.6.1",
+              "scope": "install",
+              "is_runtime": true,
+              "is_optional": false,
+              "is_resolved": true,
+              "resolved_package": {}
             }
           ],
-          "contains_source_code": null,
-          "source_packages": [],
-          "extra_data": {},
-          "purl": null,
           "repository_homepage_url": null,
           "repository_download_url": null,
-          "api_data_url": null
+          "api_data_url": null,
+          "datasource_id": "pip_requirements",
+          "purl": null
         }
       ],
+      "for_packages": [
+        "pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d"
+      ],
+      "scan_errors": []
+    },
+    {
+      "path": "python-sample/scancode-toolkit.ABOUT",
+      "type": "file",
+      "package_data": [
+        {
+          "type": "about",
+          "namespace": null,
+          "name": "scancode-toolkit",
+          "version": null,
+          "qualifiers": {},
+          "subpath": null,
+          "primary_language": null,
+          "description": null,
+          "release_date": null,
+          "parties": [
+            {
+              "type": "person",
+              "role": "owner",
+              "name": "None",
+              "email": null,
+              "url": null
+            }
+          ],
+          "keywords": [],
+          "homepage_url": "https://www.aboutcode.org/",
+          "download_url": null,
+          "size": null,
+          "sha1": null,
+          "md5": null,
+          "sha256": null,
+          "sha512": null,
+          "bug_tracking_url": null,
+          "code_view_url": null,
+          "vcs_url": null,
+          "copyright": "Copyright (c) nexB Inc. and others.",
+          "license_expression": "apache-2.0 AND cc-by-4.0 AND other-permissive AND other-copyleft",
+          "declared_license": "apache-2.0 AND cc-by-4.0 AND other-permissive AND other-copyleft",
+          "notice_text": null,
+          "source_packages": [],
+          "file_references": [
+            {
+              "path": ".",
+              "size": 0,
+              "sha1": null,
+              "md5": null,
+              "sha256": null,
+              "sha512": null,
+              "extra_data": {}
+            }
+          ],
+          "extra_data": {},
+          "dependencies": [],
+          "repository_homepage_url": null,
+          "repository_download_url": null,
+          "api_data_url": null,
+          "datasource_id": "about_file",
+          "purl": "pkg:about/scancode-toolkit"
+        }
+      ],
+      "for_packages": [
+        "pkg:about/scancode-toolkit?uuid=f2148990-9f00-4d56-b388-58e9c8e3c8e0",
+        "pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d"
+      ],
+      "scan_errors": []
+    },
+    {
+      "path": "python-sample/setup-mini.cfg",
+      "type": "file",
+      "package_data": [],
+      "for_packages": [
+        "pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d"
+      ],
+      "scan_errors": []
+    },
+    {
+      "path": "python-sample/setup.cfg",
+      "type": "file",
+      "package_data": [
+        {
+          "type": "pypi",
+          "namespace": null,
+          "name": "scancode-toolkit",
+          "version": "30.1.0",
+          "qualifiers": {},
+          "subpath": null,
+          "primary_language": "Python",
+          "description": null,
+          "release_date": null,
+          "parties": [
+            {
+              "type": "person",
+              "role": "author",
+              "name": "ScanCode",
+              "email": "info@aboutcode.org",
+              "url": null
+            }
+          ],
+          "keywords": [],
+          "homepage_url": "https://github.com/nexB/scancode-toolkit",
+          "download_url": null,
+          "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": null,
+          "declared_license": null,
+          "notice_text": null,
+          "source_packages": [],
+          "file_references": [],
+          "extra_data": {},
+          "dependencies": [
+            {
+              "purl": "pkg:pypi/commoncode",
+              "extracted_requirement": ">=30.0.0",
+              "scope": "install",
+              "is_runtime": true,
+              "is_optional": false,
+              "is_resolved": false,
+              "resolved_package": {}
+            },
+            {
+              "purl": "pkg:pypi/plugincode",
+              "extracted_requirement": ">=21.1.21",
+              "scope": "install",
+              "is_runtime": true,
+              "is_optional": false,
+              "is_resolved": false,
+              "resolved_package": {}
+            },
+            {
+              "purl": "pkg:pypi/typecode",
+              "extracted_requirement": ">=21.6.1",
+              "scope": "install",
+              "is_runtime": true,
+              "is_optional": false,
+              "is_resolved": false,
+              "resolved_package": {}
+            },
+            {
+              "purl": "pkg:pypi/extractcode",
+              "extracted_requirement": ">=21.7.23",
+              "scope": "install",
+              "is_runtime": true,
+              "is_optional": false,
+              "is_resolved": false,
+              "resolved_package": {}
+            },
+            {
+              "purl": "pkg:pypi/rpm-inspector-rpm",
+              "extracted_requirement": ">=4.16.1.3",
+              "scope": "install",
+              "is_runtime": true,
+              "is_optional": false,
+              "is_resolved": false,
+              "resolved_package": {}
+            },
+            {
+              "purl": "pkg:pypi/regipy",
+              "extracted_requirement": ">=2.0.0",
+              "scope": "install",
+              "is_runtime": true,
+              "is_optional": false,
+              "is_resolved": false,
+              "resolved_package": {}
+            },
+            {
+              "purl": "pkg:pypi/packagedcode-msitools",
+              "extracted_requirement": ">=0.101.210706",
+              "scope": "install",
+              "is_runtime": true,
+              "is_optional": false,
+              "is_resolved": false,
+              "resolved_package": {}
+            },
+            {
+              "purl": "pkg:pypi/pytest",
+              "extracted_requirement": "pytest",
+              "scope": "install",
+              "is_runtime": true,
+              "is_optional": false,
+              "is_resolved": false,
+              "resolved_package": {}
+            }
+          ],
+          "repository_homepage_url": null,
+          "repository_download_url": null,
+          "api_data_url": null,
+          "datasource_id": "pypi_setup_cfg",
+          "purl": "pkg:pypi/scancode-toolkit@30.1.0"
+        }
+      ],
+      "for_packages": [
+        "pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d"
+      ],
       "scan_errors": []
     },
     {
       "path": "python-sample/setup.py",
       "type": "file",
-      "packages": [
+      "package_data": [
         {
           "type": "pypi",
           "namespace": null,
@@ -411,16 +841,19 @@
           "license_expression": null,
           "declared_license": {},
           "notice_text": null,
-          "root_path": "python-sample/setup.py",
+          "source_packages": [],
+          "file_references": [],
+          "extra_data": {},
           "dependencies": [],
-          "contains_source_code": null,
-          "source_packages": [],
-          "extra_data": {},
-          "purl": null,
           "repository_homepage_url": null,
           "repository_download_url": null,
-          "api_data_url": null
+          "api_data_url": null,
+          "datasource_id": "pypi_setup_py",
+          "purl": null
         }
+      ],
+      "for_packages": [
+        "pkg:pypi/scancode-toolkit@30.1.0?uuid=c46ea0bc-d02a-4ea5-8cdd-8aee9365503d"
       ],
       "scan_errors": []
     }