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.
- pulp_certguard/app/__init__.py +1 -1
- pulp_file/app/__init__.py +1 -1
- pulp_file/app/tasks/publishing.py +5 -0
- pulp_file/app/tasks/synchronizing.py +4 -0
- pulpcore/app/apps.py +1 -1
- pulpcore/app/migrations/0142_task_result.py +21 -0
- pulpcore/app/migrations/0143_require_app_lock_zdu.py +15 -0
- pulpcore/app/models/task.py +43 -25
- pulpcore/app/serializers/task.py +5 -0
- pulpcore/app/settings.py +0 -2
- pulpcore/app/tasks/base.py +9 -2
- pulpcore/content/handler.py +7 -6
- pulpcore/plugin/serializers/__init__.py +2 -0
- pulpcore/plugin/serializers/content.py +1 -1
- pulpcore/tasking/tasks.py +67 -71
- pulpcore/tasking/worker.py +91 -89
- pulpcore/tests/functional/api/test_status.py +1 -1
- pulpcore/tests/functional/api/test_upload.py +3 -1
- pulpcore/tests/functional/api/using_plugin/test_distributions.py +6 -2
- pulpcore/tests/functional/api/using_plugin/test_tasks.py +20 -0
- pulpcore/tests/functional/utils.py +1 -1
- pulpcore/tests/unit/metrics/test_aiohttp_instrumentation.py +4 -1
- pulpcore/tests/unit/models/test_task.py +5 -3
- pulpcore/tests/unit/stages/test_artifactdownloader.py +2 -2
- pulpcore/tests/unit/viewsets/test_viewset_base.py +3 -3
- {pulpcore-3.87.1.dist-info → pulpcore-3.89.0.dist-info}/METADATA +2 -2
- {pulpcore-3.87.1.dist-info → pulpcore-3.89.0.dist-info}/RECORD +31 -29
- {pulpcore-3.87.1.dist-info → pulpcore-3.89.0.dist-info}/WHEEL +0 -0
- {pulpcore-3.87.1.dist-info → pulpcore-3.89.0.dist-info}/entry_points.txt +0 -0
- {pulpcore-3.87.1.dist-info → pulpcore-3.89.0.dist-info}/licenses/LICENSE +0 -0
- {pulpcore-3.87.1.dist-info → pulpcore-3.89.0.dist-info}/top_level.txt +0 -0
pulpcore/tasking/worker.py
CHANGED
|
@@ -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
|
-
|
|
77
|
-
self.
|
|
78
|
-
|
|
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
|
|
178
|
-
|
|
179
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
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": "
|
|
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(
|
|
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(
|
|
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(
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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 =
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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=
|
|
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=
|
|
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=
|
|
65
|
-
pulp_file/app/tasks/synchronizing.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
327
|
-
pulpcore/plugin/serializers/content.py,sha256=
|
|
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=
|
|
342
|
-
pulpcore/tasking/worker.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
443
|
-
pulpcore-3.
|
|
444
|
-
pulpcore-3.
|
|
445
|
-
pulpcore-3.
|
|
446
|
-
pulpcore-3.
|
|
447
|
-
pulpcore-3.
|
|
448
|
-
pulpcore-3.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|