pulp-python 3.31.1__tar.gz → 3.31.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pulp_python-3.31.1 → pulp_python-3.31.2}/CHANGES.md +8 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/PKG-INFO +1 -1
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/__init__.py +1 -1
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/tasks/sync.py +1 -1
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_attestations.py +48 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_crud_content_unit.py +0 -2
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python.egg-info/PKG-INFO +1 -1
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pyproject.toml +2 -2
- {pulp_python-3.31.1 → pulp_python-3.31.2}/COMMITMENT +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/COPYRIGHT +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/LICENSE +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/MANIFEST.in +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/README.md +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/functest_requirements.txt +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/__init__.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/exceptions.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/global_access_conditions.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/management/__init__.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/management/commands/__init__.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/management/commands/repair-python-metadata.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0001_initial.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0001_squashed_0010_update_json_field.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0002_pythonpackagecontent_python_version.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0003_new_sync_filters.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0004_DATA_swap_distribution_model.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0005_pythonpackagecontent_sha256.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0006_pythonrepository_autopublish.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0007_pythonpackagecontent_mv-2-1.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0008_pythonpackagecontent_unique_sha256.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0009_pythondistribution_allow_uploads.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0010_update_json_field.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0011_alter_pythondistribution_distribution_ptr_and_more.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0012_add_domain.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0013_add_rbac_permissions.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0014_pythonpackagecontent_dynamic_and_more.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0015_alter_pythonpackagecontent_options.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0016_pythonpackagecontent_metadata_sha256.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0017_pythonpackagecontent_size.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0018_packageprovenance.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0019_create_missing_metadata_artifacts.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0020_pythonpackagecontent_name_normalized.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0021_pythonrepository_upload_duplicate_filenames.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0022_pythonblocklistentry.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/__init__.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/modelresource.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/models.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/provenance.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/pypi/__init__.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/pypi/serializers.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/pypi/views.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/replica.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/serializers.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/settings.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/tasks/__init__.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/tasks/publish.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/tasks/repair.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/tasks/upload.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/tasks/vulnerability_report.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/urls.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/utils.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/viewsets.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/webserver_snippets/__init__.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/webserver_snippets/apache.conf +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/webserver_snippets/nginx.conf +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/pytest_plugin.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/__init__.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/__init__.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/__init__.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_auto_publish.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_blocklist.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_consume_content.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_crud_publications.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_crud_remotes.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_domains.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_download_content.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_export_import.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_full_mirror.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_pypi_apis.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_pypi_simple_api.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_rbac.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_repair.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_sync.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_upload.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_vulnerability_report.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/assets/shelf-reader-0.1.tar.gz.publish.attestation +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/assets/shelf_reader-0.1-py2-none-any.whl.publish.attestation +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/constants.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/utils.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/unit/__init__.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/unit/test_models.py +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python.egg-info/SOURCES.txt +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python.egg-info/dependency_links.txt +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python.egg-info/entry_points.txt +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python.egg-info/requires.txt +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python.egg-info/top_level.txt +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/setup.cfg +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/test_requirements.txt +0 -0
- {pulp_python-3.31.1 → pulp_python-3.31.2}/unittest_requirements.txt +0 -0
|
@@ -8,6 +8,14 @@
|
|
|
8
8
|
|
|
9
9
|
[//]: # (towncrier release notes start)
|
|
10
10
|
|
|
11
|
+
## 3.31.2 (2026-07-15) {: #3.31.2 }
|
|
12
|
+
|
|
13
|
+
#### Bugfixes {: #3.31.2-bugfix }
|
|
14
|
+
|
|
15
|
+
- Fixed provenance sync failing when syncing Pulp-created attestations that use a `Pulp User` publisher.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
11
19
|
## 3.31.1 (2026-06-30) {: #3.31.1 }
|
|
12
20
|
|
|
13
21
|
#### Bugfixes {: #3.31.1-bugfix }
|
|
@@ -9,7 +9,6 @@ from bandersnatch.master import Master
|
|
|
9
9
|
from bandersnatch.mirror import Mirror
|
|
10
10
|
from lxml.etree import LxmlError
|
|
11
11
|
from packaging.requirements import Requirement
|
|
12
|
-
from pypi_attestations import Provenance
|
|
13
12
|
from pypi_simple import IndexPage
|
|
14
13
|
|
|
15
14
|
from pulpcore.plugin.download import HttpDownloader
|
|
@@ -28,6 +27,7 @@ from pulp_python.app.models import (
|
|
|
28
27
|
PythonPackageContent,
|
|
29
28
|
PythonRemote,
|
|
30
29
|
)
|
|
30
|
+
from pulp_python.app.provenance import Provenance
|
|
31
31
|
from pulp_python.app.utils import PYPI_LAST_SERIAL, aget_remote_simple_page, parse_metadata
|
|
32
32
|
|
|
33
33
|
logger = logging.getLogger(__name__)
|
{pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_attestations.py
RENAMED
|
@@ -154,6 +154,54 @@ def test_attestation_sync_upload(python_bindings, twine_package, download_python
|
|
|
154
154
|
assert att_bundle["publisher"]["kind"] == "Pulp User"
|
|
155
155
|
|
|
156
156
|
|
|
157
|
+
@pytest.mark.parallel
|
|
158
|
+
def test_sync_pulp_created_provenance(
|
|
159
|
+
domain_factory,
|
|
160
|
+
python_bindings,
|
|
161
|
+
twine_package,
|
|
162
|
+
python_repo_factory,
|
|
163
|
+
python_distribution_factory,
|
|
164
|
+
python_remote_factory,
|
|
165
|
+
python_repo_with_sync,
|
|
166
|
+
python_content_summary,
|
|
167
|
+
monitor_task,
|
|
168
|
+
):
|
|
169
|
+
"""Test syncing provenance across domains from a Pulp upload."""
|
|
170
|
+
source_domain = domain_factory()
|
|
171
|
+
attestations = get_attestations(twine_package.provenance_url)
|
|
172
|
+
source_repo = python_repo_factory(pulp_domain=source_domain.name)
|
|
173
|
+
body = {
|
|
174
|
+
"relative_path": twine_package.filename,
|
|
175
|
+
"file_url": twine_package.url,
|
|
176
|
+
"attestations": json.dumps(attestations),
|
|
177
|
+
"repository": source_repo.pulp_href,
|
|
178
|
+
}
|
|
179
|
+
task = python_bindings.ContentPackagesApi.create(pulp_domain=source_domain.name, **body).task
|
|
180
|
+
monitor_task(task)
|
|
181
|
+
|
|
182
|
+
source_distro = python_distribution_factory(
|
|
183
|
+
repository=source_repo, pulp_domain=source_domain.name
|
|
184
|
+
)
|
|
185
|
+
dest_domain = domain_factory()
|
|
186
|
+
remote = python_remote_factory(
|
|
187
|
+
url=source_distro.base_url,
|
|
188
|
+
provenance=True,
|
|
189
|
+
includes=[f"twine=={twine_package.version}"],
|
|
190
|
+
pulp_domain=dest_domain.name,
|
|
191
|
+
)
|
|
192
|
+
dest_repo = python_repo_with_sync(remote=remote, pulp_domain=dest_domain.name)
|
|
193
|
+
|
|
194
|
+
summary = python_content_summary(repository_version=dest_repo.latest_version_href)
|
|
195
|
+
assert summary.present["python.provenance"]["count"] == 1
|
|
196
|
+
|
|
197
|
+
provs = python_bindings.ContentProvenanceApi.list(
|
|
198
|
+
repository_version=dest_repo.latest_version_href,
|
|
199
|
+
pulp_domain=dest_domain.name,
|
|
200
|
+
)
|
|
201
|
+
assert provs.count == 1
|
|
202
|
+
assert provs.results[0].provenance["attestation_bundles"][0]["publisher"]["kind"] == "Pulp User"
|
|
203
|
+
|
|
204
|
+
|
|
157
205
|
def test_attestation_twine_upload(
|
|
158
206
|
pulpcore_bindings,
|
|
159
207
|
python_content_summary,
|
{pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_crud_content_unit.py
RENAMED
|
@@ -203,7 +203,6 @@ def test_package_creation_with_metadata(
|
|
|
203
203
|
)
|
|
204
204
|
|
|
205
205
|
|
|
206
|
-
@pytest.mark.parallel
|
|
207
206
|
def test_disallow_package_substitution(
|
|
208
207
|
monitor_task,
|
|
209
208
|
python_bindings,
|
|
@@ -272,7 +271,6 @@ def test_disallow_package_substitution(
|
|
|
272
271
|
assert repo.latest_version_href.endswith("/2/")
|
|
273
272
|
|
|
274
273
|
|
|
275
|
-
@pytest.mark.parallel
|
|
276
274
|
def test_package_substitution_allowed_by_default(
|
|
277
275
|
monitor_task,
|
|
278
276
|
python_bindings,
|
|
@@ -7,7 +7,7 @@ build-backend = 'setuptools.build_meta'
|
|
|
7
7
|
|
|
8
8
|
[project]
|
|
9
9
|
name = "pulp-python"
|
|
10
|
-
version = "3.31.
|
|
10
|
+
version = "3.31.2"
|
|
11
11
|
description = "pulp-python plugin for the Pulp Project"
|
|
12
12
|
readme = "README.md"
|
|
13
13
|
authors = [
|
|
@@ -79,7 +79,7 @@ ignore = [
|
|
|
79
79
|
[tool.bumpversion]
|
|
80
80
|
# This section is managed by the plugin template. Do not edit manually.
|
|
81
81
|
|
|
82
|
-
current_version = "3.31.
|
|
82
|
+
current_version = "3.31.2"
|
|
83
83
|
commit = false
|
|
84
84
|
tag = false
|
|
85
85
|
parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<alpha>0a)?(?P<patch>\\d+)(\\.(?P<release>[a-z]+))?"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0003_new_sync_filters.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0010_update_json_field.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0013_add_rbac_permissions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0018_packageprovenance.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/app/migrations/0022_pythonblocklistentry.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_auto_publish.py
RENAMED
|
File without changes
|
{pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_blocklist.py
RENAMED
|
File without changes
|
{pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_consume_content.py
RENAMED
|
File without changes
|
{pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_crud_publications.py
RENAMED
|
File without changes
|
{pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_crud_remotes.py
RENAMED
|
File without changes
|
|
File without changes
|
{pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_download_content.py
RENAMED
|
File without changes
|
{pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_export_import.py
RENAMED
|
File without changes
|
{pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_full_mirror.py
RENAMED
|
File without changes
|
{pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_pypi_apis.py
RENAMED
|
File without changes
|
{pulp_python-3.31.1 → pulp_python-3.31.2}/pulp_python/tests/functional/api/test_pypi_simple_api.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|