diff --git a/CHANGES/997.feature b/CHANGES/997.feature new file mode 100644 index 00000000..44e97f40 --- /dev/null +++ b/CHANGES/997.feature @@ -0,0 +1 @@ +Added core metadata to Simple API (PEP 714) diff --git a/pulp_python/app/utils.py b/pulp_python/app/utils.py index 6b5030c6..5781ac7f 100644 --- a/pulp_python/app/utils.py +++ b/pulp_python/app/utils.py @@ -58,13 +58,13 @@

Links for {{ project_name }}

{%- for pkg in project_packages %} {{ pkg.filename }}
{%- endfor %} -""" +""" # noqa: E501 DIST_EXTENSIONS = { ".whl": "bdist_wheel", @@ -536,12 +536,14 @@ def write_simple_detail_json(project_name, project_packages): "data-dist-info-metadata": ( {"sha256": package["metadata_sha256"]} if package["metadata_sha256"] else False ), + # PEP 714 + "core-metadata": ( + {"sha256": package["metadata_sha256"]} if package["metadata_sha256"] else False + ), # yanked and yanked_reason are not implemented because they are mutable # (v1.1, PEP 700) "size": package["size"], "upload-time": format_upload_time(package["upload_time"]), - # TODO in the future: - # core-metadata (PEP 7.14) # (v1.3, PEP 740) "provenance": package.get("provenance", None), } diff --git a/pulp_python/tests/functional/api/test_pypi_simple_api.py b/pulp_python/tests/functional/api/test_pypi_simple_api.py index 5043377a..57b640d9 100644 --- a/pulp_python/tests/functional/api/test_pypi_simple_api.py +++ b/pulp_python/tests/functional/api/test_pypi_simple_api.py @@ -142,6 +142,7 @@ def test_simple_json_detail_api( assert file_whl["hashes"] == {"sha256": PYTHON_WHEEL_SHA256} assert file_whl["requires-python"] is None assert file_whl["data-dist-info-metadata"] == {"sha256": PYTHON_WHEEL_METADATA_SHA256} + assert file_whl["core-metadata"] == {"sha256": PYTHON_WHEEL_METADATA_SHA256} assert file_whl["size"] == 22455 assert file_whl["upload-time"] is not None # Check data of a tarball @@ -151,6 +152,7 @@ def test_simple_json_detail_api( assert file_tar["hashes"] == {"sha256": PYTHON_EGG_SHA256} assert file_tar["requires-python"] is None assert file_tar["data-dist-info-metadata"] is False + assert file_tar["core-metadata"] is False assert file_tar["size"] == 19097 assert file_tar["upload-time"] is not None assert file_tar["provenance"] is None diff --git a/pulp_python/tests/functional/utils.py b/pulp_python/tests/functional/utils.py index cd8354fd..2e6d1f40 100644 --- a/pulp_python/tests/functional/utils.py +++ b/pulp_python/tests/functional/utils.py @@ -6,24 +6,23 @@ def _validate_metadata_sha_digest(link, filename, metadata_sha_digests): """ - Validate data-dist-info-metadata attribute for a release link. + Validate data-dist-info-metadata and data-core-metadata attributes for a release link. """ - data_dist_info_metadata = link.get("data-dist-info-metadata") + expected_metadata_sha = metadata_sha_digests.get(filename) + expected_attr = f"sha256={expected_metadata_sha}" if expected_metadata_sha else None - if expected_metadata_sha := metadata_sha_digests.get(filename): - expected_attr = f"sha256={expected_metadata_sha}" - if data_dist_info_metadata != expected_attr: - return ( - f"\nFile {filename} has incorrect data-dist-info-metadata: " - f"expected '{expected_attr}', got '{data_dist_info_metadata}'" - ) - else: - if data_dist_info_metadata: - return ( - f"\nFile {filename} should not have data-dist-info-metadata " - f"but has '{data_dist_info_metadata}'" - ) - return "" + msgs = "" + for attr_name in ["data-dist-info-metadata", "data-core-metadata"]: + attr_value = link.get(attr_name) + if attr_value != expected_attr: + if expected_attr: + msgs += ( + f"\nFile {filename} has incorrect {attr_name}: " + f"expected '{expected_attr}', got '{attr_value}'" + ) + else: + msgs += f"\nFile {filename} should not have {attr_name} but has '{attr_value}'" + return msgs def ensure_simple(simple_url, packages, sha_digests=None, metadata_sha_digests=None):