diff --git a/tests/packagedcode/data/pypi/metadata/v22/PKG-INFO b/tests/packagedcode/data/pypi/metadata/v22/PKG-INFO new file mode 100644 index 0000000000..1d51bb9679 --- /dev/null +++ b/tests/packagedcode/data/pypi/metadata/v22/PKG-INFO @@ -0,0 +1,38 @@ +Metadata-Version: 2.2 +Name: ForeTiS +Version: 0.0.7 +Summary: state-of-the-art and easy-to-use time series forecasting +Home-page: https://github.com/grimmlab/ForeTiS +Author: Josef Eiglsperger, Florian Haselbeck; Dominik G. Grimm +Author-email: josef.eiglsperger@tum.de +License: MIT +Project-URL: Documentation, https://ForeTiS.readthedocs.io/ +Project-URL: Source, https://github.com/grimmlab/ForeTiS +Classifier: Development Status :: 2 - Pre-Alpha +Classifier: Intended Audience :: Science/Research +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: POSIX :: Linux +Classifier: Programming Language :: Python :: 3 +Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence +Requires-Python: >=3.8 +Description-Content-Type: text/markdown +License-File: LICENSE +Requires-Dist: torch>=1.11.0 +Requires-Dist: xgboost>=1.5.2 +Requires-Dist: optuna>=2.10.0 +Requires-Dist: sqlalchemy==1.4.46 +Requires-Dist: joblib>=1.1.0 +Requires-Dist: numpy>=1.22.2 +Requires-Dist: pandas>=1.4.1 +Requires-Dist: scikit-learn>=1.0.2 +Requires-Dist: tensorflow>=2.8.0 +Requires-Dist: tensorflow-probability>=0.18 +Requires-Dist: statsmodels>=0.13.2 +Requires-Dist: scipy>=1.8.1 +Requires-Dist: pmdarima>=2.0.1 +Requires-Dist: gpflow>=2.5.2 +Requires-Dist: matplotlib>=3.3.0 +Requires-Dist: changefinder>=0.3 +Requires-Dist: bayesian_torch +Requires-Dist: blitz-bayesian-pytorch +Requires-Dist: tables>=3.7.0 diff --git a/tests/packagedcode/data/pypi/metadata/v22/PKG-INFO-expected.json b/tests/packagedcode/data/pypi/metadata/v22/PKG-INFO-expected.json new file mode 100644 index 0000000000..5fbc3011b3 --- /dev/null +++ b/tests/packagedcode/data/pypi/metadata/v22/PKG-INFO-expected.json @@ -0,0 +1,318 @@ +[ + { + "type": "pypi", + "namespace": null, + "name": "ForeTiS", + "version": "0.0.7", + "qualifiers": {}, + "subpath": null, + "primary_language": "Python", + "description": "state-of-the-art and easy-to-use time series forecasting", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": "Josef Eiglsperger, Florian Haselbeck; Dominik G. Grimm", + "email": "josef.eiglsperger@tum.de", + "url": null + } + ], + "keywords": [ + "Development Status :: 2 - Pre-Alpha", + "Intended Audience :: Science/Research", + "Operating System :: POSIX :: Linux", + "Programming Language :: Python :: 3", + "Topic :: Scientific/Engineering :: Artificial Intelligence" + ], + "homepage_url": "https://github.com/grimmlab/ForeTiS", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": null, + "code_view_url": "https://github.com/grimmlab/ForeTiS", + "vcs_url": null, + "copyright": null, + "holder": null, + "declared_license_expression": "mit", + "declared_license_expression_spdx": "MIT", + "license_detections": [ + { + "license_expression": "mit", + "license_expression_spdx": "MIT", + "matches": [ + { + "license_expression": "mit", + "license_expression_spdx": "MIT", + "from_file": null, + "start_line": 1, + "end_line": 1, + "matcher": "1-spdx-id", + "score": 100.0, + "matched_length": 1, + "match_coverage": 100.0, + "rule_relevance": 100, + "rule_identifier": "spdx-license-identifier-mit-5da48780aba670b0860c46d899ed42a0f243ff06", + "rule_url": null, + "matched_text": "MIT" + } + ], + "identifier": "mit-a822f434-d61f-f2b1-c792-8b8cb9e7b9bf" + }, + { + "license_expression": "mit", + "license_expression_spdx": "MIT", + "matches": [ + { + "license_expression": "mit", + "license_expression_spdx": "MIT", + "from_file": null, + "start_line": 1, + "end_line": 1, + "matcher": "1-hash", + "score": 100.0, + "matched_length": 5, + "match_coverage": 100.0, + "rule_relevance": 100, + "rule_identifier": "pypi_mit_license.RULE", + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_mit_license.RULE", + "matched_text": "- 'License :: OSI Approved :: MIT License'" + } + ], + "identifier": "mit-24a5293c-14d7-5403-efac-1a8b7532c0e8" + } + ], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": "license: MIT\nclassifiers:\n - 'License :: OSI Approved :: MIT License'\n", + "notice_text": null, + "source_packages": [], + "file_references": [], + "is_private": false, + "is_virtual": false, + "extra_data": { + "Documentation": "https://ForeTiS.readthedocs.io/", + "license_file": "LICENSE" + }, + "dependencies": [ + { + "purl": "pkg:pypi/torch", + "extracted_requirement": ">=1.11.0", + "scope": "install", + "is_runtime": true, + "is_optional": false, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/xgboost", + "extracted_requirement": ">=1.5.2", + "scope": "install", + "is_runtime": true, + "is_optional": false, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/optuna", + "extracted_requirement": ">=2.10.0", + "scope": "install", + "is_runtime": true, + "is_optional": false, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/sqlalchemy@1.4.46", + "extracted_requirement": "==1.4.46", + "scope": "install", + "is_runtime": true, + "is_optional": false, + "is_pinned": true, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/joblib", + "extracted_requirement": ">=1.1.0", + "scope": "install", + "is_runtime": true, + "is_optional": false, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/numpy", + "extracted_requirement": ">=1.22.2", + "scope": "install", + "is_runtime": true, + "is_optional": false, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pandas", + "extracted_requirement": ">=1.4.1", + "scope": "install", + "is_runtime": true, + "is_optional": false, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/scikit-learn", + "extracted_requirement": ">=1.0.2", + "scope": "install", + "is_runtime": true, + "is_optional": false, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/tensorflow", + "extracted_requirement": ">=2.8.0", + "scope": "install", + "is_runtime": true, + "is_optional": false, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/tensorflow-probability", + "extracted_requirement": ">=0.18", + "scope": "install", + "is_runtime": true, + "is_optional": false, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/statsmodels", + "extracted_requirement": ">=0.13.2", + "scope": "install", + "is_runtime": true, + "is_optional": false, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/scipy", + "extracted_requirement": ">=1.8.1", + "scope": "install", + "is_runtime": true, + "is_optional": false, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pmdarima", + "extracted_requirement": ">=2.0.1", + "scope": "install", + "is_runtime": true, + "is_optional": false, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/gpflow", + "extracted_requirement": ">=2.5.2", + "scope": "install", + "is_runtime": true, + "is_optional": false, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/matplotlib", + "extracted_requirement": ">=3.3.0", + "scope": "install", + "is_runtime": true, + "is_optional": false, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/changefinder", + "extracted_requirement": ">=0.3", + "scope": "install", + "is_runtime": true, + "is_optional": false, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/bayesian-torch", + "extracted_requirement": null, + "scope": "install", + "is_runtime": true, + "is_optional": false, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/blitz-bayesian-pytorch", + "extracted_requirement": null, + "scope": "install", + "is_runtime": true, + "is_optional": false, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/tables", + "extracted_requirement": ">=3.7.0", + "scope": "install", + "is_runtime": true, + "is_optional": false, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + } + ], + "repository_homepage_url": "https://pypi.org/project/ForeTiS", + "repository_download_url": "https://pypi.org/packages/source/F/ForeTiS/ForeTiS-0.0.7.tar.gz", + "api_data_url": "https://pypi.org/pypi/ForeTiS/0.0.7/json", + "datasource_id": "pypi_sdist_pkginfo", + "purl": "pkg:pypi/foretis@0.0.7" + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/metadata/v23/PKG-INFO b/tests/packagedcode/data/pypi/metadata/v23/PKG-INFO new file mode 100644 index 0000000000..6d09e2b75a --- /dev/null +++ b/tests/packagedcode/data/pypi/metadata/v23/PKG-INFO @@ -0,0 +1,34 @@ +Metadata-Version: 2.3 +Name: hatchling +Version: 1.22.4 +Summary: Modern, extensible Python build backend +Project-URL: Homepage, https://hatch.pypa.io/latest/ +Project-URL: Sponsor, https://github.com/sponsors/ofek +Project-URL: History, https://hatch.pypa.io/dev/history/hatchling/ +Project-URL: Tracker, https://github.com/pypa/hatch/issues +Project-URL: Source, https://github.com/pypa/hatch/tree/master/backend +Author-email: Ofek Lev +License-Expression: MIT +License-File: LICENSE.txt +Keywords: build,hatch,packaging +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Natural Language :: English +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Topic :: Software Development :: Build Tools +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Requires-Python: >=3.8 +Requires-Dist: packaging>=21.3 +Requires-Dist: pathspec>=0.10.1 +Requires-Dist: pluggy>=1.0.0 +Requires-Dist: tomli>=1.2.2; python_version < '3.11' +Requires-Dist: trove-classifiers +Description-Content-Type: text/markdown diff --git a/tests/packagedcode/data/pypi/metadata/v23/PKG-INFO-expected.json b/tests/packagedcode/data/pypi/metadata/v23/PKG-INFO-expected.json new file mode 100644 index 0000000000..53ae1981bc --- /dev/null +++ b/tests/packagedcode/data/pypi/metadata/v23/PKG-INFO-expected.json @@ -0,0 +1,156 @@ +[ + { + "type": "pypi", + "namespace": null, + "name": "hatchling", + "version": "1.22.4", + "qualifiers": {}, + "subpath": null, + "primary_language": "Python", + "description": "Modern, extensible Python build backend", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": null, + "email": "Ofek Lev ", + "url": null + } + ], + "keywords": [ + "build", + "hatch", + "packaging", + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Natural Language :: English", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Software Development :: Build Tools", + "Topic :: Software Development :: Libraries :: Python Modules" + ], + "homepage_url": "https://hatch.pypa.io/latest/", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/pypa/hatch/issues", + "code_view_url": "https://github.com/pypa/hatch/tree/master/backend", + "vcs_url": null, + "copyright": null, + "holder": null, + "declared_license_expression": "mit", + "declared_license_expression_spdx": "MIT", + "license_detections": [ + { + "license_expression": "mit", + "license_expression_spdx": "MIT", + "matches": [ + { + "license_expression": "mit", + "license_expression_spdx": "MIT", + "from_file": null, + "start_line": 1, + "end_line": 1, + "matcher": "1-hash", + "score": 100.0, + "matched_length": 5, + "match_coverage": 100.0, + "rule_relevance": 100, + "rule_identifier": "pypi_mit_license.RULE", + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_mit_license.RULE", + "matched_text": "- 'License :: OSI Approved :: MIT License'" + } + ], + "identifier": "mit-24a5293c-14d7-5403-efac-1a8b7532c0e8" + } + ], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": "classifiers:\n - 'License :: OSI Approved :: MIT License'\n", + "notice_text": null, + "source_packages": [], + "file_references": [], + "is_private": false, + "is_virtual": false, + "extra_data": { + "Sponsor": "https://github.com/sponsors/ofek", + "History": "https://hatch.pypa.io/dev/history/hatchling/", + "license_file": "LICENSE.txt" + }, + "dependencies": [ + { + "purl": "pkg:pypi/packaging", + "extracted_requirement": ">=21.3", + "scope": "install", + "is_runtime": true, + "is_optional": false, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pathspec", + "extracted_requirement": ">=0.10.1", + "scope": "install", + "is_runtime": true, + "is_optional": false, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pluggy", + "extracted_requirement": ">=1.0.0", + "scope": "install", + "is_runtime": true, + "is_optional": false, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/tomli", + "extracted_requirement": ">=1.2.2", + "scope": "install", + "is_runtime": true, + "is_optional": false, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": { + "python_version": "< 3.11" + } + }, + { + "purl": "pkg:pypi/trove-classifiers", + "extracted_requirement": null, + "scope": "install", + "is_runtime": true, + "is_optional": false, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + } + ], + "repository_homepage_url": "https://pypi.org/project/hatchling", + "repository_download_url": "https://pypi.org/packages/source/h/hatchling/hatchling-1.22.4.tar.gz", + "api_data_url": "https://pypi.org/pypi/hatchling/1.22.4/json", + "datasource_id": "pypi_sdist_pkginfo", + "purl": "pkg:pypi/hatchling@1.22.4" + } +] \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.2/trimesh-4.6.1.dist-info-expected.json b/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.2/trimesh-4.6.1.dist-info-expected.json new file mode 100644 index 0000000000..37fb857cf5 --- /dev/null +++ b/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.2/trimesh-4.6.1.dist-info-expected.json @@ -0,0 +1,602 @@ +[ + { + "type": "pypi", + "namespace": null, + "name": "trimesh", + "version": "4.6.1", + "qualifiers": {}, + "subpath": null, + "primary_language": "Python", + "description": "Import, export, process, analyze and view triangular meshes.", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": null, + "email": "Michael Dawson-Haggerty ", + "url": null + } + ], + "keywords": [ + "graphics", + "mesh", + "geometry", + "3D", + "Development Status :: 4 - Beta", + "Programming Language :: Python", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Natural Language :: English", + "Topic :: Scientific/Engineering", + "Topic :: Multimedia :: Graphics", + "Topic :: Multimedia :: Graphics :: 3D Modeling" + ], + "homepage_url": "https://github.com/mikedh/trimesh", + "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, + "holder": null, + "declared_license_expression": "mit", + "declared_license_expression_spdx": "MIT", + "license_detections": [ + { + "license_expression": "mit", + "license_expression_spdx": "MIT", + "matches": [ + { + "license_expression": "mit", + "license_expression_spdx": "MIT", + "from_file": null, + "start_line": 1, + "end_line": 1, + "matcher": "2-aho", + "score": 100.0, + "matched_length": 4, + "match_coverage": 100.0, + "rule_relevance": 100, + "rule_identifier": "mit_26.RULE", + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/mit_26.RULE", + "matched_text": "The MIT License (MIT)" + }, + { + "license_expression": "mit", + "license_expression_spdx": "MIT", + "from_file": null, + "start_line": 5, + "end_line": 21, + "matcher": "2-aho", + "score": 100.0, + "matched_length": 161, + "match_coverage": 100.0, + "rule_relevance": 100, + "rule_identifier": "mit.LICENSE", + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/licenses/mit.LICENSE", + "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." + } + ], + "identifier": "mit-86fcf017-3572-9813-b7e8-0a10ec4a120f" + }, + { + "license_expression": "mit", + "license_expression_spdx": "MIT", + "matches": [ + { + "license_expression": "mit", + "license_expression_spdx": "MIT", + "from_file": null, + "start_line": 1, + "end_line": 1, + "matcher": "1-hash", + "score": 100.0, + "matched_length": 5, + "match_coverage": 100.0, + "rule_relevance": 100, + "rule_identifier": "pypi_mit_license.RULE", + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_mit_license.RULE", + "matched_text": "- 'License :: OSI Approved :: MIT License'" + } + ], + "identifier": "mit-24a5293c-14d7-5403-efac-1a8b7532c0e8" + } + ], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": "license: |\n The MIT License (MIT)\n\n Copyright (c) 2023 Michael Dawson-Haggerty\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\nclassifiers:\n - 'License :: OSI Approved :: MIT License'\n", + "notice_text": null, + "source_packages": [], + "file_references": [], + "is_private": false, + "is_virtual": false, + "extra_data": { + "documentation": "https://trimesh.org", + "license_file": "LICENSE.md" + }, + "dependencies": [ + { + "purl": "pkg:pypi/numpy", + "extracted_requirement": ">=1.20", + "scope": "install", + "is_runtime": true, + "is_optional": false, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/colorlog", + "extracted_requirement": null, + "scope": "easy", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/manifold3d", + "extracted_requirement": ">=2.3.0", + "scope": "easy", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/chardet", + "extracted_requirement": null, + "scope": "easy", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/lxml", + "extracted_requirement": null, + "scope": "easy", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/jsonschema", + "extracted_requirement": null, + "scope": "easy", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/networkx", + "extracted_requirement": null, + "scope": "easy", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/svg-path", + "extracted_requirement": null, + "scope": "easy", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pycollada", + "extracted_requirement": null, + "scope": "easy", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/setuptools", + "extracted_requirement": null, + "scope": "easy", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/shapely", + "extracted_requirement": null, + "scope": "easy", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/xxhash", + "extracted_requirement": null, + "scope": "easy", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/rtree", + "extracted_requirement": null, + "scope": "easy", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/httpx", + "extracted_requirement": null, + "scope": "easy", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/scipy", + "extracted_requirement": null, + "scope": "easy", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/embreex", + "extracted_requirement": null, + "scope": "easy", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pillow", + "extracted_requirement": null, + "scope": "easy", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/xatlas", + "extracted_requirement": null, + "scope": "easy", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/vhacdx", + "extracted_requirement": null, + "scope": "easy", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": { + "python_version": ">= 3.9" + } + }, + { + "purl": "pkg:pypi/mapbox-earcut", + "extracted_requirement": ">=1.0.2", + "scope": "easy", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": { + "python_version": ">= 3.9" + } + }, + { + "purl": "pkg:pypi/sympy", + "extracted_requirement": null, + "scope": "recommend", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/meshio", + "extracted_requirement": null, + "scope": "recommend", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pyglet", + "extracted_requirement": "<2", + "scope": "recommend", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/psutil", + "extracted_requirement": null, + "scope": "recommend", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/scikit-image", + "extracted_requirement": null, + "scope": "recommend", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/fast-simplification", + "extracted_requirement": null, + "scope": "recommend", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/openctm", + "extracted_requirement": null, + "scope": "recommend", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/cascadio", + "extracted_requirement": null, + "scope": "recommend", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pytest-cov", + "extracted_requirement": null, + "scope": "test", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pytest", + "extracted_requirement": null, + "scope": "test", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pyinstrument", + "extracted_requirement": null, + "scope": "test", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/ruff", + "extracted_requirement": null, + "scope": "test", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/coveralls", + "extracted_requirement": null, + "scope": "test-more", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pyright", + "extracted_requirement": null, + "scope": "test-more", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/ezdxf", + "extracted_requirement": null, + "scope": "test-more", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pytest-beartype", + "extracted_requirement": null, + "scope": "test-more", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": { + "python_version": ">= 3.10" + } + }, + { + "purl": "pkg:pypi/matplotlib", + "extracted_requirement": null, + "scope": "test-more", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pymeshlab", + "extracted_requirement": null, + "scope": "test-more", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/triangle", + "extracted_requirement": null, + "scope": "test-more", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/ipython", + "extracted_requirement": null, + "scope": "test-more", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/gmsh@4.12.2", + "extracted_requirement": "==4.12.2", + "scope": "deprecated", + "is_runtime": true, + "is_optional": true, + "is_pinned": true, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/trimesh", + "extracted_requirement": null, + "scope": "all", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + } + ], + "repository_homepage_url": "https://pypi.org/project/trimesh", + "repository_download_url": "https://pypi.org/packages/source/t/trimesh/trimesh-4.6.1.tar.gz", + "api_data_url": "https://pypi.org/pypi/trimesh/4.6.1/json", + "datasource_id": "pypi_wheel_metadata", + "purl": "pkg:pypi/trimesh@4.6.1" + } +] diff --git a/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.2/trimesh-4.6.1.dist-info/METADATA b/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.2/trimesh-4.6.1.dist-info/METADATA new file mode 100644 index 0000000000..2760e47d91 --- /dev/null +++ b/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.2/trimesh-4.6.1.dist-info/METADATA @@ -0,0 +1,93 @@ +Metadata-Version: 2.2 +Name: trimesh +Version: 4.6.1 +Summary: Import, export, process, analyze and view triangular meshes. +Author-email: Michael Dawson-Haggerty +License: The MIT License (MIT) + + Copyright (c) 2023 Michael Dawson-Haggerty + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + +Project-URL: homepage, https://github.com/mikedh/trimesh +Project-URL: documentation, https://trimesh.org +Keywords: graphics,mesh,geometry,3D +Classifier: Development Status :: 4 - Beta +Classifier: License :: OSI Approved :: MIT License +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Natural Language :: English +Classifier: Topic :: Scientific/Engineering +Classifier: Topic :: Multimedia :: Graphics +Classifier: Topic :: Multimedia :: Graphics :: 3D Modeling +Requires-Python: >=3.8 +Description-Content-Type: text/markdown +License-File: LICENSE.md +Requires-Dist: numpy>=1.20 +Provides-Extra: easy +Requires-Dist: colorlog; extra == "easy" +Requires-Dist: manifold3d>=2.3.0; extra == "easy" +Requires-Dist: chardet; extra == "easy" +Requires-Dist: lxml; extra == "easy" +Requires-Dist: jsonschema; extra == "easy" +Requires-Dist: networkx; extra == "easy" +Requires-Dist: svg.path; extra == "easy" +Requires-Dist: pycollada; extra == "easy" +Requires-Dist: setuptools; extra == "easy" +Requires-Dist: shapely; extra == "easy" +Requires-Dist: xxhash; extra == "easy" +Requires-Dist: rtree; extra == "easy" +Requires-Dist: httpx; extra == "easy" +Requires-Dist: scipy; extra == "easy" +Requires-Dist: embreex; platform_machine == "x86_64" and extra == "easy" +Requires-Dist: pillow; extra == "easy" +Requires-Dist: xatlas; extra == "easy" +Requires-Dist: vhacdx; python_version >= "3.9" and extra == "easy" +Requires-Dist: mapbox_earcut>=1.0.2; python_version >= "3.9" and extra == "easy" +Provides-Extra: recommend +Requires-Dist: sympy; extra == "recommend" +Requires-Dist: meshio; extra == "recommend" +Requires-Dist: pyglet<2; extra == "recommend" +Requires-Dist: psutil; extra == "recommend" +Requires-Dist: scikit-image; extra == "recommend" +Requires-Dist: fast-simplification; extra == "recommend" +Requires-Dist: openctm; platform_machine == "x86_64" and extra == "recommend" +Requires-Dist: cascadio; extra == "recommend" +Provides-Extra: test +Requires-Dist: pytest-cov; extra == "test" +Requires-Dist: pytest; extra == "test" +Requires-Dist: pyinstrument; extra == "test" +Requires-Dist: ruff; extra == "test" +Provides-Extra: test-more +Requires-Dist: coveralls; extra == "test-more" +Requires-Dist: pyright; extra == "test-more" +Requires-Dist: ezdxf; extra == "test-more" +Requires-Dist: pytest-beartype; python_version >= "3.10" and extra == "test-more" +Requires-Dist: matplotlib; extra == "test-more" +Requires-Dist: pymeshlab; extra == "test-more" +Requires-Dist: triangle; extra == "test-more" +Requires-Dist: ipython; extra == "test-more" +Provides-Extra: deprecated +Requires-Dist: gmsh==4.12.2; extra == "deprecated" +Provides-Extra: all +Requires-Dist: trimesh[deprecated,easy,recommend,test,test_more]; extra == "all" \ No newline at end of file diff --git a/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.4/narwhals-1.29.0.dist-info-expected.json b/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.4/narwhals-1.29.0.dist-info-expected.json new file mode 100644 index 0000000000..f2b162dc34 --- /dev/null +++ b/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.4/narwhals-1.29.0.dist-info-expected.json @@ -0,0 +1,676 @@ +[ + { + "type": "pypi", + "namespace": null, + "name": "narwhals", + "version": "1.29.0", + "qualifiers": {}, + "subpath": null, + "primary_language": "Python", + "description": "Extremely lightweight compatibility layer between dataframe libraries", + "release_date": null, + "parties": [ + { + "type": "person", + "role": "author", + "name": null, + "email": "Marco Gorelli <33491632+MarcoGorelli@users.noreply.github.com>", + "url": null + } + ], + "keywords": [ + "cudf", + "dask", + "dataframes", + "interoperability", + "modin", + "pandas", + "polars", + "pyarrow", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Typing :: Typed" + ], + "homepage_url": "https://github.com/narwhals-dev/narwhals", + "download_url": null, + "size": null, + "sha1": null, + "md5": null, + "sha256": null, + "sha512": null, + "bug_tracking_url": "https://github.com/narwhals-dev/narwhals/issues", + "code_view_url": null, + "vcs_url": "https://github.com/narwhals-dev/narwhals", + "copyright": null, + "holder": null, + "declared_license_expression": "mit", + "declared_license_expression_spdx": "MIT", + "license_detections": [ + { + "license_expression": "mit", + "license_expression_spdx": "MIT", + "matches": [ + { + "license_expression": "mit", + "license_expression_spdx": "MIT", + "from_file": null, + "start_line": 1, + "end_line": 1, + "matcher": "1-hash", + "score": 100.0, + "matched_length": 5, + "match_coverage": 100.0, + "rule_relevance": 100, + "rule_identifier": "pypi_mit_license.RULE", + "rule_url": "https://github.com/nexB/scancode-toolkit/tree/develop/src/licensedcode/data/rules/pypi_mit_license.RULE", + "matched_text": "- 'License :: OSI Approved :: MIT License'" + } + ], + "identifier": "mit-24a5293c-14d7-5403-efac-1a8b7532c0e8" + } + ], + "other_license_expression": null, + "other_license_expression_spdx": null, + "other_license_detections": [], + "extracted_license_statement": "classifiers:\n - 'License :: OSI Approved :: MIT License'\n", + "notice_text": null, + "source_packages": [], + "file_references": [], + "is_private": false, + "is_virtual": false, + "extra_data": { + "Documentation": "https://narwhals-dev.github.io/narwhals/", + "license_file": "LICENSE.md" + }, + "dependencies": [ + { + "purl": "pkg:pypi/duckdb", + "extracted_requirement": null, + "scope": "core", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pandas", + "extracted_requirement": null, + "scope": "core", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/polars", + "extracted_requirement": null, + "scope": "core", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pyarrow", + "extracted_requirement": null, + "scope": "core", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pyarrow-stubs", + "extracted_requirement": null, + "scope": "core", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/cudf", + "extracted_requirement": ">=24.10.0", + "scope": "cudf", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/dask", + "extracted_requirement": ">=2024.8", + "scope": "dask", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/covdefaults", + "extracted_requirement": null, + "scope": "dev", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/hypothesis", + "extracted_requirement": null, + "scope": "dev", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/mypy", + "extracted_requirement": "~=1.15.0", + "scope": "dev", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pandas-stubs", + "extracted_requirement": null, + "scope": "dev", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pre-commit", + "extracted_requirement": null, + "scope": "dev", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pyright", + "extracted_requirement": null, + "scope": "dev", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pytest", + "extracted_requirement": null, + "scope": "dev", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pytest-cov", + "extracted_requirement": null, + "scope": "dev", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pytest-env", + "extracted_requirement": null, + "scope": "dev", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pytest-randomly", + "extracted_requirement": null, + "scope": "dev", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/typing-extensions", + "extracted_requirement": null, + "scope": "dev", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/black", + "extracted_requirement": null, + "scope": "docs", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/duckdb", + "extracted_requirement": null, + "scope": "docs", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/jinja2", + "extracted_requirement": null, + "scope": "docs", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/markdown-exec", + "extracted_requirement": null, + "scope": "docs", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/mkdocs", + "extracted_requirement": null, + "scope": "docs", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/mkdocs-autorefs", + "extracted_requirement": null, + "scope": "docs", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/mkdocs-material", + "extracted_requirement": null, + "scope": "docs", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/mkdocstrings-python", + "extracted_requirement": ">=1.16", + "scope": "docs", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/mkdocstrings", + "extracted_requirement": null, + "scope": "docs", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pandas", + "extracted_requirement": null, + "scope": "docs", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/polars", + "extracted_requirement": ">=1.0.0", + "scope": "docs", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pyarrow", + "extracted_requirement": null, + "scope": "docs", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/duckdb", + "extracted_requirement": ">=1.0", + "scope": "duckdb", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/scikit-learn", + "extracted_requirement": null, + "scope": "extra", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/ibis-framework", + "extracted_requirement": ">=6.0.0", + "scope": "ibis", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/packaging", + "extracted_requirement": null, + "scope": "ibis", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pyarrow-hotfix", + "extracted_requirement": null, + "scope": "ibis", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/rich", + "extracted_requirement": null, + "scope": "ibis", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/modin", + "extracted_requirement": null, + "scope": "modin", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pandas", + "extracted_requirement": ">=0.25.3", + "scope": "pandas", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/polars", + "extracted_requirement": ">=0.20.3", + "scope": "polars", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pyarrow", + "extracted_requirement": ">=11.0.0", + "scope": "pyarrow", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pyspark", + "extracted_requirement": ">=3.5.0", + "scope": "pyspark", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/sqlframe", + "extracted_requirement": ">=3.22.0", + "scope": "sqlframe", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/covdefaults", + "extracted_requirement": null, + "scope": "tests", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/hypothesis", + "extracted_requirement": null, + "scope": "tests", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pytest", + "extracted_requirement": null, + "scope": "tests", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pytest-cov", + "extracted_requirement": null, + "scope": "tests", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pytest-env", + "extracted_requirement": null, + "scope": "tests", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pytest-randomly", + "extracted_requirement": null, + "scope": "tests", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/typing-extensions", + "extracted_requirement": null, + "scope": "tests", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/mypy", + "extracted_requirement": "~=1.15.0", + "scope": "typing", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pandas-stubs", + "extracted_requirement": null, + "scope": "typing", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/pyright", + "extracted_requirement": null, + "scope": "typing", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + }, + { + "purl": "pkg:pypi/typing-extensions", + "extracted_requirement": null, + "scope": "typing", + "is_runtime": true, + "is_optional": true, + "is_pinned": false, + "is_direct": true, + "resolved_package": {}, + "extra_data": {} + } + ], + "repository_homepage_url": "https://pypi.org/project/narwhals", + "repository_download_url": "https://pypi.org/packages/source/n/narwhals/narwhals-1.29.0.tar.gz", + "api_data_url": "https://pypi.org/pypi/narwhals/1.29.0/json", + "datasource_id": "pypi_wheel_metadata", + "purl": "pkg:pypi/narwhals@1.29.0" + } +] diff --git a/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.4/narwhals-1.29.0.dist-info/METADATA b/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.4/narwhals-1.29.0.dist-info/METADATA new file mode 100644 index 0000000000..cf4594f574 --- /dev/null +++ b/tests/packagedcode/data/pypi/unpacked_wheel/metadata-2.4/narwhals-1.29.0.dist-info/METADATA @@ -0,0 +1,86 @@ +Metadata-Version: 2.4 +Name: narwhals +Version: 1.29.0 +Summary: Extremely lightweight compatibility layer between dataframe libraries +Project-URL: Homepage, https://github.com/narwhals-dev/narwhals +Project-URL: Documentation, https://narwhals-dev.github.io/narwhals/ +Project-URL: Repository, https://github.com/narwhals-dev/narwhals +Project-URL: Bug Tracker, https://github.com/narwhals-dev/narwhals/issues +Author-email: Marco Gorelli <33491632+MarcoGorelli@users.noreply.github.com> +License-File: LICENSE.md +Keywords: cudf,dask,dataframes,interoperability,modin,pandas,polars,pyarrow +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python +Classifier: Typing :: Typed +Requires-Python: >=3.8 +Provides-Extra: core +Requires-Dist: duckdb; extra == 'core' +Requires-Dist: pandas; extra == 'core' +Requires-Dist: polars; extra == 'core' +Requires-Dist: pyarrow; extra == 'core' +Requires-Dist: pyarrow-stubs; extra == 'core' +Provides-Extra: cudf +Requires-Dist: cudf>=24.10.0; extra == 'cudf' +Provides-Extra: dask +Requires-Dist: dask[dataframe]>=2024.8; extra == 'dask' +Provides-Extra: dev +Requires-Dist: covdefaults; extra == 'dev' +Requires-Dist: hypothesis; extra == 'dev' +Requires-Dist: mypy~=1.15.0; extra == 'dev' +Requires-Dist: pandas-stubs; extra == 'dev' +Requires-Dist: pre-commit; extra == 'dev' +Requires-Dist: pyright; extra == 'dev' +Requires-Dist: pytest; extra == 'dev' +Requires-Dist: pytest-cov; extra == 'dev' +Requires-Dist: pytest-env; extra == 'dev' +Requires-Dist: pytest-randomly; extra == 'dev' +Requires-Dist: typing-extensions; extra == 'dev' +Provides-Extra: docs +Requires-Dist: black; extra == 'docs' +Requires-Dist: duckdb; extra == 'docs' +Requires-Dist: jinja2; extra == 'docs' +Requires-Dist: markdown-exec[ansi]; extra == 'docs' +Requires-Dist: mkdocs; extra == 'docs' +Requires-Dist: mkdocs-autorefs; extra == 'docs' +Requires-Dist: mkdocs-material; extra == 'docs' +Requires-Dist: mkdocstrings-python>=1.16; extra == 'docs' +Requires-Dist: mkdocstrings[python]; extra == 'docs' +Requires-Dist: pandas; extra == 'docs' +Requires-Dist: polars>=1.0.0; extra == 'docs' +Requires-Dist: pyarrow; extra == 'docs' +Provides-Extra: duckdb +Requires-Dist: duckdb>=1.0; extra == 'duckdb' +Provides-Extra: extra +Requires-Dist: scikit-learn; extra == 'extra' +Provides-Extra: ibis +Requires-Dist: ibis-framework>=6.0.0; extra == 'ibis' +Requires-Dist: packaging; extra == 'ibis' +Requires-Dist: pyarrow-hotfix; extra == 'ibis' +Requires-Dist: rich; extra == 'ibis' +Provides-Extra: modin +Requires-Dist: modin; extra == 'modin' +Provides-Extra: pandas +Requires-Dist: pandas>=0.25.3; extra == 'pandas' +Provides-Extra: polars +Requires-Dist: polars>=0.20.3; extra == 'polars' +Provides-Extra: pyarrow +Requires-Dist: pyarrow>=11.0.0; extra == 'pyarrow' +Provides-Extra: pyspark +Requires-Dist: pyspark>=3.5.0; extra == 'pyspark' +Provides-Extra: sqlframe +Requires-Dist: sqlframe>=3.22.0; extra == 'sqlframe' +Provides-Extra: tests +Requires-Dist: covdefaults; extra == 'tests' +Requires-Dist: hypothesis; extra == 'tests' +Requires-Dist: pytest; extra == 'tests' +Requires-Dist: pytest-cov; extra == 'tests' +Requires-Dist: pytest-env; extra == 'tests' +Requires-Dist: pytest-randomly; extra == 'tests' +Requires-Dist: typing-extensions; extra == 'tests' +Provides-Extra: typing +Requires-Dist: mypy~=1.15.0; extra == 'typing' +Requires-Dist: pandas-stubs; extra == 'typing' +Requires-Dist: pyright; extra == 'typing' +Requires-Dist: typing-extensions; extra == 'typing' +Description-Content-Type: text/markdown \ No newline at end of file diff --git a/tests/packagedcode/test_pypi.py b/tests/packagedcode/test_pypi.py index e0d2588974..984cd8eb38 100644 --- a/tests/packagedcode/test_pypi.py +++ b/tests/packagedcode/test_pypi.py @@ -140,6 +140,18 @@ def test_parse_sdist_pkg_infometadata_format_v21(self): expected_loc = self.get_test_loc('pypi/metadata/v21/PKG-INFO-expected.json') self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) + def test_parse_sdist_pkg_infometadata_format_v22(self): + test_file = self.get_test_loc('pypi/metadata/v22/PKG-INFO') + package = pypi.PythonSdistPkgInfoFile.parse(test_file) + expected_loc = self.get_test_loc('pypi/metadata/v22/PKG-INFO-expected.json') + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) + + def test_parse_sdist_pkg_infometadata_format_v23(self): + test_file = self.get_test_loc('pypi/metadata/v23/PKG-INFO') + package = pypi.PythonSdistPkgInfoFile.parse(test_file) + expected_loc = self.get_test_loc('pypi/metadata/v23/PKG-INFO-expected.json') + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) + def test_parse_sdist_pkg_info_basic(self): test_file = self.get_test_loc('pypi/metadata/PKG-INFO') package = pypi.PythonSdistPkgInfoFile.parse(test_file) @@ -238,12 +250,24 @@ def test_parse_with_unpacked_wheel_meta_v21__with_sources(self): expected_loc = self.get_test_loc('pypi/unpacked_wheel/metadata-2.1/with_sources/anonapi-0.0.19.dist-info-expected.json') self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) + def test_parse_with_unpacked_wheel_meta_v22_1(self): + test_file = self.get_test_loc('pypi/unpacked_wheel/metadata-2.2/trimesh-4.6.1.dist-info/METADATA') + package = pypi.PythonInstalledWheelMetadataFile.parse(test_file) + expected_loc = self.get_test_loc('pypi/unpacked_wheel/metadata-2.2/trimesh-4.6.1.dist-info-expected.json') + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) + def test_parse_with_unpacked_wheel_meta_v23_1(self): test_file = self.get_test_loc('pypi/unpacked_wheel/metadata-2.3/beartype-0.19.0.dist-info/METADATA') package = pypi.PythonInstalledWheelMetadataFile.parse(test_file) expected_loc = self.get_test_loc('pypi/unpacked_wheel/metadata-2.3/beartype-0.19.0.dist-info-expected.json') self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) + def test_parse_with_unpacked_wheel_meta_v24_1(self): + test_file = self.get_test_loc('pypi/unpacked_wheel/metadata-2.4/narwhals-1.29.0.dist-info/METADATA') + package = pypi.PythonInstalledWheelMetadataFile.parse(test_file) + expected_loc = self.get_test_loc('pypi/unpacked_wheel/metadata-2.4/narwhals-1.29.0.dist-info-expected.json') + self.check_packages_data(package, expected_loc, regen=REGEN_TEST_FIXTURES) + class TestPypiUnpackedSdist(PackageTester): test_data_dir = os.path.join(os.path.dirname(__file__), 'data')