Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGES/997.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Added core metadata to Simple API (PEP 714)
10 changes: 6 additions & 4 deletions pulp_python/app/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,13 +58,13 @@
<h1>Links for {{ project_name }}</h1>
{%- for pkg in project_packages %}
<a href="{{ pkg.url }}#sha256={{ pkg.sha256 }}" rel="internal"
{%- if pkg.metadata_sha256 %} data-dist-info-metadata="sha256={{ pkg.metadata_sha256 }}"
{%- if pkg.metadata_sha256 %} data-dist-info-metadata="sha256={{ pkg.metadata_sha256 }}" data-core-metadata="sha256={{ pkg.metadata_sha256 }}"
{%- endif %} {% if pkg.provenance -%}
data-provenance="{{ pkg.provenance }}"{% endif %}>{{ pkg.filename }}</a><br/>
{%- endfor %}
</body>
</html>
"""
""" # noqa: E501

DIST_EXTENSIONS = {
".whl": "bdist_wheel",
Expand Down Expand Up @@ -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),
}
Expand Down
2 changes: 2 additions & 0 deletions pulp_python/tests/functional/api/test_pypi_simple_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
31 changes: 15 additions & 16 deletions pulp_python/tests/functional/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down