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/682.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fixed uploads not supporting packages using metadata spec 2.3
15 changes: 15 additions & 0 deletions pulp_python/tests/functional/api/test_crud_content_unit.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# coding=utf-8
"""Tests that perform actions over content unit."""
import pytest
from pulp_smash.pulp3.bindings import delete_orphans, monitor_task, PulpTaskError

from pulp_python.tests.functional.utils import (
Expand All @@ -12,6 +13,7 @@
from pulp_python.tests.functional.utils import set_up_module as setUpModule # noqa:F401
from tempfile import NamedTemporaryFile
from urllib.parse import urljoin
from pypi_simple import PyPISimple

from pulp_smash.utils import http_get
from pulp_python.tests.functional.constants import (
Expand Down Expand Up @@ -227,3 +229,16 @@ def check_package_data(self, content_unit, expected=PYTHON_PACKAGE_DATA):
for k, v in expected.items():
with self.subTest(key=k):
self.assertEqual(content_unit[k], v)


@pytest.mark.parallel
def test_upload_metadata_23_spec(python_content_factory):
"""Test that packages using metadata spec 2.3 can be uploaded to pulp."""
filename = "urllib3-2.2.2-py3-none-any.whl"
with PyPISimple() as client:
page = client.get_project_page("urllib3")
for package in page.packages:
if package.filename == filename:
content = python_content_factory(filename, url=package.url)
assert content.metadata_version == "2.3"
break
33 changes: 33 additions & 0 deletions pulp_python/tests/functional/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import uuid

from pulp_smash.pulp3.utils import gen_distribution, gen_repo
from pulp_python.tests.functional.constants import PYTHON_EGG_FILENAME, PYTHON_URL
from pulp_python.tests.functional.utils import gen_python_remote

from pulpcore.client.pulp_python import (
Expand Down Expand Up @@ -130,6 +131,38 @@ def _gen_python_repo_sync(remote=None, mirror=False, repository=None, **body):
yield _gen_python_repo_sync


@pytest.fixture
def download_python_file(tmp_path, http_get):
"""Download a Python file and return its path."""
def _download_python_file(relative_path, url):
file_path = tmp_path / relative_path
with open(file_path, mode="wb") as f:
f.write(http_get(url))
return file_path

yield _download_python_file


@pytest.fixture
def python_content_factory(python_content_api_client, download_python_file, monitor_task):
"""A factory to create a Python Package Content."""
def _gen_python_content(relative_path=PYTHON_EGG_FILENAME, url=None, **body):
body["relative_path"] = relative_path
if url:
body["file"] = download_python_file(relative_path, url)
elif not any(x in body for x in ("artifact", "file", "upload")):
body["file"] = download_python_file(PYTHON_EGG_FILENAME, PYTHON_URL)
if repo := body.get("repository"):
repo_href = repo if isinstance(repo, str) else repo.pulp_href
body["repository"] = repo_href

task = python_content_api_client.create(**body).task
response = monitor_task(task)
return python_content_api_client.read(response.created_resources[0])

yield _gen_python_content


@pytest.fixture
def python_content_summary(python_repo_api_client, python_repo_version_api_client):
"""Get a summary of the repository version's content."""
Expand Down
4 changes: 3 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
pulpcore>=3.28.0,<3.40
pkginfo>=1.8.2,<1.9.7
pkginfo>=1.10.0,<1.12.0 # Twine has <1.11 in their requirements
bandersnatch>=6.1,<6.2
pypi-simple>=0.9.0,<1.0.0
# pinned until https://github.com/Azure/Azurite/issues/2562 is resolved
azure-storage-blob<12.26.0