pulpcore 3.81.0__py3-none-any.whl → 3.82.0__py3-none-any.whl

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.

Potentially problematic release.


This version of pulpcore might be problematic. Click here for more details.

@@ -6,6 +6,6 @@ class PulpCertGuardPluginAppConfig(PulpPluginAppConfig):
6
6
 
7
7
  name = "pulp_certguard.app"
8
8
  label = "certguard"
9
- version = "3.81.0"
9
+ version = "3.82.0"
10
10
  python_package_name = "pulpcore"
11
11
  domain_compatible = True
pulp_file/app/__init__.py CHANGED
@@ -8,6 +8,6 @@ class PulpFilePluginAppConfig(PulpPluginAppConfig):
8
8
 
9
9
  name = "pulp_file.app"
10
10
  label = "file"
11
- version = "3.81.0"
11
+ version = "3.82.0"
12
12
  python_package_name = "pulpcore"
13
13
  domain_compatible = True
pulpcore/app/apps.py CHANGED
@@ -247,7 +247,7 @@ class PulpAppConfig(PulpPluginAppConfig):
247
247
  label = "core"
248
248
 
249
249
  # The version of this app
250
- version = "3.81.0"
250
+ version = "3.82.0"
251
251
 
252
252
  # The python package name providing this app
253
253
  python_package_name = "pulpcore"
@@ -0,0 +1,19 @@
1
+ # Generated by Django 4.2.10 on 2025-06-26 19:44
2
+
3
+ import django.contrib.postgres.fields
4
+ from django.db import migrations, models
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ ('core', '0131_distribution_checkpoint_publication_checkpoint'),
11
+ ]
12
+
13
+ operations = [
14
+ migrations.AddField(
15
+ model_name='task',
16
+ name='profile_options',
17
+ field=django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), null=True, size=None),
18
+ ),
19
+ ]
@@ -90,7 +90,7 @@ class ArtifactFileField(FileField):
90
90
 
91
91
 
92
92
  class EncryptedTextField(TextField):
93
- """A field mixin that encrypts text using settings.DB_ENCRYPTION_KEY."""
93
+ """A field that encrypts text using settings.DB_ENCRYPTION_KEY."""
94
94
 
95
95
  def __init__(self, *args, **kwargs):
96
96
  if kwargs.get("primary_key"):
@@ -114,7 +114,7 @@ class EncryptedTextField(TextField):
114
114
 
115
115
 
116
116
  class EncryptedJSONField(JSONField):
117
- """A Field mixin that encrypts the JSON text using settings.DP_ENCRYPTION_KEY."""
117
+ """A Field that encrypts the JSON text using settings.DP_ENCRYPTION_KEY."""
118
118
 
119
119
  def __init__(self, *args, **kwargs):
120
120
  if kwargs.get("primary_key"):
@@ -147,6 +147,7 @@ class Task(BaseModel, AutoAddObjPermsMixin):
147
147
  pulp_domain = models.ForeignKey("Domain", default=get_domain_pk, on_delete=models.CASCADE)
148
148
  versions = HStoreField(default=dict)
149
149
 
150
+ profile_options = ArrayField(models.TextField(), null=True)
150
151
  profile_artifacts = models.ManyToManyField("Artifact", through=ProfileArtifact)
151
152
 
152
153
  immediate = models.BooleanField(default=False, null=True)
pulpcore/app/replica.py CHANGED
@@ -90,15 +90,9 @@ class Replicator:
90
90
  params = {"q": q}
91
91
  else:
92
92
  params = {}
93
- offset = 0
94
- list_size = 100
95
- while True:
96
- distributions = self.distribution_ctx_cls(self.pulp_ctx).list(list_size, offset, params)
97
- for distro in distributions:
98
- yield distro
99
- if len(distributions) < list_size:
100
- break
101
- offset += list_size
93
+ yield from self.distribution_ctx_cls(self.pulp_ctx).list_iterator(
94
+ parameters=params, batch_size=100
95
+ )
102
96
 
103
97
  def labels(self, upstream_object):
104
98
  upstream_labels = getattr(upstream_object, "pulp_labels", {})
@@ -342,6 +342,7 @@ class StorageSettingsSerializer(serializers.Serializer):
342
342
  STORAGE_MAPPING = {
343
343
  "pulpcore.app.models.storage.FileSystem": FileSystemSettingsSerializer,
344
344
  "pulpcore.app.models.storage.PulpSFTPStorage": SFTPSettingsSerializer,
345
+ "storages.backends.s3.S3Storage": AmazonS3SettingsSerializer,
345
346
  "storages.backends.s3boto3.S3Boto3Storage": AmazonS3SettingsSerializer,
346
347
  "storages.backends.azure_storage.AzureStorage": AzureSettingsSerializer,
347
348
  "storages.backends.gcloud.GoogleCloudStorage": GoogleSettingsSerializer,
@@ -78,6 +78,10 @@ class PublicationSerializer(ModelSerializer):
78
78
 
79
79
 
80
80
  class ContentGuardSerializer(ModelSerializer):
81
+ """
82
+ Base class for content guard serializers.
83
+ """
84
+
81
85
  pulp_href = DetailIdentityField(view_name_pattern=r"contentguards(-.*/.*)-detail")
82
86
 
83
87
  name = serializers.CharField(
pulpcore/app/settings.py CHANGED
@@ -173,6 +173,7 @@ MIDDLEWARE = [
173
173
  "django.middleware.clickjacking.XFrameOptionsMiddleware",
174
174
  "pulpcore.middleware.DomainMiddleware",
175
175
  "pulpcore.middleware.APIRootRewriteMiddleware",
176
+ "pulpcore.middleware.TaskProfilerMiddleware",
176
177
  ]
177
178
 
178
179
  AUTHENTICATION_BACKENDS = [
@@ -436,6 +437,7 @@ storage_validator = (
436
437
  Validator("REDIRECT_TO_OBJECT_STORAGE", eq=False)
437
438
  | Validator(*storage_keys, eq="pulpcore.app.models.storage.FileSystem")
438
439
  | Validator(*storage_keys, eq="storages.backends.azure_storage.AzureStorage")
440
+ | Validator(*storage_keys, eq="storages.backends.s3.S3Storage")
439
441
  | Validator(*storage_keys, eq="storages.backends.s3boto3.S3Boto3Storage")
440
442
  | Validator(*storage_keys, eq="storages.backends.gcloud.GoogleCloudStorage")
441
443
  )
@@ -1279,19 +1279,20 @@ class Handler:
1279
1279
  # "backstop" the prepare() call here, so the write() will be allowed.
1280
1280
  if not response.prepared:
1281
1281
  await response.prepare(request)
1282
- if range_start or range_stop:
1283
- start_byte_pos = 0
1284
- end_byte_pos = len(data)
1285
- if range_start:
1286
- start_byte_pos = max(0, range_start - data_size_handled)
1287
- if range_stop:
1288
- end_byte_pos = min(len(data), range_stop - data_size_handled)
1289
-
1290
- data_for_client = data[start_byte_pos:end_byte_pos]
1291
- await response.write(data_for_client)
1292
- data_size_handled = data_size_handled + len(data)
1293
- else:
1294
- await response.write(data)
1282
+ if request.method == "GET":
1283
+ if range_start or range_stop:
1284
+ start_byte_pos = 0
1285
+ end_byte_pos = len(data)
1286
+ if range_start:
1287
+ start_byte_pos = max(0, range_start - data_size_handled)
1288
+ if range_stop:
1289
+ end_byte_pos = min(len(data), range_stop - data_size_handled)
1290
+
1291
+ data_for_client = data[start_byte_pos:end_byte_pos]
1292
+ await response.write(data_for_client)
1293
+ data_size_handled = data_size_handled + len(data)
1294
+ else:
1295
+ await response.write(data)
1295
1296
  if remote.policy != Remote.STREAMED:
1296
1297
  await original_handle_data(data)
1297
1298
 
pulpcore/middleware.py CHANGED
@@ -1,4 +1,5 @@
1
1
  import time
2
+ from contextvars import ContextVar
2
3
 
3
4
  from django.http.response import Http404
4
5
  from django.conf import settings
@@ -13,6 +14,8 @@ from pulpcore.app.util import (
13
14
  set_domain,
14
15
  )
15
16
 
17
+ x_task_diagnostics_var = ContextVar("x_profile_task")
18
+
16
19
 
17
20
  class DomainMiddleware:
18
21
  """
@@ -143,3 +146,25 @@ class DjangoMetricsMiddleware:
143
146
  match = getattr(request, "resolver_match", "")
144
147
  route = getattr(match, "route", "")
145
148
  return route
149
+
150
+
151
+ class TaskProfilerMiddleware:
152
+ """
153
+ Middleware that looks for the presence of X-TASK-DIAGNOSTICS header and provides its value
154
+ as a ContextVar to the dispatch() method in the tasking system. It enables generating
155
+ profiling data of tasks dispatched via API.
156
+ """
157
+
158
+ def __init__(self, get_response):
159
+ self.get_response = get_response
160
+
161
+ def __call__(self, request):
162
+ if "HTTP_X_TASK_DIAGNOSTICS" in request.META:
163
+ task_diagnostics = request.META["HTTP_X_TASK_DIAGNOSTICS"]
164
+ ctx_token = x_task_diagnostics_var.set(task_diagnostics.split(","))
165
+ try:
166
+ return self.get_response(request)
167
+ finally:
168
+ x_task_diagnostics_var.reset(ctx_token)
169
+ else:
170
+ return self.get_response(request)
@@ -201,6 +201,19 @@ class PulpAutoSchema(AutoSchema):
201
201
  name = name + "Response"
202
202
  return name
203
203
 
204
+ def get_override_parameters(self):
205
+ parameters = super().get_override_parameters()
206
+ parameters.append(
207
+ OpenApiParameter(
208
+ name="X-Task-Diagnostics",
209
+ location=OpenApiParameter.HEADER,
210
+ required=False,
211
+ type={"type": "array", "items": {"type": "string"}},
212
+ description="List of profilers to use on tasks.",
213
+ )
214
+ )
215
+ return parameters
216
+
204
217
  def map_parsers(self):
205
218
  """
206
219
  Get request parsers.
pulpcore/tasking/_util.py CHANGED
@@ -127,21 +127,26 @@ def perform_task(task_pk, task_working_dir_rel_path):
127
127
  set_domain(task.pulp_domain)
128
128
  os.chdir(task_working_dir_rel_path)
129
129
 
130
- if settings.TASK_DIAGNOSTICS:
131
- _execute_task_and_profile(task)
130
+ if task.profile_options:
131
+ profilers = set(task.profile_options) & set(settings.TASK_DIAGNOSTICS)
132
+ if unavailable_profilers := set(task.profile_options) - set(settings.TASK_DIAGNOSTICS):
133
+ _logger.warning(
134
+ "Requested task diagnostic profilers are not available: %s", unavailable_profilers
135
+ )
136
+ _execute_task_and_profile(task, profilers)
132
137
  else:
133
138
  execute_task(task)
134
139
 
135
140
 
136
- def _execute_task_and_profile(task):
141
+ def _execute_task_and_profile(task, profile_options):
137
142
  with tempfile.TemporaryDirectory(dir=settings.WORKING_DIRECTORY) as temp_dir:
138
143
  _execute_task = execute_task
139
144
 
140
- if settings.TASK_DIAGNOSTICS is True or "memory" in settings.TASK_DIAGNOSTICS:
145
+ if "memory" in profile_options:
141
146
  _execute_task = _memory_diagnostic_decorator(temp_dir, _execute_task)
142
- if settings.TASK_DIAGNOSTICS is True or "pyinstrument" in settings.TASK_DIAGNOSTICS:
147
+ if "pyinstrument" in profile_options:
143
148
  _execute_task = _pyinstrument_diagnostic_decorator(temp_dir, _execute_task)
144
- if settings.TASK_DIAGNOSTICS is True or "memray" in settings.TASK_DIAGNOSTICS:
149
+ if "memray" in profile_options:
145
150
  _execute_task = _memray_diagnostic_decorator(temp_dir, _execute_task)
146
151
 
147
152
  _execute_task(task)
pulpcore/tasking/tasks.py CHANGED
@@ -26,6 +26,7 @@ from pulpcore.constants import (
26
26
  TASK_DISPATCH_LOCK,
27
27
  IMMEDIATE_TIMEOUT,
28
28
  )
29
+ from pulpcore.middleware import x_task_diagnostics_var
29
30
  from pulpcore.tasking.kafka import send_task_notification
30
31
 
31
32
  _logger = logging.getLogger(__name__)
@@ -246,6 +247,7 @@ def dispatch(
246
247
  versions=versions,
247
248
  immediate=immediate,
248
249
  deferred=deferred,
250
+ profile_options=x_task_diagnostics_var.get(None),
249
251
  )
250
252
  if newest_created and task.pulp_created <= newest_created:
251
253
  # Let this workaround not row forever into the future.
@@ -33,6 +33,25 @@ def test_retrieving_task_profile_artifacts(gen_user, pulpcore_bindings, task):
33
33
  assert pulpcore_bindings.TasksApi.profile_artifacts(task.pulp_href).urls is not None
34
34
 
35
35
 
36
+ @pytest.mark.parallel
37
+ def test_profiling_task_using_header(gen_user, pulpcore_bindings, monitor_task, pulp_settings):
38
+ # Check that no profile artifacts are created by default
39
+ task_href = pulpcore_bindings.OrphansCleanupApi.cleanup({"orphan_protection_time": 10000}).task
40
+ task = monitor_task(task_href)
41
+ assert pulpcore_bindings.TasksApi.profile_artifacts(task.pulp_href).urls == {}
42
+
43
+ # Check that profile artifacts are created when X-TASK-DIAGNOSTICS headers is passed
44
+ task_href = pulpcore_bindings.OrphansCleanupApi.cleanup(
45
+ {"orphan_protection_time": 10000}, x_task_diagnostics=["memory"]
46
+ ).task
47
+ task = monitor_task(task_href)
48
+ profile_artifacts_urls = pulpcore_bindings.TasksApi.profile_artifacts(task.pulp_href).urls
49
+ if "memory" in pulp_settings.TASK_DIAGNOSTICS:
50
+ assert "memory_profile" in profile_artifacts_urls
51
+ else:
52
+ assert "memory_profile" not in profile_artifacts_urls
53
+
54
+
36
55
  @pytest.mark.parallel
37
56
  def test_multi_resource_locking(dispatch_task, monitor_task):
38
57
  task_href1 = dispatch_task(
@@ -1,8 +1,10 @@
1
1
  """Tests related to content delivery."""
2
2
 
3
3
  import hashlib
4
+ import requests
4
5
  import subprocess
5
6
  import uuid
7
+ from random import sample
6
8
  from urllib.parse import urljoin
7
9
 
8
10
  import pytest
@@ -244,3 +246,35 @@ def test_handling_remote_artifact_on_demand_streaming_failure(
244
246
  # WHEN/THEN (second request)
245
247
  actual_checksum = download_from_distribution(content_name, distribution)
246
248
  assert actual_checksum == expected_checksum
249
+
250
+
251
+ @pytest.mark.parallel
252
+ def test_head_request_large_on_demand_file(
253
+ file_repo_with_auto_publish,
254
+ file_remote_factory,
255
+ file_bindings,
256
+ range_header_manifest_path,
257
+ distribution_base_url,
258
+ file_distribution_factory,
259
+ monitor_task,
260
+ ):
261
+ """Test that a HEAD request to a large on-demand file properly saves the file."""
262
+ # range_header_manifest_path has 8 files, each 4MB
263
+ remote = file_remote_factory(manifest_path=range_header_manifest_path, policy="on_demand")
264
+ body = RepositorySyncURL(remote=remote.pulp_href)
265
+ monitor_task(
266
+ file_bindings.RepositoriesFileApi.sync(file_repo_with_auto_publish.pulp_href, body).task
267
+ )
268
+ repo = file_bindings.RepositoriesFileApi.read(file_repo_with_auto_publish.pulp_href)
269
+ content = file_bindings.ContentFilesApi.list(repository_version=repo.latest_version_href)
270
+ content_href_filenames = sample([(c.pulp_href, c.relative_path) for c in content.results], k=3)
271
+
272
+ distro = file_distribution_factory(repository=repo.pulp_href)
273
+ for _, content_filename in content_href_filenames:
274
+ url = urljoin(distribution_base_url(distro.base_url), content_filename)
275
+ response = requests.head(url)
276
+ assert response.status_code == 200
277
+ # Give some time for the file to be saved
278
+ for content_href, _ in content_href_filenames:
279
+ content = file_bindings.ContentFilesApi.read(content_href)
280
+ assert content.artifact is not None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pulpcore
3
- Version: 3.81.0
3
+ Version: 3.82.0
4
4
  Summary: Pulp Django Application and Related Modules
5
5
  Author-email: Pulp Team <pulp-list@redhat.com>
6
6
  Project-URL: Homepage, https://pulpproject.org
@@ -23,7 +23,7 @@ Description-Content-Type: text/markdown
23
23
  License-File: LICENSE
24
24
  Requires-Dist: aiodns<3.6,>=3.3.0
25
25
  Requires-Dist: aiofiles<=24.1.0,>=22.1
26
- Requires-Dist: aiohttp<3.13,>=3.8.1
26
+ Requires-Dist: aiohttp<3.13,>=3.8.3
27
27
  Requires-Dist: asyncio-throttle<=1.0.2,>=1.0
28
28
  Requires-Dist: async-timeout<4.0.4,>=4.0.3; python_version < "3.11"
29
29
  Requires-Dist: backoff<2.3,>=2.1.2
@@ -50,7 +50,7 @@ Requires-Dist: opentelemetry-api<1.35,>=1.27.0
50
50
  Requires-Dist: opentelemetry-sdk<1.35,>=1.27.0
51
51
  Requires-Dist: opentelemetry-exporter-otlp-proto-http<1.35,>=1.27.0
52
52
  Requires-Dist: protobuf<6.0,>=4.21.1
53
- Requires-Dist: pulp-glue<0.34,>=0.18.0
53
+ Requires-Dist: pulp-glue<0.34,>=0.28.0
54
54
  Requires-Dist: pygtrie<=2.5.0,>=2.5
55
55
  Requires-Dist: psycopg[binary]<3.3,>=3.1.8
56
56
  Requires-Dist: pyparsing<3.3,>=3.1.0
@@ -74,7 +74,7 @@ Provides-Extra: prometheus
74
74
  Requires-Dist: django-prometheus; extra == "prometheus"
75
75
  Provides-Extra: kafka
76
76
  Requires-Dist: cloudevents==1.11.0; extra == "kafka"
77
- Requires-Dist: confluent-kafka<2.10.0,>=2.4.0; extra == "kafka"
77
+ Requires-Dist: confluent-kafka<2.11.0,>=2.4.0; extra == "kafka"
78
78
  Provides-Extra: diagnostics
79
79
  Requires-Dist: pyinstrument~=5.0; extra == "diagnostics"
80
80
  Requires-Dist: memray~=1.17; extra == "diagnostics"
@@ -1,6 +1,6 @@
1
1
  pulp_certguard/__init__.py,sha256=llnEd00PrsAretsgAOHiNKFbmvIdXe3iDVPmSaKz7gU,71
2
2
  pulp_certguard/pytest_plugin.py,sha256=qhRbChzqN2PROtD-65KuoTfKr5k9T3GPsz9daFgpqpM,852
3
- pulp_certguard/app/__init__.py,sha256=lADsgmmvuoqR01RdMScEKtYMgNnGT7c5pAFJ0oaUuDU,297
3
+ pulp_certguard/app/__init__.py,sha256=asgxMyJ-_usTvtv9VipyiO0urYAshXR_2kfO8CtupGw,297
4
4
  pulp_certguard/app/models.py,sha256=xy5IWxf0LQxayIDmQw25Y2YhB_NrlTGvuvdY-YW7QBU,8119
5
5
  pulp_certguard/app/serializers.py,sha256=3jxWu82vU3xA578Qbyz-G4Q9Zlh3MFLGRHzX62M0RF8,1826
6
6
  pulp_certguard/app/utils.py,sha256=O6T1Npdb8fu3XqIkDJd8PQdEFJWPUeQ-i_aHXBl7MEc,816
@@ -49,7 +49,7 @@ pulp_certguard/tests/unit/test_models.py,sha256=TBI0yKsrdbnJSPeBFfxSqhXK7zaNvR6q
49
49
  pulp_file/__init__.py,sha256=0vOCXofR6Eyxkg4y66esnOGPeESCe23C1cNBHj56w44,61
50
50
  pulp_file/manifest.py,sha256=1WwIOJrPSkFcmkRm7CkWifVOCoZvo_nnANgce6uuG7U,3796
51
51
  pulp_file/pytest_plugin.py,sha256=l1PvTxUi5D3uJy4SnHWNhr-otWEYNcm-kc5nSqVJg0Y,10646
52
- pulp_file/app/__init__.py,sha256=xbejq5CE_8ckJvK4tdkH2Xppm9fMJ3rmESzRvsPxlwQ,292
52
+ pulp_file/app/__init__.py,sha256=H2wrrNOzI22OucPfAe9Od3DtsHVRpfwIA0kcylz6Efc,292
53
53
  pulp_file/app/modelresource.py,sha256=v-m-_bBEsfr8wG0TI5ffx1TuKUy2-PsirhuQz4XXF-0,1063
54
54
  pulp_file/app/models.py,sha256=QsrVg_2uKqnR89sLN2Y7Zy260_nLIcUfa94uZowlmFw,4571
55
55
  pulp_file/app/replica.py,sha256=OtNWVmdFUgNTYhPttftVNQnSrnvx2_hnrJgtW_G0Vrg,1894
@@ -104,13 +104,13 @@ pulpcore/backends.py,sha256=Ax_MJpbvtNDg_rhkHaiQRm39DBSS2dH8UpMRJN2T0oE,4482
104
104
  pulpcore/constants.py,sha256=06lih8sVRzHCrBXGmoT3Q-9ZkKZUEEYZ8EoeFfxEq04,4673
105
105
  pulpcore/filters.py,sha256=dD5oRRkWg65s3LoObr-ipRvRsxZK_3Zr0lKMNr9Sg5o,16682
106
106
  pulpcore/metrics.py,sha256=Mfq-nnRjRf3vBHFO-ux-4d1I3yE7TgeptwgiSgGz4rA,2230
107
- pulpcore/middleware.py,sha256=tJB2rGnulvNBN1fZ6lyN4zd60ja5QUNYD4l5dLHHaoY,5079
107
+ pulpcore/middleware.py,sha256=10Jxc4Iq03gZD3n39t63OmBCpdftcke8bxEd-LioJlA,5973
108
108
  pulpcore/migrations.py,sha256=gzUTxcXnbYkM0_vN8Rfr_XWuwsGWedVZAwNy9JqJ8sQ,2476
109
109
  pulpcore/pytest_plugin.py,sha256=skubiEUIevVURr4LnmmVMt_ZeH5vT9mI0yiPUYerMnQ,38090
110
110
  pulpcore/responses.py,sha256=mIGKmdCfTSoZxbFu4yIH1xbdLx1u5gqt3D99LTamcJg,6125
111
111
  pulpcore/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
112
112
  pulpcore/app/access_policy.py,sha256=5vCKy6WoHtIt1_-eS5vMaZ7CmR4G-CIpsrB8yT-d88Q,6079
113
- pulpcore/app/apps.py,sha256=O6TBkjY-UHFWcGeWNzEjN2xDH4He_A0x9f4_rFpmpWg,17860
113
+ pulpcore/app/apps.py,sha256=0CaBE8E7gFLpu-mv5pv13EjHBBNa7Tj3r9oNT5Tiw8Y,17860
114
114
  pulpcore/app/authentication.py,sha256=1LIJW6HIQQlZrliHy__jdzkDEh6Oj7xKgd0V-vRcDus,2855
115
115
  pulpcore/app/checks.py,sha256=jbfTF7nmftBbky4AQXHigpyCaGydKasvRUXsd72JZVg,1946
116
116
  pulpcore/app/entrypoint.py,sha256=YIfQpM5UxybBTasiEY5ptq--UmqPqjdIGnwmqVsDC7E,4972
@@ -126,10 +126,10 @@ pulpcore/app/openpgp.py,sha256=MYwCTGz7J9-Zr5aSBrz7KGWWWNC1EI-aItGb5dr7XPE,17246
126
126
  pulpcore/app/pulp_hashlib.py,sha256=NoVCO8duLz9rggPcilg0smi6fTDnsn-zS9dXgO831Pg,1327
127
127
  pulpcore/app/pulpcore_gunicorn_application.py,sha256=caqbDg9dhzECbx9Ss76biuEARhquj9gQaSL6v3XLy2w,2612
128
128
  pulpcore/app/redis_connection.py,sha256=VTdG0ulXuyESjYV6SJdG_jLzkLZH-MlLcD6pielwRSk,952
129
- pulpcore/app/replica.py,sha256=6WU-K8olrOoO4q8gwJ2bKc_qmvw8wCOzRZdNZrr895g,11678
129
+ pulpcore/app/replica.py,sha256=rGE14OBaR_FKxmHL7NMxf_OizMyS-90IPsMRo_j9YRI,11474
130
130
  pulpcore/app/response.py,sha256=hYH_jSBrxmRsBr2bknmXE1qfs2g8JjDTXYcQ5ZWlF_c,1950
131
131
  pulpcore/app/role_util.py,sha256=84HSt8_9fxB--dtfSyg_TumVgOdyBbyP6rBaiAfTpOU,22393
132
- pulpcore/app/settings.py,sha256=f2LXOVLd58iG2z1Whm_XlLop129uKT5-GYxWiBq-ja8,22430
132
+ pulpcore/app/settings.py,sha256=HxZj3R15UG_AhwhNIs1VFXZqPuBHW3shjHkPwqvZMqo,22548
133
133
  pulpcore/app/urls.py,sha256=0gdI74CAdycJStXSw1gknviDGe3J3k0UhS4J8RYa5dg,8120
134
134
  pulpcore/app/util.py,sha256=nYF6nZXgqVk4U1QeZEpWYX-wqitGSGAJip6W78IfXUk,24432
135
135
  pulpcore/app/wsgi.py,sha256=7rpZ_1NHEN_UfeNZCj8206bas1WeqRkHnGdxpd7rdDI,492
@@ -284,6 +284,7 @@ pulpcore/app/migrations/0129_content_pulp_labels.py,sha256=3Ee8lpGfo02t-1tnOH1CJ
284
284
  pulpcore/app/migrations/0130_upstreampulp_policy.py,sha256=PLpgBU6iXTl7gruCe12aA5Zk4eG6heyrC6Rh1jeaxps,709
285
285
  pulpcore/app/migrations/0131_distribution_checkpoint_publication_checkpoint.py,sha256=MXZXQapnSXVfV9FFiIaoMb6M7qAnAJwtEmN6hSlJ8RQ,561
286
286
  pulpcore/app/migrations/0132_alter_content_options.py,sha256=hrhUTsRqQJgwC6wU9Ys5AvyVz2YCzklj2OuVf6hyBfs,477
287
+ pulpcore/app/migrations/0132_task_profile_options.py,sha256=ljdIm5-NXl_8s87HzkthvUxr7eHhLaETrr5qNtAVKDE,518
287
288
  pulpcore/app/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
288
289
  pulpcore/app/models/__init__.py,sha256=9JKMGKbEV6nJPep_K36rnWnS1QWMKBFSty-Hkr65JVk,3459
289
290
  pulpcore/app/models/access_policy.py,sha256=o4L41RGoZ5UMmh5UeeenmadD5MJgShguphgd4eAVxQA,6071
@@ -293,7 +294,7 @@ pulpcore/app/models/base.py,sha256=YbbH4LEEKIlFOWX_73bsYFlum8eOPmxHkESuKQTIapY,9
293
294
  pulpcore/app/models/content.py,sha256=8NE__k2suNvI1L9eNeWvIqB6i_fmpBHRJEt_B50S1zc,35713
294
295
  pulpcore/app/models/domain.py,sha256=c9EUAKPEKKpeNxwDGhdw6UyD5cyZGrIA3qzjsN-RIc0,3685
295
296
  pulpcore/app/models/exporter.py,sha256=rAa-abuyJqV-o1BNaoSxrYlxoUGBMqZQ0laMCVou84w,4325
296
- pulpcore/app/models/fields.py,sha256=hAjATkRtrgukLwGj1WIuYudGARvLZ_YjzE6WhYbp3rU,6463
297
+ pulpcore/app/models/fields.py,sha256=NJMASz5iQc95GSqzWFiWqsJhdaLM75udfci3IptvTlY,6451
297
298
  pulpcore/app/models/generic.py,sha256=PWeVttDRysgy9aReSkJ0TUORwyTf1-lE68fp8wMGhik,962
298
299
  pulpcore/app/models/importer.py,sha256=HECnV3oAPSAgFugYE72RNvh5l1wUs_S69NL80BMp0uc,3082
299
300
  pulpcore/app/models/openpgp.py,sha256=3R5p8ZBPq63NzaE2_EwCXEMYPUQu7QUWanMcKCOoWkM,7874
@@ -304,7 +305,7 @@ pulpcore/app/models/repository.py,sha256=xBMKsryirkpZyrQHnFbwolNbvyX1jHljcqC1ofv
304
305
  pulpcore/app/models/role.py,sha256=dZklNd2VeAw4cT6dyJ7SyTBt9sZvdqakY86wXGAY3vU,3287
305
306
  pulpcore/app/models/status.py,sha256=72oUOJ7BnCAw3uDbc-XuI72oAyP2llCoBic4zb2JP78,3683
306
307
  pulpcore/app/models/storage.py,sha256=2b-DQWaO31NqjV6FiISALegND-sQZAU7BVAsduUvm3o,6780
307
- pulpcore/app/models/task.py,sha256=PTVOAmjqU-8nIsPJAXt7VcZywCIl-Dm-ZEmg9bCssjs,14886
308
+ pulpcore/app/models/task.py,sha256=2w0fXHeErSrVssCfP8LeUuYjKgupAbhfR_IkWG8wmus,14950
308
309
  pulpcore/app/models/upload.py,sha256=3njXT2rrVJwBjEDegvqcLD9_7cPnnl974lhbAhikEp8,3004
309
310
  pulpcore/app/protobuf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
310
311
  pulpcore/app/protobuf/analytics_pb2.py,sha256=-4CkbSW8JUAEIjZJBTPAJ5QezFJOdCPiDhx8_KA1bMU,2168
@@ -313,14 +314,14 @@ pulpcore/app/serializers/access_policy.py,sha256=NNtuzDW5H4RGfy5LbRFEHWDTDzXdL-K
313
314
  pulpcore/app/serializers/acs.py,sha256=wBbGE5YHR7dJWuicbDtiPQUJ7xEgz1zKHGkJEaMfpDU,5834
314
315
  pulpcore/app/serializers/base.py,sha256=ojWmsr2U2Mx8qpSFxqHLNQyfU2Z9q7hY1NUwVs9s3HE,21418
315
316
  pulpcore/app/serializers/content.py,sha256=TKEh774Q-0l1AfUeMmVxPM5lk5UiYZxgkt9NU1RjZ9M,11966
316
- pulpcore/app/serializers/domain.py,sha256=-xRJS_Olb1s2bqFzKamV0d_QnYO-e2iIyBJw-39uqMI,22688
317
+ pulpcore/app/serializers/domain.py,sha256=y2qXdf2gSvWH5UtYULhX390u6wWmegg-GD9g5QwqZJA,22758
317
318
  pulpcore/app/serializers/exporter.py,sha256=TxAgHDt34YUGPusawn7B8HL3bBymp46__6CnfhXSgGs,11179
318
319
  pulpcore/app/serializers/fields.py,sha256=kWA6wYNA8dYmDJfFE_3eVUQRj4vCceqjzYPEEP53rxA,16481
319
320
  pulpcore/app/serializers/importer.py,sha256=PVSNs5U0dfAm-XlRKpMqOXK0VmUErxJauNJCNro6ONA,8200
320
321
  pulpcore/app/serializers/openpgp.py,sha256=3Svxskj_-HmOVbjay7QI82zXnKTsbtaSlZZ03CoT-MQ,8966
321
322
  pulpcore/app/serializers/orphans.py,sha256=Vhyaj0fqYT4pkiYoNjgmsy1u5BiR_aHwZm2y7rk9cbk,1967
322
323
  pulpcore/app/serializers/progress.py,sha256=j4IQDLb_XOrLzTud4Fq8T-8kkOqLewReMVkbS5uCEIg,2575
323
- pulpcore/app/serializers/publication.py,sha256=9Lzvn5e04TQ8EVMR_aR5NWK-P3X_4PYSUaWAfD2rHQg,16439
324
+ pulpcore/app/serializers/publication.py,sha256=Qg9ZbvyyS4VoYqLSVXdJ3ceTUP2IAJQgY-K9sJJcXNc,16502
324
325
  pulpcore/app/serializers/purge.py,sha256=CnjKWUvkuI207QMbqwmNs7FqMdOMUh1cujagby3vVM0,779
325
326
  pulpcore/app/serializers/reclaim.py,sha256=-ewdNqu-Ck1B_IUWJHG0pvN5zCMMEK9RiWI45g7D0ro,1710
326
327
  pulpcore/app/serializers/repair.py,sha256=uKrxTnhoarxyyGCixPRn9pmG19gRRVUTM7nPwCVp6_8,554
@@ -375,7 +376,7 @@ pulpcore/cache/cache.py,sha256=d8GMlvjeGG9MOMdi5_9029WpGCKH8Y5q9b2lt3wSREo,17371
375
376
  pulpcore/content/__init__.py,sha256=lJDgxeIHXI__7LOQciRQSTItebgsxpoEGbd19Q7jNdI,4015
376
377
  pulpcore/content/authentication.py,sha256=lEZBkXBBBkIdtFMCSpHDD7583M0bO-zsZNYXTmpr4k8,3235
377
378
  pulpcore/content/entrypoint.py,sha256=DiQTQzfcUiuyl37uvy6Wpa_7kr8t79ekpMHr31MDL2s,2132
378
- pulpcore/content/handler.py,sha256=-EsaNoTUZu2k3zCOMLA-IiD8vyYwUAJOJxstH0CuaZo,56693
379
+ pulpcore/content/handler.py,sha256=B0G2MwOtCedMfwFA5qcHsvg884GhsG_xw4ybYAmLthY,56781
379
380
  pulpcore/content/instrumentation.py,sha256=H0N0GWzvOPGGjFi6eIbGW3mcvagfnAfazccTh-BZVmE,1426
380
381
  pulpcore/download/__init__.py,sha256=s3Wh2GKdsmbUooVIR6wSvhYVIhpaTbtfR3Ar1OJhC7s,154
381
382
  pulpcore/download/base.py,sha256=4KCAYnV8jSOX078ETwlfwNZGY3xCBF9yy866tyGKAzE,13095
@@ -386,7 +387,7 @@ pulpcore/exceptions/__init__.py,sha256=ZgqOLvuNEAEPkC8lUVEJIFyUJZJOy94whdzXYoMP2
386
387
  pulpcore/exceptions/base.py,sha256=3iNTD8BsAfe7vpUaOzXl2f_WJPd4wfqEuf2GkFheBhs,2863
387
388
  pulpcore/exceptions/plugin.py,sha256=CrfzjCP1YZk_W6p1yRFrUfqTv0Iptzu2aBxzlebXeLU,613
388
389
  pulpcore/exceptions/validation.py,sha256=4iyDMxKzejHIzEuebDRXkvA_GNCdaommW9Ycsaa1v3Y,2481
389
- pulpcore/openapi/__init__.py,sha256=lGb5ncwR1eotpOwfxPeAioanGfqajOkO1gncXww9pdk,17981
390
+ pulpcore/openapi/__init__.py,sha256=8R96t7rvAFgIU_-Bv79X_cW0NV10Au9vHzUmp5jaFpw,18443
390
391
  pulpcore/openapi/hooks.py,sha256=uRFFW6khHNrntK6R99SUEDfP4LzmYJfsX7i8XGO4iaI,1426
391
392
  pulpcore/plugin/__init__.py,sha256=q0qu_15BTEY_EqPB9DSDk8rdnZMvld3cZsFXEnOVjuo,131
392
393
  pulpcore/plugin/access_policy.py,sha256=KHbWBXEOP59V8J_R52Pw2Q_Amodg-1bJYh6tyt5vDgk,4968
@@ -424,11 +425,11 @@ pulpcore/plugin/stages/models.py,sha256=0b7xs9d64WTG2yHog1Zo_Z_-pomFAe-gC4u9wksY
424
425
  pulpcore/plugin/viewsets/__init__.py,sha256=G2zE-NRWz6PFYp8OMZrv01RYBQELFWfW702bRvxXs3k,2281
425
426
  pulpcore/plugin/viewsets/content.py,sha256=MHvmLOxsKSQfk6y5t1s9CVxkce9YNeU-dYb1Ldyf83I,6432
426
427
  pulpcore/tasking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
427
- pulpcore/tasking/_util.py,sha256=giR8f8fNvsjsTiuJOU9X21Dyb14fFntSYU7xXGwQZzo,9705
428
+ pulpcore/tasking/_util.py,sha256=fPW4k1nUa_NZ0ywy_A15Fuiejo5stY58abPbZTXw5t8,9904
428
429
  pulpcore/tasking/entrypoint.py,sha256=Npnn41e39soGvJ7CTaZXT5MjIhOO7UtQmpmNaZtfKYg,1120
429
430
  pulpcore/tasking/kafka.py,sha256=76z4DzeXM1WL5uu1HlKnduWeLO3-b-czvGBXdWR6054,3845
430
431
  pulpcore/tasking/storage.py,sha256=zQkwlpC_FDQtmZGZ8vKwHqxvD6CLO_gAS4Q7wijZE-k,3106
431
- pulpcore/tasking/tasks.py,sha256=Y1tvG2hHREtpzVnQtu-_QYXD6mKtuvyCethOopWUJAI,14327
432
+ pulpcore/tasking/tasks.py,sha256=OhiKVl_WKc7m-7V-bWTh9hM3GgQlcnPCIeLw97FXAYM,14448
432
433
  pulpcore/tasking/worker.py,sha256=c9RgSYg4J_Jn_q70MVF_2egDeASFgXlLrP00lqWKtnQ,23822
433
434
  pulpcore/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
434
435
  pulpcore/tests/functional/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -455,7 +456,7 @@ pulpcore/tests/functional/api/test_scoping.py,sha256=uiLOsx5_7puRMcvrpPKEYQziqlu
455
456
  pulpcore/tests/functional/api/test_signing_service.py,sha256=yr1HXBrNoliBHJNAGAN4PAN0eBKPIvAQP-uMoMSrO_I,222
456
457
  pulpcore/tests/functional/api/test_status.py,sha256=Vmmj-ueGxJw1JFSQtr5feTM8vjgyyROvxsRm-OgzLUQ,5370
457
458
  pulpcore/tests/functional/api/test_task_purge.py,sha256=Av4DrUdCqf-JegfoP1pkY4B-teoUzYd1LBZKAhDa-08,7273
458
- pulpcore/tests/functional/api/test_tasking.py,sha256=LPJtsRK9Ggh7CUsVuATcLYUnhdclbbS2zPUwAJGo2fg,21566
459
+ pulpcore/tests/functional/api/test_tasking.py,sha256=jozm0Bpv1AavPDSu0QOZMCzre9Zgpw7_M9HCiaoTRmA,22511
459
460
  pulpcore/tests/functional/api/test_upload.py,sha256=oLP1ZmQgPzgK5jAQwGeXS8uLFHgAzVeLW0GfANMWexI,6794
460
461
  pulpcore/tests/functional/api/test_users_groups.py,sha256=YFG0xtyJuIRraczR7ERl_UNS7dlJfKd2eUmXgD1lLBU,2926
461
462
  pulpcore/tests/functional/api/test_workers.py,sha256=u3oQnErjf6qPCg08XMRZzecGetLLDWmvHvoZIk-AUAA,4659
@@ -463,7 +464,7 @@ pulpcore/tests/functional/api/using_plugin/__init__.py,sha256=QyyfzgjLOi4n32G3o9
463
464
  pulpcore/tests/functional/api/using_plugin/test_checkpoint.py,sha256=gx1oiHOVUH5QZfF33k_DXSw-AVbYQp39uKii1D96BoI,7965
464
465
  pulpcore/tests/functional/api/using_plugin/test_content_access.py,sha256=Ym800bU-M48RCDfQMkVa1UQt_sfgy5ciU0FxorCk9Ds,2551
465
466
  pulpcore/tests/functional/api/using_plugin/test_content_cache.py,sha256=OB3gDbPDptQBjyYnr_jHyU9bcI_-ANAoUp9EDiskwug,7312
466
- pulpcore/tests/functional/api/using_plugin/test_content_delivery.py,sha256=88ZtwViR3KueR6PUQX72Kx1IKpRcMuJMeJu43ylRxqc,9901
467
+ pulpcore/tests/functional/api/using_plugin/test_content_delivery.py,sha256=oatcqaiOv7o_BqsgQ3uXCWnY1RWa5cmzUvPBHzJuI8o,11384
467
468
  pulpcore/tests/functional/api/using_plugin/test_content_directory.py,sha256=w4uY258etnP8-LbrbZ_EZTolciYTt7cY1HJK9Ll7mS0,1931
468
469
  pulpcore/tests/functional/api/using_plugin/test_content_path.py,sha256=fvqeptqo-mrUAiKIjlypuvHG1XsFeKKP81ocTmo4hv0,3334
469
470
  pulpcore/tests/functional/api/using_plugin/test_content_promotion.py,sha256=Co4ytrfpzklwgDdEthv45dsmrceRpqIQfLJlZWM6EBY,2388
@@ -530,9 +531,9 @@ pulpcore/tests/unit/stages/test_artifactdownloader.py,sha256=qB1ANdFmNtUnljg8fCd
530
531
  pulpcore/tests/unit/stages/test_stages.py,sha256=H1a2BQLjdZlZvcb_qULp62huZ1xy6ItTcthktVyGU0w,4735
531
532
  pulpcore/tests/unit/viewsets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
532
533
  pulpcore/tests/unit/viewsets/test_viewset_base.py,sha256=W9o3V6758bZctR6krMPPQytb0xJuF-jb4uBWTNDoD_U,4837
533
- pulpcore-3.81.0.dist-info/licenses/LICENSE,sha256=dhnHU8rJXUdAIgIjveSKAyYG_KzN5eVG-bxETIGrNW0,17988
534
- pulpcore-3.81.0.dist-info/METADATA,sha256=u_SDc6wjbxK47aBe7nOmVXMF94QeFzueBlMxARrluwc,4320
535
- pulpcore-3.81.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
536
- pulpcore-3.81.0.dist-info/entry_points.txt,sha256=OZven4wzXzQA5b5q9MpP4HUpIPPQCSvIOvkKtNInrK0,452
537
- pulpcore-3.81.0.dist-info/top_level.txt,sha256=6h-Lm3FKQSaT_nL1KSxu_hBnzKE15bcvf_BoU-ea4CI,34
538
- pulpcore-3.81.0.dist-info/RECORD,,
534
+ pulpcore-3.82.0.dist-info/licenses/LICENSE,sha256=dhnHU8rJXUdAIgIjveSKAyYG_KzN5eVG-bxETIGrNW0,17988
535
+ pulpcore-3.82.0.dist-info/METADATA,sha256=WRDG4YKlKA1AR0LuMwR56Gsp7DRzkbqsXMUcurqx6jI,4320
536
+ pulpcore-3.82.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
537
+ pulpcore-3.82.0.dist-info/entry_points.txt,sha256=OZven4wzXzQA5b5q9MpP4HUpIPPQCSvIOvkKtNInrK0,452
538
+ pulpcore-3.82.0.dist-info/top_level.txt,sha256=6h-Lm3FKQSaT_nL1KSxu_hBnzKE15bcvf_BoU-ea4CI,34
539
+ pulpcore-3.82.0.dist-info/RECORD,,