pulpcore 3.77.1__tar.gz → 3.78.0__tar.gz
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.
- {pulpcore-3.77.1 → pulpcore-3.78.0}/CHANGES.md +82 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/PKG-INFO +8 -6
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/app/__init__.py +1 -1
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/__init__.py +1 -1
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/apps.py +1 -1
- pulpcore-3.78.0/pulpcore/app/management/commands/clean-up-progress-reports.py +52 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/models/task.py +7 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/serializers/user.py +65 -19
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/settings.py +4 -3
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/util.py +4 -3
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/content/__init__.py +8 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/content/entrypoint.py +7 -1
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/content/handler.py +4 -3
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/using_plugin/test_content_delivery.py +7 -7
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/performance/test_performance.py +8 -10
- pulpcore-3.78.0/pulpcore/tests/unit/models/test_task.py +44 -0
- pulpcore-3.78.0/pulpcore/tests/unit/serializers/test_user.py +86 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/test_viewsets.py +1 -1
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore.egg-info/PKG-INFO +8 -6
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore.egg-info/SOURCES.txt +3 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore.egg-info/requires.txt +8 -5
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pyproject.toml +8 -7
- {pulpcore-3.77.1 → pulpcore-3.78.0}/CODE_OF_CONDUCT.md +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/COMMITMENT +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/CONTRIBUTING.md +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/COPYRIGHT +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/LICENSE +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/MANIFEST.in +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/README.md +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/ci_requirements.txt +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/functest_requirements.txt +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/manage.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/app/migrations/0001_initial.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/app/migrations/0002_alter_rhsmcertguard_contentguard_ptr_and_more.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/app/migrations/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/app/models.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/app/serializers.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/app/utils.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/app/viewsets.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/pytest_plugin.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/api/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/api/test_rhsm_certguard.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/api/test_x509_certguard.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/rhsm/katello-default-ca.crt +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/rhsm/katello-default-ca.key +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/rhsm/trusted_but_expired.pem +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/rhsm/uber.cert +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/rhsm/untrusted_cert-key.pem +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/rhsm/untrusted_cert.pem +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/1514454871848760713-key.pem +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/1514454871848760713.pem +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/159442575569388840-key.pem +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/159442575569388840.pem +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/4260035510644027985-key.pem +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/4260035510644027985.pem +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/5527980418107729172-key.pem +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/5527980418107729172.pem +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/certificates/ca.pem +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/genca.sh +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/keys/ca.pem +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/ca.pem +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/client.pem +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/server.pem +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/un_urlencoded_cert.txt +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/untrusted_client.pem +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/x509/genall.sh +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/x509/genca.sh +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/x509/genclient.sh +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/x509/gensrv.sh +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/x509/keys/ca.pem +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/x509/keys/client.pem +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/artifacts/x509/keys/server.pem +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/conftest.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/functional/constants.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/unit/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_certguard/tests/unit/test_models.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/migrations/0001_initial.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/migrations/0001_initial_squashed_0016_add_domain.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/migrations/0002_file_related_names.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/migrations/0003_auto_20191014_1721.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/migrations/0004_filefilesystemexporter.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/migrations/0005_filerepository.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/migrations/0006_delete_filefilesystemexporter.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/migrations/0007_filefilesystemexporter.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/migrations/0008_add_manifest_field.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/migrations/0009_move_data_to_new_master_distribution_model.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/migrations/0010_auto_publish.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/migrations/0011_fix_auto_publish.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/migrations/0012_delete_filefilesystemexporter.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/migrations/0013_file_acs.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/migrations/0014_new_rbac_permissions.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/migrations/0015_allow_null_manifest.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/migrations/0016_add_domain.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/migrations/0017_alter_filealternatecontentsource_alternatecontentsource_ptr_and_more.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/migrations/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/modelresource.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/models.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/replica.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/serializers.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/tasks/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/tasks/publishing.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/tasks/synchronizing.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/app/viewsets.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/manifest.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/pytest_plugin.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/tests/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/tests/functional/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/tests/functional/api/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/tests/functional/api/test_acs.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/tests/functional/api/test_auto_publish.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/tests/functional/api/test_bad_sync.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/tests/functional/api/test_content_labels.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/tests/functional/api/test_crud_content_unit.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/tests/functional/api/test_crud_remotes.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/tests/functional/api/test_domains.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/tests/functional/api/test_download_policies.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/tests/functional/api/test_generic_list.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/tests/functional/api/test_labels.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/tests/functional/api/test_mime_types.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/tests/functional/api/test_publish.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/tests/functional/api/test_pulp_export.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/tests/functional/api/test_rbac.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/tests/functional/api/test_remote_settings.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/tests/functional/api/test_sync.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/tests/unit/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/tests/unit/test_safe_paths.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulp_file/tests/unit/test_serializers.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/access_policy.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/authentication.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/checks.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/entrypoint.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/files.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/global_access_conditions.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/importexport.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/loggers.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/manage.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/management/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/management/commands/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/management/commands/add-signing-service.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/management/commands/analyze-publication.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/management/commands/datarepair-2327.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/management/commands/dump-permissions.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/management/commands/dump-publications-to-fs.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/management/commands/handle-artifact-checksums.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/management/commands/migrationstat.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/management/commands/openapi.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/management/commands/rebasemigrations.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/management/commands/remove-plugin.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/management/commands/remove-signing-service.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/management/commands/repository-size.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/management/commands/reset-admin-password.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/management/commands/rotate-db-key.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0001_initial.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0001_squashed_0090_char_to_text_field.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0002_increase_artifact_size_field.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0003_remove_upload_completed.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0004_add_duplicated_reserved_resources.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0005_progressreport_code.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0006_repository_plugin_managed.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0007_delete_progress_proxies.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0008_published_metadata_as_content.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0009_remove_task_non_fatal_errors.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0010_pulp_fields.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0011_relative_path.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0012_auto_20191104_2000.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0013_repository_pulp_type.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0014_remove_repository_plugin_managed.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0015_auto_20191112_1426.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0016_charfield_to_textfield.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0017_remove_task_parent.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0018_auto_20191127_2350.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0019_add_signing_service_model.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0020_change_publishedartifact_constraints.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0021_add_signing_service_foreign_key.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0022_rename_last_version.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0023_change_exporter_models.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0024_use_local_storage_for_uploads.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0025_task_parent_task.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0026_task_group.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0027_export_backend.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0028_import_importer_pulpimporter_pulpimporterrepository.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0029_export_delete.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0030_taskgroup_all_tasks_dispatched.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0031_import_export_validate_params.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0032_export_to_chunks.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0033_increase_remote_artifact_size_field.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0034_groupprogressreport.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0035_content_upstream_id.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0036_unprotect_last_export.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0037_pulptemporaryfile.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0038_repository_remote.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0039_change_download_concurrency.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0040_set_admin_is_staff.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0041_accesspolicy.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0042_rbac_for_tasks.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0043_toc_attribute.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0044_temp_file_artifact_field.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0045_accesspolicy_permissions_allow_null.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0046_task__resource_job_id.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0047_improve_orphan_cleanup.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0048_fips_checksums.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0049_add_file_field_to_uploadchunk.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0050_namespace_access_policies.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0051_timeoutfields.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0052_tasking_logging_cid.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0053_remote_headers.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0054_add_public_key.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0055_label.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0056_remote_rate_limit.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0057_add_label_indexes.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0058_accesspolicy_customized.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0059_proxy_creds.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0060_data_migration_proxy_creds.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0061_call_handle_artifact_checksums_command.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0062_add_new_distribution_mastermodel.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0063_repository_retained_versions.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0064_add_new_style_task_columns.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0064_repository_user_hidden.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0065_merge_20210615_1211.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0066_download_concurrency_and_retry_changes.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0067_add_protect_to_task_reservation.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0068_add_timestamp_of_interest.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0069_update_json_fields.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0070_rename_retained_versions.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0071_filesystemexport_filesystemexporter.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0072_add_method_to_filesystem_exporter.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0073_encrypt_remote_fields.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0074_acs.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0075_rbaccontentguard.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0076_remove_reserved_resource.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0077_move_remote_url_credentials.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0078_grouprole_role_userrole.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0079_rename_permissions_assignment_accesspolicy_creation_hooks.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0080_proxy_group_model.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0081_reapplabel_group_permissions.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0082_add_manage_roles_permissions.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0083_alter_group_options.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0084_alter_rbaccontentguard_options.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0085_contentredirectcontentguard.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0086_task_json_fields.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0087_taskschedule.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0088_accesspolicy_queryset_scoping.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0089_alter_contentredirectcontentguard_options.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0090_char_to_text_field.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0091_systemid.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0092_alter_upload_options.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0093_add_info_field_repositoryversion.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0094_protect_repository_content.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0095_artifactdistribution.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0096_alter_task_logging_cid.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0097_remove_telemetry_task_schedule.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0098_pulp_labels.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0099_versions_field.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0100_upstreampulp.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0101_add_domain.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0102_add_domain_relations.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0103_alter_export_task.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0104_delete_label.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0105_abstract_uuid_gen.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0106_alter_artifactdistribution_distribution_ptr_and_more.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0107_distribution_hidden.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0108_task_versions.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0109_contentartifact_relative_path_index.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0110_apiappstatus.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0111_task_enc_args_task_enc_kwargs.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0112_alter_upstreampulp_options.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0113_headercontentguard.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0114_remove_task_args_remove_task_kwargs.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0115_compositecontentguard.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0116_alter_remoteartifact_md5_alter_remoteartifact_sha1_and_more.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0117_task_unblocked_at.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0118_task_core_task_unblock_2276a4_idx_and_more.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0119_grouprole_core_groupr_object__250e22_idx_and_more.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0120_get_url_removal.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0121_add_profile_artifacts_table.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0122_record_last_replication_timestamp.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0123_upstreampulp_q_select.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0124_task_deferred_task_immediate.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0125_openpgpdistribution_openpgpkeyring_openpgppublickey_and_more.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0126_remoteartifact_failed_at.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0127_remove_upstreampulp_pulp_label_select.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0128_domain_pulp_labels.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0129_content_pulp_labels.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0130_upstreampulp_policy.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0131_distribution_checkpoint_publication_checkpoint.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/0132_alter_content_options.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/migrations/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/mime_types.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/modelresource.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/models/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/models/access_policy.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/models/acs.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/models/analytics.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/models/base.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/models/content.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/models/domain.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/models/exporter.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/models/fields.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/models/generic.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/models/importer.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/models/openpgp.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/models/progress.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/models/publication.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/models/replica.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/models/repository.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/models/role.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/models/status.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/models/storage.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/models/upload.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/openpgp.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/protobuf/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/protobuf/analytics_pb2.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/pulp_hashlib.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/pulpcore_gunicorn_application.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/redis_connection.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/replica.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/response.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/role_util.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/serializers/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/serializers/access_policy.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/serializers/acs.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/serializers/base.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/serializers/content.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/serializers/domain.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/serializers/exporter.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/serializers/fields.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/serializers/importer.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/serializers/openpgp.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/serializers/orphans.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/serializers/progress.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/serializers/publication.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/serializers/purge.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/serializers/reclaim.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/serializers/repair.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/serializers/replica.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/serializers/repository.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/serializers/status.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/serializers/task.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/serializers/upload.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/tasks/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/tasks/analytics.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/tasks/base.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/tasks/export.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/tasks/importer.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/tasks/migrate.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/tasks/orphan.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/tasks/purge.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/tasks/reclaim_space.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/tasks/replica.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/tasks/repository.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/tasks/telemetry.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/tasks/test.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/tasks/upload.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/templates/rest_framework/api.html +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/templatetags/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/templatetags/pulp_urls.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/urls.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/views/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/views/importer.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/views/orphans.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/views/repair.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/views/status.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/viewsets/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/viewsets/access_policy.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/viewsets/acs.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/viewsets/base.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/viewsets/content.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/viewsets/custom_filters.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/viewsets/domain.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/viewsets/exporter.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/viewsets/importer.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/viewsets/openpgp.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/viewsets/orphans.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/viewsets/publication.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/viewsets/reclaim.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/viewsets/replica.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/viewsets/repository.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/viewsets/task.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/viewsets/upload.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/viewsets/user.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/app/wsgi.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/backends.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/cache/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/cache/cache.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/constants.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/content/authentication.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/content/instrumentation.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/download/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/download/base.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/download/factory.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/download/file.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/download/http.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/exceptions/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/exceptions/base.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/exceptions/plugin.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/exceptions/validation.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/filters.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/metrics.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/middleware.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/migrations.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/openapi/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/openapi/hooks.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/access_policy.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/actions.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/apps.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/authentication/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/cache/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/constants.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/content.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/download/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/exceptions.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/files.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/importexport.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/migrations.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/modelresources.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/models/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/models/role.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/publication_utils.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/pulp_hashlib.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/replica.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/repo_version_utils.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/responses.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/serializers/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/serializers/content.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/stages/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/stages/api.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/stages/artifact_stages.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/stages/content_stages.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/stages/declarative_version.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/stages/models.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/storage.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/sync.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/tasking.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/util.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/viewsets/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/plugin/viewsets/content.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/pytest_plugin.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/responses.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tasking/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tasking/_util.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tasking/entrypoint.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tasking/kafka.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tasking/storage.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tasking/tasks.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tasking/worker.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/test_access_policy.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/test_api_docs.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/test_api_root_rewrite.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/test_artifact_distribution.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/test_auth.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/test_correlation_id.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/test_crd_artifacts.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/test_crud_domains.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/test_filter.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/test_login.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/test_openapi_schema.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/test_openpgp.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/test_replication.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/test_repos.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/test_role.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/test_root_endpoint.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/test_scoping.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/test_signing_service.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/test_status.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/test_task_purge.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/test_tasking.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/test_upload.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/test_users_groups.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/test_workers.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/using_plugin/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/using_plugin/test_checkpoint.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/using_plugin/test_content_access.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/using_plugin/test_content_cache.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/using_plugin/test_content_directory.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/using_plugin/test_content_path.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/using_plugin/test_content_promotion.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/using_plugin/test_contentguard.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/using_plugin/test_crud_repos.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/using_plugin/test_distributions.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/using_plugin/test_filesystemexport.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/using_plugin/test_labels.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/using_plugin/test_migrate.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/using_plugin/test_orphans.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/using_plugin/test_pagination.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/using_plugin/test_prn.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/using_plugin/test_proxy.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/using_plugin/test_pulpimport.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/using_plugin/test_reclaim_disk_space.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/using_plugin/test_repair.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/using_plugin/test_repo_versions.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/using_plugin/test_tasks.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/api/using_plugin/test_unlinking_repo.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/assets/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/content_with_coverage.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/functional/utils.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/performance/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/conftest.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/content/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/content/test_handler.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/content/test_heartbeat.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/download/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/download/test_downloader_base.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/download/test_downloader_factory.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/metrics/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/metrics/conftest.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/metrics/test_aiohttp_instrumentation.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/metrics/test_django_instrumentation.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/migration/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/migration/test_0077_move_remote_url_credentials.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/models/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/models/test_base.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/models/test_content.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/models/test_remote.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/models/test_repository.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/roles/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/roles/test_roles.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/serializers/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/serializers/test_base.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/serializers/test_domain.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/serializers/test_fields.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/serializers/test_orphans_cleanup.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/serializers/test_pulpexport.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/serializers/test_repository.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/stages/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/stages/test_artifactdownloader.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/stages/test_stages.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/test_cache.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/test_chunked_file.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/test_content_guard.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/test_files.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/test_import_checks.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/test_pulp_urls.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/test_settings.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/test_util.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/viewsets/__init__.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore/tests/unit/viewsets/test_viewset_base.py +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore.egg-info/dependency_links.txt +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore.egg-info/entry_points.txt +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/pulpcore.egg-info/top_level.txt +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/setup.cfg +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/test_requirements.txt +0 -0
- {pulpcore-3.77.1 → pulpcore-3.78.0}/unittest_requirements.txt +0 -0
|
@@ -8,6 +8,45 @@
|
|
|
8
8
|
|
|
9
9
|
[//]: # (towncrier release notes start)
|
|
10
10
|
|
|
11
|
+
## 3.78.0 (2025-05-13) {: #3.78.0 }
|
|
12
|
+
|
|
13
|
+
### REST API {: #3.78.0-rest-api }
|
|
14
|
+
|
|
15
|
+
#### Features {: #3.78.0-rest-api-feature }
|
|
16
|
+
|
|
17
|
+
- Added the optional feature to enable uvloop library as a replacement of asyncio eventloop.
|
|
18
|
+
The feature is activated through the UVLOOP_ENABLED feature flag settings and the 'uvloop' optional dependency.
|
|
19
|
+
[#6021](https://github.com/pulp/pulpcore/issues/6021)
|
|
20
|
+
|
|
21
|
+
#### Bugfixes {: #3.78.0-rest-api-bugfix }
|
|
22
|
+
|
|
23
|
+
- Taught tasks to update the state of associated progress-reports when canceled/failed.
|
|
24
|
+
|
|
25
|
+
Added a management-task, `clean-up-progress-reports`, to clean up existing reports.
|
|
26
|
+
[#3609](https://github.com/pulp/pulpcore/issues/3609)
|
|
27
|
+
- Fixed a server error when listing user roles.
|
|
28
|
+
[#6330](https://github.com/pulp/pulpcore/issues/6330)
|
|
29
|
+
- On-demand or pull-through content is now immediately cached upon first request.
|
|
30
|
+
[#6540](https://github.com/pulp/pulpcore/issues/6540)
|
|
31
|
+
|
|
32
|
+
#### Misc {: #3.78.0-rest-api-misc }
|
|
33
|
+
|
|
34
|
+
-
|
|
35
|
+
|
|
36
|
+
### Plugin API {: #3.78.0-plugin-api }
|
|
37
|
+
|
|
38
|
+
No significant changes.
|
|
39
|
+
|
|
40
|
+
### Pulp File {: #3.78.0-pulp-file }
|
|
41
|
+
|
|
42
|
+
No significant changes.
|
|
43
|
+
|
|
44
|
+
### Pulp Cert Guard {: #3.78.0-pulp-cert-guard }
|
|
45
|
+
|
|
46
|
+
No significant changes.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
11
50
|
## 3.77.1 (2025-05-08) {: #3.77.1 }
|
|
12
51
|
|
|
13
52
|
### REST API {: #3.77.1-rest-api }
|
|
@@ -370,6 +409,26 @@ No significant changes.
|
|
|
370
409
|
|
|
371
410
|
---
|
|
372
411
|
|
|
412
|
+
## 3.73.9 (2025-05-06) {: #3.73.9 }
|
|
413
|
+
|
|
414
|
+
### REST API {: #3.73.9-rest-api }
|
|
415
|
+
|
|
416
|
+
No significant changes.
|
|
417
|
+
|
|
418
|
+
### Plugin API {: #3.73.9-plugin-api }
|
|
419
|
+
|
|
420
|
+
No significant changes.
|
|
421
|
+
|
|
422
|
+
### Pulp File {: #3.73.9-pulp-file }
|
|
423
|
+
|
|
424
|
+
No significant changes.
|
|
425
|
+
|
|
426
|
+
### Pulp Cert Guard {: #3.73.9-pulp-cert-guard }
|
|
427
|
+
|
|
428
|
+
No significant changes.
|
|
429
|
+
|
|
430
|
+
---
|
|
431
|
+
|
|
373
432
|
## 3.73.8 (2025-04-24) {: #3.73.8 }
|
|
374
433
|
|
|
375
434
|
### REST API {: #3.73.8-rest-api }
|
|
@@ -2501,6 +2560,29 @@ No significant changes.
|
|
|
2501
2560
|
|
|
2502
2561
|
---
|
|
2503
2562
|
|
|
2563
|
+
## 3.49.40 (2025-05-06) {: #3.49.40 }
|
|
2564
|
+
|
|
2565
|
+
### REST API {: #3.49.40-rest-api }
|
|
2566
|
+
|
|
2567
|
+
#### Bugfixes {: #3.49.40-rest-api-bugfix }
|
|
2568
|
+
|
|
2569
|
+
- Fixed to not use the OpenTelemetryMiddleware when PULP_OTEL_ENABLED is not set.
|
|
2570
|
+
[#6529](https://github.com/pulp/pulpcore/issues/6529)
|
|
2571
|
+
|
|
2572
|
+
### Plugin API {: #3.49.40-plugin-api }
|
|
2573
|
+
|
|
2574
|
+
No significant changes.
|
|
2575
|
+
|
|
2576
|
+
### Pulp File {: #3.49.40-pulp-file }
|
|
2577
|
+
|
|
2578
|
+
No significant changes.
|
|
2579
|
+
|
|
2580
|
+
### Pulp Cert Guard {: #3.49.40-pulp-cert-guard }
|
|
2581
|
+
|
|
2582
|
+
No significant changes.
|
|
2583
|
+
|
|
2584
|
+
---
|
|
2585
|
+
|
|
2504
2586
|
## 3.49.39 (2025-04-24) {: #3.49.39 }
|
|
2505
2587
|
|
|
2506
2588
|
### REST API {: #3.49.39-rest-api }
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pulpcore
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.78.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
|
|
@@ -21,7 +21,7 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
21
21
|
Requires-Python: >=3.9
|
|
22
22
|
Description-Content-Type: text/markdown
|
|
23
23
|
License-File: LICENSE
|
|
24
|
-
Requires-Dist: aiodns<=3.
|
|
24
|
+
Requires-Dist: aiodns<=3.4.0,>=3.0
|
|
25
25
|
Requires-Dist: aiofiles<24.2.0,>=22.1
|
|
26
26
|
Requires-Dist: aiohttp<3.12,>=3.8.1
|
|
27
27
|
Requires-Dist: asyncio-throttle<=1.0.2,>=1.0
|
|
@@ -46,13 +46,13 @@ Requires-Dist: jinja2<=3.1.6,>=3.1
|
|
|
46
46
|
Requires-Dist: json_stream<2.4,>=2.3.2
|
|
47
47
|
Requires-Dist: jq<1.9.0,>=1.6.0
|
|
48
48
|
Requires-Dist: PyOpenSSL<26.0
|
|
49
|
-
Requires-Dist: opentelemetry-api<1.
|
|
50
|
-
Requires-Dist: opentelemetry-sdk<1.
|
|
51
|
-
Requires-Dist: opentelemetry-exporter-otlp-proto-http<1.
|
|
49
|
+
Requires-Dist: opentelemetry-api<1.34,>=1.27.0
|
|
50
|
+
Requires-Dist: opentelemetry-sdk<1.34,>=1.27.0
|
|
51
|
+
Requires-Dist: opentelemetry-exporter-otlp-proto-http<1.34,>=1.27.0
|
|
52
52
|
Requires-Dist: protobuf<6.0,>=4.21.1
|
|
53
53
|
Requires-Dist: pulp-glue<0.33,>=0.18.0
|
|
54
54
|
Requires-Dist: pygtrie<=2.5.0,>=2.5
|
|
55
|
-
Requires-Dist: psycopg[binary]<=3.2.
|
|
55
|
+
Requires-Dist: psycopg[binary]<=3.2.8,>=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
|
|
@@ -78,6 +78,8 @@ Requires-Dist: confluent-kafka<2.10.0,>=2.4.0; extra == "kafka"
|
|
|
78
78
|
Provides-Extra: diagnostics
|
|
79
79
|
Requires-Dist: pyinstrument~=5.0; extra == "diagnostics"
|
|
80
80
|
Requires-Dist: memray~=1.17; extra == "diagnostics"
|
|
81
|
+
Provides-Extra: uvloop
|
|
82
|
+
Requires-Dist: uvloop<0.22,>=0.20; extra == "uvloop"
|
|
81
83
|
Dynamic: license-file
|
|
82
84
|
|
|
83
85
|
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
from gettext import gettext as _
|
|
2
|
+
|
|
3
|
+
from django.core.management import BaseCommand
|
|
4
|
+
from django.db.models import F
|
|
5
|
+
|
|
6
|
+
from pulpcore.app.models import ProgressReport
|
|
7
|
+
from pulpcore.constants import TASK_STATES
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Command(BaseCommand):
|
|
11
|
+
"""
|
|
12
|
+
Django management command for repairing progress-reports in inconsistent states.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
help = (
|
|
16
|
+
"Repairs issue #3609. Long-running tasks that utilize ProgressReports, which "
|
|
17
|
+
"fail or are cancelled, can leave their associated reports in state 'running'. "
|
|
18
|
+
"This script finds the ProgressReports marked as 'running', whose owning task "
|
|
19
|
+
"is in either 'cancelled or 'failed', and moves the state of the ProgressReport "
|
|
20
|
+
"to match that of the task."
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
def add_arguments(self, parser):
|
|
24
|
+
"""Set up arguments."""
|
|
25
|
+
parser.add_argument(
|
|
26
|
+
"--dry-run",
|
|
27
|
+
action="store_true",
|
|
28
|
+
help=_(
|
|
29
|
+
"Don't modify anything, just collect results on how many ProgressReports "
|
|
30
|
+
"are impacted."
|
|
31
|
+
),
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
def handle(self, *args, **options):
|
|
35
|
+
dry_run = options["dry_run"]
|
|
36
|
+
for state in [TASK_STATES.CANCELED, TASK_STATES.FAILED]:
|
|
37
|
+
if dry_run:
|
|
38
|
+
to_be_updated = ProgressReport.objects.filter(
|
|
39
|
+
task__state__ne=F("state"), state=TASK_STATES.RUNNING, task__state=state
|
|
40
|
+
).count()
|
|
41
|
+
print(
|
|
42
|
+
_("Number of ProgressReports in inconsistent state for {} tasks: {}").format(
|
|
43
|
+
state, to_be_updated
|
|
44
|
+
)
|
|
45
|
+
)
|
|
46
|
+
else:
|
|
47
|
+
updated = ProgressReport.objects.filter(
|
|
48
|
+
task__state__ne=F("state"), state=TASK_STATES.RUNNING, task__state=state
|
|
49
|
+
).update(state=state)
|
|
50
|
+
print(
|
|
51
|
+
_("Number of ProgressReports updated for {} tasks: {}").format(state, updated)
|
|
52
|
+
)
|
|
@@ -204,6 +204,10 @@ class Task(BaseModel, AutoAddObjPermsMixin):
|
|
|
204
204
|
)
|
|
205
205
|
)
|
|
206
206
|
|
|
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
|
+
|
|
207
211
|
def set_completed(self):
|
|
208
212
|
"""
|
|
209
213
|
Set this Task to the completed state, save it, and log output in warning cases.
|
|
@@ -232,6 +236,7 @@ class Task(BaseModel, AutoAddObjPermsMixin):
|
|
|
232
236
|
self.pk, self.state
|
|
233
237
|
)
|
|
234
238
|
)
|
|
239
|
+
self._cleanup_progress_reports(TASK_STATES.COMPLETED)
|
|
235
240
|
|
|
236
241
|
def set_failed(self, exc, tb):
|
|
237
242
|
"""
|
|
@@ -264,6 +269,7 @@ class Task(BaseModel, AutoAddObjPermsMixin):
|
|
|
264
269
|
self.pk, self.state
|
|
265
270
|
)
|
|
266
271
|
)
|
|
272
|
+
self._cleanup_progress_reports(TASK_STATES.FAILED)
|
|
267
273
|
|
|
268
274
|
def set_canceling(self):
|
|
269
275
|
"""
|
|
@@ -317,6 +323,7 @@ class Task(BaseModel, AutoAddObjPermsMixin):
|
|
|
317
323
|
self.pk, self.state
|
|
318
324
|
)
|
|
319
325
|
)
|
|
326
|
+
self._cleanup_progress_reports(final_state)
|
|
320
327
|
|
|
321
328
|
def unblock(self):
|
|
322
329
|
# This should be safe to be called without holding the lock.
|
|
@@ -24,8 +24,10 @@ from pulpcore.app.serializers import (
|
|
|
24
24
|
PRNField,
|
|
25
25
|
)
|
|
26
26
|
from pulpcore.app.util import (
|
|
27
|
-
get_viewset_for_model,
|
|
28
27
|
get_request_without_query_params,
|
|
28
|
+
get_url,
|
|
29
|
+
get_prn,
|
|
30
|
+
resolve_prn,
|
|
29
31
|
)
|
|
30
32
|
|
|
31
33
|
User = get_user_model()
|
|
@@ -60,27 +62,42 @@ class PermissionField(serializers.RelatedField):
|
|
|
60
62
|
class ContentObjectField(serializers.CharField):
|
|
61
63
|
"""Content object field"""
|
|
62
64
|
|
|
63
|
-
def to_representation(self,
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
65
|
+
def to_representation(self, value):
|
|
66
|
+
if value is None:
|
|
67
|
+
return None
|
|
68
|
+
else:
|
|
68
69
|
request = get_request_without_query_params(self.context)
|
|
70
|
+
return get_url(value, request=request)
|
|
69
71
|
|
|
70
|
-
|
|
71
|
-
return serializer.data.get("pulp_href")
|
|
72
|
-
|
|
73
|
-
def to_internal_value(self, data):
|
|
72
|
+
def to_internal_value(self, value):
|
|
74
73
|
# ... circular import ...
|
|
75
74
|
from pulpcore.app.viewsets.base import NamedModelViewSet
|
|
76
75
|
|
|
77
|
-
if
|
|
78
|
-
return
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
76
|
+
if value is None:
|
|
77
|
+
return None
|
|
78
|
+
else:
|
|
79
|
+
try:
|
|
80
|
+
obj = NamedModelViewSet.get_resource(value)
|
|
81
|
+
except serializers.ValidationError:
|
|
82
|
+
raise serializers.ValidationError(_("Invalid value: {}.").format(value))
|
|
83
|
+
return obj
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
class ContentObjectPRNField(serializers.CharField):
|
|
87
|
+
"""Content object PRN field"""
|
|
88
|
+
|
|
89
|
+
def to_representation(self, value):
|
|
90
|
+
if value is None:
|
|
91
|
+
return None
|
|
92
|
+
else:
|
|
93
|
+
return get_prn(value)
|
|
94
|
+
|
|
95
|
+
def to_internal_value(self, value):
|
|
96
|
+
if value is None:
|
|
97
|
+
return None
|
|
98
|
+
else:
|
|
99
|
+
model, pk = resolve_prn(value)
|
|
100
|
+
return model.objects.get(pk=pk)
|
|
84
101
|
|
|
85
102
|
|
|
86
103
|
class UserGroupSerializer(serializers.ModelSerializer):
|
|
@@ -247,6 +264,13 @@ class ValidateRoleMixin:
|
|
|
247
264
|
and checks if the user/group already has the role. Does not set any value
|
|
248
265
|
in data or return anything.
|
|
249
266
|
"""
|
|
267
|
+
if "content_object" not in data:
|
|
268
|
+
raise serializers.ValidationError(
|
|
269
|
+
_(
|
|
270
|
+
"Either 'content_object' or 'content_object_prn' needs to be specified."
|
|
271
|
+
" Use 'null' for global or domain level access."
|
|
272
|
+
)
|
|
273
|
+
)
|
|
250
274
|
natural_key_args = {
|
|
251
275
|
f"{role_type}_id": data[role_type].pk,
|
|
252
276
|
"role_id": data["role"].pk,
|
|
@@ -308,8 +332,18 @@ class UserRoleSerializer(ValidateRoleMixin, ModelSerializer, NestedHyperlinkedMo
|
|
|
308
332
|
"pulp_href of the object for which role permissions should be asserted. "
|
|
309
333
|
"If set to 'null', permissions will act on either domain or model-level."
|
|
310
334
|
),
|
|
311
|
-
source="*",
|
|
312
335
|
allow_null=True,
|
|
336
|
+
required=False,
|
|
337
|
+
)
|
|
338
|
+
|
|
339
|
+
content_object_prn = ContentObjectPRNField(
|
|
340
|
+
help_text=_(
|
|
341
|
+
"prn of the object for which role permissions should be asserted. "
|
|
342
|
+
"If set to 'null', permissions will act on either domain or model-level."
|
|
343
|
+
),
|
|
344
|
+
source="content_object",
|
|
345
|
+
allow_null=True,
|
|
346
|
+
required=False,
|
|
313
347
|
)
|
|
314
348
|
|
|
315
349
|
domain = RelatedField(
|
|
@@ -343,6 +377,7 @@ class UserRoleSerializer(ValidateRoleMixin, ModelSerializer, NestedHyperlinkedMo
|
|
|
343
377
|
fields = ModelSerializer.Meta.fields + (
|
|
344
378
|
"role",
|
|
345
379
|
"content_object",
|
|
380
|
+
"content_object_prn",
|
|
346
381
|
"description",
|
|
347
382
|
"permissions",
|
|
348
383
|
"domain",
|
|
@@ -366,8 +401,18 @@ class GroupRoleSerializer(ValidateRoleMixin, ModelSerializer, NestedHyperlinkedM
|
|
|
366
401
|
"pulp_href of the object for which role permissions should be asserted. "
|
|
367
402
|
"If set to 'null', permissions will act on the model-level."
|
|
368
403
|
),
|
|
369
|
-
source="*",
|
|
370
404
|
allow_null=True,
|
|
405
|
+
required=False,
|
|
406
|
+
)
|
|
407
|
+
|
|
408
|
+
content_object_prn = ContentObjectPRNField(
|
|
409
|
+
help_text=_(
|
|
410
|
+
"prn of the object for which role permissions should be asserted. "
|
|
411
|
+
"If set to 'null', permissions will act on either domain or model-level."
|
|
412
|
+
),
|
|
413
|
+
source="content_object",
|
|
414
|
+
allow_null=True,
|
|
415
|
+
required=False,
|
|
371
416
|
)
|
|
372
417
|
|
|
373
418
|
domain = RelatedField(
|
|
@@ -403,6 +448,7 @@ class GroupRoleSerializer(ValidateRoleMixin, ModelSerializer, NestedHyperlinkedM
|
|
|
403
448
|
fields = ModelSerializer.Meta.fields + (
|
|
404
449
|
"role",
|
|
405
450
|
"content_object",
|
|
451
|
+
"content_object_prn",
|
|
406
452
|
"description",
|
|
407
453
|
"permissions",
|
|
408
454
|
"domain",
|
|
@@ -342,9 +342,7 @@ CACHE_SETTINGS = {
|
|
|
342
342
|
"EXPIRES_TTL": 600, # 10 minutes
|
|
343
343
|
}
|
|
344
344
|
|
|
345
|
-
# The time a RemoteArtifact will be ignored after failure.
|
|
346
|
-
# In on-demand, if a fetching content from a remote failed due to corrupt data,
|
|
347
|
-
# the corresponding RemoteArtifact will be ignored for that time (seconds).
|
|
345
|
+
# The time in seconds a RemoteArtifact will be ignored after failure.
|
|
348
346
|
REMOTE_CONTENT_FETCH_FAILURE_COOLDOWN = 5 * 60 # 5 minutes
|
|
349
347
|
|
|
350
348
|
SPECTACULAR_SETTINGS = {
|
|
@@ -425,6 +423,9 @@ KAFKA_SASL_PASSWORD = None
|
|
|
425
423
|
# opentelemetry settings
|
|
426
424
|
OTEL_ENABLED = False
|
|
427
425
|
|
|
426
|
+
# Replaces asyncio event loop with uvloop
|
|
427
|
+
UVLOOP_ENABLED = False
|
|
428
|
+
|
|
428
429
|
# HERE STARTS DYNACONF EXTENSION LOAD (Keep at the very bottom of settings.py)
|
|
429
430
|
# Read more at https://www.dynaconf.com/django/
|
|
430
431
|
|
|
@@ -66,18 +66,19 @@ def get_url(model, domain=None, request=None):
|
|
|
66
66
|
str: The path component of the resource url
|
|
67
67
|
"""
|
|
68
68
|
kwargs = {}
|
|
69
|
-
view_action = "list"
|
|
70
69
|
if settings.DOMAIN_ENABLED:
|
|
71
70
|
kwargs["pulp_domain"] = "default"
|
|
72
|
-
if not domain and hasattr(model, "pulp_domain") and isinstance(model,
|
|
71
|
+
if not domain and hasattr(model, "pulp_domain") and isinstance(model, Model):
|
|
73
72
|
kwargs["pulp_domain"] = model.pulp_domain.name
|
|
74
73
|
elif isinstance(domain, models.Domain):
|
|
75
74
|
kwargs["pulp_domain"] = domain.name
|
|
76
75
|
elif isinstance(domain, str):
|
|
77
76
|
kwargs["pulp_domain"] = domain
|
|
78
|
-
if isinstance(model,
|
|
77
|
+
if isinstance(model, Model):
|
|
79
78
|
view_action = "detail"
|
|
80
79
|
kwargs["pk"] = model.pk
|
|
80
|
+
else:
|
|
81
|
+
view_action = "list"
|
|
81
82
|
|
|
82
83
|
return reverse(get_view_name_for_model(model, view_action), kwargs=kwargs, request=request)
|
|
83
84
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
from contextlib import suppress
|
|
3
3
|
from importlib import import_module
|
|
4
|
+
from importlib.util import find_spec
|
|
4
5
|
import logging
|
|
5
6
|
import os
|
|
6
7
|
|
|
@@ -35,6 +36,13 @@ if settings.OTEL_ENABLED:
|
|
|
35
36
|
else:
|
|
36
37
|
app = web.Application(middlewares=[guid, authenticate])
|
|
37
38
|
|
|
39
|
+
|
|
40
|
+
if settings.UVLOOP_ENABLED:
|
|
41
|
+
if not find_spec("uvloop"):
|
|
42
|
+
raise RuntimeError("The library 'uvloop' must be installed if UVLOOP_ENABLED is true.")
|
|
43
|
+
log.info("Using uvloop as the asyncio event loop.")
|
|
44
|
+
|
|
45
|
+
|
|
38
46
|
CONTENT_MODULE_NAME = "content"
|
|
39
47
|
|
|
40
48
|
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import click
|
|
2
2
|
from pulpcore.app.pulpcore_gunicorn_application import PulpcoreGunicornApplication
|
|
3
|
+
from django.conf import settings
|
|
3
4
|
|
|
4
5
|
|
|
5
6
|
class PulpcoreContentApplication(PulpcoreGunicornApplication):
|
|
6
7
|
def load_app_specific_config(self):
|
|
8
|
+
worker_class = (
|
|
9
|
+
"aiohttp.GunicornUVLoopWebWorker"
|
|
10
|
+
if settings.UVLOOP_ENABLED
|
|
11
|
+
else "aiohttp.GunicornWebWorker"
|
|
12
|
+
)
|
|
7
13
|
self.set_option("default_proc_name", "pulpcore-content", enforced=True)
|
|
8
|
-
self.set_option("worker_class",
|
|
14
|
+
self.set_option("worker_class", worker_class, enforced=True)
|
|
9
15
|
|
|
10
16
|
def load(self):
|
|
11
17
|
import pulpcore.content
|
|
@@ -1314,10 +1314,9 @@ class Handler:
|
|
|
1314
1314
|
except DigestValidationError:
|
|
1315
1315
|
remote_artifact.failed_at = timezone.now()
|
|
1316
1316
|
await remote_artifact.asave()
|
|
1317
|
-
await downloader.session.close()
|
|
1318
1317
|
close_tcp_connection(request.transport._sock)
|
|
1319
1318
|
REMOTE_CONTENT_FETCH_FAILURE_COOLDOWN = settings.REMOTE_CONTENT_FETCH_FAILURE_COOLDOWN
|
|
1320
|
-
|
|
1319
|
+
log.error(
|
|
1321
1320
|
f"Pulp tried streaming {remote_artifact.url!r} to "
|
|
1322
1321
|
"the client, but it failed checksum validation.\n\n"
|
|
1323
1322
|
"We can't recover from wrong data already sent so we are:\n"
|
|
@@ -1327,8 +1326,10 @@ class Handler:
|
|
|
1327
1326
|
"If the Remote is known to be fixed, try resyncing the associated repository.\n"
|
|
1328
1327
|
"If the Remote is known to be permanently corrupted, try removing "
|
|
1329
1328
|
"affected Pulp Remote, adding a good one and resyncing.\n"
|
|
1330
|
-
"
|
|
1329
|
+
"Learn more on <https://pulpproject.org/pulpcore/docs/user/learn/"
|
|
1330
|
+
"on-demand-downloading/#on-demand-and-streamed-limitations>"
|
|
1331
1331
|
)
|
|
1332
|
+
return response
|
|
1332
1333
|
|
|
1333
1334
|
if save_artifact and remote.policy != Remote.STREAMED:
|
|
1334
1335
|
content_artifacts = await asyncio.shield(
|
|
@@ -117,6 +117,7 @@ def test_remote_content_changed_with_on_demand(
|
|
|
117
117
|
file_bindings,
|
|
118
118
|
monitor_task,
|
|
119
119
|
file_distribution_factory,
|
|
120
|
+
tmp_path,
|
|
120
121
|
):
|
|
121
122
|
"""
|
|
122
123
|
GIVEN a remote synced on demand with fileA (e.g, digest=123),
|
|
@@ -124,6 +125,7 @@ def test_remote_content_changed_with_on_demand(
|
|
|
124
125
|
|
|
125
126
|
WHEN the client first requests that content
|
|
126
127
|
THEN the content app will start a response but close the connection before finishing
|
|
128
|
+
AND no file will be present in the filesystem
|
|
127
129
|
|
|
128
130
|
WHEN the client requests that content again (within the RA cooldown interval)
|
|
129
131
|
THEN the content app will return a 404
|
|
@@ -143,9 +145,12 @@ def test_remote_content_changed_with_on_demand(
|
|
|
143
145
|
get_url = urljoin(distribution_base_url(distribution.base_url), expected_file_list[0][0])
|
|
144
146
|
|
|
145
147
|
# WHEN (first request)
|
|
146
|
-
|
|
148
|
+
output_file = tmp_path / "out.rpm"
|
|
149
|
+
cmd = ["curl", "-v", get_url, "-o", str(output_file)]
|
|
150
|
+
result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
147
151
|
|
|
148
152
|
# THEN
|
|
153
|
+
assert not output_file.exists()
|
|
149
154
|
assert result.returncode == 18
|
|
150
155
|
assert b"* Closing connection 0" in result.stderr
|
|
151
156
|
assert b"curl: (18) transfer closed with outstanding read data remaining" in result.stderr
|
|
@@ -211,10 +216,6 @@ def test_handling_remote_artifact_on_demand_streaming_failure(
|
|
|
211
216
|
distribution = file_distribution_factory(repository=repo.pulp_href)
|
|
212
217
|
return distribution
|
|
213
218
|
|
|
214
|
-
def refresh_acs(acs):
|
|
215
|
-
monitor_task_group(file_bindings.AcsFileApi.refresh(acs.pulp_href).task_group)
|
|
216
|
-
return acs
|
|
217
|
-
|
|
218
219
|
def get_original_content_info(remote):
|
|
219
220
|
expected_files = get_files_in_manifest(remote.url)
|
|
220
221
|
content_unit = list(expected_files)[0]
|
|
@@ -231,8 +232,7 @@ def test_handling_remote_artifact_on_demand_streaming_failure(
|
|
|
231
232
|
acs_manifest_path = write_3_iso_file_fixture_data_factory("acs", seed=123)
|
|
232
233
|
remote = create_simple_remote(basic_manifest_path)
|
|
233
234
|
distribution = sync_publish_and_distribute(remote)
|
|
234
|
-
|
|
235
|
-
refresh_acs(acs)
|
|
235
|
+
create_acs_remote(acs_manifest_path)
|
|
236
236
|
write_3_iso_file_fixture_data_factory("acs", overwrite=True) # corrupt
|
|
237
237
|
|
|
238
238
|
# WHEN/THEN (first request)
|
|
@@ -9,8 +9,6 @@ from collections import namedtuple
|
|
|
9
9
|
from urllib.parse import urljoin
|
|
10
10
|
from uuid import uuid4
|
|
11
11
|
|
|
12
|
-
from .pulpperf import reporting
|
|
13
|
-
|
|
14
12
|
Args = namedtuple("Arguments", "limit processes repositories")
|
|
15
13
|
|
|
16
14
|
|
|
@@ -92,7 +90,7 @@ def test_performance(
|
|
|
92
90
|
responses.append(response)
|
|
93
91
|
|
|
94
92
|
results = [monitor_task(response.task) for response in responses]
|
|
95
|
-
|
|
93
|
+
report_tasks_stats("Sync tasks", results)
|
|
96
94
|
|
|
97
95
|
"""Measure time of resynchronization."""
|
|
98
96
|
responses = []
|
|
@@ -102,7 +100,7 @@ def test_performance(
|
|
|
102
100
|
responses.append(response)
|
|
103
101
|
|
|
104
102
|
results = [monitor_task(response.task) for response in responses]
|
|
105
|
-
|
|
103
|
+
report_tasks_stats("Resync tasks", results)
|
|
106
104
|
|
|
107
105
|
"""Measure time of repository publishing."""
|
|
108
106
|
responses = []
|
|
@@ -111,7 +109,7 @@ def test_performance(
|
|
|
111
109
|
responses.append(response)
|
|
112
110
|
|
|
113
111
|
results = [monitor_task(response.task) for response in responses]
|
|
114
|
-
|
|
112
|
+
report_tasks_stats("Publication tasks", results)
|
|
115
113
|
|
|
116
114
|
for i in range(len(results)):
|
|
117
115
|
data[i]["publication_href"] = results[i].created_resources[0]
|
|
@@ -132,7 +130,7 @@ def test_performance(
|
|
|
132
130
|
responses.append(response)
|
|
133
131
|
|
|
134
132
|
results = [monitor_task(response.task) for response in responses]
|
|
135
|
-
|
|
133
|
+
report_tasks_stats("Distribution tasks", results)
|
|
136
134
|
|
|
137
135
|
for i in range(len(results)):
|
|
138
136
|
data[i]["distribution_href"] = results[i].created_resources[0]
|
|
@@ -152,7 +150,7 @@ def test_performance(
|
|
|
152
150
|
pool.starmap(download, params)
|
|
153
151
|
|
|
154
152
|
after = datetime.datetime.utcnow()
|
|
155
|
-
|
|
153
|
+
print_fmt_experiment_time("Repository download", before, after)
|
|
156
154
|
|
|
157
155
|
"""Measure time of inspecting the repository content."""
|
|
158
156
|
before = datetime.datetime.utcnow()
|
|
@@ -172,7 +170,7 @@ def test_performance(
|
|
|
172
170
|
with multiprocessing.Pool(processes=args.processes) as pool:
|
|
173
171
|
pool.starmap(measureit, params)
|
|
174
172
|
after = datetime.datetime.utcnow()
|
|
175
|
-
|
|
173
|
+
print_fmt_experiment_time("Content inspection", before, after)
|
|
176
174
|
|
|
177
175
|
"""Measure time of repository cloning."""
|
|
178
176
|
for r in data:
|
|
@@ -192,7 +190,7 @@ def test_performance(
|
|
|
192
190
|
responses.append(response)
|
|
193
191
|
|
|
194
192
|
results = [monitor_task(response.task) for response in responses]
|
|
195
|
-
|
|
193
|
+
report_tasks_stats("Version clone with base_version tasks", results)
|
|
196
194
|
|
|
197
195
|
hrefs = [
|
|
198
196
|
i["pulp_href"]
|
|
@@ -206,7 +204,7 @@ def test_performance(
|
|
|
206
204
|
responses.append(response)
|
|
207
205
|
|
|
208
206
|
results = [monitor_task(response.task) for response in responses]
|
|
209
|
-
|
|
207
|
+
report_tasks_stats("Version clone with add_content_units tasks", results)
|
|
210
208
|
|
|
211
209
|
|
|
212
210
|
def download(base_url, file_name, file_size):
|