pulpcore 3.85.1__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.85.1 → pulpcore-3.87.0}/CHANGES.md +61 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/PKG-INFO +3 -3
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/app/__init__.py +1 -1
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/app/__init__.py +1 -1
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/apps.py +1 -1
- pulpcore-3.87.0/pulpcore/app/management/commands/optimizemigration.py +84 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/management/commands/remove-plugin.py +2 -5
- pulpcore-3.87.0/pulpcore/app/migrations/0139_task_app_lock.py +19 -0
- 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.85.1 → pulpcore-3.87.0}/pulpcore/app/models/status.py +20 -25
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/models/task.py +6 -1
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/serializers/status.py +18 -8
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/serializers/task.py +1 -29
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/settings.py +12 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/tasks/analytics.py +3 -4
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/tasks/importer.py +2 -2
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/views/status.py +5 -6
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/viewsets/task.py +14 -5
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/middleware.py +37 -10
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/openapi/__init__.py +1 -1
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/repo_version_utils.py +8 -2
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/pytest_plugin.py +6 -4
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tasking/tasks.py +16 -15
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tasking/worker.py +59 -41
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_tasking.py +14 -51
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_workers.py +1 -2
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/content/test_heartbeat.py +2 -1
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/models/test_repository.py +84 -1
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore.egg-info/PKG-INFO +3 -3
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore.egg-info/SOURCES.txt +4 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore.egg-info/requires.txt +2 -2
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pyproject.toml +4 -4
- {pulpcore-3.85.1 → pulpcore-3.87.0}/CODE_OF_CONDUCT.md +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/COMMITMENT +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/CONTRIBUTING.md +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/COPYRIGHT +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/LICENSE +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/MANIFEST.in +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/README.md +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/ci_requirements.txt +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/functest_requirements.txt +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/manage.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/app/migrations/0001_initial.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/app/migrations/0002_alter_rhsmcertguard_contentguard_ptr_and_more.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/app/migrations/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/app/models.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/app/serializers.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/app/viewsets.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/pytest_plugin.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/rhsm/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/rhsm/rhsm_check_path.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/api/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/api/test_rhsm_certguard.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/api/test_x509_certguard.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/katello-default-ca.crt +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/katello-default-ca.key +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/trusted_but_expired.pem +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/uber.cert +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/untrusted_cert-key.pem +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/untrusted_cert.pem +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/1514454871848760713-key.pem +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/1514454871848760713.pem +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/159442575569388840-key.pem +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/159442575569388840.pem +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/4260035510644027985-key.pem +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/4260035510644027985.pem +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/5527980418107729172-key.pem +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/5527980418107729172.pem +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/certificates/ca.pem +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/genca.sh +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/keys/ca.pem +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/ca.pem +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/client.pem +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/server.pem +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/un_urlencoded_cert.txt +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/untrusted_client.pem +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/x509/genall.sh +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/x509/genca.sh +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/x509/genclient.sh +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/x509/gensrv.sh +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/x509/keys/ca.pem +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/x509/keys/client.pem +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/artifacts/x509/keys/server.pem +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/conftest.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/functional/constants.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/unit/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/unit/certdata.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_certguard/tests/unit/test_rhsm_check_path.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/app/migrations/0001_initial_squashed_0016_add_domain.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/app/migrations/0017_alter_filealternatecontentsource_alternatecontentsource_ptr_and_more.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/app/migrations/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/app/modelresource.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/app/models.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/app/replica.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/app/serializers.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/app/tasks/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/app/tasks/publishing.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/app/tasks/synchronizing.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/app/viewsets.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/manifest.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/pytest_plugin.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/tests/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/tests/functional/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/tests/functional/api/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_acs.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_auto_publish.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_bad_sync.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_content_labels.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_crud_content_unit.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_crud_remotes.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_domains.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_download_policies.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_generic_list.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_labels.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_mime_types.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_publish.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_pulp_export.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_rbac.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_remote_settings.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/tests/functional/api/test_sync.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/tests/unit/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/tests/unit/test_safe_paths.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulp_file/tests/unit/test_serializers.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/access_policy.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/authentication.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/checks.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/entrypoint.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/files.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/global_access_conditions.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/importexport.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/loggers.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/manage.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/management/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/management/commands/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/management/commands/add-signing-service.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/management/commands/analyze-publication.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/management/commands/clean-up-progress-reports.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/management/commands/datarepair-2327.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/management/commands/dump-permissions.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/management/commands/dump-publications-to-fs.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/management/commands/handle-artifact-checksums.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/management/commands/migrationstat.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/management/commands/openapi.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/management/commands/rebasemigrations.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/management/commands/remove-signing-service.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/management/commands/repository-size.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/management/commands/reset-admin-password.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/management/commands/rotate-db-key.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0001_squashed_0090_char_to_text_field.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0091_systemid.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0092_alter_upload_options.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0093_add_info_field_repositoryversion.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0094_protect_repository_content.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0095_artifactdistribution.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0096_alter_task_logging_cid.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0097_remove_telemetry_task_schedule.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0098_pulp_labels.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0099_versions_field.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0100_upstreampulp.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0101_add_domain.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0102_add_domain_relations.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0103_alter_export_task.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0104_delete_label.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0105_abstract_uuid_gen.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0106_alter_artifactdistribution_distribution_ptr_and_more.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0107_distribution_hidden.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0108_task_versions.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0109_contentartifact_relative_path_index.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0110_apiappstatus.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0111_task_enc_args_task_enc_kwargs.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0112_alter_upstreampulp_options.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0113_headercontentguard.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0114_remove_task_args_remove_task_kwargs.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0115_compositecontentguard.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0116_alter_remoteartifact_md5_alter_remoteartifact_sha1_and_more.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0117_task_unblocked_at.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0118_task_core_task_unblock_2276a4_idx_and_more.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0119_grouprole_core_groupr_object__250e22_idx_and_more.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0120_get_url_removal.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0121_add_profile_artifacts_table.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0122_record_last_replication_timestamp.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0123_upstreampulp_q_select.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0124_task_deferred_task_immediate.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0125_openpgpdistribution_openpgpkeyring_openpgppublickey_and_more.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0126_remoteartifact_failed_at.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0127_remove_upstreampulp_pulp_label_select.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0128_domain_pulp_labels.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0129_content_pulp_labels.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0130_upstreampulp_policy.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0131_distribution_checkpoint_publication_checkpoint.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0132_alter_content_options.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0132_task_profile_options.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0133_repositoryversion_content_ids.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0134_task_insert_trigger.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0135_task_pulp_task_resources_index.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0136_delete_basedistribution.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0137_appstatus.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/0138_vulnerabilityreport.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/migrations/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/mime_types.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/modelresource.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/models/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/models/access_policy.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/models/acs.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/models/analytics.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/models/base.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/models/content.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/models/domain.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/models/exporter.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/models/fields.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/models/generic.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/models/importer.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/models/openpgp.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/models/progress.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/models/publication.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/models/replica.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/models/repository.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/models/role.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/models/storage.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/models/upload.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/models/vulnerability_report.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/netutil.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/openpgp.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/protobuf/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/protobuf/analytics_pb2.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/pulp_hashlib.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/pulpcore_gunicorn_application.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/redis_connection.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/replica.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/response.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/role_util.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/serializers/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/serializers/access_policy.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/serializers/acs.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/serializers/base.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/serializers/content.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/serializers/domain.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/serializers/exporter.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/serializers/fields.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/serializers/importer.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/serializers/openpgp.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/serializers/orphans.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/serializers/progress.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/serializers/publication.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/serializers/purge.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/serializers/reclaim.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/serializers/repair.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/serializers/replica.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/serializers/repository.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/serializers/upload.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/serializers/user.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/serializers/vulnerability_report.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/tasks/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/tasks/base.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/tasks/export.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/tasks/migrate.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/tasks/orphan.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/tasks/purge.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/tasks/reclaim_space.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/tasks/replica.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/tasks/repository.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/tasks/telemetry.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/tasks/test.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/tasks/upload.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/tasks/vulnerability_report.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/templates/rest_framework/api.html +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/templatetags/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/templatetags/pulp_urls.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/urls.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/util.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/views/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/views/importer.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/views/orphans.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/views/repair.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/viewsets/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/viewsets/access_policy.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/viewsets/acs.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/viewsets/base.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/viewsets/content.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/viewsets/custom_filters.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/viewsets/domain.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/viewsets/exporter.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/viewsets/importer.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/viewsets/openpgp.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/viewsets/orphans.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/viewsets/publication.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/viewsets/reclaim.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/viewsets/replica.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/viewsets/repository.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/viewsets/upload.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/viewsets/user.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/viewsets/vulnerability_report.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/app/wsgi.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/backends.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/cache/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/cache/cache.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/constants.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/content/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/content/authentication.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/content/entrypoint.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/content/handler.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/content/instrumentation.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/download/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/download/base.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/download/factory.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/download/file.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/download/http.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/exceptions/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/exceptions/base.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/exceptions/plugin.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/exceptions/validation.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/filters.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/metrics.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/migrations.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/openapi/hooks.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/access_policy.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/actions.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/apps.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/authentication/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/cache/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/constants.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/content.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/download/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/exceptions.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/files.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/importexport.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/migrations.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/modelresources.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/models/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/models/role.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/publication_utils.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/pulp_hashlib.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/replica.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/responses.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/serializers/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/serializers/content.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/stages/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/stages/api.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/stages/artifact_stages.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/stages/content_stages.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/stages/declarative_version.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/stages/models.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/storage.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/sync.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/tasking.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/util.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/viewsets/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/plugin/viewsets/content.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/responses.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tasking/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tasking/_util.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tasking/entrypoint.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tasking/kafka.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tasking/storage.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_access_policy.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_api_docs.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_api_root_rewrite.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_artifact_distribution.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_auth.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_correlation_id.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_crd_artifacts.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_crud_domains.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_filter.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_login.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_openapi_schema.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_openpgp.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_replication.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_repos.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_role.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_root_endpoint.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_scoping.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_signing_service.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_status.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_task_purge.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_upload.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/test_users_groups.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_checkpoint.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_content_access.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_content_cache.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_content_delivery.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_content_directory.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_content_path.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_content_promotion.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_contentguard.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_crud_repos.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_distributions.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_filesystemexport.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_labels.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_migrate.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_orphans.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_pagination.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_prn.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_proxy.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_pulpimport.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_reclaim_disk_space.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_repair.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_repo_versions.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_tasks.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/api/using_plugin/test_unlinking_repo.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/assets/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/content_with_coverage.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/functional/utils.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/performance/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/performance/test_performance.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/conftest.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/content/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/content/test_handler.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/download/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/download/test_downloader_base.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/download/test_downloader_factory.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/metrics/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/metrics/conftest.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/metrics/test_aiohttp_instrumentation.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/metrics/test_django_instrumentation.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/migration/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/models/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/models/test_base.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/models/test_content.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/models/test_remote.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/models/test_task.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/roles/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/roles/test_roles.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/serializers/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/serializers/test_base.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/serializers/test_domain.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/serializers/test_fields.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/serializers/test_orphans_cleanup.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/serializers/test_pulpexport.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/serializers/test_repository.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/serializers/test_user.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/stages/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/stages/test_artifactdownloader.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/stages/test_stages.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/test_cache.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/test_chunked_file.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/test_content_guard.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/test_files.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/test_import_checks.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/test_pulp_urls.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/test_settings.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/test_util.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/test_viewsets.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/test_vulnerability_report.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/viewsets/__init__.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore/tests/unit/viewsets/test_viewset_base.py +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore.egg-info/dependency_links.txt +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore.egg-info/entry_points.txt +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/pulpcore.egg-info/top_level.txt +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/setup.cfg +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/test_requirements.txt +0 -0
- {pulpcore-3.85.1 → pulpcore-3.87.0}/unittest_requirements.txt +0 -0
|
@@ -8,6 +8,67 @@
|
|
|
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
|
+
|
|
34
|
+
## 3.86.0 (2025-08-21) {: #3.86.0 }
|
|
35
|
+
|
|
36
|
+
### REST API {: #3.86.0-rest-api }
|
|
37
|
+
|
|
38
|
+
#### Features {: #3.86.0-rest-api-feature }
|
|
39
|
+
|
|
40
|
+
- Added a configurable bucket boundary for API request duration metric using the OTEL_PULP_API_HISTOGRAM_BUCKETS setting.
|
|
41
|
+
[#6845](https://github.com/pulp/pulpcore/issues/6845)
|
|
42
|
+
|
|
43
|
+
#### Bugfixes {: #3.86.0-rest-api-bugfix }
|
|
44
|
+
|
|
45
|
+
- Made DjangoMetricsMiddleware aware of OTEL urls exclusion envvars.
|
|
46
|
+
[#6843](https://github.com/pulp/pulpcore/issues/6843)
|
|
47
|
+
- Fixed repository version validation to allow legitimate shared artifacts between content units.
|
|
48
|
+
[#6868](https://github.com/pulp/pulpcore/issues/6868)
|
|
49
|
+
- Fixed a bug that prevents migrations from running.
|
|
50
|
+
|
|
51
|
+
#### Improved Documentation {: #3.86.0-rest-api-doc }
|
|
52
|
+
|
|
53
|
+
- Updated documentation for the TASK_DIAGNOSTICS setting.
|
|
54
|
+
[#6854](https://github.com/pulp/pulpcore/issues/6854)
|
|
55
|
+
|
|
56
|
+
### Plugin API {: #3.86.0-plugin-api }
|
|
57
|
+
|
|
58
|
+
#### Removals {: #3.86.0-plugin-api-removal }
|
|
59
|
+
|
|
60
|
+
- Removed support for synchronous immediate tasks.
|
|
61
|
+
|
|
62
|
+
### Pulp File {: #3.86.0-pulp-file }
|
|
63
|
+
|
|
64
|
+
No significant changes.
|
|
65
|
+
|
|
66
|
+
### Pulp Cert Guard {: #3.86.0-pulp-cert-guard }
|
|
67
|
+
|
|
68
|
+
No significant changes.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
11
72
|
## 3.85.1 (2025-08-12) {: #3.85.1 }
|
|
12
73
|
|
|
13
74
|
### REST API {: #3.85.1-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
|
|
@@ -45,12 +45,12 @@ Requires-Dist: PyOpenSSL<26.0
|
|
|
45
45
|
Requires-Dist: opentelemetry-api<1.37,>=1.27.0
|
|
46
46
|
Requires-Dist: opentelemetry-sdk<1.37,>=1.27.0
|
|
47
47
|
Requires-Dist: opentelemetry-exporter-otlp-proto-http<1.37,>=1.27.0
|
|
48
|
-
Requires-Dist: protobuf<
|
|
48
|
+
Requires-Dist: protobuf<7.0,>=4.21.1
|
|
49
49
|
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
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
from collections import defaultdict
|
|
2
|
+
from gettext import gettext as _
|
|
3
|
+
|
|
4
|
+
from django.db import connection
|
|
5
|
+
from django.db.migrations.loader import MigrationLoader
|
|
6
|
+
from django.db.migrations.migration import SwappableTuple
|
|
7
|
+
from django.db.migrations.optimizer import MigrationOptimizer
|
|
8
|
+
from django.db.migrations.writer import MigrationWriter
|
|
9
|
+
from django.conf import settings
|
|
10
|
+
from django.core.management import BaseCommand
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def print_stats(migration):
|
|
14
|
+
operations = migration.operations
|
|
15
|
+
migration_types = defaultdict(int)
|
|
16
|
+
for operation in operations:
|
|
17
|
+
migration_types[operation.__class__.__name__] += 1
|
|
18
|
+
for key, value in migration_types.items():
|
|
19
|
+
print(f"{value: 4} {key}")
|
|
20
|
+
print("---")
|
|
21
|
+
print(_("Total: {count}").format(count=len(operations)))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class Command(BaseCommand):
|
|
25
|
+
"""
|
|
26
|
+
Django management command to optimize a migration.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
help = _("Optimize a migration.")
|
|
30
|
+
|
|
31
|
+
def add_arguments(self, parser):
|
|
32
|
+
parser.add_argument("--dry-run", action="store_true", help=_("Don't change anything."))
|
|
33
|
+
parser.add_argument(
|
|
34
|
+
"--stat", action="store_true", help=_("Print statistics about operations.")
|
|
35
|
+
)
|
|
36
|
+
parser.add_argument("app-label", help=_("App label of the migrations to optimize."))
|
|
37
|
+
parser.add_argument("migration", help=_("Prefix of the migration to optimize."))
|
|
38
|
+
|
|
39
|
+
def handle(self, *args, **options):
|
|
40
|
+
dry_run = options.get("dry_run", False)
|
|
41
|
+
stat = options.get("stat", False)
|
|
42
|
+
app_label = options["app-label"]
|
|
43
|
+
migration_prefix = options["migration"]
|
|
44
|
+
|
|
45
|
+
loader = MigrationLoader(connection)
|
|
46
|
+
|
|
47
|
+
migration = loader.get_migration_by_prefix(app_label, migration_prefix)
|
|
48
|
+
|
|
49
|
+
print(_("Optimizing migration {}").format((migration.app_label, migration.name)))
|
|
50
|
+
if stat:
|
|
51
|
+
print(_("=== Old Migration Summary ==="))
|
|
52
|
+
print_stats(migration)
|
|
53
|
+
|
|
54
|
+
new_dependencies = []
|
|
55
|
+
for dependency in migration.dependencies:
|
|
56
|
+
if (
|
|
57
|
+
isinstance(dependency, SwappableTuple)
|
|
58
|
+
and settings.AUTH_USER_MODEL == dependency.setting
|
|
59
|
+
):
|
|
60
|
+
new_dependencies.append(("__setting__", "AUTH_USER_MODEL"))
|
|
61
|
+
else:
|
|
62
|
+
new_dependencies.append(dependency)
|
|
63
|
+
|
|
64
|
+
optimizer = MigrationOptimizer()
|
|
65
|
+
new_operations = optimizer.optimize(migration.operations, app_label)
|
|
66
|
+
|
|
67
|
+
if new_operations != migration.operations:
|
|
68
|
+
print(
|
|
69
|
+
_("Changed from {old_count} to {new_count} operations.").format(
|
|
70
|
+
old_count=len(migration.operations), new_count=len(new_operations)
|
|
71
|
+
)
|
|
72
|
+
)
|
|
73
|
+
if stat:
|
|
74
|
+
print(_("=== New Migration Summary ==="))
|
|
75
|
+
print_stats(migration)
|
|
76
|
+
|
|
77
|
+
migration.operations = new_operations
|
|
78
|
+
migration.dependencies = new_dependencies
|
|
79
|
+
if not dry_run:
|
|
80
|
+
writer = MigrationWriter(migration)
|
|
81
|
+
with open(writer.path, "w") as output_file:
|
|
82
|
+
output_file.write(writer.as_string())
|
|
83
|
+
else:
|
|
84
|
+
print(_("No optimizations found."))
|
|
@@ -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,19 @@
|
|
|
1
|
+
# Generated by Django 4.2.23 on 2025-08-07 11:43
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
import django.db.models.deletion
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Migration(migrations.Migration):
|
|
8
|
+
|
|
9
|
+
dependencies = [
|
|
10
|
+
('core', '0138_vulnerabilityreport'),
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
operations = [
|
|
14
|
+
migrations.AddField(
|
|
15
|
+
model_name='task',
|
|
16
|
+
name='app_lock',
|
|
17
|
+
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='tasks', to='core.appstatus'),
|
|
18
|
+
),
|
|
19
|
+
]
|
|
@@ -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
|
+
]
|
|
@@ -15,6 +15,7 @@ from pulpcore.app.models import BaseModel
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class AppStatusManager(models.Manager):
|
|
18
|
+
# This should be replaced with 3.87.
|
|
18
19
|
def online(self):
|
|
19
20
|
"""
|
|
20
21
|
Returns a queryset of objects that are online.
|
|
@@ -51,29 +52,32 @@ class AppStatusManager(models.Manager):
|
|
|
51
52
|
|
|
52
53
|
class _AppStatusManager(AppStatusManager):
|
|
53
54
|
# This is an intermediate class in order to allow a ZDU.
|
|
54
|
-
# It should be
|
|
55
|
+
# It should be made the real thing with 3.87.
|
|
56
|
+
def __init__(self):
|
|
57
|
+
super().__init__()
|
|
58
|
+
self._current_app_status = None
|
|
59
|
+
|
|
55
60
|
def create(self, app_type, **kwargs):
|
|
56
|
-
if
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
from pulpcore.app.models import Worker
|
|
60
|
-
|
|
61
|
-
old_obj = Worker.objects.create(**kwargs)
|
|
62
|
-
else:
|
|
63
|
-
raise NotImplementedError(f"Invalid app_type: {app_type}")
|
|
61
|
+
if self._current_app_status is not None:
|
|
62
|
+
raise RuntimeError("There is already an app status in this process.")
|
|
63
|
+
|
|
64
64
|
obj = super().create(app_type=app_type, **kwargs)
|
|
65
|
-
|
|
65
|
+
self._current_app_status = obj
|
|
66
66
|
return obj
|
|
67
67
|
|
|
68
68
|
async def acreate(self, app_type, **kwargs):
|
|
69
|
-
if
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
raise NotImplementedError(f"Invalid app_type: {app_type}")
|
|
69
|
+
if self._current_app_status is not None:
|
|
70
|
+
raise RuntimeError("There is already an app status in this process.")
|
|
71
|
+
|
|
73
72
|
obj = await super().acreate(app_type=app_type, **kwargs)
|
|
74
|
-
|
|
73
|
+
self._current_app_status = obj
|
|
75
74
|
return obj
|
|
76
75
|
|
|
76
|
+
def current(self):
|
|
77
|
+
if self._current_app_status is None:
|
|
78
|
+
raise RuntimeError("There is no current app status.")
|
|
79
|
+
return self._current_app_status
|
|
80
|
+
|
|
77
81
|
def online(self):
|
|
78
82
|
"""
|
|
79
83
|
Returns a queryset of objects that are online.
|
|
@@ -107,7 +111,7 @@ class AppStatus(BaseModel):
|
|
|
107
111
|
objects = _AppStatusManager()
|
|
108
112
|
|
|
109
113
|
app_type = models.CharField(max_length=10, choices=APP_TYPES)
|
|
110
|
-
name = models.TextField(
|
|
114
|
+
name = models.TextField()
|
|
111
115
|
versions = HStoreField(default=dict)
|
|
112
116
|
ttl = models.DurationField(null=False)
|
|
113
117
|
last_heartbeat = models.DateTimeField(auto_now=True)
|
|
@@ -115,13 +119,6 @@ class AppStatus(BaseModel):
|
|
|
115
119
|
def __init__(self, *args, **kwargs):
|
|
116
120
|
super().__init__(*args, **kwargs)
|
|
117
121
|
self.ttl = timedelta(seconds=self._APP_TTL[self.app_type])
|
|
118
|
-
self._old_status = None
|
|
119
|
-
|
|
120
|
-
def delete(self, *args, **kwargs):
|
|
121
|
-
# adelete will call into this, so we should not replicate that one here.
|
|
122
|
-
if self._old_status is not None:
|
|
123
|
-
self._old_status.delete(*args, **kwargs)
|
|
124
|
-
super().delete(*args, **kwargs)
|
|
125
122
|
|
|
126
123
|
@property
|
|
127
124
|
def online(self) -> bool:
|
|
@@ -153,7 +150,6 @@ class AppStatus(BaseModel):
|
|
|
153
150
|
ValueError: When the model instance has never been saved before. This method can
|
|
154
151
|
only update an existing database record.
|
|
155
152
|
"""
|
|
156
|
-
self._old_status.save_heartbeat()
|
|
157
153
|
self.save(update_fields=["last_heartbeat"])
|
|
158
154
|
|
|
159
155
|
async def asave_heartbeat(self):
|
|
@@ -166,7 +162,6 @@ class AppStatus(BaseModel):
|
|
|
166
162
|
ValueError: When the model instance has never been saved before. This method can
|
|
167
163
|
only update an existing database record.
|
|
168
164
|
"""
|
|
169
|
-
await self._old_status.asave_heartbeat()
|
|
170
165
|
await self.asave(update_fields=["last_heartbeat"])
|
|
171
166
|
|
|
172
167
|
@property
|
|
@@ -116,7 +116,8 @@ class Task(BaseModel, AutoAddObjPermsMixin):
|
|
|
116
116
|
Defaults to `True`.
|
|
117
117
|
|
|
118
118
|
Relations:
|
|
119
|
-
|
|
119
|
+
app_lock (AppStatus): The app holding the lock on this task.
|
|
120
|
+
Warning: This is not yet implemented/enforced.
|
|
120
121
|
parent (models.ForeignKey): Task that spawned this task (if any)
|
|
121
122
|
worker (models.ForeignKey): The worker that this task is in
|
|
122
123
|
pulp_domain (models.ForeignKey): The domain the Task is a part of
|
|
@@ -138,6 +139,10 @@ class Task(BaseModel, AutoAddObjPermsMixin):
|
|
|
138
139
|
enc_kwargs = EncryptedJSONField(null=True, encoder=DjangoJSONEncoder)
|
|
139
140
|
|
|
140
141
|
worker = models.ForeignKey("Worker", null=True, related_name="tasks", on_delete=models.SET_NULL)
|
|
142
|
+
# This field is supposed to replace the session advisory locks to protect tasks.
|
|
143
|
+
app_lock = models.ForeignKey(
|
|
144
|
+
"AppStatus", null=True, related_name="tasks", on_delete=models.SET_NULL
|
|
145
|
+
)
|
|
141
146
|
|
|
142
147
|
parent_task = models.ForeignKey(
|
|
143
148
|
"Task", null=True, related_name="child_tasks", on_delete=models.SET_NULL
|
|
@@ -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",
|
|
@@ -405,6 +405,7 @@ KAFKA_SASL_PASSWORD = None
|
|
|
405
405
|
|
|
406
406
|
# opentelemetry settings
|
|
407
407
|
OTEL_ENABLED = False
|
|
408
|
+
OTEL_PULP_API_HISTOGRAM_BUCKETS = []
|
|
408
409
|
|
|
409
410
|
# VulnerabilityReport settings
|
|
410
411
|
VULN_REPORT_TASK_LIMITER = 10
|
|
@@ -504,6 +505,16 @@ authentication_json_header_openapi_security_scheme_validator = Validator(
|
|
|
504
505
|
messages={"is_type_of": "{name} must be a dictionary."},
|
|
505
506
|
)
|
|
506
507
|
|
|
508
|
+
otel_pulp_api_histogram_buckets_validator = Validator(
|
|
509
|
+
"OTEL_PULP_API_HISTOGRAM_BUCKETS",
|
|
510
|
+
is_type_of=list,
|
|
511
|
+
condition=lambda v: all([isinstance(value, float) for value in v]),
|
|
512
|
+
messages={
|
|
513
|
+
"is_type_of": "{name} must be a list.",
|
|
514
|
+
"condition": "All buckets must be declared as a float value",
|
|
515
|
+
},
|
|
516
|
+
)
|
|
517
|
+
|
|
507
518
|
|
|
508
519
|
def otel_middleware_hook(settings):
|
|
509
520
|
data = {"dynaconf_merge": True}
|
|
@@ -530,6 +541,7 @@ settings = DjangoDynaconf(
|
|
|
530
541
|
unknown_algs_validator,
|
|
531
542
|
json_header_auth_validator,
|
|
532
543
|
authentication_json_header_openapi_security_scheme_validator,
|
|
544
|
+
otel_pulp_api_histogram_buckets_validator,
|
|
533
545
|
],
|
|
534
546
|
post_hooks=(otel_middleware_hook,),
|
|
535
547
|
)
|
|
@@ -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
|