pulp-python 3.27.4__tar.gz → 3.27.6__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.
Files changed (93) hide show
  1. {pulp_python-3.27.4 → pulp_python-3.27.6}/CHANGES.md +16 -0
  2. {pulp_python-3.27.4 → pulp_python-3.27.6}/PKG-INFO +1 -1
  3. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/__init__.py +1 -1
  4. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/tasks/sync.py +1 -1
  5. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/utils.py +2 -1
  6. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/tests/functional/api/test_attestations.py +48 -0
  7. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/tests/functional/api/test_pypi_apis.py +4 -3
  8. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python.egg-info/PKG-INFO +1 -1
  9. {pulp_python-3.27.4 → pulp_python-3.27.6}/pyproject.toml +2 -2
  10. {pulp_python-3.27.4 → pulp_python-3.27.6}/COMMITMENT +0 -0
  11. {pulp_python-3.27.4 → pulp_python-3.27.6}/COPYRIGHT +0 -0
  12. {pulp_python-3.27.4 → pulp_python-3.27.6}/LICENSE +0 -0
  13. {pulp_python-3.27.4 → pulp_python-3.27.6}/MANIFEST.in +0 -0
  14. {pulp_python-3.27.4 → pulp_python-3.27.6}/README.md +0 -0
  15. {pulp_python-3.27.4 → pulp_python-3.27.6}/functest_requirements.txt +0 -0
  16. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/__init__.py +0 -0
  17. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/global_access_conditions.py +0 -0
  18. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/management/__init__.py +0 -0
  19. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/management/commands/__init__.py +0 -0
  20. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/management/commands/repair-python-metadata.py +0 -0
  21. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/migrations/0001_initial.py +0 -0
  22. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/migrations/0001_squashed_0010_update_json_field.py +0 -0
  23. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/migrations/0002_pythonpackagecontent_python_version.py +0 -0
  24. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/migrations/0003_new_sync_filters.py +0 -0
  25. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/migrations/0004_DATA_swap_distribution_model.py +0 -0
  26. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/migrations/0005_pythonpackagecontent_sha256.py +0 -0
  27. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/migrations/0006_pythonrepository_autopublish.py +0 -0
  28. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/migrations/0007_pythonpackagecontent_mv-2-1.py +0 -0
  29. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/migrations/0008_pythonpackagecontent_unique_sha256.py +0 -0
  30. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/migrations/0009_pythondistribution_allow_uploads.py +0 -0
  31. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/migrations/0010_update_json_field.py +0 -0
  32. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/migrations/0011_alter_pythondistribution_distribution_ptr_and_more.py +0 -0
  33. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/migrations/0012_add_domain.py +0 -0
  34. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/migrations/0013_add_rbac_permissions.py +0 -0
  35. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/migrations/0014_pythonpackagecontent_dynamic_and_more.py +0 -0
  36. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/migrations/0015_alter_pythonpackagecontent_options.py +0 -0
  37. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/migrations/0016_pythonpackagecontent_metadata_sha256.py +0 -0
  38. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/migrations/0017_pythonpackagecontent_size.py +0 -0
  39. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/migrations/0018_packageprovenance.py +0 -0
  40. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/migrations/0019_create_missing_metadata_artifacts.py +0 -0
  41. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/migrations/__init__.py +0 -0
  42. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/modelresource.py +0 -0
  43. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/models.py +0 -0
  44. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/provenance.py +0 -0
  45. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/pypi/__init__.py +0 -0
  46. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/pypi/serializers.py +0 -0
  47. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/pypi/views.py +0 -0
  48. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/replica.py +0 -0
  49. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/serializers.py +0 -0
  50. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/settings.py +0 -0
  51. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/tasks/__init__.py +0 -0
  52. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/tasks/publish.py +0 -0
  53. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/tasks/repair.py +0 -0
  54. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/tasks/upload.py +0 -0
  55. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/tasks/vulnerability_report.py +0 -0
  56. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/urls.py +0 -0
  57. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/viewsets.py +0 -0
  58. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/webserver_snippets/__init__.py +0 -0
  59. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/webserver_snippets/apache.conf +0 -0
  60. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/app/webserver_snippets/nginx.conf +0 -0
  61. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/pytest_plugin.py +0 -0
  62. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/tests/__init__.py +0 -0
  63. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/tests/functional/__init__.py +0 -0
  64. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/tests/functional/api/__init__.py +0 -0
  65. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/tests/functional/api/test_auto_publish.py +0 -0
  66. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/tests/functional/api/test_consume_content.py +0 -0
  67. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/tests/functional/api/test_crud_content_unit.py +0 -0
  68. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/tests/functional/api/test_crud_publications.py +0 -0
  69. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/tests/functional/api/test_crud_remotes.py +0 -0
  70. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/tests/functional/api/test_domains.py +0 -0
  71. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/tests/functional/api/test_download_content.py +0 -0
  72. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/tests/functional/api/test_export_import.py +0 -0
  73. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/tests/functional/api/test_full_mirror.py +0 -0
  74. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/tests/functional/api/test_pypi_simple_api.py +0 -0
  75. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/tests/functional/api/test_rbac.py +0 -0
  76. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/tests/functional/api/test_repair.py +0 -0
  77. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/tests/functional/api/test_sync.py +0 -0
  78. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/tests/functional/api/test_upload.py +0 -0
  79. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/tests/functional/api/test_vulnerability_report.py +0 -0
  80. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/tests/functional/assets/shelf-reader-0.1.tar.gz.publish.attestation +0 -0
  81. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/tests/functional/assets/shelf_reader-0.1-py2-none-any.whl.publish.attestation +0 -0
  82. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/tests/functional/constants.py +0 -0
  83. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/tests/functional/utils.py +0 -0
  84. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/tests/unit/__init__.py +0 -0
  85. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python/tests/unit/test_models.py +0 -0
  86. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python.egg-info/SOURCES.txt +0 -0
  87. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python.egg-info/dependency_links.txt +0 -0
  88. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python.egg-info/entry_points.txt +0 -0
  89. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python.egg-info/requires.txt +0 -0
  90. {pulp_python-3.27.4 → pulp_python-3.27.6}/pulp_python.egg-info/top_level.txt +0 -0
  91. {pulp_python-3.27.4 → pulp_python-3.27.6}/setup.cfg +0 -0
  92. {pulp_python-3.27.4 → pulp_python-3.27.6}/test_requirements.txt +0 -0
  93. {pulp_python-3.27.4 → pulp_python-3.27.6}/unittest_requirements.txt +0 -0
@@ -8,6 +8,22 @@
8
8
 
9
9
  [//]: # (towncrier release notes start)
10
10
 
11
+ ## 3.27.6 (2026-07-16) {: #3.27.6 }
12
+
13
+ #### Bugfixes {: #3.27.6-bugfix }
14
+
15
+ - Fixed provenance sync failing when syncing Pulp-created attestations that use a `Pulp User` publisher.
16
+
17
+ ---
18
+
19
+ ## 3.27.5 (2026-06-30) {: #3.27.5 }
20
+
21
+ #### Bugfixes {: #3.27.5-bugfix }
22
+
23
+ - Fixed a bug where the `python_version` field was not parsed correctly when Pulp workers had hyphens in their name.
24
+
25
+ ---
26
+
11
27
  ## 3.27.4 (2026-06-05) {: #3.27.4 }
12
28
 
13
29
  #### Bugfixes {: #3.27.4-bugfix }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pulp-python
3
- Version: 3.27.4
3
+ Version: 3.27.6
4
4
  Summary: pulp-python plugin for the Pulp Project
5
5
  Author-email: Pulp Team <pulp-list@redhat.com>
6
6
  Project-URL: Homepage, https://pulpproject.org
@@ -12,7 +12,7 @@ class PulpPythonPluginAppConfig(PulpPluginAppConfig):
12
12
 
13
13
  name = "pulp_python.app"
14
14
  label = "python"
15
- version = "3.27.4"
15
+ version = "3.27.6"
16
16
  python_package_name = "pulp-python"
17
17
  domain_compatible = True
18
18
 
@@ -10,7 +10,6 @@ from bandersnatch.master import Master
10
10
  from bandersnatch.mirror import Mirror
11
11
  from lxml.etree import LxmlError
12
12
  from packaging.requirements import Requirement
13
- from pypi_attestations import Provenance
14
13
  from pypi_simple import IndexPage
15
14
  from rest_framework import serializers
16
15
 
@@ -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__)
@@ -1,6 +1,7 @@
1
1
  import hashlib
2
2
  import json
3
3
  import logging
4
+ import os
4
5
  import re
5
6
  import shutil
6
7
  import tempfile
@@ -206,7 +207,7 @@ def get_project_metadata_from_file(filename):
206
207
  else:
207
208
  pyver = ""
208
209
  regex = DIST_REGEXES[extensions[pkg_type_index]]
209
- if bdist_name := regex.match(filename):
210
+ if bdist_name := regex.match(os.path.basename(filename)):
210
211
  pyver = bdist_name.group("pyver") or ""
211
212
  metadata.python_version = pyver
212
213
  return metadata
@@ -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,
@@ -245,8 +245,9 @@ def test_simple_redirect_with_publications(
245
245
  assert response.url == str(urljoin(pulp_content_url, f"{distro.base_path}/simple/"))
246
246
 
247
247
 
248
- @pytest.mark.parallel
249
- def test_pypi_json(python_remote_factory, python_repo_with_sync, python_distribution_factory):
248
+ def test_pypi_json(
249
+ delete_orphans_pre, python_remote_factory, python_repo_with_sync, python_distribution_factory
250
+ ):
250
251
  """Checks the data of `pypi/{package_name}/json` endpoint."""
251
252
  remote = python_remote_factory(policy="immediate")
252
253
  repo = python_repo_with_sync(remote)
@@ -260,8 +261,8 @@ def test_pypi_json(python_remote_factory, python_repo_with_sync, python_distribu
260
261
  assert_pypi_json(response.json())
261
262
 
262
263
 
263
- @pytest.mark.parallel
264
264
  def test_pypi_json_content_app(
265
+ delete_orphans_pre,
265
266
  python_remote_factory,
266
267
  python_repo_with_sync,
267
268
  python_publication_factory,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pulp-python
3
- Version: 3.27.4
3
+ Version: 3.27.6
4
4
  Summary: pulp-python plugin for the Pulp Project
5
5
  Author-email: Pulp Team <pulp-list@redhat.com>
6
6
  Project-URL: Homepage, https://pulpproject.org
@@ -7,7 +7,7 @@ build-backend = 'setuptools.build_meta'
7
7
 
8
8
  [project]
9
9
  name = "pulp-python"
10
- version = "3.27.4"
10
+ version = "3.27.6"
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.27.4"
82
+ current_version = "3.27.6"
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