pulpcore 3.78.0__py3-none-any.whl → 3.79.1__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
- pulpcore/app/apps.py +1 -1
- pulpcore/app/entrypoint.py +1 -1
- pulpcore/app/management/commands/dump-publications-to-fs.py +1 -1
- pulpcore/app/models/task.py +67 -74
- pulpcore/app/openpgp.py +6 -6
- pulpcore/app/replica.py +1 -1
- pulpcore/app/serializers/base.py +1 -1
- pulpcore/app/tasks/repository.py +3 -3
- pulpcore/tasking/tasks.py +12 -1
- pulpcore/tasking/worker.py +1 -1
- {pulpcore-3.78.0.dist-info → pulpcore-3.79.1.dist-info}/METADATA +4 -4
- {pulpcore-3.78.0.dist-info → pulpcore-3.79.1.dist-info}/RECORD +18 -18
- {pulpcore-3.78.0.dist-info → pulpcore-3.79.1.dist-info}/WHEEL +1 -1
- {pulpcore-3.78.0.dist-info → pulpcore-3.79.1.dist-info}/entry_points.txt +0 -0
- {pulpcore-3.78.0.dist-info → pulpcore-3.79.1.dist-info}/licenses/LICENSE +0 -0
- {pulpcore-3.78.0.dist-info → pulpcore-3.79.1.dist-info}/top_level.txt +0 -0
pulp_certguard/app/__init__.py
CHANGED
pulp_file/app/__init__.py
CHANGED
pulpcore/app/apps.py
CHANGED
pulpcore/app/entrypoint.py
CHANGED
|
@@ -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.
|
|
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.
|
|
112
|
+
logging.warning(
|
|
113
113
|
"No publication found for the repo published at '{}': skipping".format(
|
|
114
114
|
distribution.base_path
|
|
115
115
|
)
|
pulpcore/app/models/task.py
CHANGED
|
@@ -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,
|
|
209
|
+
state=TASK_STATES.RUNNING,
|
|
210
|
+
started_at=started_at,
|
|
191
211
|
)
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
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,
|
|
233
|
+
state=TASK_STATES.COMPLETED,
|
|
234
|
+
finished_at=finished_at,
|
|
221
235
|
)
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
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=
|
|
256
|
-
error=
|
|
267
|
+
finished_at=finished_at,
|
|
268
|
+
error=error,
|
|
257
269
|
)
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
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
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
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=
|
|
314
|
+
finished_at=finished_at,
|
|
310
315
|
**task_data,
|
|
311
316
|
)
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
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
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
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"\
|
|
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"\
|
|
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"\
|
|
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"\
|
|
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\
|
|
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\
|
|
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
pulpcore/app/serializers/base.py
CHANGED
|
@@ -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.
|
|
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])
|
pulpcore/app/tasks/repository.py
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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
|
|
pulpcore/tasking/worker.py
CHANGED
|
@@ -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.
|
|
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.
|
|
3
|
+
Version: 3.79.1
|
|
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<
|
|
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.
|
|
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]
|
|
55
|
+
Requires-Dist: psycopg[binary]<3.3,>=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=
|
|
3
|
+
pulp_certguard/app/__init__.py,sha256=htjJ6-i0dOZrwglkUvslc_EIQXrZPUQmoA7HHcm2VlA,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=
|
|
52
|
+
pulp_file/app/__init__.py,sha256=84wE3TsVdpgAwqEFyvHJ81Tgk3pFVQBvGS9psrMCtX8,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=
|
|
113
|
+
pulpcore/app/apps.py,sha256=lMFO6ntBAJLulQDZi0ja-1MB28wnY6xiURznUJbh9s8,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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
431
|
-
pulpcore/tasking/worker.py,sha256=
|
|
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.
|
|
533
|
-
pulpcore-3.
|
|
534
|
-
pulpcore-3.
|
|
535
|
-
pulpcore-3.
|
|
536
|
-
pulpcore-3.
|
|
537
|
-
pulpcore-3.
|
|
532
|
+
pulpcore-3.79.1.dist-info/licenses/LICENSE,sha256=dhnHU8rJXUdAIgIjveSKAyYG_KzN5eVG-bxETIGrNW0,17988
|
|
533
|
+
pulpcore-3.79.1.dist-info/METADATA,sha256=r7D7mw-OynwF9IRqV8SyxLySqfRAzkq9cOHrNRk2NGY,4333
|
|
534
|
+
pulpcore-3.79.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
535
|
+
pulpcore-3.79.1.dist-info/entry_points.txt,sha256=OZven4wzXzQA5b5q9MpP4HUpIPPQCSvIOvkKtNInrK0,452
|
|
536
|
+
pulpcore-3.79.1.dist-info/top_level.txt,sha256=6h-Lm3FKQSaT_nL1KSxu_hBnzKE15bcvf_BoU-ea4CI,34
|
|
537
|
+
pulpcore-3.79.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|