pulpcore 3.87.1__py3-none-any.whl → 3.89.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.

Files changed (31) hide show
  1. pulp_certguard/app/__init__.py +1 -1
  2. pulp_file/app/__init__.py +1 -1
  3. pulp_file/app/tasks/publishing.py +5 -0
  4. pulp_file/app/tasks/synchronizing.py +4 -0
  5. pulpcore/app/apps.py +1 -1
  6. pulpcore/app/migrations/0142_task_result.py +21 -0
  7. pulpcore/app/migrations/0143_require_app_lock_zdu.py +15 -0
  8. pulpcore/app/models/task.py +43 -25
  9. pulpcore/app/serializers/task.py +5 -0
  10. pulpcore/app/settings.py +0 -2
  11. pulpcore/app/tasks/base.py +9 -2
  12. pulpcore/content/handler.py +7 -6
  13. pulpcore/plugin/serializers/__init__.py +2 -0
  14. pulpcore/plugin/serializers/content.py +1 -1
  15. pulpcore/tasking/tasks.py +67 -71
  16. pulpcore/tasking/worker.py +91 -89
  17. pulpcore/tests/functional/api/test_status.py +1 -1
  18. pulpcore/tests/functional/api/test_upload.py +3 -1
  19. pulpcore/tests/functional/api/using_plugin/test_distributions.py +6 -2
  20. pulpcore/tests/functional/api/using_plugin/test_tasks.py +20 -0
  21. pulpcore/tests/functional/utils.py +1 -1
  22. pulpcore/tests/unit/metrics/test_aiohttp_instrumentation.py +4 -1
  23. pulpcore/tests/unit/models/test_task.py +5 -3
  24. pulpcore/tests/unit/stages/test_artifactdownloader.py +2 -2
  25. pulpcore/tests/unit/viewsets/test_viewset_base.py +3 -3
  26. {pulpcore-3.87.1.dist-info → pulpcore-3.89.0.dist-info}/METADATA +2 -2
  27. {pulpcore-3.87.1.dist-info → pulpcore-3.89.0.dist-info}/RECORD +31 -29
  28. {pulpcore-3.87.1.dist-info → pulpcore-3.89.0.dist-info}/WHEEL +0 -0
  29. {pulpcore-3.87.1.dist-info → pulpcore-3.89.0.dist-info}/entry_points.txt +0 -0
  30. {pulpcore-3.87.1.dist-info → pulpcore-3.89.0.dist-info}/licenses/LICENSE +0 -0
  31. {pulpcore-3.87.1.dist-info → pulpcore-3.89.0.dist-info}/top_level.txt +0 -0
@@ -15,7 +15,6 @@ from packaging.version import parse as parse_version
15
15
  from django.conf import settings
16
16
  from django.db import connection, DatabaseError, IntegrityError
17
17
  from django.db.models import Case, Count, F, Max, Value, When
18
- from django.db.models.functions import Random
19
18
  from django.utils import timezone
20
19
 
21
20
  from pulpcore.constants import (
@@ -54,6 +53,8 @@ TASK_GRACE_INTERVAL = settings.TASK_GRACE_INTERVAL
54
53
  TASK_KILL_INTERVAL = 1
55
54
  # Number of heartbeats between cleaning up worker processes (approx)
56
55
  WORKER_CLEANUP_INTERVAL = 100
56
+ # Number of hearbeats between rechecking ignored tasks.
57
+ IGNORED_TASKS_CLEANUP_INTERVAL = 100
57
58
  # Threshold time in seconds of an unblocked task before we consider a queue stalled
58
59
  THRESHOLD_UNBLOCKED_WAITING_TIME = 5
59
60
 
@@ -66,6 +67,9 @@ class PulpcoreWorker:
66
67
  self.wakeup_handle = False
67
68
  self.cancel_task = False
68
69
 
70
+ self.ignored_task_ids = []
71
+ self.ignored_task_countdown = IGNORED_TASKS_CLEANUP_INTERVAL
72
+
69
73
  self.auxiliary = auxiliary
70
74
  self.task = None
71
75
  self.name = f"{os.getpid()}@{socket.getfqdn()}"
@@ -73,13 +77,10 @@ class PulpcoreWorker:
73
77
  self.last_metric_heartbeat = timezone.now()
74
78
  self.versions = {app.label: app.version for app in pulp_plugin_configs()}
75
79
  self.cursor = connection.cursor()
76
- try:
77
- self.app_status = AppStatus.objects.create(
78
- name=self.name, app_type="worker", versions=self.versions
79
- )
80
- except IntegrityError:
81
- _logger.error(f"A worker with name {self.name} already exists in the database.")
82
- exit(1)
80
+ self.app_status = AppStatus.objects.create(
81
+ name=self.name, app_type="worker", versions=self.versions
82
+ )
83
+
83
84
  # This defaults to immediate task cancellation.
84
85
  # It will be set into the future on moderately graceful worker shutdown,
85
86
  # and set to None for fully graceful shutdown.
@@ -152,6 +153,10 @@ class PulpcoreWorker:
152
153
  if notification.payload == str(self.task.pk):
153
154
  self.cancel_task = True
154
155
 
156
+ def shutdown(self):
157
+ self.app_status.delete()
158
+ _logger.info(_("Worker %s was shut down."), self.name)
159
+
155
160
  def handle_worker_heartbeat(self):
156
161
  """
157
162
  Update worker heartbeat records.
@@ -174,9 +179,13 @@ class PulpcoreWorker:
174
179
  self.shutdown_requested = True
175
180
  self.cancel_task = True
176
181
 
177
- def shutdown(self):
178
- self.app_status.delete()
179
- _logger.info(_("Worker %s was shut down."), self.name)
182
+ def cleanup_ignored_tasks(self):
183
+ for pk in (
184
+ Task.objects.filter(pk__in=self.ignored_task_ids)
185
+ .exclude(state__in=TASK_INCOMPLETE_STATES)
186
+ .values_list("pk", flat=True)
187
+ ):
188
+ self.ignored_task_ids.remove(pk)
180
189
 
181
190
  def worker_cleanup(self):
182
191
  qs = AppStatus.objects.older_than(age=timedelta(days=7))
@@ -198,6 +207,11 @@ class PulpcoreWorker:
198
207
  def beat(self):
199
208
  if self.app_status.last_heartbeat < timezone.now() - self.heartbeat_period:
200
209
  self.handle_worker_heartbeat()
210
+ if self.ignored_task_ids:
211
+ self.ignored_task_countdown -= 1
212
+ if self.ignored_task_countdown <= 0:
213
+ self.ignored_task_countdown = IGNORED_TASKS_CLEANUP_INTERVAL
214
+ self.cleanup_ignored_tasks()
201
215
  if not self.auxiliary:
202
216
  self.worker_cleanup_countdown -= 1
203
217
  if self.worker_cleanup_countdown <= 0:
@@ -217,15 +231,10 @@ class PulpcoreWorker:
217
231
 
218
232
  This function must only be called while holding the lock for that task. It is a no-op if
219
233
  the task is neither in "running" nor "canceling" state.
220
-
221
- Return ``True`` if the task was actually canceled, ``False`` otherwise.
222
234
  """
223
235
  # A task is considered abandoned when in running state, but no worker holds its lock
224
236
  domain = task.pulp_domain
225
- try:
226
- task.set_canceling()
227
- except RuntimeError:
228
- return False
237
+ task.set_canceling()
229
238
  if reason:
230
239
  _logger.info(
231
240
  "Cleaning up task %s in domain: %s and marking as %s. Reason: %s",
@@ -245,10 +254,8 @@ class PulpcoreWorker:
245
254
  task.set_canceled(final_state=final_state, reason=reason)
246
255
  if task.reserved_resources_record:
247
256
  self.notify_workers(TASK_WAKEUP_UNBLOCK)
248
- return True
249
257
 
250
258
  def is_compatible(self, task):
251
- domain = task.pulp_domain
252
259
  unmatched_versions = [
253
260
  f"task: {label}>={version} worker: {self.versions.get(label)}"
254
261
  for label, version in task.versions.items()
@@ -256,6 +263,7 @@ class PulpcoreWorker:
256
263
  or parse_version(self.versions[label]) < parse_version(version)
257
264
  ]
258
265
  if unmatched_versions:
266
+ domain = task.pulp_domain # Hidden db roundtrip
259
267
  _logger.info(
260
268
  _("Incompatible versions to execute task %s in domain: %s by worker %s: %s"),
261
269
  task.pk,
@@ -361,70 +369,6 @@ class PulpcoreWorker:
361
369
 
362
370
  return count
363
371
 
364
- def iter_tasks(self):
365
- """Iterate over ready tasks and yield each task while holding the lock."""
366
- while not self.shutdown_requested:
367
- # When batching this query, be sure to use "pulp_created" as a cursor.
368
- for task in Task.objects.filter(
369
- state__in=TASK_INCOMPLETE_STATES,
370
- unblocked_at__isnull=False,
371
- app_lock__isnull=True,
372
- ).order_by("-immediate", F("pulp_created") + Value(timedelta(seconds=8)) * Random()):
373
- # This code will only be called if we acquired the lock successfully.
374
- # The lock will be automatically be released at the end of the block.
375
- with contextlib.suppress(AdvisoryLockError), task:
376
- # Check if someone else changed the task before we got the lock.
377
- task.refresh_from_db()
378
- if task.state not in TASK_INCOMPLETE_STATES:
379
- continue
380
- # We got the advisory lock (OLD) now try to get the app_lock (NEW).
381
- rows = Task.objects.filter(pk=task.pk, app_lock=None).update(
382
- app_lock=AppStatus.objects.current()
383
- )
384
- if rows == 0:
385
- _logger.error(
386
- "Acquired advisory lock but missed the app_lock for the task. "
387
- "This should only happen during the upgrade phase to the new app_lock."
388
- f"Task: {task.pk=}, {task.state=}, {task.app_lock=}."
389
- )
390
- continue
391
- try:
392
- if task.state == TASK_STATES.CANCELING:
393
- # No worker picked this task up before being canceled.
394
- if self.cancel_abandoned_task(task, TASK_STATES.CANCELED):
395
- # Continue looking for the next task without considering this
396
- # tasks resources, as we just released them.
397
- continue
398
- if task.state == TASK_STATES.RUNNING:
399
- # A running task without a lock must be abandoned.
400
- if self.cancel_abandoned_task(
401
- task, TASK_STATES.FAILED, "Worker has gone missing."
402
- ):
403
- # Continue looking for the next task without considering this
404
- # tasks resources, as we just released them.
405
- continue
406
-
407
- # This statement is using lazy evaluation.
408
- if (
409
- task.state == TASK_STATES.WAITING
410
- and task.unblocked_at is not None
411
- and self.is_compatible(task)
412
- ):
413
- yield task
414
- # Start from the top of the Task list.
415
- break
416
- finally:
417
- rows = Task.objects.filter(
418
- pk=task.pk, app_lock=AppStatus.objects.current()
419
- ).update(app_lock=None)
420
- if rows != 1:
421
- raise RuntimeError(
422
- "Something other than us is messing around with locks."
423
- )
424
- else:
425
- # No task found in the for-loop
426
- break
427
-
428
372
  def sleep(self):
429
373
  """Wait for signals on the wakeup channel while heart beating."""
430
374
 
@@ -533,6 +477,44 @@ class PulpcoreWorker:
533
477
  self.notify_workers(TASK_WAKEUP_UNBLOCK)
534
478
  self.task = None
535
479
 
480
+ def fetch_task(self):
481
+ """
482
+ Fetch an available unblocked task and set the app_lock to this process.
483
+ """
484
+ # The PostgreSQL returning logic cannot be represented in Django ORM.
485
+ # Also I doubt that rewriting this in ORM makes it any more readable.
486
+ query = """
487
+ UPDATE core_task
488
+ SET app_lock_id = %s
489
+ WHERE pulp_id IN (
490
+ SELECT pulp_id FROM core_task
491
+ WHERE
492
+ state = ANY(%s)
493
+ AND unblocked_at IS NOT NULL
494
+ AND app_lock_id IS NULL
495
+ AND NOT pulp_id = ANY(%s)
496
+ ORDER BY immediate DESC, pulp_created + '8 s'::interval * random()
497
+ LIMIT 1
498
+ FOR UPDATE SKIP LOCKED
499
+ )
500
+ RETURNING
501
+ pulp_id,
502
+ state,
503
+ unblocked_at,
504
+ versions,
505
+ pulp_domain_id,
506
+ reserved_resources_record
507
+ """
508
+ qs = Task.objects.raw(
509
+ query,
510
+ [
511
+ self.app_status.pulp_id,
512
+ list(TASK_INCOMPLETE_STATES),
513
+ self.ignored_task_ids,
514
+ ],
515
+ )
516
+ return next(iter(qs), None)
517
+
536
518
  def handle_unblocked_tasks(self):
537
519
  """Pick and supervise tasks until there are no more available tasks.
538
520
 
@@ -540,14 +522,34 @@ class PulpcoreWorker:
540
522
  would go to sleep and wouldn't be able to know about the unhandled task until
541
523
  an external wakeup event occurs (e.g., new worker startup or new task gets in).
542
524
  """
543
- keep_looping = True
544
- while keep_looping and not self.shutdown_requested:
525
+ while not self.shutdown_requested:
545
526
  # Clear pending wakeups. We are about to handle them anyway.
546
527
  self.wakeup_handle = False
547
- keep_looping = False
548
- for task in self.iter_tasks():
549
- keep_looping = True
550
- self.supervise_task(task)
528
+
529
+ task = self.fetch_task()
530
+ if task is None:
531
+ # No task found
532
+ break
533
+ try:
534
+ if task.state == TASK_STATES.CANCELING:
535
+ # No worker picked this task up before being canceled.
536
+ # Or the worker disappeared before handling the canceling.
537
+ self.cancel_abandoned_task(task, TASK_STATES.CANCELED)
538
+ elif task.state == TASK_STATES.RUNNING:
539
+ # A running task without a lock must be abandoned.
540
+ self.cancel_abandoned_task(task, TASK_STATES.FAILED, "Worker has gone missing.")
541
+ elif task.state == TASK_STATES.WAITING and self.is_compatible(task):
542
+ self.supervise_task(task)
543
+ else:
544
+ # Probably incompatible, but for whatever reason we didn't pick it up this time,
545
+ # we don't need to look at it ever again.
546
+ self.ignored_task_ids.append(task.pk)
547
+ finally:
548
+ rows = Task.objects.filter(pk=task.pk, app_lock=AppStatus.objects.current()).update(
549
+ app_lock=None
550
+ )
551
+ if rows != 1:
552
+ raise RuntimeError("Something other than us is messing around with locks.")
551
553
 
552
554
  def _record_unblocked_waiting_tasks_metric(self):
553
555
  now = timezone.now()
@@ -6,7 +6,7 @@ from jsonschema import validate
6
6
 
7
7
 
8
8
  STATUS = {
9
- "$schema": "http://json-schema.org/schema#",
9
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
10
10
  "title": "Pulp 3 status API schema",
11
11
  "description": ("Derived from Pulp's actual behaviour and various Pulp issues."),
12
12
  "type": "object",
@@ -158,7 +158,9 @@ def test_upload_response(
158
158
  {"offset": 0, "size": 6291456},
159
159
  {"offset": 6291456, "size": 4194304},
160
160
  ]
161
- sorted_chunks_response = sorted([c.dict() for c in upload.chunks], key=lambda i: i["offset"])
161
+ sorted_chunks_response = sorted(
162
+ [c.model_dump() for c in upload.chunks], key=lambda i: i["offset"]
163
+ )
162
164
  assert sorted_chunks_response == expected_chunks
163
165
 
164
166
 
@@ -85,7 +85,9 @@ def test_crud_publication_distribution(
85
85
  new_name = str(uuid4())
86
86
  distribution.name = new_name
87
87
  monitor_task(
88
- file_bindings.DistributionsFileApi.update(distribution.pulp_href, distribution.dict()).task
88
+ file_bindings.DistributionsFileApi.update(
89
+ distribution.pulp_href, distribution.model_dump()
90
+ ).task
89
91
  )
90
92
  distribution = file_bindings.DistributionsFileApi.read(distribution.pulp_href)
91
93
  assert distribution.name == new_name
@@ -94,7 +96,9 @@ def test_crud_publication_distribution(
94
96
  new_base_path = str(uuid4())
95
97
  distribution.base_path = new_base_path
96
98
  monitor_task(
97
- file_bindings.DistributionsFileApi.update(distribution.pulp_href, distribution.dict()).task
99
+ file_bindings.DistributionsFileApi.update(
100
+ distribution.pulp_href, distribution.model_dump()
101
+ ).task
98
102
  )
99
103
  distribution = file_bindings.DistributionsFileApi.read(distribution.pulp_href)
100
104
  assert distribution.base_path == new_base_path
@@ -169,3 +169,23 @@ def test_reserved_resources_filter(setup_filter_fixture, pulpcore_bindings):
169
169
  assert set(h.pulp_href for h in prn_results.results) == task_hrefs
170
170
  mixed_results = pulpcore_bindings.TasksApi.list(exclusive_resources__in=[repo_prn, remote_prn])
171
171
  assert mixed_results.count == 0
172
+
173
+
174
+ @pytest.mark.parallel
175
+ def test_task_result(add_to_cleanup, file_bindings, monitor_task):
176
+ """
177
+ Test that when performing `general_create` or `ageneral_update`,
178
+ the result of the task is stored in the `Task.result` field.
179
+ """
180
+ # test create
181
+ body = {"name": str(uuid4()), "base_path": str(uuid4())}
182
+ task = monitor_task(file_bindings.DistributionsFileApi.create(body).task)
183
+ assert task.result["base_path"] == body["base_path"]
184
+
185
+ # test update
186
+ dist_href = task.result["pulp_href"]
187
+ updated_body = {"name": str(uuid4()), "base_path": str(uuid4())}
188
+ task_2 = monitor_task(file_bindings.DistributionsFileApi.update(dist_href, updated_body).task)
189
+ assert task_2.result["base_path"] == updated_body["base_path"]
190
+
191
+ add_to_cleanup(file_bindings.DistributionsFileApi, dist_href)
@@ -154,5 +154,5 @@ def get_from_url(url, auth=None, headers=None):
154
154
 
155
155
  async def _get_from_url(url, auth=None, headers=None):
156
156
  async with aiohttp.ClientSession(auth=auth) as session:
157
- async with session.get(url, verify_ssl=False, headers=headers) as response:
157
+ async with session.get(url, ssl=False, headers=headers) as response:
158
158
  return response
@@ -10,7 +10,10 @@ def run_middleware(aiohttp_client):
10
10
  async def _run_middleware(provider):
11
11
  app = web.Application(middlewares=[instrumentation(provider=provider)])
12
12
 
13
- app.router.add_get("/", lambda req: web.Response())
13
+ async def handler(req):
14
+ return web.Response()
15
+
16
+ app.router.add_get("/", handler)
14
17
 
15
18
  client = await aiohttp_client(app)
16
19
 
@@ -1,6 +1,6 @@
1
1
  import pytest
2
2
  import sys
3
- from pulpcore.app.models import Task, ProgressReport
3
+ from pulpcore.app.models import AppStatus, Task, ProgressReport
4
4
  from pulpcore.constants import TASK_STATES
5
5
 
6
6
 
@@ -13,8 +13,10 @@ from pulpcore.constants import TASK_STATES
13
13
  ],
14
14
  )
15
15
  @pytest.mark.django_db
16
- def test_report_state_changes(to_state, use_canceled):
17
- task = Task.objects.create(name="test", state=TASK_STATES.RUNNING)
16
+ def test_report_state_changes(monkeypatch, to_state, use_canceled):
17
+ monkeypatch.setattr(AppStatus.objects, "_current_app_status", None)
18
+ app_status = AppStatus.objects.create(app_type="worker", name="test_runner")
19
+ task = Task.objects.create(name="test", state=TASK_STATES.RUNNING, app_lock=app_status)
18
20
  reports = {}
19
21
  for state in vars(TASK_STATES):
20
22
  report = ProgressReport(message="test", code="test", state=state, task=task)
@@ -118,7 +118,7 @@ def queue_dc(in_q, downloader_mock):
118
118
 
119
119
 
120
120
  @pytest_asyncio.fixture
121
- async def download_task(event_loop, in_q, out_q):
121
+ async def download_task(in_q, out_q):
122
122
  async def _download_task():
123
123
  """
124
124
  A coroutine running the downloader stage with a mocked ProgressReport.
@@ -133,7 +133,7 @@ async def download_task(event_loop, in_q, out_q):
133
133
  await ad()
134
134
  return pb.return_value.__aenter__.return_value.done
135
135
 
136
- task = event_loop.create_task(_download_task())
136
+ task = asyncio.get_event_loop().create_task(_download_task())
137
137
  yield task
138
138
  if not task.done():
139
139
  task.cancel()
@@ -1,5 +1,5 @@
1
1
  import pytest
2
- from pytest_django.asserts import assertQuerysetEqual
2
+ from pytest_django.asserts import assertQuerySetEqual
3
3
  import unittest
4
4
 
5
5
  from django.http import Http404, QueryDict
@@ -23,7 +23,7 @@ def test_adds_filters():
23
23
  queryset = viewset.get_queryset()
24
24
  expected = models.RepositoryVersion.objects.filter(repository__pk=repo.pk)
25
25
 
26
- assertQuerysetEqual(queryset, expected)
26
+ assertQuerySetEqual(queryset, expected)
27
27
 
28
28
 
29
29
  @pytest.mark.django_db
@@ -38,7 +38,7 @@ def test_does_not_add_filters():
38
38
  queryset = viewset.get_queryset()
39
39
  expected = models.Repository.objects.all()
40
40
 
41
- assertQuerysetEqual(queryset, expected)
41
+ assertQuerySetEqual(queryset, expected)
42
42
 
43
43
 
44
44
  def test_must_define_serializer_class():
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pulpcore
3
- Version: 3.87.1
3
+ Version: 3.89.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
@@ -46,7 +46,7 @@ Requires-Dist: opentelemetry-api<1.37,>=1.27.0
46
46
  Requires-Dist: opentelemetry-sdk<1.37,>=1.27.0
47
47
  Requires-Dist: opentelemetry-exporter-otlp-proto-http<1.37,>=1.27.0
48
48
  Requires-Dist: protobuf<7.0,>=4.21.1
49
- Requires-Dist: pulp-glue<0.36,>=0.28.0
49
+ Requires-Dist: pulp-glue<0.37,>=0.28.0
50
50
  Requires-Dist: pygtrie<=2.5.0,>=2.5
51
51
  Requires-Dist: psycopg[binary]<3.3,>=3.1.8
52
52
  Requires-Dist: pyparsing<3.3,>=3.1.0
@@ -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=WYMLvGPITpzrcbTce_stf9R4c2RVL3Hs8tGW0F6Hsbg,297
3
+ pulp_certguard/app/__init__.py,sha256=v_a1q8VcjywdotIrzqCkXvyBTyZe-ktKVmAKWLZuysk,297
4
4
  pulp_certguard/app/models.py,sha256=YLEhBtZM4hetekVZ_GTnbLlWD6CkIQw2B3ILwXRcq-s,7483
5
5
  pulp_certguard/app/serializers.py,sha256=9IxlQiy783RdKF9oI1mrYS4haG5Boy2DOjfP_eJtMLY,1726
6
6
  pulp_certguard/app/viewsets.py,sha256=1_gNmsWyOT8kcOiGVkn4-wrtAjZO4wC8q0-aoEsCpjI,697
@@ -51,7 +51,7 @@ pulp_certguard/tests/unit/test_rhsm_check_path.py,sha256=Q1CsXnUgD7ELvtolPeumyNr
51
51
  pulp_file/__init__.py,sha256=0vOCXofR6Eyxkg4y66esnOGPeESCe23C1cNBHj56w44,61
52
52
  pulp_file/manifest.py,sha256=1WwIOJrPSkFcmkRm7CkWifVOCoZvo_nnANgce6uuG7U,3796
53
53
  pulp_file/pytest_plugin.py,sha256=l1PvTxUi5D3uJy4SnHWNhr-otWEYNcm-kc5nSqVJg0Y,10646
54
- pulp_file/app/__init__.py,sha256=awSma-p8nw866yBA5QwhiIfCg2XgWpwQ6c-4tYPFC-U,292
54
+ pulp_file/app/__init__.py,sha256=4YvCEsDnvVl-nX3X-bdvrlFLtBNQp-I1dTIhrtMMByY,292
55
55
  pulp_file/app/modelresource.py,sha256=v-m-_bBEsfr8wG0TI5ffx1TuKUy2-PsirhuQz4XXF-0,1063
56
56
  pulp_file/app/models.py,sha256=QsrVg_2uKqnR89sLN2Y7Zy260_nLIcUfa94uZowlmFw,4571
57
57
  pulp_file/app/replica.py,sha256=OtNWVmdFUgNTYhPttftVNQnSrnvx2_hnrJgtW_G0Vrg,1894
@@ -61,8 +61,8 @@ pulp_file/app/migrations/0001_initial_squashed_0016_add_domain.py,sha256=ukPbncW
61
61
  pulp_file/app/migrations/0017_alter_filealternatecontentsource_alternatecontentsource_ptr_and_more.py,sha256=XyF9FYLUHCxNc4tq6PLv-rrVExrOC4TccGsegPz6Rdc,2362
62
62
  pulp_file/app/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
63
  pulp_file/app/tasks/__init__.py,sha256=jrdxJbgZZj-sX_bevAco5soNRxttNYUChvv3mTs2uRg,87
64
- pulp_file/app/tasks/publishing.py,sha256=cHO-QChEUQU6qboloGni5xeIYtZ2mEItyHlmopa2dJw,2667
65
- pulp_file/app/tasks/synchronizing.py,sha256=VuDMRPEJ0ZaEIaq2svd1a3fm4oTkbnqcLoA90knz4M8,4558
64
+ pulp_file/app/tasks/publishing.py,sha256=3zJ6c6XEFAMRLHImTU143V82h-D8Zwi5OwnnyAKtpgE,2856
65
+ pulp_file/app/tasks/synchronizing.py,sha256=HIWr9xim961T9N1VcXHGdksAZHqIaih-GZYNOGr2N3I,4724
66
66
  pulp_file/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
67
  pulp_file/tests/functional/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
68
  pulp_file/tests/functional/api/__init__.py,sha256=IxizGLz9A_3Sh2ZGHpRlqMyZ1gIVAepBpJB474OJefE,62
@@ -96,7 +96,7 @@ pulpcore/pytest_plugin.py,sha256=fy9vz5-bw30T7f4jxDtNIgF7L_0MJ_q7KIAzpvizvnY,382
96
96
  pulpcore/responses.py,sha256=mIGKmdCfTSoZxbFu4yIH1xbdLx1u5gqt3D99LTamcJg,6125
97
97
  pulpcore/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
98
98
  pulpcore/app/access_policy.py,sha256=5vCKy6WoHtIt1_-eS5vMaZ7CmR4G-CIpsrB8yT-d88Q,6079
99
- pulpcore/app/apps.py,sha256=hBLujC_jOP9ck56_h9jd1-5ROoECvCQZNSa0qfx7niE,17412
99
+ pulpcore/app/apps.py,sha256=zJJxHhtTfq3Q6HhPGyl4Sp_Y3hMGKiedm8Dkl6VTPos,17412
100
100
  pulpcore/app/authentication.py,sha256=1LIJW6HIQQlZrliHy__jdzkDEh6Oj7xKgd0V-vRcDus,2855
101
101
  pulpcore/app/checks.py,sha256=jbfTF7nmftBbky4AQXHigpyCaGydKasvRUXsd72JZVg,1946
102
102
  pulpcore/app/entrypoint.py,sha256=GYEq4GjglQZhFlU3865AT_H0nPypDKJAsf8qdyR4tPY,4985
@@ -115,7 +115,7 @@ pulpcore/app/redis_connection.py,sha256=VTdG0ulXuyESjYV6SJdG_jLzkLZH-MlLcD6pielw
115
115
  pulpcore/app/replica.py,sha256=rGE14OBaR_FKxmHL7NMxf_OizMyS-90IPsMRo_j9YRI,11474
116
116
  pulpcore/app/response.py,sha256=hYH_jSBrxmRsBr2bknmXE1qfs2g8JjDTXYcQ5ZWlF_c,1950
117
117
  pulpcore/app/role_util.py,sha256=84HSt8_9fxB--dtfSyg_TumVgOdyBbyP6rBaiAfTpOU,22393
118
- pulpcore/app/settings.py,sha256=k1MEoM25PXe1K8p9swB_lsNvg5Rd8X2mctuLTL7-nBw,21893
118
+ pulpcore/app/settings.py,sha256=tjq6rQW5_uDgiIJVwMTTuJDfXR32QK0gl9UqPDYPhJQ,21876
119
119
  pulpcore/app/urls.py,sha256=0gdI74CAdycJStXSw1gknviDGe3J3k0UhS4J8RYa5dg,8120
120
120
  pulpcore/app/util.py,sha256=nYF6nZXgqVk4U1QeZEpWYX-wqitGSGAJip6W78IfXUk,24432
121
121
  pulpcore/app/wsgi.py,sha256=7rpZ_1NHEN_UfeNZCj8206bas1WeqRkHnGdxpd7rdDI,492
@@ -190,6 +190,8 @@ pulpcore/app/migrations/0138_vulnerabilityreport.py,sha256=rYmdIXfTCSZeH5sHLCCFM
190
190
  pulpcore/app/migrations/0139_task_app_lock.py,sha256=Dtu_om_zFplrPr8DageoiXOWUiOS5aHgOy99S0bMXH0,502
191
191
  pulpcore/app/migrations/0140_require_appstatus_zdu.py,sha256=KrSyuQDg6Wd_M4RetDfGS9FDSMkHJxjh6BijR3Hro78,305
192
192
  pulpcore/app/migrations/0141_alter_appstatus_name.py,sha256=bkNO_1RrCFn5VQWTNRpz5LhZyWXluLdVekPfDGEHFB8,375
193
+ pulpcore/app/migrations/0142_task_result.py,sha256=aoq81R1-mPylVQr7pQy5Bf2Yfz5ssjDqmSXUjv2rPHg,514
194
+ pulpcore/app/migrations/0143_require_app_lock_zdu.py,sha256=RX6bk1VULScY9K5fyCejPBVbWojCVdRSB39WuLwgdIc,303
193
195
  pulpcore/app/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
194
196
  pulpcore/app/models/__init__.py,sha256=P_2UnLmtQYbASWrm8elO2Zm_od-LXVqQKnjCwYFlZW0,3552
195
197
  pulpcore/app/models/access_policy.py,sha256=o4L41RGoZ5UMmh5UeeenmadD5MJgShguphgd4eAVxQA,6071
@@ -210,7 +212,7 @@ pulpcore/app/models/repository.py,sha256=SIc21Gex6okxI7OCfHEGIpXpGlypG3z9IgMt5-m
210
212
  pulpcore/app/models/role.py,sha256=dZklNd2VeAw4cT6dyJ7SyTBt9sZvdqakY86wXGAY3vU,3287
211
213
  pulpcore/app/models/status.py,sha256=WniovQQFdlR0TN-XWd_0FnBRiwzKxDyODyD-5VUgXjo,8290
212
214
  pulpcore/app/models/storage.py,sha256=2b-DQWaO31NqjV6FiISALegND-sQZAU7BVAsduUvm3o,6780
213
- pulpcore/app/models/task.py,sha256=fHubp1YO6CjSxfXVtgdZsQyn7NJ7apBHKz6-YEqnuDM,15653
215
+ pulpcore/app/models/task.py,sha256=0SLfpkyIvyJ1WAWKHl_eanjjincU0UUGyws1k0YTiys,16031
214
216
  pulpcore/app/models/upload.py,sha256=3njXT2rrVJwBjEDegvqcLD9_7cPnnl974lhbAhikEp8,3004
215
217
  pulpcore/app/models/vulnerability_report.py,sha256=DDAUjDaW3Kn9KPBkBl94u4EuQy8UIu5wKbmE5kMkhWE,1238
216
218
  pulpcore/app/protobuf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -234,13 +236,13 @@ pulpcore/app/serializers/repair.py,sha256=uKrxTnhoarxyyGCixPRn9pmG19gRRVUTM7nPwC
234
236
  pulpcore/app/serializers/replica.py,sha256=E3jwn1vfBqT4Y4s9pWsTrUEJKPO9pO0q2ZmwcpIDVh4,4044
235
237
  pulpcore/app/serializers/repository.py,sha256=BNv0yX1JJs57VcMdzjU5rthRMcm1KB93Seqp6jve2i8,20468
236
238
  pulpcore/app/serializers/status.py,sha256=RRlymRv_CrfCog3xIZUY86L03MHButvsJu8xmzdoreY,4245
237
- pulpcore/app/serializers/task.py,sha256=m4BpydbxkC7isumXsYnfW07h6ApQn0VPdS7oXERGgTk,8973
239
+ pulpcore/app/serializers/task.py,sha256=FmYJDwKOkOsCUoBWTMgPrBEwqZQX0KreDR0lgX4aC-M,9110
238
240
  pulpcore/app/serializers/upload.py,sha256=4r6iBegbYHmgFYjBYPcqB8J7eSxXgY4ukayMxJZNh_M,2402
239
241
  pulpcore/app/serializers/user.py,sha256=QBEnUCfq2my3Lq_pohj7hphDE8wqU6g6fnYuEXl8VtI,18413
240
242
  pulpcore/app/serializers/vulnerability_report.py,sha256=N7geQkTDZ7_SCipo6Q4LGBInwuGy8-tGIpwGIPWimm4,787
241
243
  pulpcore/app/tasks/__init__.py,sha256=J8S3QDCIc8ONYPLVmp7tSLEfQZbHjouvpYBhZHYYV0o,625
242
244
  pulpcore/app/tasks/analytics.py,sha256=taQqEJ9RROIp77uSHA9S32MNlpxkI8admexMcGnHj3I,4720
243
- pulpcore/app/tasks/base.py,sha256=4I88Bn5SttqEvvVlNJmIwkPv2IWe7OhpM-kbQiQ9T_U,5929
245
+ pulpcore/app/tasks/base.py,sha256=IlC8-StBagiWFy0quaLqPYCtS8kajAA4Bv8DFUE67nk,6175
244
246
  pulpcore/app/tasks/export.py,sha256=dRg-KcnM7HumXUx8mjgJ-EVMcz2RbzSOPmMkzVtJEnI,19320
245
247
  pulpcore/app/tasks/importer.py,sha256=KW5THJhcAYlUveL8lV-2GOUyN7RCWluHLWSiMJYpH0Q,23254
246
248
  pulpcore/app/tasks/migrate.py,sha256=wCjGskoF-XWzbINEyC_crgcigFZlC8EHqZTbjkLQykg,2452
@@ -285,7 +287,7 @@ pulpcore/cache/cache.py,sha256=d8GMlvjeGG9MOMdi5_9029WpGCKH8Y5q9b2lt3wSREo,17371
285
287
  pulpcore/content/__init__.py,sha256=mHYi85Hy-IhG50AR-jICk9pIiMUatHJx5wO1dFJkn9k,4000
286
288
  pulpcore/content/authentication.py,sha256=lEZBkXBBBkIdtFMCSpHDD7583M0bO-zsZNYXTmpr4k8,3235
287
289
  pulpcore/content/entrypoint.py,sha256=DiQTQzfcUiuyl37uvy6Wpa_7kr8t79ekpMHr31MDL2s,2132
288
- pulpcore/content/handler.py,sha256=0Qeppuy5Jl4C6L-UF5WQQm3oQJgeiA8asiOj42KIcik,56908
290
+ pulpcore/content/handler.py,sha256=EubizF5HP5QK_N5eMe8sHIyUZT3ipVhaQJ-NYb1dr5g,56959
289
291
  pulpcore/content/instrumentation.py,sha256=H0N0GWzvOPGGjFi6eIbGW3mcvagfnAfazccTh-BZVmE,1426
290
292
  pulpcore/download/__init__.py,sha256=s3Wh2GKdsmbUooVIR6wSvhYVIhpaTbtfR3Ar1OJhC7s,154
291
293
  pulpcore/download/base.py,sha256=4KCAYnV8jSOX078ETwlfwNZGY3xCBF9yy866tyGKAzE,13095
@@ -323,8 +325,8 @@ pulpcore/plugin/cache/__init__.py,sha256=0P1OqLmYxJdAaxhND6flNZzYa-korgIrzS1eOiT
323
325
  pulpcore/plugin/download/__init__.py,sha256=XRrHVz5_QfxSixHr15b4Cni0Z-D3xiRITqiSeGnkwo8,137
324
326
  pulpcore/plugin/models/__init__.py,sha256=jY0kg1KB15WdD_nzX_8Nz9Gms-HLwIdwzMTjToa7IbQ,1948
325
327
  pulpcore/plugin/models/role.py,sha256=ZwWt9eQOfjjk2rcGKuXuENoOPldTjqLI9LLXKSBXsEQ,244
326
- pulpcore/plugin/serializers/__init__.py,sha256=YsfNZ1CqgbZZZrhTDI_GxMB72d3LQUVSJ-Aj5Mx3EP4,2630
327
- pulpcore/plugin/serializers/content.py,sha256=l2VKp5qLstI8InuisjxISTo_YimbxSorDfWncx5VY0U,9072
328
+ pulpcore/plugin/serializers/__init__.py,sha256=rtEQYlxILhjgmQCDDoK2V3jH5sT3tmncmacjvVzIxyo,2698
329
+ pulpcore/plugin/serializers/content.py,sha256=JSSrMZstG1XkNqJ-idq-y3Xt7RxTqrBpMcpw15PHx-k,9086
328
330
  pulpcore/plugin/stages/__init__.py,sha256=ZSMmgOKoPjEfg1VhNpldJf2bUvqezCG4gj_FBkJ4CpU,466
329
331
  pulpcore/plugin/stages/api.py,sha256=6iet7K6H5c9vk5lS9oE3gCyLlqdDKoqPMfF-lNIA-GQ,8435
330
332
  pulpcore/plugin/stages/artifact_stages.py,sha256=yKJQc06YevDiWGDsQDuWXzL0juj49UZ_wrE718Bd4CI,22870
@@ -338,12 +340,12 @@ pulpcore/tasking/_util.py,sha256=fPW4k1nUa_NZ0ywy_A15Fuiejo5stY58abPbZTXw5t8,990
338
340
  pulpcore/tasking/entrypoint.py,sha256=eAypZD4ORoNOrmBeMdbwO9p6GSQ59bMvZ3TrbnE0czw,1305
339
341
  pulpcore/tasking/kafka.py,sha256=76z4DzeXM1WL5uu1HlKnduWeLO3-b-czvGBXdWR6054,3845
340
342
  pulpcore/tasking/storage.py,sha256=zQkwlpC_FDQtmZGZ8vKwHqxvD6CLO_gAS4Q7wijZE-k,3106
341
- pulpcore/tasking/tasks.py,sha256=CTlWLCmxP5-HZjo5_KLYIJQu-VKJnzQ5cyL7IFNRMWw,12944
342
- pulpcore/tasking/worker.py,sha256=r8Q6hVqmGrnyXFX-RnxMkZUq478lIDLnZxwyd5DeScw,27400
343
+ pulpcore/tasking/tasks.py,sha256=MyqqjkFbl3GSkfLu1MKEe7bJiGRn924_uAa4l18QSSk,12459
344
+ pulpcore/tasking/worker.py,sha256=vuQDKmxWxkeWCqNrye5MUlx2qSFn3W8sMJumEu_kSPE,26596
343
345
  pulpcore/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
344
346
  pulpcore/tests/functional/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
345
347
  pulpcore/tests/functional/content_with_coverage.py,sha256=gQK8himy32s9O9vpXdgoM6-_z2KySaXm5rTga9z0jGI,260
346
- pulpcore/tests/functional/utils.py,sha256=ozSiMSErg4vkHFWSfQH5bbMcrtSwGK9u-a2TVqNe50I,4699
348
+ pulpcore/tests/functional/utils.py,sha256=FgqQwcciV8gFEfYB-RFO4bwAYp8FHDRAwRJGIl4TL-E,4692
347
349
  pulpcore/tests/functional/api/__init__.py,sha256=ougP6XAtutbcm8kwvJN5i51KEeQZT2-A7u-Y3so2mi4,57
348
350
  pulpcore/tests/functional/api/test_access_policy.py,sha256=R2vPadltPVpOL61LiarfOOl7W7m3EB8LXlmwRQJcVxg,3984
349
351
  pulpcore/tests/functional/api/test_api_docs.py,sha256=72CB6jRB1Inubj0ZdkV9FsFBbu4YQDqn1ITNvemnAxg,1133
@@ -363,10 +365,10 @@ pulpcore/tests/functional/api/test_role.py,sha256=JnhVMs22IP3ngdwu4P0vVgJuGGkqjK
363
365
  pulpcore/tests/functional/api/test_root_endpoint.py,sha256=CSp68Z6APY9pCvu-JtX820TnF9t2MllAxRGT3ekw5Fs,244
364
366
  pulpcore/tests/functional/api/test_scoping.py,sha256=uiLOsx5_7puRMcvrpPKEYQziqluPNv9vstySfoD7Edc,2671
365
367
  pulpcore/tests/functional/api/test_signing_service.py,sha256=yr1HXBrNoliBHJNAGAN4PAN0eBKPIvAQP-uMoMSrO_I,222
366
- pulpcore/tests/functional/api/test_status.py,sha256=Vmmj-ueGxJw1JFSQtr5feTM8vjgyyROvxsRm-OgzLUQ,5370
368
+ pulpcore/tests/functional/api/test_status.py,sha256=S4lWuemCLwM4rC3fCCZEehGMGypirPo5fnT7bkJuYxI,5384
367
369
  pulpcore/tests/functional/api/test_task_purge.py,sha256=Av4DrUdCqf-JegfoP1pkY4B-teoUzYd1LBZKAhDa-08,7273
368
370
  pulpcore/tests/functional/api/test_tasking.py,sha256=4QPkdPVt1L01GzXyCWDmKwQbCPATSj-UznjDUFt609U,21204
369
- pulpcore/tests/functional/api/test_upload.py,sha256=oLP1ZmQgPzgK5jAQwGeXS8uLFHgAzVeLW0GfANMWexI,6794
371
+ pulpcore/tests/functional/api/test_upload.py,sha256=dG9G6jLl-qGqC87LWJfkDJ1s3ppDdeanTmbbIVQnYQQ,6814
370
372
  pulpcore/tests/functional/api/test_users_groups.py,sha256=YFG0xtyJuIRraczR7ERl_UNS7dlJfKd2eUmXgD1lLBU,2926
371
373
  pulpcore/tests/functional/api/test_workers.py,sha256=XJrQdxt0BpMeMVOdTyzcTEMk5bB8XC4rA8U580HnzBc,4691
372
374
  pulpcore/tests/functional/api/using_plugin/__init__.py,sha256=QyyfzgjLOi4n32G3o9aGH5eQDNjjD_qUpHLOZpPPZa4,80
@@ -379,7 +381,7 @@ pulpcore/tests/functional/api/using_plugin/test_content_path.py,sha256=fvqeptqo-
379
381
  pulpcore/tests/functional/api/using_plugin/test_content_promotion.py,sha256=Co4ytrfpzklwgDdEthv45dsmrceRpqIQfLJlZWM6EBY,2388
380
382
  pulpcore/tests/functional/api/using_plugin/test_contentguard.py,sha256=aMZf4g1uNHhWM7cAJa7bC49A-9uNLIphlr6sBkCOzi8,12894
381
383
  pulpcore/tests/functional/api/using_plugin/test_crud_repos.py,sha256=4XJ7e_BnzOIBpdTFt2kpiZC_YEu2bBimFpxURKvQwfU,14334
382
- pulpcore/tests/functional/api/using_plugin/test_distributions.py,sha256=Xv0q8KZRdyeAevJhWwTs3_2bkG4hxZeZtA_4CXcssEo,11936
384
+ pulpcore/tests/functional/api/using_plugin/test_distributions.py,sha256=CeOMN4iTzATp_NJC0Bu2n8RFyQKiIk3y8hcfERQJcfk,11992
383
385
  pulpcore/tests/functional/api/using_plugin/test_filesystemexport.py,sha256=s5C9lW5Q4gaY56d3Rsa-uadcn_3D7rWQ2CosowTe8_Y,6059
384
386
  pulpcore/tests/functional/api/using_plugin/test_labels.py,sha256=LO45iAFel4SKB6R5InUouiifGu_eHMZnoMFmwI4cSyE,2463
385
387
  pulpcore/tests/functional/api/using_plugin/test_migrate.py,sha256=DiCAessLO4B9jnTNkngczIdsHswNr73H4is_6H1Ue2I,4457
@@ -391,7 +393,7 @@ pulpcore/tests/functional/api/using_plugin/test_pulpimport.py,sha256=M3BWuF1Htyx
391
393
  pulpcore/tests/functional/api/using_plugin/test_reclaim_disk_space.py,sha256=eclRP_vWIbJl2pWyAlx_na-T5sUhlP4iQ2Ots1V1lwI,5879
392
394
  pulpcore/tests/functional/api/using_plugin/test_repair.py,sha256=SxfEC4cEm3HUgrwUV_DIXaaYsGKmO2APUAEWHQqurQ8,6849
393
395
  pulpcore/tests/functional/api/using_plugin/test_repo_versions.py,sha256=unxOqUIgHEWuDA3qOXBN0_xMXUfya0GAevJHJnrUFWk,41119
394
- pulpcore/tests/functional/api/using_plugin/test_tasks.py,sha256=wIQr2J8DD2isx_0tjbKA0pqwgJiBw83-6auNJuGavEc,7054
396
+ pulpcore/tests/functional/api/using_plugin/test_tasks.py,sha256=fJrtfnGcSpXvTkya3hweJCbrv5RzFFzDwNYQxV-BQPk,7871
395
397
  pulpcore/tests/functional/api/using_plugin/test_unlinking_repo.py,sha256=rGJP2qcDarJALSpjzEsoO-ewQ0J2kWhFvN3Y1Z9fvzA,1085
396
398
  pulpcore/tests/functional/assets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
397
399
  pulpcore/tests/performance/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -416,7 +418,7 @@ pulpcore/tests/unit/download/test_downloader_base.py,sha256=TYG_OPuyj-_N5L-zLTW1
416
418
  pulpcore/tests/unit/download/test_downloader_factory.py,sha256=mumtIAtRg_dS2uQvOH3J5NXb9XuvQ53iWlBP5koZ_nM,1177
417
419
  pulpcore/tests/unit/metrics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
418
420
  pulpcore/tests/unit/metrics/conftest.py,sha256=pyA8wwLO-TsyERvYnwnF2_Ura0rvZbAmjSUzivcMrE4,620
419
- pulpcore/tests/unit/metrics/test_aiohttp_instrumentation.py,sha256=yPTiVv_9oOqL1Y6I66tX0XQomxu0Efw-Q0-LxzvQBT4,568
421
+ pulpcore/tests/unit/metrics/test_aiohttp_instrumentation.py,sha256=qQrO2LEutBrY182EHcsQVDsUSkpQrpV11rduR2XXR4w,616
420
422
  pulpcore/tests/unit/metrics/test_django_instrumentation.py,sha256=vkUGm_Q0WCph6x-fWOX8bkpY7XFaNjqVKnJ2zWqu08Q,676
421
423
  pulpcore/tests/unit/migration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
422
424
  pulpcore/tests/unit/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -424,7 +426,7 @@ pulpcore/tests/unit/models/test_base.py,sha256=77hnxOFBJYMNbI1YGEaR5yj8VCapNGmEg
424
426
  pulpcore/tests/unit/models/test_content.py,sha256=heU0vJKucPIp6py2Ww-eXLvhFopvmK8QjFgzt1jGnYQ,5599
425
427
  pulpcore/tests/unit/models/test_remote.py,sha256=KxXwHdA-wj7D-ZpuVi33cLX43wkEeIzeqF9uMsJGt-k,2354
426
428
  pulpcore/tests/unit/models/test_repository.py,sha256=ciwyo7dMl-dxlzHb55eQ-ohEEBPF3-GjbO23mMSccqQ,13791
427
- pulpcore/tests/unit/models/test_task.py,sha256=rjxeYe383Zsjk8Ck4inMBBTzR4osCrgTeZNWwmHfbjk,1457
429
+ pulpcore/tests/unit/models/test_task.py,sha256=zkHNs2DYpJbl-nMNFXs21Pyvw9eSpmSIJFFFXK2dT90,1655
428
430
  pulpcore/tests/unit/roles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
429
431
  pulpcore/tests/unit/roles/test_roles.py,sha256=TkPPCLEHMaxfafsRf_3pc4Z3w8BPTyteY7rFkVo65GM,4973
430
432
  pulpcore/tests/unit/serializers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -436,13 +438,13 @@ pulpcore/tests/unit/serializers/test_pulpexport.py,sha256=gXn7E13X-SP0rFM0bUv8Pw
436
438
  pulpcore/tests/unit/serializers/test_repository.py,sha256=eknsHlbHz1K0nqntDntltFLU2EunrSlXCgg3HrV9PTI,9288
437
439
  pulpcore/tests/unit/serializers/test_user.py,sha256=lemDxBIDWKrfFmazl9DMW7-k3lQyWtD8uQCxNktHI3Q,3094
438
440
  pulpcore/tests/unit/stages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
439
- pulpcore/tests/unit/stages/test_artifactdownloader.py,sha256=qB1ANdFmNtUnljg8fCdLHTiAakrO3KtX-w9RA5fPSOQ,12480
441
+ pulpcore/tests/unit/stages/test_artifactdownloader.py,sha256=DX6jHctGYbDhsnzQpXfEnAbcr-Q6_QWs6ETIZDJmSK4,12482
440
442
  pulpcore/tests/unit/stages/test_stages.py,sha256=H1a2BQLjdZlZvcb_qULp62huZ1xy6ItTcthktVyGU0w,4735
441
443
  pulpcore/tests/unit/viewsets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
442
- pulpcore/tests/unit/viewsets/test_viewset_base.py,sha256=W9o3V6758bZctR6krMPPQytb0xJuF-jb4uBWTNDoD_U,4837
443
- pulpcore-3.87.1.dist-info/licenses/LICENSE,sha256=dhnHU8rJXUdAIgIjveSKAyYG_KzN5eVG-bxETIGrNW0,17988
444
- pulpcore-3.87.1.dist-info/METADATA,sha256=YhN-isGK9qpqbwd06ack1JdUajk4oa_7lxe29nqHVGI,4104
445
- pulpcore-3.87.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
446
- pulpcore-3.87.1.dist-info/entry_points.txt,sha256=OZven4wzXzQA5b5q9MpP4HUpIPPQCSvIOvkKtNInrK0,452
447
- pulpcore-3.87.1.dist-info/top_level.txt,sha256=6h-Lm3FKQSaT_nL1KSxu_hBnzKE15bcvf_BoU-ea4CI,34
448
- pulpcore-3.87.1.dist-info/RECORD,,
444
+ pulpcore/tests/unit/viewsets/test_viewset_base.py,sha256=gmVIgE9o0tAdiF92HCNiJkb1joc8oEaG5rnzh5V1loc,4837
445
+ pulpcore-3.89.0.dist-info/licenses/LICENSE,sha256=dhnHU8rJXUdAIgIjveSKAyYG_KzN5eVG-bxETIGrNW0,17988
446
+ pulpcore-3.89.0.dist-info/METADATA,sha256=mS1LG2PZjuNRjuezug7aAhP2g2g32swvlibYJmpLYLE,4104
447
+ pulpcore-3.89.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
448
+ pulpcore-3.89.0.dist-info/entry_points.txt,sha256=OZven4wzXzQA5b5q9MpP4HUpIPPQCSvIOvkKtNInrK0,452
449
+ pulpcore-3.89.0.dist-info/top_level.txt,sha256=6h-Lm3FKQSaT_nL1KSxu_hBnzKE15bcvf_BoU-ea4CI,34
450
+ pulpcore-3.89.0.dist-info/RECORD,,