pulpcore 3.78.0__py3-none-any.whl → 3.79.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.78.0"
9
+ version = "3.79.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.78.0"
11
+ version = "3.79.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.78.0"
250
+ version = "3.79.0"
251
251
 
252
252
  # The python package name providing this app
253
253
  python_package_name = "pulpcore"
@@ -48,7 +48,7 @@ class PulpApiWorker(SyncWorker):
48
48
  from pulpcore.app.models import ApiAppStatus
49
49
 
50
50
  if settings.API_APP_TTL < 2 * self.timeout:
51
- logger.warn(
51
+ logger.warning(
52
52
  "API_APP_TTL (%s) is smaller than double the gunicorn timeout (%s). "
53
53
  "You may experience workers wrongly reporting as missing",
54
54
  settings.API_APP_TTL,
@@ -109,7 +109,7 @@ class Command(BaseCommand):
109
109
  repo_path = os.path.join(options["dest"], distribution.base_path)
110
110
  to_export.append((repo_path, publication))
111
111
  except ObjectDoesNotExist:
112
- logging.warn(
112
+ logging.warning(
113
113
  "No publication found for the repo published at '{}': skipping".format(
114
114
  distribution.base_path
115
115
  )
@@ -4,7 +4,6 @@ Django models related to the Tasking system
4
4
 
5
5
  import logging
6
6
  import traceback
7
- from contextlib import suppress
8
7
  from datetime import timedelta
9
8
  from gettext import gettext as _
10
9
 
@@ -76,6 +75,21 @@ class Task(BaseModel, AutoAddObjPermsMixin):
76
75
  """
77
76
  Represents a task
78
77
 
78
+ The Tasks state machine works like a finite automaton without loops:
79
+ The initial state is WAITING.
80
+ Final states are COMPLETED, FAILED and CANCELED.
81
+ The possible transitions are:
82
+ WAITING -> RUNNING
83
+ WAITING ->* CANCELING
84
+ RUNNING -> COMPLETED
85
+ RUNNING -> FAILED
86
+ RUNNING ->* CANCELING
87
+ CANCELING -> CANCELED
88
+
89
+ The transitions to CANCELING (marked with *) are the only ones allowed to happen without
90
+ holding the tasks advisory lock. Canceling is meant to be initiated asyncronously by a sparate
91
+ process before signalling the worker via Postgres LISTEN.
92
+
79
93
  Fields:
80
94
 
81
95
  state (models.TextField): The state of the task
@@ -180,34 +194,32 @@ class Task(BaseModel, AutoAddObjPermsMixin):
180
194
  """Set the "core.task_user_dispatcher" role for the current user after creation."""
181
195
  self.add_roles_for_object_creator("core.task_user_dispatcher")
182
196
 
197
+ def _cleanup_progress_reports(self, state):
198
+ """Find any running progress-reports and set their states to the specified end-state."""
199
+ self.progress_reports.filter(state=TASK_STATES.RUNNING).update(state=state)
200
+
183
201
  def set_running(self):
184
202
  """
185
203
  Set this Task to the running state, save it, and log output in warning cases.
186
204
 
187
205
  This updates the :attr:`started_at` and sets the :attr:`state` to :attr:`RUNNING`.
188
206
  """
207
+ started_at = timezone.now()
189
208
  rows = Task.objects.filter(pk=self.pk, state=TASK_STATES.WAITING).update(
190
- state=TASK_STATES.RUNNING, started_at=timezone.now()
209
+ state=TASK_STATES.RUNNING,
210
+ started_at=started_at,
191
211
  )
192
- with suppress(AttributeError):
193
- del self.state
194
- with suppress(AttributeError):
195
- del self.started_at
196
- with suppress(AttributeError):
197
- del self.finished_at
198
- with suppress(AttributeError):
199
- del self.error
200
- if rows != 1:
212
+ if rows == 1:
213
+ self.state = TASK_STATES.RUNNING
214
+ self.started_at = started_at
215
+ else:
216
+ self.refresh_from_db()
201
217
  raise RuntimeError(
202
218
  _("Attempt to set not waiting task {} to running from '{}'.").format(
203
219
  self.pk, self.state
204
220
  )
205
221
  )
206
222
 
207
- def _cleanup_progress_reports(self, state):
208
- """Find any running progress-reports and set their states to the specified end-state."""
209
- self.progress_reports.filter(state=TASK_STATES.RUNNING).update(state=state)
210
-
211
223
  def set_completed(self):
212
224
  """
213
225
  Set this Task to the completed state, save it, and log output in warning cases.
@@ -216,18 +228,16 @@ class Task(BaseModel, AutoAddObjPermsMixin):
216
228
  """
217
229
  # Only set the state to finished if it's running. This is important for when the task has
218
230
  # been canceled, so we don't move the task from canceled to finished.
231
+ finished_at = timezone.now()
219
232
  rows = Task.objects.filter(pk=self.pk, state=TASK_STATES.RUNNING).update(
220
- state=TASK_STATES.COMPLETED, finished_at=timezone.now()
233
+ state=TASK_STATES.COMPLETED,
234
+ finished_at=finished_at,
221
235
  )
222
- with suppress(AttributeError):
223
- del self.state
224
- with suppress(AttributeError):
225
- del self.started_at
226
- with suppress(AttributeError):
227
- del self.finished_at
228
- with suppress(AttributeError):
229
- del self.error
230
- if rows != 1:
236
+ if rows == 1:
237
+ self.state = TASK_STATES.COMPLETED
238
+ self.finished_at = finished_at
239
+ else:
240
+ self.refresh_from_db()
231
241
  # If the user requested to cancel this task while the worker finished it, we leave it
232
242
  # as it is, but accept this is not an error condition.
233
243
  if self.state != TASK_STATES.CANCELING:
@@ -249,21 +259,20 @@ class Task(BaseModel, AutoAddObjPermsMixin):
249
259
  exc (Exception): The exception raised by the task.
250
260
  tb (traceback): Traceback instance for the current exception.
251
261
  """
262
+ finished_at = timezone.now()
252
263
  tb_str = "".join(traceback.format_tb(tb))
264
+ error = exception_to_dict(exc, tb_str)
253
265
  rows = Task.objects.filter(pk=self.pk, state=TASK_STATES.RUNNING).update(
254
266
  state=TASK_STATES.FAILED,
255
- finished_at=timezone.now(),
256
- error=exception_to_dict(exc, tb_str),
267
+ finished_at=finished_at,
268
+ error=error,
257
269
  )
258
- with suppress(AttributeError):
259
- del self.state
260
- with suppress(AttributeError):
261
- del self.started_at
262
- with suppress(AttributeError):
263
- del self.finished_at
264
- with suppress(AttributeError):
265
- del self.error
266
- if rows != 1:
270
+ if rows == 1:
271
+ self.state = TASK_STATES.FAILED
272
+ self.finished_at = finished_at
273
+ self.error = error
274
+ else:
275
+ self.refresh_from_db()
267
276
  raise RuntimeError(
268
277
  _("Attempt to set not running task {} to failed from '{}'.").format(
269
278
  self.pk, self.state
@@ -280,15 +289,10 @@ class Task(BaseModel, AutoAddObjPermsMixin):
280
289
  rows = Task.objects.filter(pk=self.pk, state__in=TASK_INCOMPLETE_STATES).update(
281
290
  state=TASK_STATES.CANCELING,
282
291
  )
283
- with suppress(AttributeError):
284
- del self.state
285
- with suppress(AttributeError):
286
- del self.started_at
287
- with suppress(AttributeError):
288
- del self.finished_at
289
- with suppress(AttributeError):
290
- del self.error
291
- if rows != 1:
292
+ if rows == 1:
293
+ self.state = TASK_STATES.CANCELING
294
+ else:
295
+ self.refresh_from_db()
292
296
  raise RuntimeError(
293
297
  _("Attempt to set not incomplete task {} to canceling from '{}'.").format(
294
298
  self.pk, self.state
@@ -301,23 +305,22 @@ class Task(BaseModel, AutoAddObjPermsMixin):
301
305
  """
302
306
  # Make sure this function was called with a proper final state
303
307
  assert final_state in [TASK_STATES.CANCELED, TASK_STATES.FAILED]
308
+ finished_at = timezone.now()
304
309
  task_data = {}
305
310
  if reason:
306
311
  task_data["error"] = {"reason": reason}
307
312
  rows = Task.objects.filter(pk=self.pk, state=TASK_STATES.CANCELING).update(
308
313
  state=final_state,
309
- finished_at=timezone.now(),
314
+ finished_at=finished_at,
310
315
  **task_data,
311
316
  )
312
- with suppress(AttributeError):
313
- del self.state
314
- with suppress(AttributeError):
315
- del self.started_at
316
- with suppress(AttributeError):
317
- del self.finished_at
318
- with suppress(AttributeError):
319
- del self.error
320
- if rows != 1:
317
+ if rows == 1:
318
+ self.state = final_state
319
+ self.finished_at = finished_at
320
+ if reason:
321
+ self.error = task_data["error"]
322
+ else:
323
+ self.refresh_from_db()
321
324
  raise RuntimeError(
322
325
  _("Attempt to set not canceling task {} to canceled from '{}'.").format(
323
326
  self.pk, self.state
@@ -327,25 +330,15 @@ class Task(BaseModel, AutoAddObjPermsMixin):
327
330
 
328
331
  def unblock(self):
329
332
  # This should be safe to be called without holding the lock.
330
- Task.objects.filter(pk=self.pk).update(unblocked_at=timezone.now())
331
- with suppress(AttributeError):
332
- del self.unblocked_at
333
-
334
- # Example taken from here:
335
- # https://docs.djangoproject.com/en/3.2/ref/models/instances/#refreshing-objects-from-database
336
- def refresh_from_db(self, using=None, fields=None, **kwargs):
337
- # fields contains the name of the deferred field to be
338
- # loaded.
339
- if fields is not None:
340
- fields = set(fields)
341
- deferred_fields = {
342
- field for field in self.get_deferred_fields() if not field.startswith("enc_")
343
- }
344
- # If any state related deferred field is going to be loaded
345
- if fields.intersection(deferred_fields):
346
- # then load all of them
347
- fields = fields.union(deferred_fields)
348
- super().refresh_from_db(using, fields, **kwargs)
333
+ unblocked_at = timezone.now()
334
+ rows = Task.objects.filter(pk=self.pk).update(unblocked_at=unblocked_at)
335
+ if rows == 1:
336
+ self.unblocked_at = unblocked_at
337
+ else:
338
+ self.refresh_from_db()
339
+ raise RuntimeError(
340
+ _("Falied to set task {} unblocked in state '{}'.").format(self.pk, self.state)
341
+ )
349
342
 
350
343
  class Meta:
351
344
  indexes = [
pulpcore/app/openpgp.py CHANGED
@@ -289,15 +289,15 @@ def analyze_signature(data, pubkey, signed_packet_type, signed_packet):
289
289
  if version == 4:
290
290
  hash_payload = b"\x99" + len(signed_packet).to_bytes(2, "big") + signed_packet
291
291
  else: # version == 5
292
- hash_payload = b"\x9A" + len(signed_packet).to_bytes(4, "big") + signed_packet
292
+ hash_payload = b"\x9a" + len(signed_packet).to_bytes(4, "big") + signed_packet
293
293
  elif signature_type in [0x10, 0x11, 0x12, 0x13, 0x16, 0x30]:
294
294
  # 0x10 - 0x13 Certification of a user id or attribute
295
295
  # 0x16 Attested Key Signature
296
296
  # 0x30 Certification Revocation Signature
297
297
  if signed_packet_type == 13:
298
- hash_payload = b"\xB4" + len(signed_packet).to_bytes(4, "big") + signed_packet
298
+ hash_payload = b"\xb4" + len(signed_packet).to_bytes(4, "big") + signed_packet
299
299
  elif signed_packet_type == 17:
300
- hash_payload = b"\xD1" + len(signed_packet).to_bytes(4, "big") + signed_packet
300
+ hash_payload = b"\xd1" + len(signed_packet).to_bytes(4, "big") + signed_packet
301
301
  else:
302
302
  raise ValueError("Out of band user ID or attribute signature.")
303
303
  elif signature_type in [0x1F, 0x20, 0x30]:
@@ -318,18 +318,18 @@ def analyze_signature(data, pubkey, signed_packet_type, signed_packet):
318
318
  if version == 4:
319
319
  h.update(b"\x99" + len(pubkey).to_bytes(2, "big") + pubkey)
320
320
  else: # version == 5
321
- h.update(b"\x9A" + len(pubkey).to_bytes(4, "big") + pubkey)
321
+ h.update(b"\x9a" + len(pubkey).to_bytes(4, "big") + pubkey)
322
322
  h.update(hash_payload)
323
323
  if version == 4:
324
324
  h.update(
325
325
  data[: 6 + hashed_size]
326
- + b"\x04\xFF"
326
+ + b"\x04\xff"
327
327
  + ((6 + hashed_size) % (1 << 32)).to_bytes(4, "big")
328
328
  )
329
329
  else: # version == 5
330
330
  h.update(
331
331
  data[: 6 + hashed_size]
332
- + b"\x05\xFF"
332
+ + b"\x05\xff"
333
333
  + ((6 + hashed_size) % (1 << 64)).to_bytes(8, "big")
334
334
  )
335
335
  if not h.digest().startswith(canary):
pulpcore/app/replica.py CHANGED
@@ -27,7 +27,7 @@ class ReplicaContext(PulpContext):
27
27
  if err:
28
28
  self.err_buf += message
29
29
  if nl:
30
- _logger.warn("{}", self.err_buf)
30
+ _logger.warning("{}", self.err_buf)
31
31
  self.err_buf = ""
32
32
  else:
33
33
  self.out_buf += message
@@ -112,7 +112,7 @@ class _DetailFieldMixin(HrefPrnFieldMixin):
112
112
  if view_name_pattern:
113
113
  view_name = _MatchingRegexViewName(view_name_pattern)
114
114
  else:
115
- log.warn(
115
+ log.warning(
116
116
  _(
117
117
  "Please provide either 'view_name' or 'view_name_pattern' for {} on {}."
118
118
  ).format(self.__class__.__name__, traceback.extract_stack()[-4][2])
@@ -79,7 +79,7 @@ async def _repair_ca(content_artifact, repaired=None):
79
79
  try:
80
80
  dl_result = await downloader.run()
81
81
  except Exception as e:
82
- log.warn(_("Redownload failed from '{}': {}.").format(remote_artifact.url, str(e)))
82
+ log.warning(_("Redownload failed from '{}': {}.").format(remote_artifact.url, str(e)))
83
83
  else:
84
84
  if dl_result.artifact_attributes["sha256"] == content_artifact.artifact.sha256:
85
85
  with open(dl_result.path, "rb") as src:
@@ -138,7 +138,7 @@ async def _repair_artifacts_for_content(subset=None, verify_checksums=True):
138
138
  valid = await loop.run_in_executor(None, storage.exists, artifact.file.name)
139
139
  if not valid:
140
140
  await missing.aincrement()
141
- log.warn(_("Missing file for {}").format(artifact))
141
+ log.warning(_("Missing file for {}").format(artifact))
142
142
  elif verify_checksums:
143
143
  # default ThreadPoolExecutor uses num cores x 5 threads. Since we're doing
144
144
  # such long and sequential reads, using too many threads might hurt more
@@ -151,7 +151,7 @@ async def _repair_artifacts_for_content(subset=None, verify_checksums=True):
151
151
  )
152
152
  if not valid:
153
153
  await corrupted.aincrement()
154
- log.warn(_("Digest mismatch for {}").format(artifact))
154
+ log.warning(_("Digest mismatch for {}").format(artifact))
155
155
 
156
156
  if not valid:
157
157
  if len(pending) >= 5: # Limit the number of concurrent repair tasks
pulpcore/tasking/tasks.py CHANGED
@@ -127,7 +127,18 @@ def _execute_task(task):
127
127
  send_task_notification(task)
128
128
  else:
129
129
  task.set_completed()
130
- _logger.info("Task completed %s in domain: %s", task.pk, domain.name)
130
+ execution_time = task.finished_at - task.started_at
131
+ execution_time_us = int(execution_time.total_seconds() * 1_000_000) # μs
132
+ _logger.info(
133
+ "Task completed %s in domain:"
134
+ " %s, task_type: %s, immediate: %s, deferred: %s, execution_time: %s μs",
135
+ task.pk,
136
+ domain.name,
137
+ task.name,
138
+ str(task.immediate),
139
+ str(task.deferred),
140
+ execution_time_us,
141
+ )
131
142
  send_task_notification(task)
132
143
 
133
144
 
@@ -309,7 +309,7 @@ class PulpcoreWorker:
309
309
  # But during at least one specific upgrade this situation can emerge.
310
310
  # In this case, we can assume that the old algorithm was employed to identify the
311
311
  # task as unblocked, and we just rectify the situation here.
312
- _logger.warn(
312
+ _logger.warning(
313
313
  "Running task %s was not previously marked unblocked. Fixing.", task.pk
314
314
  )
315
315
  task.unblock()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pulpcore
3
- Version: 3.78.0
3
+ Version: 3.79.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
@@ -28,7 +28,7 @@ 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.2.2,>=2.1.2
30
30
  Requires-Dist: click<=8.1.8,>=8.1.0
31
- Requires-Dist: cryptography<44.0.4,>=38.0.1
31
+ Requires-Dist: cryptography<45.0.3,>=38.0.1
32
32
  Requires-Dist: Django~=4.2.0
33
33
  Requires-Dist: django-filter<=25.1,>=23.1
34
34
  Requires-Dist: django-guid<=3.5.1,>=3.3
@@ -37,7 +37,7 @@ Requires-Dist: django-lifecycle<=1.2.4,>=1.0
37
37
  Requires-Dist: djangorestframework<=3.16.0,>=3.14.0
38
38
  Requires-Dist: djangorestframework-queryfields<=1.1.0,>=1.0
39
39
  Requires-Dist: drf-access-policy<1.5.1,>=1.1.2
40
- Requires-Dist: drf-nested-routers<=0.94.1,>=0.93.4
40
+ Requires-Dist: drf-nested-routers<=0.94.2,>=0.93.4
41
41
  Requires-Dist: drf-spectacular==0.27.2
42
42
  Requires-Dist: dynaconf<3.3.0,>=3.2.5
43
43
  Requires-Dist: gunicorn<23.1.0,>=20.1
@@ -52,7 +52,7 @@ Requires-Dist: opentelemetry-exporter-otlp-proto-http<1.34,>=1.27.0
52
52
  Requires-Dist: protobuf<6.0,>=4.21.1
53
53
  Requires-Dist: pulp-glue<0.33,>=0.18.0
54
54
  Requires-Dist: pygtrie<=2.5.0,>=2.5
55
- Requires-Dist: psycopg[binary]<=3.2.8,>=3.1.8
55
+ Requires-Dist: psycopg[binary]<=3.2.9,>=3.1.8
56
56
  Requires-Dist: pyparsing<=3.2.3,>=3.1.0
57
57
  Requires-Dist: python-gnupg<=0.5.4,>=0.5
58
58
  Requires-Dist: PyYAML<=6.0.2,>=5.1.1
@@ -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=hqH_1iUT2LJzUr3xz4LG8Dy4FOC5DXp3rqx6S3JrQkw,297
3
+ pulp_certguard/app/__init__.py,sha256=37fy6yEmamVjBNpYjBDR0PLwmJVcJLBDKJJecOne2Js,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=Fi_p-Vle_I-VYUSe4Zlg7esb_Ul5fpB8Rx9UGLK5UNQ,13281
52
- pulp_file/app/__init__.py,sha256=MWeAHZ0tKUnYLsD7UEnk75YAkXMd5luRNhpvU_q_KPE,292
52
+ pulp_file/app/__init__.py,sha256=H_oQBsMT3QLmqf01BA-pgV9rZGJ3o9eZA4qZX2qbFkY,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
@@ -110,10 +110,10 @@ pulpcore/pytest_plugin.py,sha256=Tq_xlO8Z2iyjFtbnaKHbWQogq6jxcRpjji9XbKrs5_U,377
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=RR971l1RNPGhG0_eSTV_2Pk-_EqFLNeF5bBoH2AOowM,17860
113
+ pulpcore/app/apps.py,sha256=JlQDeDMMwjANi3Td8hHSxAJc8YXQRGyE2q-AVEWW54E,17860
114
114
  pulpcore/app/authentication.py,sha256=1LIJW6HIQQlZrliHy__jdzkDEh6Oj7xKgd0V-vRcDus,2855
115
115
  pulpcore/app/checks.py,sha256=jbfTF7nmftBbky4AQXHigpyCaGydKasvRUXsd72JZVg,1946
116
- pulpcore/app/entrypoint.py,sha256=HRfaHDkveSIfcTOtWEWYqg1poTmTo0J9hzzmj0yDcEM,4885
116
+ pulpcore/app/entrypoint.py,sha256=m9kwANkh9OkhyAcWqPbrZg21IMQibLlB8_k1tkVgedg,4888
117
117
  pulpcore/app/files.py,sha256=uPodXYTVh7Ud-lQn8F58viSdom7TMh2X1SpoDt6XRKw,5797
118
118
  pulpcore/app/global_access_conditions.py,sha256=Jezc1Hf0bQFaZvZFEDPpBrJmK0EvIa6zHRHHZYkez2Y,30398
119
119
  pulpcore/app/importexport.py,sha256=x1gGrHgirfMLsv92GEwBIQe12aItJJW9JH8TPij-rms,8795
@@ -121,11 +121,11 @@ pulpcore/app/loggers.py,sha256=7tteVBBIf4W7jk4tB7QNpFGjCZueDDrPAavHj46LdJI,79
121
121
  pulpcore/app/manage.py,sha256=5YGD5ly3dJcLjX4jKIo3BBPFi_aqEPqi-CCoogV8lm8,286
122
122
  pulpcore/app/mime_types.py,sha256=xQh9gd5jHKxS0RrYqUjg98pST-Cyfcrk_Et1l2eby_w,6706
123
123
  pulpcore/app/modelresource.py,sha256=SlnKD_K-ZFtR5Gt8hpoF5odEX2y-1v2bb6UkJcOqnd8,4847
124
- pulpcore/app/openpgp.py,sha256=jyvOBlu_wGDH_aem3TN8hw51Dx2dd3NyLzCw4Q9Xlf0,17246
124
+ pulpcore/app/openpgp.py,sha256=MYwCTGz7J9-Zr5aSBrz7KGWWWNC1EI-aItGb5dr7XPE,17246
125
125
  pulpcore/app/pulp_hashlib.py,sha256=NoVCO8duLz9rggPcilg0smi6fTDnsn-zS9dXgO831Pg,1327
126
126
  pulpcore/app/pulpcore_gunicorn_application.py,sha256=caqbDg9dhzECbx9Ss76biuEARhquj9gQaSL6v3XLy2w,2612
127
127
  pulpcore/app/redis_connection.py,sha256=VTdG0ulXuyESjYV6SJdG_jLzkLZH-MlLcD6pielwRSk,952
128
- pulpcore/app/replica.py,sha256=b6r-QF4H4G94N5HoaV3PGHeOD4-BqVb7YVsRNHx0h9Y,11675
128
+ pulpcore/app/replica.py,sha256=6WU-K8olrOoO4q8gwJ2bKc_qmvw8wCOzRZdNZrr895g,11678
129
129
  pulpcore/app/response.py,sha256=hYH_jSBrxmRsBr2bknmXE1qfs2g8JjDTXYcQ5ZWlF_c,1950
130
130
  pulpcore/app/role_util.py,sha256=84HSt8_9fxB--dtfSyg_TumVgOdyBbyP6rBaiAfTpOU,22393
131
131
  pulpcore/app/settings.py,sha256=f2LXOVLd58iG2z1Whm_XlLop129uKT5-GYxWiBq-ja8,22430
@@ -139,7 +139,7 @@ pulpcore/app/management/commands/analyze-publication.py,sha256=imcHSBYHI20vaT6Zg
139
139
  pulpcore/app/management/commands/clean-up-progress-reports.py,sha256=3LLB1MJyyq_eHfuVn-XwzojufqphEaNTRIbXNbjgiCM,1971
140
140
  pulpcore/app/management/commands/datarepair-2327.py,sha256=HCw3XQcEEFbgYPd7H1bBjboApDapCNplsAxd9ua8f6M,4677
141
141
  pulpcore/app/management/commands/dump-permissions.py,sha256=hrwDbEMBpEGM6UmgZtCHR9vpEiVQP8KLPybVmqSMxmA,8662
142
- pulpcore/app/management/commands/dump-publications-to-fs.py,sha256=0rIt7fJX_q-h_5sbys5T4SClp6Q326ABOWu9ZZfUPdA,7037
142
+ pulpcore/app/management/commands/dump-publications-to-fs.py,sha256=lkLwxPi4GXzcLZpLvQbPnqYCALxag-G5xjr309gWGwo,7040
143
143
  pulpcore/app/management/commands/handle-artifact-checksums.py,sha256=gblm6CkuyXrf9TsiTtts6iIgk4nyZnsJShozGxyALV8,8728
144
144
  pulpcore/app/management/commands/migrationstat.py,sha256=Gy19UMSyUeXYT13ERQ-P1PdgnmNX9veJteEOgMMG6QY,1517
145
145
  pulpcore/app/management/commands/openapi.py,sha256=p-aPuVfbnFQYIU7BMnipxe9nId-f2agNiviSIy43y9Q,3634
@@ -303,14 +303,14 @@ pulpcore/app/models/repository.py,sha256=xBMKsryirkpZyrQHnFbwolNbvyX1jHljcqC1ofv
303
303
  pulpcore/app/models/role.py,sha256=dZklNd2VeAw4cT6dyJ7SyTBt9sZvdqakY86wXGAY3vU,3287
304
304
  pulpcore/app/models/status.py,sha256=72oUOJ7BnCAw3uDbc-XuI72oAyP2llCoBic4zb2JP78,3683
305
305
  pulpcore/app/models/storage.py,sha256=2b-DQWaO31NqjV6FiISALegND-sQZAU7BVAsduUvm3o,6780
306
- pulpcore/app/models/task.py,sha256=OhR7nxqExYhpdAoNkDDem0C6FvY8O_l0yDJ-0AaeZwU,15049
306
+ pulpcore/app/models/task.py,sha256=gcK-ou-ppS5Xdqx-6HHE01_lGeZn16H9IzqEZ_P07MY,14652
307
307
  pulpcore/app/models/upload.py,sha256=3njXT2rrVJwBjEDegvqcLD9_7cPnnl974lhbAhikEp8,3004
308
308
  pulpcore/app/protobuf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
309
309
  pulpcore/app/protobuf/analytics_pb2.py,sha256=-4CkbSW8JUAEIjZJBTPAJ5QezFJOdCPiDhx8_KA1bMU,2168
310
310
  pulpcore/app/serializers/__init__.py,sha256=M1g5Si6hRi1flhQ-F1n6G-uFEzIZ7BUqHZ8iUE-bRuM,3466
311
311
  pulpcore/app/serializers/access_policy.py,sha256=NNtuzDW5H4RGfy5LbRFEHWDTDzXdL-Kihe9uquXnxBU,2818
312
312
  pulpcore/app/serializers/acs.py,sha256=wBbGE5YHR7dJWuicbDtiPQUJ7xEgz1zKHGkJEaMfpDU,5834
313
- pulpcore/app/serializers/base.py,sha256=6mC5ajrv4bVm3K-mWigDNJKOE4OTAdLKmoJPTSc8rr0,21415
313
+ pulpcore/app/serializers/base.py,sha256=ojWmsr2U2Mx8qpSFxqHLNQyfU2Z9q7hY1NUwVs9s3HE,21418
314
314
  pulpcore/app/serializers/content.py,sha256=lqfSah9Kg2i6dV-x2MGwQ-1q87GB9VOtjkQdjQKC5tQ,11967
315
315
  pulpcore/app/serializers/domain.py,sha256=-xRJS_Olb1s2bqFzKamV0d_QnYO-e2iIyBJw-39uqMI,22688
316
316
  pulpcore/app/serializers/exporter.py,sha256=TxAgHDt34YUGPusawn7B8HL3bBymp46__6CnfhXSgGs,11179
@@ -339,7 +339,7 @@ pulpcore/app/tasks/orphan.py,sha256=4rTZLZ549niJ7mGMh_7suy-czIcj06oCTxPYnsPN8mU,
339
339
  pulpcore/app/tasks/purge.py,sha256=yrnlvQKtg2usjK-75JoDvg4RvvEKipMpI8p4fh69A3o,7472
340
340
  pulpcore/app/tasks/reclaim_space.py,sha256=FZ7KFasbScPAU7A6lzK98pdylmqgThssgnNMecG5bEw,3803
341
341
  pulpcore/app/tasks/replica.py,sha256=x-Yjd8Z4EUhrhuF1DCX5jCa6F7FTAE3th-161lnLN2g,4509
342
- pulpcore/app/tasks/repository.py,sha256=tPQ8KvsAUgX8Gd_hXsSc64uCmhVRQqHh36bykHlUPIw,9631
342
+ pulpcore/app/tasks/repository.py,sha256=v-CDXp03YV6S6Lf-rKklPw7PwpfeoQe_Gw3ZyMH6SFQ,9640
343
343
  pulpcore/app/tasks/telemetry.py,sha256=QXOcYi7VIx_TBPCfs2BfcaiiVzRCiTFPZCN8MlC-hw8,1338
344
344
  pulpcore/app/tasks/test.py,sha256=_3BdJzdtEGdyL7qnzl0apwAoGeleYPeZTr7IJ5COFyo,912
345
345
  pulpcore/app/tasks/upload.py,sha256=3YJa32XYUFgqkEEWoERRPB9Q6ph9a6ashMtMi24R15k,1413
@@ -427,8 +427,8 @@ pulpcore/tasking/_util.py,sha256=giR8f8fNvsjsTiuJOU9X21Dyb14fFntSYU7xXGwQZzo,970
427
427
  pulpcore/tasking/entrypoint.py,sha256=Npnn41e39soGvJ7CTaZXT5MjIhOO7UtQmpmNaZtfKYg,1120
428
428
  pulpcore/tasking/kafka.py,sha256=76z4DzeXM1WL5uu1HlKnduWeLO3-b-czvGBXdWR6054,3845
429
429
  pulpcore/tasking/storage.py,sha256=zQkwlpC_FDQtmZGZ8vKwHqxvD6CLO_gAS4Q7wijZE-k,3106
430
- pulpcore/tasking/tasks.py,sha256=b0YzBoxXiBXC8piZlzV63ehRHsw8V3uq6t4v8Ec8OIg,13935
431
- pulpcore/tasking/worker.py,sha256=NpBACe6z_xFYOEeJYRne0hlwQDVrOAYGwpNCzSL-3C4,23819
430
+ pulpcore/tasking/tasks.py,sha256=Y1tvG2hHREtpzVnQtu-_QYXD6mKtuvyCethOopWUJAI,14327
431
+ pulpcore/tasking/worker.py,sha256=c9RgSYg4J_Jn_q70MVF_2egDeASFgXlLrP00lqWKtnQ,23822
432
432
  pulpcore/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
433
433
  pulpcore/tests/functional/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
434
434
  pulpcore/tests/functional/content_with_coverage.py,sha256=gQK8himy32s9O9vpXdgoM6-_z2KySaXm5rTga9z0jGI,260
@@ -529,9 +529,9 @@ pulpcore/tests/unit/stages/test_artifactdownloader.py,sha256=qB1ANdFmNtUnljg8fCd
529
529
  pulpcore/tests/unit/stages/test_stages.py,sha256=H1a2BQLjdZlZvcb_qULp62huZ1xy6ItTcthktVyGU0w,4735
530
530
  pulpcore/tests/unit/viewsets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
531
531
  pulpcore/tests/unit/viewsets/test_viewset_base.py,sha256=W9o3V6758bZctR6krMPPQytb0xJuF-jb4uBWTNDoD_U,4837
532
- pulpcore-3.78.0.dist-info/licenses/LICENSE,sha256=dhnHU8rJXUdAIgIjveSKAyYG_KzN5eVG-bxETIGrNW0,17988
533
- pulpcore-3.78.0.dist-info/METADATA,sha256=uo86c3lPxNoL4oLA7SpqwFpx-VAnB39P6ko50f46zas,4336
534
- pulpcore-3.78.0.dist-info/WHEEL,sha256=DnLRTWE75wApRYVsjgc6wsVswC54sMSJhAEd4xhDpBk,91
535
- pulpcore-3.78.0.dist-info/entry_points.txt,sha256=OZven4wzXzQA5b5q9MpP4HUpIPPQCSvIOvkKtNInrK0,452
536
- pulpcore-3.78.0.dist-info/top_level.txt,sha256=6h-Lm3FKQSaT_nL1KSxu_hBnzKE15bcvf_BoU-ea4CI,34
537
- pulpcore-3.78.0.dist-info/RECORD,,
532
+ pulpcore-3.79.0.dist-info/licenses/LICENSE,sha256=dhnHU8rJXUdAIgIjveSKAyYG_KzN5eVG-bxETIGrNW0,17988
533
+ pulpcore-3.79.0.dist-info/METADATA,sha256=oza7Ge3RemPRjXrvpfPh3Rc-vgp7wq6ZOutyPjWKjH4,4336
534
+ pulpcore-3.79.0.dist-info/WHEEL,sha256=zaaOINJESkSfm_4HQVc5ssNzHCPXhJm0kEUakpsEHaU,91
535
+ pulpcore-3.79.0.dist-info/entry_points.txt,sha256=OZven4wzXzQA5b5q9MpP4HUpIPPQCSvIOvkKtNInrK0,452
536
+ pulpcore-3.79.0.dist-info/top_level.txt,sha256=6h-Lm3FKQSaT_nL1KSxu_hBnzKE15bcvf_BoU-ea4CI,34
537
+ pulpcore-3.79.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.4.0)
2
+ Generator: setuptools (80.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5