pulpcore 3.86.0__tar.gz → 3.87.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.86.0 → pulpcore-3.87.0}/CHANGES.md +23 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/PKG-INFO +2 -2
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/app/__init__.py +1 -1
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/app/__init__.py +1 -1
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/apps.py +1 -1
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/management/commands/remove-plugin.py +2 -5
- pulpcore-3.87.0/pulpcore/app/migrations/0140_require_appstatus_zdu.py +15 -0
- pulpcore-3.87.0/pulpcore/app/migrations/0141_alter_appstatus_name.py +18 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/models/status.py +1 -24
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/serializers/status.py +18 -8
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/serializers/task.py +1 -29
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/tasks/analytics.py +3 -4
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/tasks/importer.py +2 -2
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/views/status.py +5 -6
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/viewsets/task.py +14 -5
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/openapi/__init__.py +1 -1
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tasking/worker.py +13 -14
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_tasking.py +4 -40
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore.egg-info/PKG-INFO +2 -2
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore.egg-info/SOURCES.txt +2 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore.egg-info/requires.txt +1 -1
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pyproject.toml +3 -3
- {pulpcore-3.86.0 → pulpcore-3.87.0}/CODE_OF_CONDUCT.md +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/COMMITMENT +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/CONTRIBUTING.md +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/COPYRIGHT +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/LICENSE +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/MANIFEST.in +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/README.md +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/ci_requirements.txt +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/functest_requirements.txt +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/manage.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/app/migrations/0001_initial.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/app/migrations/0002_alter_rhsmcertguard_contentguard_ptr_and_more.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/app/migrations/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/app/models.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/app/serializers.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/app/viewsets.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/pytest_plugin.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/rhsm/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/rhsm/rhsm_check_path.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/api/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/api/test_rhsm_certguard.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/api/test_x509_certguard.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/katello-default-ca.crt +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/katello-default-ca.key +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/trusted_but_expired.pem +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/uber.cert +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/untrusted_cert-key.pem +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/untrusted_cert.pem +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/1514454871848760713-key.pem +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/1514454871848760713.pem +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/159442575569388840-key.pem +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/159442575569388840.pem +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/4260035510644027985-key.pem +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/4260035510644027985.pem +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/5527980418107729172-key.pem +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/5527980418107729172.pem +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/certificates/ca.pem +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/genca.sh +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/keys/ca.pem +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/ca.pem +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/client.pem +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/server.pem +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/un_urlencoded_cert.txt +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/untrusted_client.pem +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/x509/genall.sh +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/x509/genca.sh +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/x509/genclient.sh +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/x509/gensrv.sh +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/x509/keys/ca.pem +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/x509/keys/client.pem +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/x509/keys/server.pem +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/conftest.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/functional/constants.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/unit/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/unit/certdata.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_certguard/tests/unit/test_rhsm_check_path.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/app/migrations/0001_initial_squashed_0016_add_domain.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/app/migrations/0017_alter_filealternatecontentsource_alternatecontentsource_ptr_and_more.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/app/migrations/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/app/modelresource.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/app/models.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/app/replica.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/app/serializers.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/app/tasks/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/app/tasks/publishing.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/app/tasks/synchronizing.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/app/viewsets.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/manifest.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/pytest_plugin.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/tests/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/tests/functional/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/tests/functional/api/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_acs.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_auto_publish.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_bad_sync.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_content_labels.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_crud_content_unit.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_crud_remotes.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_domains.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_download_policies.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_generic_list.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_labels.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_mime_types.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_publish.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_pulp_export.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_rbac.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_remote_settings.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_sync.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/tests/unit/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/tests/unit/test_safe_paths.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulp_file/tests/unit/test_serializers.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/access_policy.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/authentication.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/checks.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/entrypoint.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/files.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/global_access_conditions.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/importexport.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/loggers.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/manage.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/management/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/management/commands/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/management/commands/add-signing-service.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/management/commands/analyze-publication.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/management/commands/clean-up-progress-reports.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/management/commands/datarepair-2327.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/management/commands/dump-permissions.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/management/commands/dump-publications-to-fs.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/management/commands/handle-artifact-checksums.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/management/commands/migrationstat.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/management/commands/openapi.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/management/commands/optimizemigration.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/management/commands/rebasemigrations.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/management/commands/remove-signing-service.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/management/commands/repository-size.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/management/commands/reset-admin-password.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/management/commands/rotate-db-key.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0001_squashed_0090_char_to_text_field.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0091_systemid.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0092_alter_upload_options.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0093_add_info_field_repositoryversion.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0094_protect_repository_content.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0095_artifactdistribution.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0096_alter_task_logging_cid.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0097_remove_telemetry_task_schedule.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0098_pulp_labels.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0099_versions_field.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0100_upstreampulp.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0101_add_domain.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0102_add_domain_relations.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0103_alter_export_task.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0104_delete_label.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0105_abstract_uuid_gen.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0106_alter_artifactdistribution_distribution_ptr_and_more.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0107_distribution_hidden.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0108_task_versions.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0109_contentartifact_relative_path_index.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0110_apiappstatus.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0111_task_enc_args_task_enc_kwargs.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0112_alter_upstreampulp_options.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0113_headercontentguard.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0114_remove_task_args_remove_task_kwargs.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0115_compositecontentguard.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0116_alter_remoteartifact_md5_alter_remoteartifact_sha1_and_more.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0117_task_unblocked_at.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0118_task_core_task_unblock_2276a4_idx_and_more.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0119_grouprole_core_groupr_object__250e22_idx_and_more.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0120_get_url_removal.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0121_add_profile_artifacts_table.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0122_record_last_replication_timestamp.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0123_upstreampulp_q_select.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0124_task_deferred_task_immediate.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0125_openpgpdistribution_openpgpkeyring_openpgppublickey_and_more.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0126_remoteartifact_failed_at.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0127_remove_upstreampulp_pulp_label_select.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0128_domain_pulp_labels.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0129_content_pulp_labels.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0130_upstreampulp_policy.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0131_distribution_checkpoint_publication_checkpoint.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0132_alter_content_options.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0132_task_profile_options.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0133_repositoryversion_content_ids.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0134_task_insert_trigger.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0135_task_pulp_task_resources_index.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0136_delete_basedistribution.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0137_appstatus.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0138_vulnerabilityreport.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/0139_task_app_lock.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/migrations/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/mime_types.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/modelresource.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/models/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/models/access_policy.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/models/acs.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/models/analytics.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/models/base.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/models/content.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/models/domain.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/models/exporter.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/models/fields.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/models/generic.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/models/importer.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/models/openpgp.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/models/progress.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/models/publication.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/models/replica.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/models/repository.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/models/role.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/models/storage.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/models/task.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/models/upload.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/models/vulnerability_report.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/netutil.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/openpgp.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/protobuf/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/protobuf/analytics_pb2.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/pulp_hashlib.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/pulpcore_gunicorn_application.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/redis_connection.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/replica.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/response.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/role_util.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/serializers/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/serializers/access_policy.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/serializers/acs.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/serializers/base.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/serializers/content.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/serializers/domain.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/serializers/exporter.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/serializers/fields.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/serializers/importer.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/serializers/openpgp.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/serializers/orphans.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/serializers/progress.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/serializers/publication.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/serializers/purge.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/serializers/reclaim.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/serializers/repair.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/serializers/replica.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/serializers/repository.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/serializers/upload.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/serializers/user.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/serializers/vulnerability_report.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/settings.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/tasks/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/tasks/base.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/tasks/export.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/tasks/migrate.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/tasks/orphan.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/tasks/purge.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/tasks/reclaim_space.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/tasks/replica.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/tasks/repository.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/tasks/telemetry.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/tasks/test.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/tasks/upload.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/tasks/vulnerability_report.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/templates/rest_framework/api.html +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/templatetags/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/templatetags/pulp_urls.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/urls.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/util.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/views/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/views/importer.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/views/orphans.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/views/repair.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/viewsets/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/viewsets/access_policy.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/viewsets/acs.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/viewsets/base.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/viewsets/content.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/viewsets/custom_filters.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/viewsets/domain.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/viewsets/exporter.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/viewsets/importer.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/viewsets/openpgp.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/viewsets/orphans.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/viewsets/publication.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/viewsets/reclaim.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/viewsets/replica.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/viewsets/repository.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/viewsets/upload.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/viewsets/user.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/viewsets/vulnerability_report.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/app/wsgi.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/backends.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/cache/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/cache/cache.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/constants.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/content/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/content/authentication.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/content/entrypoint.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/content/handler.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/content/instrumentation.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/download/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/download/base.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/download/factory.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/download/file.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/download/http.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/exceptions/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/exceptions/base.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/exceptions/plugin.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/exceptions/validation.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/filters.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/metrics.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/middleware.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/migrations.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/openapi/hooks.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/access_policy.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/actions.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/apps.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/authentication/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/cache/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/constants.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/content.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/download/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/exceptions.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/files.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/importexport.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/migrations.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/modelresources.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/models/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/models/role.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/publication_utils.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/pulp_hashlib.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/replica.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/repo_version_utils.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/responses.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/serializers/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/serializers/content.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/stages/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/stages/api.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/stages/artifact_stages.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/stages/content_stages.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/stages/declarative_version.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/stages/models.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/storage.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/sync.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/tasking.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/util.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/viewsets/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/plugin/viewsets/content.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/pytest_plugin.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/responses.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tasking/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tasking/_util.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tasking/entrypoint.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tasking/kafka.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tasking/storage.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tasking/tasks.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_access_policy.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_api_docs.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_api_root_rewrite.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_artifact_distribution.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_auth.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_correlation_id.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_crd_artifacts.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_crud_domains.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_filter.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_login.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_openapi_schema.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_openpgp.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_replication.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_repos.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_role.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_root_endpoint.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_scoping.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_signing_service.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_status.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_task_purge.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_upload.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_users_groups.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_workers.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_checkpoint.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_content_access.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_content_cache.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_content_delivery.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_content_directory.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_content_path.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_content_promotion.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_contentguard.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_crud_repos.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_distributions.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_filesystemexport.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_labels.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_migrate.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_orphans.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_pagination.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_prn.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_proxy.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_pulpimport.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_reclaim_disk_space.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_repair.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_repo_versions.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_tasks.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_unlinking_repo.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/assets/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/content_with_coverage.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/functional/utils.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/performance/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/performance/test_performance.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/conftest.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/content/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/content/test_handler.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/content/test_heartbeat.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/download/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/download/test_downloader_base.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/download/test_downloader_factory.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/metrics/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/metrics/conftest.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/metrics/test_aiohttp_instrumentation.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/metrics/test_django_instrumentation.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/migration/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/models/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/models/test_base.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/models/test_content.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/models/test_remote.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/models/test_repository.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/models/test_task.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/roles/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/roles/test_roles.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/serializers/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/serializers/test_base.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/serializers/test_domain.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/serializers/test_fields.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/serializers/test_orphans_cleanup.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/serializers/test_pulpexport.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/serializers/test_repository.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/serializers/test_user.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/stages/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/stages/test_artifactdownloader.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/stages/test_stages.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/test_cache.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/test_chunked_file.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/test_content_guard.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/test_files.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/test_import_checks.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/test_pulp_urls.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/test_settings.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/test_util.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/test_viewsets.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/test_vulnerability_report.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/viewsets/__init__.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore/tests/unit/viewsets/test_viewset_base.py +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore.egg-info/dependency_links.txt +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore.egg-info/entry_points.txt +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/pulpcore.egg-info/top_level.txt +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/setup.cfg +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/test_requirements.txt +0 -0
- {pulpcore-3.86.0 → pulpcore-3.87.0}/unittest_requirements.txt +0 -0
|
@@ -8,6 +8,29 @@
|
|
|
8
8
|
|
|
9
9
|
[//]: # (towncrier release notes start)
|
|
10
10
|
|
|
11
|
+
## 3.87.0 (2025-08-29) {: #3.87.0 }
|
|
12
|
+
|
|
13
|
+
### REST API {: #3.87.0-rest-api }
|
|
14
|
+
|
|
15
|
+
#### Bugfixes {: #3.87.0-rest-api-bugfix }
|
|
16
|
+
|
|
17
|
+
- Fixed apps crashing in a loop on restart with the same name.
|
|
18
|
+
[#6880](https://github.com/pulp/pulpcore/issues/6880)
|
|
19
|
+
|
|
20
|
+
### Plugin API {: #3.87.0-plugin-api }
|
|
21
|
+
|
|
22
|
+
No significant changes.
|
|
23
|
+
|
|
24
|
+
### Pulp File {: #3.87.0-pulp-file }
|
|
25
|
+
|
|
26
|
+
No significant changes.
|
|
27
|
+
|
|
28
|
+
### Pulp Cert Guard {: #3.87.0-pulp-cert-guard }
|
|
29
|
+
|
|
30
|
+
No significant changes.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
11
34
|
## 3.86.0 (2025-08-21) {: #3.86.0 }
|
|
12
35
|
|
|
13
36
|
### REST API {: #3.86.0-rest-api }
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pulpcore
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.87.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
|
|
@@ -50,7 +50,7 @@ Requires-Dist: pulp-glue<0.36,>=0.28.0
|
|
|
50
50
|
Requires-Dist: pygtrie<=2.5.0,>=2.5
|
|
51
51
|
Requires-Dist: psycopg[binary]<3.3,>=3.1.8
|
|
52
52
|
Requires-Dist: pyparsing<3.3,>=3.1.0
|
|
53
|
-
Requires-Dist: python-gnupg
|
|
53
|
+
Requires-Dist: python-gnupg<0.6,>=0.5.0
|
|
54
54
|
Requires-Dist: PyYAML<6.1,>=5.1.1
|
|
55
55
|
Requires-Dist: redis<6.5,>=4.3.0
|
|
56
56
|
Requires-Dist: tablib<3.6,>=3.5.0
|
|
@@ -11,7 +11,7 @@ from django.contrib.contenttypes.models import ContentType
|
|
|
11
11
|
from django.core.management import BaseCommand, call_command, CommandError
|
|
12
12
|
|
|
13
13
|
from pulpcore.app.apps import pulp_plugin_configs
|
|
14
|
-
from pulpcore.app.models import AccessPolicy,
|
|
14
|
+
from pulpcore.app.models import AccessPolicy, AppStatus
|
|
15
15
|
from pulpcore.app.models.role import Role
|
|
16
16
|
from pulpcore.app.util import get_view_urlpattern
|
|
17
17
|
|
|
@@ -53,10 +53,7 @@ class Command(BaseCommand):
|
|
|
53
53
|
"Checking if Pulp services are running, it can take up to {}s...".format(waiting_time)
|
|
54
54
|
)
|
|
55
55
|
while is_pulp_running and (time.time() - check_started) < waiting_time:
|
|
56
|
-
is_pulp_running = (
|
|
57
|
-
ContentAppStatus.objects.online().exists()
|
|
58
|
-
or Worker.objects.online_workers().exists()
|
|
59
|
-
)
|
|
56
|
+
is_pulp_running = AppStatus.objects.online().exists()
|
|
60
57
|
time.sleep(2)
|
|
61
58
|
|
|
62
59
|
if is_pulp_running:
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Generated by Django 4.2.23 on 2025-08-12 15:20
|
|
2
|
+
|
|
3
|
+
from django.db import migrations
|
|
4
|
+
from pulpcore.migrations import RequireVersion
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Migration(migrations.Migration):
|
|
8
|
+
|
|
9
|
+
dependencies = [
|
|
10
|
+
('core', '0139_task_app_lock'),
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
operations = [
|
|
14
|
+
RequireVersion("core", "3.85"),
|
|
15
|
+
]
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Generated by Django 4.2.23 on 2025-08-27 10:56
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
|
|
8
|
+
dependencies = [
|
|
9
|
+
('core', '0140_require_appstatus_zdu'),
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
operations = [
|
|
13
|
+
migrations.AlterField(
|
|
14
|
+
model_name='appstatus',
|
|
15
|
+
name='name',
|
|
16
|
+
field=models.TextField(),
|
|
17
|
+
),
|
|
18
|
+
]
|
|
@@ -61,16 +61,7 @@ class _AppStatusManager(AppStatusManager):
|
|
|
61
61
|
if self._current_app_status is not None:
|
|
62
62
|
raise RuntimeError("There is already an app status in this process.")
|
|
63
63
|
|
|
64
|
-
if app_type == "api":
|
|
65
|
-
old_obj = ApiAppStatus.objects.create(**kwargs)
|
|
66
|
-
elif app_type == "worker":
|
|
67
|
-
from pulpcore.app.models import Worker
|
|
68
|
-
|
|
69
|
-
old_obj = Worker.objects.create(**kwargs)
|
|
70
|
-
else:
|
|
71
|
-
raise NotImplementedError(f"Invalid app_type: {app_type}")
|
|
72
64
|
obj = super().create(app_type=app_type, **kwargs)
|
|
73
|
-
obj._old_status = old_obj
|
|
74
65
|
self._current_app_status = obj
|
|
75
66
|
return obj
|
|
76
67
|
|
|
@@ -78,12 +69,7 @@ class _AppStatusManager(AppStatusManager):
|
|
|
78
69
|
if self._current_app_status is not None:
|
|
79
70
|
raise RuntimeError("There is already an app status in this process.")
|
|
80
71
|
|
|
81
|
-
if app_type == "content":
|
|
82
|
-
old_obj = await ContentAppStatus.objects.acreate(**kwargs)
|
|
83
|
-
else:
|
|
84
|
-
raise NotImplementedError(f"Invalid app_type: {app_type}")
|
|
85
72
|
obj = await super().acreate(app_type=app_type, **kwargs)
|
|
86
|
-
obj._old_status = old_obj
|
|
87
73
|
self._current_app_status = obj
|
|
88
74
|
return obj
|
|
89
75
|
|
|
@@ -125,7 +111,7 @@ class AppStatus(BaseModel):
|
|
|
125
111
|
objects = _AppStatusManager()
|
|
126
112
|
|
|
127
113
|
app_type = models.CharField(max_length=10, choices=APP_TYPES)
|
|
128
|
-
name = models.TextField(
|
|
114
|
+
name = models.TextField()
|
|
129
115
|
versions = HStoreField(default=dict)
|
|
130
116
|
ttl = models.DurationField(null=False)
|
|
131
117
|
last_heartbeat = models.DateTimeField(auto_now=True)
|
|
@@ -133,13 +119,6 @@ class AppStatus(BaseModel):
|
|
|
133
119
|
def __init__(self, *args, **kwargs):
|
|
134
120
|
super().__init__(*args, **kwargs)
|
|
135
121
|
self.ttl = timedelta(seconds=self._APP_TTL[self.app_type])
|
|
136
|
-
self._old_status = None
|
|
137
|
-
|
|
138
|
-
def delete(self, *args, **kwargs):
|
|
139
|
-
# adelete will call into this, so we should not replicate that one here.
|
|
140
|
-
if self._old_status is not None:
|
|
141
|
-
self._old_status.delete(*args, **kwargs)
|
|
142
|
-
super().delete(*args, **kwargs)
|
|
143
122
|
|
|
144
123
|
@property
|
|
145
124
|
def online(self) -> bool:
|
|
@@ -171,7 +150,6 @@ class AppStatus(BaseModel):
|
|
|
171
150
|
ValueError: When the model instance has never been saved before. This method can
|
|
172
151
|
only update an existing database record.
|
|
173
152
|
"""
|
|
174
|
-
self._old_status.save_heartbeat()
|
|
175
153
|
self.save(update_fields=["last_heartbeat"])
|
|
176
154
|
|
|
177
155
|
async def asave_heartbeat(self):
|
|
@@ -184,7 +162,6 @@ class AppStatus(BaseModel):
|
|
|
184
162
|
ValueError: When the model instance has never been saved before. This method can
|
|
185
163
|
only update an existing database record.
|
|
186
164
|
"""
|
|
187
|
-
await self._old_status.asave_heartbeat()
|
|
188
165
|
await self.asave(update_fields=["last_heartbeat"])
|
|
189
166
|
|
|
190
167
|
@property
|
|
@@ -2,11 +2,21 @@ from gettext import gettext as _
|
|
|
2
2
|
|
|
3
3
|
from rest_framework import serializers
|
|
4
4
|
|
|
5
|
-
from pulpcore.app.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
)
|
|
5
|
+
from pulpcore.app.models import AppStatus
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class AppStatusSerializer(serializers.ModelSerializer):
|
|
9
|
+
name = serializers.CharField(help_text=_("The name of the worker."), read_only=True)
|
|
10
|
+
last_heartbeat = serializers.DateTimeField(
|
|
11
|
+
help_text=_("Timestamp of the last time the worker talked to the service."), read_only=True
|
|
12
|
+
)
|
|
13
|
+
versions = serializers.HStoreField(
|
|
14
|
+
help_text=_("Versions of the components installed."), read_only=True
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
class Meta:
|
|
18
|
+
model = AppStatus
|
|
19
|
+
fields = ("name", "last_heartbeat", "versions")
|
|
10
20
|
|
|
11
21
|
|
|
12
22
|
class VersionSerializer(serializers.Serializer):
|
|
@@ -88,7 +98,7 @@ class StatusSerializer(serializers.Serializer):
|
|
|
88
98
|
|
|
89
99
|
versions = VersionSerializer(help_text=_("Version information of Pulp components"), many=True)
|
|
90
100
|
|
|
91
|
-
online_workers =
|
|
101
|
+
online_workers = AppStatusSerializer(
|
|
92
102
|
help_text=_(
|
|
93
103
|
"List of online workers known to the application. An online worker is actively "
|
|
94
104
|
"heartbeating and can respond to new work."
|
|
@@ -96,7 +106,7 @@ class StatusSerializer(serializers.Serializer):
|
|
|
96
106
|
many=True,
|
|
97
107
|
)
|
|
98
108
|
|
|
99
|
-
online_api_apps =
|
|
109
|
+
online_api_apps = AppStatusSerializer(
|
|
100
110
|
help_text=_(
|
|
101
111
|
"List of online api apps known to the application. An online api app "
|
|
102
112
|
"is actively heartbeating and can serve the rest api to clients."
|
|
@@ -104,7 +114,7 @@ class StatusSerializer(serializers.Serializer):
|
|
|
104
114
|
many=True,
|
|
105
115
|
)
|
|
106
116
|
|
|
107
|
-
online_content_apps =
|
|
117
|
+
online_content_apps = AppStatusSerializer(
|
|
108
118
|
help_text=_(
|
|
109
119
|
"List of online content apps known to the application. An online content app "
|
|
110
120
|
"is actively heartbeating and can serve data to clients."
|
|
@@ -198,34 +198,6 @@ class TaskCancelSerializer(serializers.Serializer):
|
|
|
198
198
|
fields = ("state",)
|
|
199
199
|
|
|
200
200
|
|
|
201
|
-
class ApiAppStatusSerializer(ModelSerializer):
|
|
202
|
-
name = serializers.CharField(help_text=_("The name of the worker."), read_only=True)
|
|
203
|
-
last_heartbeat = serializers.DateTimeField(
|
|
204
|
-
help_text=_("Timestamp of the last time the worker talked to the service."), read_only=True
|
|
205
|
-
)
|
|
206
|
-
versions = serializers.HStoreField(
|
|
207
|
-
help_text=_("Versions of the components installed."), read_only=True
|
|
208
|
-
)
|
|
209
|
-
|
|
210
|
-
class Meta:
|
|
211
|
-
model = models.ApiAppStatus
|
|
212
|
-
fields = ("name", "last_heartbeat", "versions")
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
class ContentAppStatusSerializer(ModelSerializer):
|
|
216
|
-
name = serializers.CharField(help_text=_("The name of the worker."), read_only=True)
|
|
217
|
-
last_heartbeat = serializers.DateTimeField(
|
|
218
|
-
help_text=_("Timestamp of the last time the worker talked to the service."), read_only=True
|
|
219
|
-
)
|
|
220
|
-
versions = serializers.HStoreField(
|
|
221
|
-
help_text=_("Versions of the components installed."), read_only=True
|
|
222
|
-
)
|
|
223
|
-
|
|
224
|
-
class Meta:
|
|
225
|
-
model = models.ContentAppStatus
|
|
226
|
-
fields = ("name", "last_heartbeat", "versions")
|
|
227
|
-
|
|
228
|
-
|
|
229
201
|
class WorkerSerializer(ModelSerializer):
|
|
230
202
|
pulp_href = IdentityField(view_name="workers-detail")
|
|
231
203
|
|
|
@@ -246,7 +218,7 @@ class WorkerSerializer(ModelSerializer):
|
|
|
246
218
|
)
|
|
247
219
|
|
|
248
220
|
class Meta:
|
|
249
|
-
model = models.
|
|
221
|
+
model = models.AppStatus
|
|
250
222
|
fields = ModelSerializer.Meta.fields + (
|
|
251
223
|
"name",
|
|
252
224
|
"last_heartbeat",
|
|
@@ -19,8 +19,7 @@ from google.protobuf.json_format import MessageToJson
|
|
|
19
19
|
from pulpcore.app.apps import pulp_plugin_configs
|
|
20
20
|
from pulpcore.app.models import SystemID, Group, Domain, AccessPolicy
|
|
21
21
|
from pulpcore.app.models.role import Role
|
|
22
|
-
from pulpcore.app.models.status import
|
|
23
|
-
from pulpcore.app.models.task import Worker
|
|
22
|
+
from pulpcore.app.models.status import AppStatus
|
|
24
23
|
from pulpcore.app.protobuf.analytics_pb2 import Analytics
|
|
25
24
|
|
|
26
25
|
|
|
@@ -79,13 +78,13 @@ async def _versions_data(analytics):
|
|
|
79
78
|
|
|
80
79
|
|
|
81
80
|
async def _online_content_apps_data(analytics):
|
|
82
|
-
online_content_apps_qs =
|
|
81
|
+
online_content_apps_qs = AppStatus.objects.online().filter(app_type="content")
|
|
83
82
|
analytics.online_content_apps.processes = await online_content_apps_qs.acount()
|
|
84
83
|
analytics.online_content_apps.hosts = await _num_hosts(online_content_apps_qs)
|
|
85
84
|
|
|
86
85
|
|
|
87
86
|
async def _online_workers_data(analytics):
|
|
88
|
-
online_workers_qs =
|
|
87
|
+
online_workers_qs = AppStatus.objects.online().filter(app_type="worker")
|
|
89
88
|
analytics.online_workers.processes = await online_workers_qs.acount()
|
|
90
89
|
analytics.online_workers.hosts = await _num_hosts(online_workers_qs)
|
|
91
90
|
|
|
@@ -18,6 +18,7 @@ from tablib import Dataset
|
|
|
18
18
|
from pulpcore.exceptions.plugin import MissingPlugin
|
|
19
19
|
from pulpcore.app.apps import get_plugin_config
|
|
20
20
|
from pulpcore.app.models import (
|
|
21
|
+
AppStatus,
|
|
21
22
|
Artifact,
|
|
22
23
|
Content,
|
|
23
24
|
CreatedResource,
|
|
@@ -28,7 +29,6 @@ from pulpcore.app.models import (
|
|
|
28
29
|
Repository,
|
|
29
30
|
Task,
|
|
30
31
|
TaskGroup,
|
|
31
|
-
Worker,
|
|
32
32
|
)
|
|
33
33
|
from pulpcore.app.modelresource import (
|
|
34
34
|
ArtifactResource,
|
|
@@ -508,7 +508,7 @@ def pulp_import(importer_pk, path, toc, create_repositories):
|
|
|
508
508
|
# By default (setting is not-set), import will continue to use 100% of the available
|
|
509
509
|
# workers.
|
|
510
510
|
import_workers_percent = int(settings.get("IMPORT_WORKERS_PERCENT", 100))
|
|
511
|
-
total_workers =
|
|
511
|
+
total_workers = AppStatus.objects.online().filter(app_type="worker").count()
|
|
512
512
|
import_workers = max(1, int(total_workers * (import_workers_percent / 100.0)))
|
|
513
513
|
|
|
514
514
|
with open(os.path.join(temp_dir, REPO_FILE), "r") as repo_data_file:
|
|
@@ -11,8 +11,7 @@ from collections import namedtuple
|
|
|
11
11
|
|
|
12
12
|
from pulpcore.app.apps import pulp_plugin_configs
|
|
13
13
|
from pulpcore.app.models.content import Artifact
|
|
14
|
-
from pulpcore.app.models.status import
|
|
15
|
-
from pulpcore.app.models.task import Worker
|
|
14
|
+
from pulpcore.app.models.status import AppStatus
|
|
16
15
|
from pulpcore.app.serializers.status import StatusSerializer
|
|
17
16
|
from pulpcore.app.redis_connection import get_redis_connection
|
|
18
17
|
from pulpcore.app.util import get_domain
|
|
@@ -79,9 +78,9 @@ class StatusView(APIView):
|
|
|
79
78
|
|
|
80
79
|
db_status = {"connected": self._get_db_conn_status()}
|
|
81
80
|
|
|
82
|
-
online_workers =
|
|
83
|
-
online_api_apps =
|
|
84
|
-
online_content_apps =
|
|
81
|
+
online_workers = AppStatus.objects.online().filter(app_type="worker")
|
|
82
|
+
online_api_apps = AppStatus.objects.online().filter(app_type="api")
|
|
83
|
+
online_content_apps = AppStatus.objects.online().filter(app_type="content")
|
|
85
84
|
|
|
86
85
|
content_settings = {
|
|
87
86
|
"content_origin": settings.CONTENT_ORIGIN,
|
|
@@ -113,7 +112,7 @@ class StatusView(APIView):
|
|
|
113
112
|
bool: True if there's a db connection. False otherwise.
|
|
114
113
|
"""
|
|
115
114
|
try:
|
|
116
|
-
|
|
115
|
+
AppStatus.objects.count()
|
|
117
116
|
except Exception:
|
|
118
117
|
_logger.exception(_("Cannot connect to database during status check."))
|
|
119
118
|
return False
|
|
@@ -12,11 +12,11 @@ from rest_framework.serializers import DictField, URLField, ValidationError
|
|
|
12
12
|
|
|
13
13
|
from pulpcore.filters import BaseFilterSet
|
|
14
14
|
from pulpcore.app.models import (
|
|
15
|
+
AppStatus,
|
|
15
16
|
ProfileArtifact,
|
|
16
17
|
Task,
|
|
17
18
|
TaskGroup,
|
|
18
19
|
TaskSchedule,
|
|
19
|
-
Worker,
|
|
20
20
|
CreatedResource,
|
|
21
21
|
RepositoryVersion,
|
|
22
22
|
)
|
|
@@ -48,6 +48,7 @@ from pulpcore.app.role_util import get_objects_for_user
|
|
|
48
48
|
|
|
49
49
|
class TaskFilter(BaseFilterSet):
|
|
50
50
|
created_resources = CreatedResourcesFilter()
|
|
51
|
+
worker = filters.CharFilter(method="worker_filter")
|
|
51
52
|
# Non model field filters
|
|
52
53
|
reserved_resources = ReservedResourcesFilter(exclusive=True, shared=True)
|
|
53
54
|
reserved_resources__in = ReservedResourcesInFilter(exclusive=True, shared=True)
|
|
@@ -56,6 +57,13 @@ class TaskFilter(BaseFilterSet):
|
|
|
56
57
|
shared_resources = ReservedResourcesFilter(exclusive=False, shared=True)
|
|
57
58
|
shared_resources__in = ReservedResourcesInFilter(exclusive=False, shared=True)
|
|
58
59
|
|
|
60
|
+
def worker_filter(self, queryset, name, value):
|
|
61
|
+
# The worker field on tasks is no longer used.
|
|
62
|
+
if value is None:
|
|
63
|
+
return queryset
|
|
64
|
+
else:
|
|
65
|
+
return queryset.none()
|
|
66
|
+
|
|
59
67
|
class Meta:
|
|
60
68
|
model = Task
|
|
61
69
|
fields = {
|
|
@@ -354,14 +362,14 @@ class WorkerFilter(BaseFilterSet):
|
|
|
354
362
|
missing = filters.BooleanFilter(method="filter_missing")
|
|
355
363
|
|
|
356
364
|
class Meta:
|
|
357
|
-
model =
|
|
365
|
+
model = AppStatus
|
|
358
366
|
fields = {
|
|
359
367
|
"name": NAME_FILTER_OPTIONS,
|
|
360
368
|
"last_heartbeat": DATETIME_FILTER_OPTIONS,
|
|
361
369
|
}
|
|
362
370
|
|
|
363
371
|
def filter_online(self, queryset, name, value):
|
|
364
|
-
online_workers =
|
|
372
|
+
online_workers = AppStatus.objects.online()
|
|
365
373
|
|
|
366
374
|
if value:
|
|
367
375
|
return queryset.filter(pk__in=online_workers)
|
|
@@ -369,7 +377,7 @@ class WorkerFilter(BaseFilterSet):
|
|
|
369
377
|
return queryset.exclude(pk__in=online_workers)
|
|
370
378
|
|
|
371
379
|
def filter_missing(self, queryset, name, value):
|
|
372
|
-
missing_workers =
|
|
380
|
+
missing_workers = AppStatus.objects.missing()
|
|
373
381
|
|
|
374
382
|
if value:
|
|
375
383
|
return queryset.filter(pk__in=missing_workers)
|
|
@@ -378,7 +386,8 @@ class WorkerFilter(BaseFilterSet):
|
|
|
378
386
|
|
|
379
387
|
|
|
380
388
|
class WorkerViewSet(NamedModelViewSet, mixins.RetrieveModelMixin, mixins.ListModelMixin):
|
|
381
|
-
queryset =
|
|
389
|
+
queryset = AppStatus.objects.filter(app_type="worker")
|
|
390
|
+
pulp_model_alias = "Worker"
|
|
382
391
|
serializer_class = WorkerSerializer
|
|
383
392
|
endpoint_name = "workers"
|
|
384
393
|
http_method_names = ["get", "options"]
|
|
@@ -260,7 +260,7 @@ class PulpSchemaGenerator(SchemaGenerator):
|
|
|
260
260
|
prefix (str): Optional prefix to add to the slug
|
|
261
261
|
pulp_model_alias (str): Optional model name to use instead of model.__name__
|
|
262
262
|
Returns:
|
|
263
|
-
str:
|
|
263
|
+
str: '{model_name_snake_case}_href'
|
|
264
264
|
"""
|
|
265
265
|
app_label = model._meta.app_label
|
|
266
266
|
model_name = pulp_model_alias or model.__name__
|
|
@@ -77,7 +77,6 @@ class PulpcoreWorker:
|
|
|
77
77
|
self.app_status = AppStatus.objects.create(
|
|
78
78
|
name=self.name, app_type="worker", versions=self.versions
|
|
79
79
|
)
|
|
80
|
-
self.worker = self.app_status._old_status
|
|
81
80
|
except IntegrityError:
|
|
82
81
|
_logger.error(f"A worker with name {self.name} already exists in the database.")
|
|
83
82
|
exit(1)
|
|
@@ -184,15 +183,17 @@ class PulpcoreWorker:
|
|
|
184
183
|
for app_worker in qs:
|
|
185
184
|
_logger.info(_("Clean missing %s worker %s."), app_worker.app_type, app_worker.name)
|
|
186
185
|
qs.delete()
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
186
|
+
with contextlib.suppress(DatabaseError):
|
|
187
|
+
# By now a migration on a newer release may have deleted these tables already.
|
|
188
|
+
for cls, cls_name in (
|
|
189
|
+
(Worker, "pulp"),
|
|
190
|
+
(ApiAppStatus, "api"),
|
|
191
|
+
(ContentAppStatus, "content"),
|
|
192
|
+
):
|
|
193
|
+
qs = cls.objects.missing(age=timedelta(days=7))
|
|
194
|
+
for app_worker in qs:
|
|
195
|
+
_logger.info(_("Clean missing %s worker %s."), cls_name, app_worker.name)
|
|
196
|
+
qs.delete()
|
|
196
197
|
|
|
197
198
|
def beat(self):
|
|
198
199
|
if self.app_status.last_heartbeat < timezone.now() - self.heartbeat_period:
|
|
@@ -385,13 +386,13 @@ class PulpcoreWorker:
|
|
|
385
386
|
# Check if someone else changed the task before we got the lock.
|
|
386
387
|
task.refresh_from_db()
|
|
387
388
|
|
|
388
|
-
if task.state == TASK_STATES.CANCELING
|
|
389
|
+
if task.state == TASK_STATES.CANCELING:
|
|
389
390
|
# No worker picked this task up before being canceled.
|
|
390
391
|
if self.cancel_abandoned_task(task, TASK_STATES.CANCELED):
|
|
391
392
|
# Continue looking for the next task without considering this
|
|
392
393
|
# tasks resources, as we just released them.
|
|
393
394
|
continue
|
|
394
|
-
if task.state
|
|
395
|
+
if task.state == TASK_STATES.RUNNING:
|
|
395
396
|
# A running task without a lock must be abandoned.
|
|
396
397
|
if self.cancel_abandoned_task(
|
|
397
398
|
task, TASK_STATES.FAILED, "Worker has gone missing."
|
|
@@ -445,8 +446,6 @@ class PulpcoreWorker:
|
|
|
445
446
|
|
|
446
447
|
self.cancel_task = False
|
|
447
448
|
self.task = task
|
|
448
|
-
task.worker = self.worker
|
|
449
|
-
task.save(update_fields=["worker"])
|
|
450
449
|
cancel_state = None
|
|
451
450
|
cancel_reason = None
|
|
452
451
|
domain = task.pulp_domain
|
|
@@ -230,25 +230,6 @@ def test_retrieve_task_with_minimal_fields(task, bindings_cfg):
|
|
|
230
230
|
assert unexpected_fields.isdisjoint(returned_fields)
|
|
231
231
|
|
|
232
232
|
|
|
233
|
-
@pytest.mark.parallel
|
|
234
|
-
def test_retrieve_task_using_invalid_worker(pulpcore_bindings):
|
|
235
|
-
"""Expects to raise an exception when using invalid worker value as filter."""
|
|
236
|
-
|
|
237
|
-
with pytest.raises(ApiException) as ctx:
|
|
238
|
-
pulpcore_bindings.TasksApi.list(worker=str(uuid4()))
|
|
239
|
-
|
|
240
|
-
assert ctx.value.status == 400
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
@pytest.mark.parallel
|
|
244
|
-
def test_retrieve_task_using_valid_worker(task, pulpcore_bindings):
|
|
245
|
-
"""Expects to retrieve a task using a valid worker URI as filter."""
|
|
246
|
-
|
|
247
|
-
response = pulpcore_bindings.TasksApi.list(worker=task.worker)
|
|
248
|
-
|
|
249
|
-
assert response.results and response.count
|
|
250
|
-
|
|
251
|
-
|
|
252
233
|
@pytest.mark.parallel
|
|
253
234
|
def test_retrieve_task_using_valid_date(task, pulpcore_bindings):
|
|
254
235
|
"""Expects to retrieve a task using a valid date."""
|
|
@@ -278,22 +259,6 @@ def test_search_task_using_an_invalid_name(pulpcore_bindings):
|
|
|
278
259
|
assert not search_results.results and not search_results.count
|
|
279
260
|
|
|
280
261
|
|
|
281
|
-
@pytest.mark.parallel
|
|
282
|
-
def test_filter_tasks_using_worker__in_filter(pulpcore_bindings, dispatch_task, monitor_task):
|
|
283
|
-
task1_href = dispatch_task("pulpcore.app.tasks.test.sleep", args=(0,))
|
|
284
|
-
task2_href = dispatch_task("pulpcore.app.tasks.test.sleep", args=(0,))
|
|
285
|
-
|
|
286
|
-
task1 = monitor_task(task1_href)
|
|
287
|
-
task2 = monitor_task(task2_href)
|
|
288
|
-
|
|
289
|
-
search_results = pulpcore_bindings.TasksApi.list(worker__in=(task1.worker, task2.worker))
|
|
290
|
-
|
|
291
|
-
tasks_hrefs = [task.pulp_href for task in search_results.results]
|
|
292
|
-
|
|
293
|
-
assert task1_href in tasks_hrefs
|
|
294
|
-
assert task2_href in tasks_hrefs
|
|
295
|
-
|
|
296
|
-
|
|
297
262
|
@pytest.mark.parallel
|
|
298
263
|
def test_filter_tasks_using_pulp_created_filter(pulpcore_bindings, dispatch_task):
|
|
299
264
|
|
|
@@ -487,7 +452,6 @@ class TestImmediateTaskWithNoResource:
|
|
|
487
452
|
)
|
|
488
453
|
task = pulpcore_bindings.TasksApi.read(task_href)
|
|
489
454
|
assert task.state == "completed"
|
|
490
|
-
assert task.worker is None
|
|
491
455
|
|
|
492
456
|
@pytest.mark.parallel
|
|
493
457
|
def test_executes_on_api_worker_when_no_async(
|
|
@@ -519,7 +483,7 @@ class TestImmediateTaskWithNoResource:
|
|
|
519
483
|
"pulpcore.app.tasks.test.asleep", args=(GT_TIMEOUT,), immediate=True
|
|
520
484
|
)
|
|
521
485
|
task = pulpcore_bindings.TasksApi.read(task_href)
|
|
522
|
-
assert task.
|
|
486
|
+
assert task.state == "failed"
|
|
523
487
|
assert "task timed out after" in task.error["description"]
|
|
524
488
|
|
|
525
489
|
|
|
@@ -555,7 +519,7 @@ class TestImmediateTaskWithBlockedResource:
|
|
|
555
519
|
"""
|
|
556
520
|
GIVEN an async task requiring busy resources
|
|
557
521
|
WHEN dispatching a task as immediate
|
|
558
|
-
THEN the task
|
|
522
|
+
THEN the task returns as waiting first
|
|
559
523
|
"""
|
|
560
524
|
COMMON_RESOURCE = str(uuid4())
|
|
561
525
|
with resource_blocker(exclusive_resources=[COMMON_RESOURCE]):
|
|
@@ -565,9 +529,10 @@ class TestImmediateTaskWithBlockedResource:
|
|
|
565
529
|
immediate=True,
|
|
566
530
|
exclusive_resources=[COMMON_RESOURCE],
|
|
567
531
|
)
|
|
532
|
+
task = pulpcore_bindings.TasksApi.read(task_href)
|
|
533
|
+
assert task.state == "waiting"
|
|
568
534
|
task = monitor_task(task_href)
|
|
569
535
|
assert task.state == "completed"
|
|
570
|
-
assert task.worker is not None
|
|
571
536
|
|
|
572
537
|
@pytest.mark.parallel
|
|
573
538
|
def test_throws_when_non_deferrable(
|
|
@@ -589,7 +554,6 @@ class TestImmediateTaskWithBlockedResource:
|
|
|
589
554
|
)
|
|
590
555
|
task = pulpcore_bindings.TasksApi.read(task_href)
|
|
591
556
|
assert task.state == "canceled"
|
|
592
|
-
assert task.worker is None
|
|
593
557
|
assert "Resources temporarily unavailable." in task.error["reason"]
|
|
594
558
|
|
|
595
559
|
@pytest.mark.parallel
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pulpcore
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.87.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
|
|
@@ -50,7 +50,7 @@ Requires-Dist: pulp-glue<0.36,>=0.28.0
|
|
|
50
50
|
Requires-Dist: pygtrie<=2.5.0,>=2.5
|
|
51
51
|
Requires-Dist: psycopg[binary]<3.3,>=3.1.8
|
|
52
52
|
Requires-Dist: pyparsing<3.3,>=3.1.0
|
|
53
|
-
Requires-Dist: python-gnupg
|
|
53
|
+
Requires-Dist: python-gnupg<0.6,>=0.5.0
|
|
54
54
|
Requires-Dist: PyYAML<6.1,>=5.1.1
|
|
55
55
|
Requires-Dist: redis<6.5,>=4.3.0
|
|
56
56
|
Requires-Dist: tablib<3.6,>=3.5.0
|
|
@@ -208,6 +208,8 @@ pulpcore/app/migrations/0136_delete_basedistribution.py
|
|
|
208
208
|
pulpcore/app/migrations/0137_appstatus.py
|
|
209
209
|
pulpcore/app/migrations/0138_vulnerabilityreport.py
|
|
210
210
|
pulpcore/app/migrations/0139_task_app_lock.py
|
|
211
|
+
pulpcore/app/migrations/0140_require_appstatus_zdu.py
|
|
212
|
+
pulpcore/app/migrations/0141_alter_appstatus_name.py
|
|
211
213
|
pulpcore/app/migrations/__init__.py
|
|
212
214
|
pulpcore/app/models/__init__.py
|
|
213
215
|
pulpcore/app/models/access_policy.py
|