pulpcore 3.122.2__tar.gz → 3.123.1__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.
- {pulpcore-3.122.2 → pulpcore-3.123.1}/CHANGES.md +142 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/PKG-INFO +3 -5
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/app/__init__.py +1 -1
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/app/__init__.py +1 -1
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/functional/api/test_download_policies.py +0 -2
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/apps.py +1 -1
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/models/content.py +10 -2
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/models/repository.py +1 -2
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/models/storage.py +0 -25
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/serializers/domain.py +0 -45
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/content/handler.py +5 -2
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/test_crud_domains.py +0 -11
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/content/test_handler.py +76 -0
- pulpcore-3.122.2/pulpcore/tests/unit/models/test_publication_retention.py → pulpcore-3.123.1/pulpcore/tests/unit/models/test_caching_and_retention.py +41 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/serializers/test_domain.py +0 -12
- pulpcore-3.123.1/pulpcore/tests/unit/test_signing_service.py +39 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore.egg-info/PKG-INFO +3 -5
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore.egg-info/SOURCES.txt +2 -1
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore.egg-info/requires.txt +2 -5
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pyproject.toml +4 -5
- {pulpcore-3.122.2 → pulpcore-3.123.1}/CODE_OF_CONDUCT.md +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/COMMITMENT +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/CONTRIBUTING.md +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/COPYRIGHT +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/LICENSE +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/MANIFEST.in +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/README.md +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/ci_requirements.txt +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/functest_requirements.txt +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/manage.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/app/migrations/0001_initial.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/app/migrations/0002_alter_rhsmcertguard_contentguard_ptr_and_more.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/app/migrations/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/app/models.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/app/serializers.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/app/viewsets.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/pytest_plugin.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/rhsm/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/rhsm/rhsm_check_path.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/api/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/api/test_rhsm_certguard.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/api/test_x509_certguard.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/rhsm/katello-default-ca.crt +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/rhsm/katello-default-ca.key +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/rhsm/trusted_but_expired.pem +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/rhsm/uber.cert +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/rhsm/untrusted_cert-key.pem +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/rhsm/untrusted_cert.pem +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/rhsm/v1/1514454871848760713-key.pem +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/rhsm/v1/1514454871848760713.pem +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/rhsm/v1/159442575569388840-key.pem +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/rhsm/v1/159442575569388840.pem +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/rhsm/v3/4260035510644027985-key.pem +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/rhsm/v3/4260035510644027985.pem +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/rhsm/v3/5527980418107729172-key.pem +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/rhsm/v3/5527980418107729172.pem +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/certificates/ca.pem +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/genca.sh +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/keys/ca.pem +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/x509/certificates/ca.pem +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/x509/certificates/client.pem +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/x509/certificates/server.pem +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/x509/certificates/un_urlencoded_cert.txt +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/x509/certificates/untrusted_client.pem +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/x509/genall.sh +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/x509/genca.sh +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/x509/genclient.sh +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/x509/gensrv.sh +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/x509/keys/ca.pem +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/x509/keys/client.pem +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/artifacts/x509/keys/server.pem +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/conftest.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/functional/constants.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/unit/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/unit/certdata.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_certguard/tests/unit/test_rhsm_check_path.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/app/migrations/0001_initial_squashed_0016_add_domain.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/app/migrations/0017_alter_filealternatecontentsource_alternatecontentsource_ptr_and_more.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/app/migrations/0018_alter_filecontent_options.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/app/migrations/0019_add_filegitremote.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/app/migrations/0020_filerepository_last_sync_details.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/app/migrations/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/app/modelresource.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/app/models.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/app/replica.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/app/serializers.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/app/settings.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/app/tasks/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/app/tasks/publishing.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/app/tasks/synchronizing.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/app/viewsets.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/manifest.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/pytest_plugin.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/functional/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/functional/api/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/functional/api/test_acs.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/functional/api/test_auto_publish.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/functional/api/test_bad_sync.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/functional/api/test_content_labels.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/functional/api/test_crud_content_unit.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/functional/api/test_crud_remotes.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/functional/api/test_distributed_publication.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/functional/api/test_domains.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/functional/api/test_filesystem_export.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/functional/api/test_generic_list.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/functional/api/test_git_sync.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/functional/api/test_labels.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/functional/api/test_mime_types.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/functional/api/test_overwrite_content.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/functional/api/test_publish.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/functional/api/test_pulp_export.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/functional/api/test_rbac.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/functional/api/test_remote_settings.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/functional/api/test_sync.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/functional/api/test_sync_optimization.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/unit/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/unit/test_git_sync.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/unit/test_safe_paths.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/unit/test_serializers.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/unit/test_sync_optimization.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/access_policy.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/authentication.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/checks.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/contexts.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/entrypoint.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/files.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/find_url.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/global_access_conditions.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/importexport.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/loggers.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/manage.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/management/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/management/commands/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/management/commands/add-signing-service.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/management/commands/analyze-publication.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/management/commands/clean-up-progress-reports.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/management/commands/clear-cache.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/management/commands/datarepair-2327.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/management/commands/datarepair.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/management/commands/dump-permissions.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/management/commands/dump-publications-to-fs.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/management/commands/handle-artifact-checksums.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/management/commands/list-signing-services.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/management/commands/migrationstat.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/management/commands/openapi.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/management/commands/optimizemigration.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/management/commands/rebasemigrations.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/management/commands/remove-plugin.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/management/commands/remove-signing-service.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/management/commands/repository-size.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/management/commands/reset-admin-password.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/management/commands/rotate-db-key.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/management/commands/shell.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0001_squashed_0090_char_to_text_field.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0091_systemid.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0092_alter_upload_options.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0093_add_info_field_repositoryversion.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0094_protect_repository_content.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0095_artifactdistribution.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0096_alter_task_logging_cid.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0097_remove_telemetry_task_schedule.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0098_pulp_labels.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0099_versions_field.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0100_upstreampulp.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0101_add_domain.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0102_add_domain_relations.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0103_alter_export_task.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0104_delete_label.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0105_abstract_uuid_gen.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0106_alter_artifactdistribution_distribution_ptr_and_more.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0107_distribution_hidden.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0108_task_versions.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0109_contentartifact_relative_path_index.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0110_apiappstatus.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0111_task_enc_args_task_enc_kwargs.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0112_alter_upstreampulp_options.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0113_headercontentguard.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0114_remove_task_args_remove_task_kwargs.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0115_compositecontentguard.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0116_alter_remoteartifact_md5_alter_remoteartifact_sha1_and_more.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0117_task_unblocked_at.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0118_task_core_task_unblock_2276a4_idx_and_more.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0119_grouprole_core_groupr_object__250e22_idx_and_more.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0120_get_url_removal.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0121_add_profile_artifacts_table.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0122_record_last_replication_timestamp.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0123_upstreampulp_q_select.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0124_task_deferred_task_immediate.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0125_openpgpdistribution_openpgpkeyring_openpgppublickey_and_more.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0126_remoteartifact_failed_at.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0127_remove_upstreampulp_pulp_label_select.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0128_domain_pulp_labels.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0129_content_pulp_labels.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0130_upstreampulp_policy.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0131_distribution_checkpoint_publication_checkpoint.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0132_alter_content_options.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0132_task_profile_options.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0133_repositoryversion_content_ids.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0134_task_insert_trigger.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0135_task_pulp_task_resources_index.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0136_delete_basedistribution.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0137_appstatus.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0138_vulnerabilityreport.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0139_task_app_lock.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0140_require_appstatus_zdu.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0141_alter_appstatus_name.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0142_task_result.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0143_require_app_lock_zdu.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0144_delete_old_appstatus.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0145_domainize_import_export.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0146_repository_retain_checkpoints.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0147_content_pulp_labels_gin.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0148_artifact_artifact_domain_size_index.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0149_distributedpublication.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0150_taskschedule_task_kwargs.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0151_upstreampulp_connect_timeout_and_more.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0152_alter_repositoryversion_content_ids.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0153_taskschedule_pulp_domain_alter_taskschedule_name_and_more.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0154_task_api_version.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0155_create_rel_path_domains.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0156_alter_contentartifact_relative_path_and_more.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0157_distribution_base_path_constraint.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0158_domain_default_content_guard.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0159_alter_contentartifact_relative_path_and_more.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0160_envvarheadercontentguard.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/0161_upstreampulp_remote_policy.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/migrations/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/mime_types.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/modelresource.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/models/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/models/access_policy.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/models/acs.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/models/analytics.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/models/base.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/models/domain.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/models/exporter.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/models/fields.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/models/generic.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/models/importer.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/models/openpgp.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/models/progress.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/models/publication.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/models/replica.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/models/role.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/models/status.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/models/task.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/models/upload.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/models/vulnerability_report.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/netutil.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/openpgp.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/protobuf/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/protobuf/analytics_pb2.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/pulp_hashlib.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/pulpcore_gunicorn_application.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/redis_connection.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/replica.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/response.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/role_util.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/serializers/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/serializers/access_policy.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/serializers/acs.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/serializers/base.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/serializers/content.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/serializers/exporter.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/serializers/fields.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/serializers/importer.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/serializers/openpgp.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/serializers/orphans.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/serializers/progress.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/serializers/publication.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/serializers/purge.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/serializers/reclaim.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/serializers/repair.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/serializers/replica.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/serializers/repository.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/serializers/status.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/serializers/task.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/serializers/upload.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/serializers/user.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/serializers/vulnerability_report.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/settings.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/tasks/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/tasks/analytics.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/tasks/base.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/tasks/datarepair.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/tasks/export.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/tasks/importer.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/tasks/migrate.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/tasks/orphan.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/tasks/purge.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/tasks/reclaim_space.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/tasks/replica.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/tasks/repository.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/tasks/telemetry.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/tasks/test.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/tasks/upload.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/tasks/vulnerability_report.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/templates/rest_framework/api.html +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/templatetags/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/templatetags/pulp_urls.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/urls.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/util.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/views/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/views/datarepair.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/views/importer.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/views/orphans.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/views/repair.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/views/status.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/viewsets/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/viewsets/access_policy.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/viewsets/acs.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/viewsets/base.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/viewsets/content.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/viewsets/custom_filters.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/viewsets/domain.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/viewsets/exporter.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/viewsets/importer.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/viewsets/openpgp.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/viewsets/orphans.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/viewsets/publication.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/viewsets/reclaim.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/viewsets/replica.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/viewsets/repository.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/viewsets/task.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/viewsets/upload.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/viewsets/user.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/viewsets/vulnerability_report.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/workload_identity/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/workload_identity/authentication.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/workload_identity/authz.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/workload_identity/backend.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/workload_identity/config.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/workload_identity/principal.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/workload_identity/rules.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/app/wsgi.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/backends.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/cache/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/cache/cache.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/constants.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/content/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/content/authentication.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/content/entrypoint.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/content/instrumentation.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/download/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/download/base.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/download/factory.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/download/file.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/download/http.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/exceptions/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/exceptions/base.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/exceptions/plugin.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/exceptions/validation.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/filters.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/metrics.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/middleware.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/migrations.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/openapi/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/openapi/hooks.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/pagination.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/access_policy.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/actions.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/apps.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/authentication/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/cache/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/constants.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/content.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/download/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/exceptions.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/files.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/find_url.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/importexport.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/migrations.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/modelresources.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/models/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/models/role.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/publication_utils.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/pulp_hashlib.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/replica.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/repo_version_utils.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/responses.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/serializers/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/serializers/content.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/stages/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/stages/api.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/stages/artifact_stages.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/stages/content_stages.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/stages/declarative_version.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/stages/models.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/storage.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/sync.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/tasking.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/util.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/viewsets/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/plugin/viewsets/content.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/pytest_plugin.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/responses.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/saml2/backends.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tasking/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tasking/_util.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tasking/entrypoint.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tasking/kafka.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tasking/redis_locks.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tasking/redis_tasks.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tasking/redis_worker.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tasking/storage.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tasking/tasks.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tasking/worker.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/test_access_policy.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/test_api_docs.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/test_api_root_rewrite.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/test_artifact_distribution.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/test_auth.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/test_correlation_id.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/test_crd_artifacts.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/test_filter.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/test_login.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/test_openapi_schema.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/test_openpgp.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/test_replication.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/test_repos.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/test_role.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/test_root_endpoint.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/test_scoping.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/test_signing_service.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/test_status.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/test_task_purge.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/test_tasking.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/test_upload.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/test_users_groups.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/test_v4_status.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/test_workers.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/using_plugin/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/using_plugin/test_cdn_cache_validation.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/using_plugin/test_checkpoint.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/using_plugin/test_content_access.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/using_plugin/test_content_cache.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/using_plugin/test_content_delivery.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/using_plugin/test_content_directory.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/using_plugin/test_content_path.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/using_plugin/test_content_promotion.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/using_plugin/test_contentguard.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/using_plugin/test_crud_repos.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/using_plugin/test_distributions.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/using_plugin/test_filesystemexport.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/using_plugin/test_labels.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/using_plugin/test_migrate.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/using_plugin/test_orphans.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/using_plugin/test_pagination.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/using_plugin/test_prn.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/using_plugin/test_proxy.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/using_plugin/test_pulpimport.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/using_plugin/test_reclaim_disk_space.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/using_plugin/test_repair.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/using_plugin/test_repo_versions.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/using_plugin/test_tasks.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/api/using_plugin/test_unlinking_repo.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/assets/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/content_with_coverage.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/functional/utils.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/performance/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/performance/test_performance.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/conftest.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/content/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/content/test_heartbeat.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/download/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/download/test_downloader_base.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/download/test_downloader_factory.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/download/test_downloader_file.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/export/test_local_fs_export.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/metrics/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/metrics/conftest.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/metrics/test_aiohttp_instrumentation.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/metrics/test_django_instrumentation.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/migration/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/models/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/models/test_base.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/models/test_content.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/models/test_content_ids_migration.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/models/test_distribution.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/models/test_remote.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/models/test_repository.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/models/test_task.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/roles/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/roles/test_adjust_roles.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/roles/test_roles.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/serializers/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/serializers/test_base.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/serializers/test_fields.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/serializers/test_orphans_cleanup.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/serializers/test_pulpexport.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/serializers/test_repository.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/serializers/test_user.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/stages/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/stages/test_artifactdownloader.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/stages/test_resource_budget.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/stages/test_stages.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/tasking/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/tasking/test_delete_tasks.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/tasking/test_missing_worker_cleanup.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/tasking/test_orphan_redis_locks.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/tasking/test_redis_fetch_task.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/tasking/test_waiting_tasks_metric.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/test_cache.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/test_chunked_file.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/test_clear_cache_command.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/test_content_guard.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/test_fetch_task_hol_blocking.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/test_files.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/test_gpg_verify.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/test_import_checks.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/test_list_signing_services_command.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/test_middleware.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/test_pulp_urls.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/test_replica.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/test_settings.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/test_util.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/test_viewsets.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/test_vulnerability_report.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/viewsets/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/viewsets/test_viewset_base.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/workload_identity/__init__.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore/tests/unit/workload_identity/test_workload_identity.py +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore.egg-info/dependency_links.txt +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore.egg-info/entry_points.txt +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/pulpcore.egg-info/top_level.txt +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/setup.cfg +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/test_requirements.txt +0 -0
- {pulpcore-3.122.2 → pulpcore-3.123.1}/unittest_requirements.txt +0 -0
|
@@ -8,6 +8,59 @@
|
|
|
8
8
|
|
|
9
9
|
[//]: # (towncrier release notes start)
|
|
10
10
|
|
|
11
|
+
## 3.123.1 (2026-10-23) {: #3.123.1 }
|
|
12
|
+
|
|
13
|
+
### REST API {: #3.123.1-rest-api }
|
|
14
|
+
|
|
15
|
+
#### Bugfixes {: #3.123.1-rest-api-bugfix }
|
|
16
|
+
|
|
17
|
+
- Fixed responses for a distribution being cached from the previous repository version, and served until the cache entry expired, when they were requested while a new version was being created.
|
|
18
|
+
[#8246](https://github.com/pulp/pulpcore/issues/8246)
|
|
19
|
+
|
|
20
|
+
### Plugin API {: #3.123.1-plugin-api }
|
|
21
|
+
|
|
22
|
+
No significant changes.
|
|
23
|
+
|
|
24
|
+
### Pulp File {: #3.123.1-pulp-file }
|
|
25
|
+
|
|
26
|
+
No significant changes.
|
|
27
|
+
|
|
28
|
+
### Pulp Cert Guard {: #3.123.1-pulp-cert-guard }
|
|
29
|
+
|
|
30
|
+
No significant changes.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## 3.123.0 (2026-10-21) {: #3.123.0 }
|
|
35
|
+
|
|
36
|
+
### REST API {: #3.123.0-rest-api }
|
|
37
|
+
|
|
38
|
+
#### Bugfixes {: #3.123.0-rest-api-bugfix }
|
|
39
|
+
|
|
40
|
+
- Fixed a foreign key error when a first-time pull-through download fails digest validation; the content app now reports the intended checksum error and closes the connection.
|
|
41
|
+
- Fixed repository version serialization failing with `LookupError` when the version contains a content type that has no registered viewset.
|
|
42
|
+
|
|
43
|
+
#### Removals {: #3.123.0-rest-api-removal }
|
|
44
|
+
|
|
45
|
+
- Removed SFTP storage support because it was unreliable and could corrupt files; it also did not support object-storage redirects or on-demand downloads.
|
|
46
|
+
|
|
47
|
+
### Plugin API {: #3.123.0-plugin-api }
|
|
48
|
+
|
|
49
|
+
#### Features {: #3.123.0-plugin-api-feature }
|
|
50
|
+
|
|
51
|
+
- `SigningService.sign()` and `asign()` now accept an optional `pubkey_fingerprint` to sign with a key other than the one the signing service was created with.
|
|
52
|
+
[#7942](https://github.com/pulp/pulpcore/issues/7942)
|
|
53
|
+
|
|
54
|
+
### Pulp File {: #3.123.0-pulp-file }
|
|
55
|
+
|
|
56
|
+
No significant changes.
|
|
57
|
+
|
|
58
|
+
### Pulp Cert Guard {: #3.123.0-pulp-cert-guard }
|
|
59
|
+
|
|
60
|
+
No significant changes.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
11
64
|
## 3.122.2 (2026-10-15) {: #3.122.2 }
|
|
12
65
|
|
|
13
66
|
### REST API {: #3.122.2-rest-api }
|
|
@@ -303,6 +356,26 @@ No significant changes.
|
|
|
303
356
|
|
|
304
357
|
---
|
|
305
358
|
|
|
359
|
+
## 3.118.3 (2026-10-15) {: #3.118.3 }
|
|
360
|
+
|
|
361
|
+
### REST API {: #3.118.3-rest-api }
|
|
362
|
+
|
|
363
|
+
No significant changes.
|
|
364
|
+
|
|
365
|
+
### Plugin API {: #3.118.3-plugin-api }
|
|
366
|
+
|
|
367
|
+
No significant changes.
|
|
368
|
+
|
|
369
|
+
### Pulp File {: #3.118.3-pulp-file }
|
|
370
|
+
|
|
371
|
+
No significant changes.
|
|
372
|
+
|
|
373
|
+
### Pulp Cert Guard {: #3.118.3-pulp-cert-guard }
|
|
374
|
+
|
|
375
|
+
No significant changes.
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
306
379
|
## 3.118.2 (2026-10-13) {: #3.118.2 }
|
|
307
380
|
|
|
308
381
|
### REST API {: #3.118.2-rest-api }
|
|
@@ -1456,6 +1529,51 @@ No significant changes.
|
|
|
1456
1529
|
|
|
1457
1530
|
---
|
|
1458
1531
|
|
|
1532
|
+
## 3.105.23 (2026-10-15) {: #3.105.23 }
|
|
1533
|
+
|
|
1534
|
+
### REST API {: #3.105.23-rest-api }
|
|
1535
|
+
|
|
1536
|
+
No significant changes.
|
|
1537
|
+
|
|
1538
|
+
### Plugin API {: #3.105.23-plugin-api }
|
|
1539
|
+
|
|
1540
|
+
No significant changes.
|
|
1541
|
+
|
|
1542
|
+
### Pulp File {: #3.105.23-pulp-file }
|
|
1543
|
+
|
|
1544
|
+
No significant changes.
|
|
1545
|
+
|
|
1546
|
+
### Pulp Cert Guard {: #3.105.23-pulp-cert-guard }
|
|
1547
|
+
|
|
1548
|
+
No significant changes.
|
|
1549
|
+
|
|
1550
|
+
---
|
|
1551
|
+
|
|
1552
|
+
## 3.105.22 (2026-10-14) {: #3.105.22 }
|
|
1553
|
+
|
|
1554
|
+
### REST API {: #3.105.22-rest-api }
|
|
1555
|
+
|
|
1556
|
+
#### Bugfixes {: #3.105.22-rest-api-bugfix }
|
|
1557
|
+
|
|
1558
|
+
- Fixed an issue where users were able to list (but not modify) uploads they didn't have permissions to view.
|
|
1559
|
+
- Fixed vulnerability report rescans to update existing reports.
|
|
1560
|
+
- Optimized `scope_queryset` SQL queries when using a domain scoped endpoint.
|
|
1561
|
+
- Repeated object lookups in a single API request now reuse the retrieved object.
|
|
1562
|
+
|
|
1563
|
+
### Plugin API {: #3.105.22-plugin-api }
|
|
1564
|
+
|
|
1565
|
+
No significant changes.
|
|
1566
|
+
|
|
1567
|
+
### Pulp File {: #3.105.22-pulp-file }
|
|
1568
|
+
|
|
1569
|
+
No significant changes.
|
|
1570
|
+
|
|
1571
|
+
### Pulp Cert Guard {: #3.105.22-pulp-cert-guard }
|
|
1572
|
+
|
|
1573
|
+
No significant changes.
|
|
1574
|
+
|
|
1575
|
+
---
|
|
1576
|
+
|
|
1459
1577
|
## 3.105.21 (2026-10-01) {: #3.105.21 }
|
|
1460
1578
|
|
|
1461
1579
|
### REST API {: #3.105.21-rest-api }
|
|
@@ -2944,6 +3062,30 @@ No significant changes.
|
|
|
2944
3062
|
|
|
2945
3063
|
---
|
|
2946
3064
|
|
|
3065
|
+
## 3.85.32 (2026-10-14) {: #3.85.32 }
|
|
3066
|
+
|
|
3067
|
+
### REST API {: #3.85.32-rest-api }
|
|
3068
|
+
|
|
3069
|
+
#### Bugfixes {: #3.85.32-rest-api-bugfix }
|
|
3070
|
+
|
|
3071
|
+
- Fixed directory listings for published content displaying publication time instead of repository added date.
|
|
3072
|
+
- Fixed vulnerability report rescans to update existing reports.
|
|
3073
|
+
- Removed parent directory sizes and fixed wrong last modified timestamp in content app listings.
|
|
3074
|
+
|
|
3075
|
+
### Plugin API {: #3.85.32-plugin-api }
|
|
3076
|
+
|
|
3077
|
+
No significant changes.
|
|
3078
|
+
|
|
3079
|
+
### Pulp File {: #3.85.32-pulp-file }
|
|
3080
|
+
|
|
3081
|
+
No significant changes.
|
|
3082
|
+
|
|
3083
|
+
### Pulp Cert Guard {: #3.85.32-pulp-cert-guard }
|
|
3084
|
+
|
|
3085
|
+
No significant changes.
|
|
3086
|
+
|
|
3087
|
+
---
|
|
3088
|
+
|
|
2947
3089
|
## 3.85.31 (2026-09-23) {: #3.85.31 }
|
|
2948
3090
|
|
|
2949
3091
|
### REST API {: #3.85.31-rest-api }
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pulpcore
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.123.1
|
|
4
4
|
Summary: Pulp Django Application and Related Modules
|
|
5
5
|
Author-email: Pulp Team <pulp-list@redhat.com>
|
|
6
6
|
License-Expression: GPL-2.0-or-later
|
|
@@ -46,7 +46,7 @@ Requires-Dist: opentelemetry-api<1.46,>=1.27.0
|
|
|
46
46
|
Requires-Dist: opentelemetry-sdk<1.46,>=1.27.0
|
|
47
47
|
Requires-Dist: opentelemetry-exporter-otlp-proto-http<1.46,>=1.27.0
|
|
48
48
|
Requires-Dist: protobuf<8.0,>=4.21.1
|
|
49
|
-
Requires-Dist: pulp-glue<0.
|
|
49
|
+
Requires-Dist: pulp-glue<0.42,>=0.35.0
|
|
50
50
|
Requires-Dist: PyOpenSSL<27.0,>=26.3.0
|
|
51
51
|
Requires-Dist: pygtrie<2.7,>=2.5
|
|
52
52
|
Requires-Dist: psycopg[binary]<3.4,>=3.3.4
|
|
@@ -59,8 +59,6 @@ Requires-Dist: url-normalize<3.1,>=1.4.3
|
|
|
59
59
|
Requires-Dist: uuid6<=2025.0.1,>=2023.5.2
|
|
60
60
|
Requires-Dist: whitenoise<6.13.0,>=5.0
|
|
61
61
|
Requires-Dist: yarl<1.26,>=1.12.0
|
|
62
|
-
Provides-Extra: sftp
|
|
63
|
-
Requires-Dist: django-storages[sftp]==1.14.6; extra == "sftp"
|
|
64
62
|
Provides-Extra: s3
|
|
65
63
|
Requires-Dist: django-storages[boto3]==1.14.6; extra == "s3"
|
|
66
64
|
Provides-Extra: google
|
|
@@ -73,7 +71,7 @@ Provides-Extra: saml2
|
|
|
73
71
|
Requires-Dist: djangosaml2<1.13,>=1.12.0; extra == "saml2"
|
|
74
72
|
Provides-Extra: kafka
|
|
75
73
|
Requires-Dist: cloudevents==1.11.0; extra == "kafka"
|
|
76
|
-
Requires-Dist: confluent-kafka<2.
|
|
74
|
+
Requires-Dist: confluent-kafka<2.17.0,>=2.4.0; extra == "kafka"
|
|
77
75
|
Provides-Extra: diagnostics
|
|
78
76
|
Requires-Dist: pyinstrument~=5.0; extra == "diagnostics"
|
|
79
77
|
Requires-Dist: memray~=1.17; extra == "diagnostics"
|
{pulpcore-3.122.2 → pulpcore-3.123.1}/pulp_file/tests/functional/api/test_download_policies.py
RENAMED
|
@@ -54,8 +54,6 @@ def test_download_policy(
|
|
|
54
54
|
):
|
|
55
55
|
"""Test that "on_demand" and "streamed" download policies work as expected."""
|
|
56
56
|
settings = pulp_settings
|
|
57
|
-
if download_policy == "on_demand" and "SFTP" in settings.STORAGES["default"]["BACKEND"]:
|
|
58
|
-
pytest.skip("This storage technology is not properly supported.")
|
|
59
57
|
|
|
60
58
|
remote = file_remote_ssl_factory(
|
|
61
59
|
manifest_path=range_header_manifest_path, policy=download_policy
|
|
@@ -814,7 +814,7 @@ class SigningService(BaseModel):
|
|
|
814
814
|
env.update(env_vars)
|
|
815
815
|
return {**os.environ, **env}
|
|
816
816
|
|
|
817
|
-
def sign(self, filename, env_vars=None):
|
|
817
|
+
def sign(self, filename, env_vars=None, pubkey_fingerprint=None):
|
|
818
818
|
"""
|
|
819
819
|
Signs the file provided via 'filename' by invoking an external script (or executable).
|
|
820
820
|
|
|
@@ -825,6 +825,8 @@ class SigningService(BaseModel):
|
|
|
825
825
|
Args:
|
|
826
826
|
filename (str): A relative path to a file which is intended to be signed.
|
|
827
827
|
env_vars (dict): dictionary of environment variables
|
|
828
|
+
pubkey_fingerprint (str): fingerprint of the key to sign with. Defaults to the
|
|
829
|
+
signing service's own key.
|
|
828
830
|
|
|
829
831
|
Raises:
|
|
830
832
|
RuntimeError: If the return code of the script is not equal to 0.
|
|
@@ -832,6 +834,9 @@ class SigningService(BaseModel):
|
|
|
832
834
|
Returns:
|
|
833
835
|
A dictionary as validated by the validate() method.
|
|
834
836
|
"""
|
|
837
|
+
if pubkey_fingerprint:
|
|
838
|
+
env_vars = {**(env_vars or {}), "PULP_SIGNING_KEY_FINGERPRINT": pubkey_fingerprint}
|
|
839
|
+
|
|
835
840
|
completed_process = subprocess.run(
|
|
836
841
|
[self.script, filename],
|
|
837
842
|
env=self._env_variables(env_vars),
|
|
@@ -849,8 +854,11 @@ class SigningService(BaseModel):
|
|
|
849
854
|
|
|
850
855
|
return return_value
|
|
851
856
|
|
|
852
|
-
async def asign(self, filename, env_vars=None):
|
|
857
|
+
async def asign(self, filename, env_vars=None, pubkey_fingerprint=None):
|
|
853
858
|
"""Async version of sign."""
|
|
859
|
+
if pubkey_fingerprint:
|
|
860
|
+
env_vars = {**(env_vars or {}), "PULP_SIGNING_KEY_FINGERPRINT": pubkey_fingerprint}
|
|
861
|
+
|
|
854
862
|
process = await asyncio.create_subprocess_exec(
|
|
855
863
|
self.script,
|
|
856
864
|
filename,
|
|
@@ -198,8 +198,6 @@ class Repository(MasterModel):
|
|
|
198
198
|
resource = CreatedResource(content_object=version)
|
|
199
199
|
resource.save()
|
|
200
200
|
|
|
201
|
-
self.invalidate_cache()
|
|
202
|
-
|
|
203
201
|
return version
|
|
204
202
|
|
|
205
203
|
def initialize_new_version(self, new_version):
|
|
@@ -1534,6 +1532,7 @@ class RepositoryVersion(BaseModel):
|
|
|
1534
1532
|
self.repository.save()
|
|
1535
1533
|
self.save()
|
|
1536
1534
|
self._compute_counts()
|
|
1535
|
+
transaction.on_commit(self.repository.invalidate_cache)
|
|
1537
1536
|
self.repository.cleanup_old_versions()
|
|
1538
1537
|
repository.on_new_version(self)
|
|
1539
1538
|
except Exception:
|
|
@@ -99,31 +99,6 @@ class FileSystem(FileSystemStorage):
|
|
|
99
99
|
return str(name).replace("\\", "/")
|
|
100
100
|
|
|
101
101
|
|
|
102
|
-
try:
|
|
103
|
-
from storages.backends.sftpstorage import SFTPStorage
|
|
104
|
-
|
|
105
|
-
class PulpSFTPStorage(SFTPStorage):
|
|
106
|
-
"""Upstream class is missing the file_overwrite option."""
|
|
107
|
-
|
|
108
|
-
def get_available_name(self, name, max_length=None):
|
|
109
|
-
"""
|
|
110
|
-
Returns a filename for the file even if it already exists.
|
|
111
|
-
|
|
112
|
-
Content adressable storage must be saved with the expected filename.
|
|
113
|
-
|
|
114
|
-
Args:
|
|
115
|
-
name (string): Requested file name
|
|
116
|
-
max_length (int): Maximum length of the filename. Not used in this implementation.
|
|
117
|
-
|
|
118
|
-
Returns:
|
|
119
|
-
Name of the file.
|
|
120
|
-
"""
|
|
121
|
-
return name
|
|
122
|
-
|
|
123
|
-
except ImportError:
|
|
124
|
-
pass
|
|
125
|
-
|
|
126
|
-
|
|
127
102
|
class DomainStorage:
|
|
128
103
|
"""Storage class for FileFields to use that allows for uploading to a domain's storage."""
|
|
129
104
|
|
|
@@ -21,7 +21,6 @@ from pulpcore.app.util import get_prn
|
|
|
21
21
|
|
|
22
22
|
BACKEND_CHOICES = (
|
|
23
23
|
("pulpcore.app.models.storage.FileSystem", "Use local filesystem as storage"),
|
|
24
|
-
# ("pulpcore.app.models.storage.PulpSFTPStorage", "Use SFTP server as storage"),
|
|
25
24
|
("storages.backends.s3boto3.S3Boto3Storage", "Use Amazon S3 as storage [deprecated]"),
|
|
26
25
|
("storages.backends.s3.S3Storage", "Use Amazon S3 as storage"),
|
|
27
26
|
("storages.backends.azure_storage.AzureStorage", "Use Azure Blob as storage"),
|
|
@@ -107,36 +106,6 @@ class FileSystemSettingsSerializer(BaseSettingsClass):
|
|
|
107
106
|
directory_permissions_mode = serializers.IntegerField(allow_null=True, default=None)
|
|
108
107
|
|
|
109
108
|
|
|
110
|
-
class SFTPSettingsSerializer(BaseSettingsClass):
|
|
111
|
-
"""A Serializer for SFTP storage settings."""
|
|
112
|
-
|
|
113
|
-
STORAGE_CLASS = "pulpcore.app.models.storage.PulpSFTPStorage"
|
|
114
|
-
SETTING_MAPPING = {
|
|
115
|
-
"sftp_storage_host": "host",
|
|
116
|
-
"sftp_storage_params": "params",
|
|
117
|
-
"sftp_storage_interactive": "interactive",
|
|
118
|
-
"sftp_storage_file_mode": "file_mode",
|
|
119
|
-
"sftp_storage_dir_mode": "dir_mode",
|
|
120
|
-
"sftp_storage_uid": "uid",
|
|
121
|
-
"sftp_storage_gid": "gid",
|
|
122
|
-
"sftp_known_host_file": "known_host_file",
|
|
123
|
-
"sftp_storage_root": "root_path",
|
|
124
|
-
"media_url": "base_url",
|
|
125
|
-
"sftp_base_url": "base_url",
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
host = serializers.CharField(required=True)
|
|
129
|
-
root_path = serializers.CharField(required=True)
|
|
130
|
-
params = serializers.DictField(default={}, write_only=True)
|
|
131
|
-
file_mode = serializers.IntegerField(allow_null=True, default=None)
|
|
132
|
-
dir_mode = serializers.IntegerField(allow_null=True, default=None)
|
|
133
|
-
uid = serializers.CharField(allow_null=True, default=None)
|
|
134
|
-
gid = serializers.CharField(allow_null=True, default=None)
|
|
135
|
-
base_url = serializers.CharField(allow_null=True, default=None)
|
|
136
|
-
interactive = serializers.HiddenField(default=False)
|
|
137
|
-
known_host_file = serializers.HiddenField(default=None)
|
|
138
|
-
|
|
139
|
-
|
|
140
109
|
class TransferConfigSerializer(serializers.Serializer):
|
|
141
110
|
"""A Serializer for the boto3.S3 Transfer Config object."""
|
|
142
111
|
|
|
@@ -342,7 +311,6 @@ class StorageSettingsSerializer(serializers.Serializer):
|
|
|
342
311
|
|
|
343
312
|
STORAGE_MAPPING = {
|
|
344
313
|
"pulpcore.app.models.storage.FileSystem": FileSystemSettingsSerializer,
|
|
345
|
-
"pulpcore.app.models.storage.PulpSFTPStorage": SFTPSettingsSerializer,
|
|
346
314
|
"storages.backends.s3.S3Storage": AmazonS3SettingsSerializer,
|
|
347
315
|
"storages.backends.s3boto3.S3Boto3Storage": AmazonS3SettingsSerializer,
|
|
348
316
|
"storages.backends.azure_storage.AzureStorage": AzureSettingsSerializer,
|
|
@@ -509,19 +477,6 @@ class DomainSerializer(BackendSettingsValidator, ModelSerializer):
|
|
|
509
477
|
storage_class = data.get("storage_class") or self.instance.storage_class
|
|
510
478
|
storage_settings = data.get("storage_settings") or self.instance.storage_settings
|
|
511
479
|
self._validate_storage_backend(storage_class, storage_settings)
|
|
512
|
-
|
|
513
|
-
redirect = data.get("redirect_to_object_storage", True)
|
|
514
|
-
if self.instance and "redirect_to_object_storage" not in data:
|
|
515
|
-
redirect = self.instance.redirect_to_object_storage
|
|
516
|
-
|
|
517
|
-
if redirect and storage_class == "pulpcore.app.models.storage.PulpSFTPStorage":
|
|
518
|
-
raise serializers.ValidationError(
|
|
519
|
-
detail={
|
|
520
|
-
"redirect_to_object_storage": _(
|
|
521
|
-
"This field does not support being used with the SFTP backend."
|
|
522
|
-
)
|
|
523
|
-
}
|
|
524
|
-
)
|
|
525
480
|
return data
|
|
526
481
|
|
|
527
482
|
class Meta:
|
|
@@ -1442,8 +1442,11 @@ class Handler:
|
|
|
1442
1442
|
extra_data={"disable_retry_list": (DigestValidationError,)}
|
|
1443
1443
|
)
|
|
1444
1444
|
except DigestValidationError:
|
|
1445
|
-
|
|
1446
|
-
|
|
1445
|
+
# First-time pull-through RAs point at an unsaved ContentArtifact, so saving would
|
|
1446
|
+
# violate the foreign key.
|
|
1447
|
+
if not remote_artifact.content_artifact._state.adding:
|
|
1448
|
+
remote_artifact.failed_at = timezone.now()
|
|
1449
|
+
await remote_artifact.asave()
|
|
1447
1450
|
close_tcp_connection(request.transport._sock)
|
|
1448
1451
|
REMOTE_CONTENT_FETCH_FAILURE_COOLDOWN = settings.REMOTE_CONTENT_FETCH_FAILURE_COOLDOWN
|
|
1449
1452
|
raise RuntimeError(
|
|
@@ -195,7 +195,6 @@ def test_special_domain_creation(pulpcore_bindings, gen_object_with_cleanup, pul
|
|
|
195
195
|
# This test needs to account for which environment it is running in
|
|
196
196
|
storage_types = {
|
|
197
197
|
"pulpcore.app.models.storage.FileSystem",
|
|
198
|
-
# "pulpcore.app.models.storage.PulpSFTPStorage",
|
|
199
198
|
"storages.backends.s3boto3.S3Boto3Storage",
|
|
200
199
|
"storages.backends.s3.S3Storage",
|
|
201
200
|
"storages.backends.azure_storage.AzureStorage",
|
|
@@ -204,14 +203,6 @@ def test_special_domain_creation(pulpcore_bindings, gen_object_with_cleanup, pul
|
|
|
204
203
|
|
|
205
204
|
storage_settings = {
|
|
206
205
|
"pulpcore.app.models.storage.FileSystem": {"media_root": ""},
|
|
207
|
-
"pulpcore.app.models.storage.PulpSFTPStorage": {
|
|
208
|
-
"SFTP_STORAGE_HOST": "sftp-storage-host",
|
|
209
|
-
"SFTP_STORAGE_ROOT": "/storage/",
|
|
210
|
-
"SFTP_STORAGE_PARAMS": {
|
|
211
|
-
"username": "foo",
|
|
212
|
-
"key_filename": "/etc/pulp/certs/storage_id_ed25519",
|
|
213
|
-
},
|
|
214
|
-
},
|
|
215
206
|
"storages.backends.s3.S3Storage": {
|
|
216
207
|
"AWS_ACCESS_KEY_ID": "random",
|
|
217
208
|
"AWS_SECRET_ACCESS_KEY": "random",
|
|
@@ -247,8 +238,6 @@ def test_special_domain_creation(pulpcore_bindings, gen_object_with_cleanup, pul
|
|
|
247
238
|
"storage_class": backend,
|
|
248
239
|
"storage_settings": storage_settings[backend],
|
|
249
240
|
}
|
|
250
|
-
if backend == "pulpcore.app.models.storage.PulpSFTPStorage":
|
|
251
|
-
body["redirect_to_object_storage"] = False
|
|
252
241
|
try:
|
|
253
242
|
domain = gen_object_with_cleanup(pulpcore_bindings.DomainsApi, body)
|
|
254
243
|
except ApiException as e:
|
|
@@ -20,6 +20,7 @@ from pulpcore.content.handler import (
|
|
|
20
20
|
PathNotResolved,
|
|
21
21
|
_current_distribution,
|
|
22
22
|
)
|
|
23
|
+
from pulpcore.exceptions import DigestValidationError
|
|
23
24
|
from pulpcore.plugin.models import (
|
|
24
25
|
Artifact,
|
|
25
26
|
Content,
|
|
@@ -788,3 +789,78 @@ async def test_async_pull_through_add(ca1, monkeypatch, app_status):
|
|
|
788
789
|
await repo.adelete()
|
|
789
790
|
if task:
|
|
790
791
|
await task.adelete()
|
|
792
|
+
|
|
793
|
+
|
|
794
|
+
@pytest.fixture
|
|
795
|
+
def digest_failure_downloader(monkeypatch):
|
|
796
|
+
class FailingDownloader:
|
|
797
|
+
path = None
|
|
798
|
+
|
|
799
|
+
async def handle_data(self, data):
|
|
800
|
+
pass
|
|
801
|
+
|
|
802
|
+
async def finalize(self):
|
|
803
|
+
pass
|
|
804
|
+
|
|
805
|
+
async def run(self, extra_data=None):
|
|
806
|
+
raise DigestValidationError("actual", "expected", url="https://123/c123")
|
|
807
|
+
|
|
808
|
+
monkeypatch.setattr(Remote, "get_downloader", lambda self, **kwargs: FailingDownloader())
|
|
809
|
+
close_mock = Mock()
|
|
810
|
+
monkeypatch.setattr("pulpcore.content.handler.close_tcp_connection", close_mock)
|
|
811
|
+
return close_mock
|
|
812
|
+
|
|
813
|
+
|
|
814
|
+
def _failing_stream_args():
|
|
815
|
+
request = Mock(match_info={"path": "c123"}, http_range=Mock(start=None, stop=None))
|
|
816
|
+
response = web.StreamResponse()
|
|
817
|
+
response.write_eof = AsyncMock()
|
|
818
|
+
return request, response
|
|
819
|
+
|
|
820
|
+
|
|
821
|
+
def _assert_not_completed_cleanly(close_mock, request, response):
|
|
822
|
+
"""The connection is force-closed and the response is never finished for the client."""
|
|
823
|
+
close_mock.assert_called_once_with(request.transport._sock)
|
|
824
|
+
response.write_eof.assert_not_awaited()
|
|
825
|
+
|
|
826
|
+
|
|
827
|
+
@pytest.mark.asyncio
|
|
828
|
+
@pytest.mark.django_db
|
|
829
|
+
async def test_pull_through_digest_failure_new_content_artifact(digest_failure_downloader):
|
|
830
|
+
"""A failed digest on a first-time pull-through raises the checksum error, not IntegrityError."""
|
|
831
|
+
remote = await create_remote()
|
|
832
|
+
ca = ContentArtifact(relative_path="c123")
|
|
833
|
+
ra = RemoteArtifact(remote=remote, url="https://123/c123", content_artifact=ca, sha256="bad")
|
|
834
|
+
request, response = _failing_stream_args()
|
|
835
|
+
|
|
836
|
+
try:
|
|
837
|
+
with pytest.raises(RuntimeError, match="failed checksum validation"):
|
|
838
|
+
await Handler()._stream_remote_artifact(request, response, ra, save_artifact=True)
|
|
839
|
+
_assert_not_completed_cleanly(digest_failure_downloader, request, response)
|
|
840
|
+
assert ra.failed_at is None
|
|
841
|
+
assert not await RemoteArtifact.objects.filter(url="https://123/c123").aexists()
|
|
842
|
+
finally:
|
|
843
|
+
await remote.adelete()
|
|
844
|
+
|
|
845
|
+
|
|
846
|
+
@pytest.mark.asyncio
|
|
847
|
+
@pytest.mark.django_db
|
|
848
|
+
async def test_pull_through_digest_failure_existing_content_artifact(digest_failure_downloader):
|
|
849
|
+
"""A failed digest on an existing ContentArtifact still records failed_at."""
|
|
850
|
+
content = await create_content()
|
|
851
|
+
ca = await create_content_artifact(content)
|
|
852
|
+
remote = await create_remote()
|
|
853
|
+
ra = await RemoteArtifact.objects.acreate(
|
|
854
|
+
remote=remote, url="https://123/c123", content_artifact=ca, sha256="bad"
|
|
855
|
+
)
|
|
856
|
+
request, response = _failing_stream_args()
|
|
857
|
+
|
|
858
|
+
try:
|
|
859
|
+
with pytest.raises(RuntimeError, match="failed checksum validation"):
|
|
860
|
+
await Handler()._stream_remote_artifact(request, response, ra, save_artifact=True)
|
|
861
|
+
_assert_not_completed_cleanly(digest_failure_downloader, request, response)
|
|
862
|
+
await ra.arefresh_from_db()
|
|
863
|
+
assert ra.failed_at is not None
|
|
864
|
+
finally:
|
|
865
|
+
await content.adelete()
|
|
866
|
+
await remote.adelete()
|
|
@@ -614,3 +614,44 @@ class TestCacheInvalidationOnPublicationDelete:
|
|
|
614
614
|
assert cache_key(dist_repo.base_path) not in invalidated, (
|
|
615
615
|
"repo dist should NOT be invalidated (pub2 still latest)"
|
|
616
616
|
)
|
|
617
|
+
|
|
618
|
+
|
|
619
|
+
@pytest.mark.django_db
|
|
620
|
+
class TestCacheInvalidationOnRepositoryVersionCreate:
|
|
621
|
+
"""
|
|
622
|
+
While a new repository version is being created, the repository's distributions are still
|
|
623
|
+
served from the previous one, and a response computed then can be put into the cache.
|
|
624
|
+
Clearing the cache only when the version is started would leave that response there until
|
|
625
|
+
it expires, so the cache must be cleared once the new version is complete.
|
|
626
|
+
"""
|
|
627
|
+
|
|
628
|
+
def test_invalidates_once_new_version_is_complete(
|
|
629
|
+
self, settings, django_capture_on_commit_callbacks
|
|
630
|
+
):
|
|
631
|
+
"""Creating a repository version invalidates the cache after the version is complete."""
|
|
632
|
+
settings.CACHE_ENABLED = True
|
|
633
|
+
repo = FileRepository.objects.create(name=f"repo-{uuid.uuid4().hex[:8]}")
|
|
634
|
+
dist = dist_factory(repo=repo)
|
|
635
|
+
complete_at_invalidation = []
|
|
636
|
+
|
|
637
|
+
def record(*args, base_key=None, **kwargs):
|
|
638
|
+
if base_key is not None and cache_key(dist.base_path) in base_key:
|
|
639
|
+
complete_at_invalidation.append(repo.versions.latest("number").complete)
|
|
640
|
+
|
|
641
|
+
with mock.patch("pulpcore.app.models.repository.Cache") as mock_cache:
|
|
642
|
+
mock_cache.return_value.delete.side_effect = record
|
|
643
|
+
with django_capture_on_commit_callbacks(execute=True):
|
|
644
|
+
version = create_version(repo, add=["some-file.txt"])
|
|
645
|
+
assert version.complete
|
|
646
|
+
assert True in complete_at_invalidation
|
|
647
|
+
|
|
648
|
+
def test_ignores_version_without_changes(self, settings, django_capture_on_commit_callbacks):
|
|
649
|
+
"""A new version that changes nothing is discarded and leaves the cache alone."""
|
|
650
|
+
settings.CACHE_ENABLED = True
|
|
651
|
+
repo = FileRepository.objects.create(name=f"repo-{uuid.uuid4().hex[:8]}")
|
|
652
|
+
dist_factory(repo=repo)
|
|
653
|
+
with mock.patch("pulpcore.app.models.repository.Cache") as mock_cache:
|
|
654
|
+
with django_capture_on_commit_callbacks(execute=True):
|
|
655
|
+
with repo.new_version():
|
|
656
|
+
pass
|
|
657
|
+
mock_cache.return_value.delete.assert_not_called()
|
|
@@ -4,7 +4,6 @@ import pytest
|
|
|
4
4
|
from rest_framework import serializers
|
|
5
5
|
|
|
6
6
|
from pulpcore.app.serializers.domain import (
|
|
7
|
-
# SFTPSettingsSerializer,
|
|
8
7
|
AmazonS3SettingsSerializer,
|
|
9
8
|
AzureSettingsSerializer,
|
|
10
9
|
# GoogleSettingsSerializer,
|
|
@@ -244,17 +243,6 @@ def test_hidden_settings(storage_class, serializer_class, all_settings):
|
|
|
244
243
|
assert hidden_fields[field] == is_set, field
|
|
245
244
|
|
|
246
245
|
|
|
247
|
-
# class TestDomainSFTPSettingsSerializer(DomainSettingsBaseMixin, TestCase):
|
|
248
|
-
# storage_class = "pulpcore.app.models.storage.PulpSFTPStorage"
|
|
249
|
-
# serializer_class = SFTPSettingsSerializer
|
|
250
|
-
# required_settings = {"host": "http://testing", "root_path": "/storage_sftp/"}
|
|
251
|
-
#
|
|
252
|
-
# @classmethod
|
|
253
|
-
# def setUpClass(cls):
|
|
254
|
-
# super().setUpClass()
|
|
255
|
-
# cls.min_domain_settings["redirect_to_object_storage"] = False
|
|
256
|
-
|
|
257
|
-
|
|
258
246
|
# class TestDomainGoogleSettingsSerializer(DomainSettingsBaseMixin, TestCase):
|
|
259
247
|
# storage_class = "storages.backends.gcloud.GoogleCloudStorage"
|
|
260
248
|
# serializer_class = GoogleSettingsSerializer
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
import pytest
|
|
4
|
+
|
|
5
|
+
from pulpcore.app.models.content import AsciiArmoredDetachedSigningService
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@pytest.fixture
|
|
9
|
+
def signing_service(tmp_path):
|
|
10
|
+
"""A signing service whose script reports the fingerprint and env vars it was invoked with."""
|
|
11
|
+
script = tmp_path / "echo_env.sh"
|
|
12
|
+
script.write_text(
|
|
13
|
+
'#!/bin/sh\nprintf \'{"fingerprint": "%s", "extra": "%s"}\''
|
|
14
|
+
' "$PULP_SIGNING_KEY_FINGERPRINT" "$EXTRA"\n'
|
|
15
|
+
)
|
|
16
|
+
script.chmod(0o755)
|
|
17
|
+
return AsciiArmoredDetachedSigningService(
|
|
18
|
+
name="echo-env",
|
|
19
|
+
public_key="public-key",
|
|
20
|
+
pubkey_fingerprint="SERVICE_KEY",
|
|
21
|
+
script=str(script),
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def test_sign_defaults_to_service_key(signing_service):
|
|
26
|
+
assert signing_service.sign(os.devnull)["fingerprint"] == "SERVICE_KEY"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def test_sign_override_replaces_key_and_keeps_env_vars(signing_service):
|
|
30
|
+
return_value = signing_service.sign(
|
|
31
|
+
os.devnull, env_vars={"EXTRA": "kept"}, pubkey_fingerprint="OTHER_KEY"
|
|
32
|
+
)
|
|
33
|
+
assert return_value == {"fingerprint": "OTHER_KEY", "extra": "kept"}
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@pytest.mark.asyncio
|
|
37
|
+
async def test_asign_override_replaces_key(signing_service):
|
|
38
|
+
return_value = await signing_service.asign(os.devnull, pubkey_fingerprint="OTHER_KEY")
|
|
39
|
+
assert return_value["fingerprint"] == "OTHER_KEY"
|