pulpcore 3.88.0__tar.gz → 3.89.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.

Files changed (466) hide show
  1. {pulpcore-3.88.0 → pulpcore-3.89.0}/CHANGES.md +48 -3
  2. {pulpcore-3.88.0 → pulpcore-3.89.0}/PKG-INFO +2 -2
  3. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/app/__init__.py +1 -1
  4. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/app/__init__.py +1 -1
  5. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/apps.py +1 -1
  6. pulpcore-3.89.0/pulpcore/app/migrations/0143_require_app_lock_zdu.py +15 -0
  7. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/models/task.py +24 -24
  8. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/settings.py +0 -2
  9. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/content/handler.py +7 -6
  10. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tasking/tasks.py +64 -68
  11. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tasking/worker.py +91 -89
  12. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_status.py +1 -1
  13. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_upload.py +3 -1
  14. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_distributions.py +6 -2
  15. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/utils.py +1 -1
  16. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/metrics/test_aiohttp_instrumentation.py +4 -1
  17. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/models/test_task.py +5 -3
  18. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/stages/test_artifactdownloader.py +2 -2
  19. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/viewsets/test_viewset_base.py +3 -3
  20. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore.egg-info/PKG-INFO +2 -2
  21. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore.egg-info/SOURCES.txt +1 -0
  22. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore.egg-info/requires.txt +1 -1
  23. {pulpcore-3.88.0 → pulpcore-3.89.0}/pyproject.toml +3 -3
  24. {pulpcore-3.88.0 → pulpcore-3.89.0}/CODE_OF_CONDUCT.md +0 -0
  25. {pulpcore-3.88.0 → pulpcore-3.89.0}/COMMITMENT +0 -0
  26. {pulpcore-3.88.0 → pulpcore-3.89.0}/CONTRIBUTING.md +0 -0
  27. {pulpcore-3.88.0 → pulpcore-3.89.0}/COPYRIGHT +0 -0
  28. {pulpcore-3.88.0 → pulpcore-3.89.0}/LICENSE +0 -0
  29. {pulpcore-3.88.0 → pulpcore-3.89.0}/MANIFEST.in +0 -0
  30. {pulpcore-3.88.0 → pulpcore-3.89.0}/README.md +0 -0
  31. {pulpcore-3.88.0 → pulpcore-3.89.0}/ci_requirements.txt +0 -0
  32. {pulpcore-3.88.0 → pulpcore-3.89.0}/functest_requirements.txt +0 -0
  33. {pulpcore-3.88.0 → pulpcore-3.89.0}/manage.py +0 -0
  34. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/__init__.py +0 -0
  35. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/app/migrations/0001_initial.py +0 -0
  36. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/app/migrations/0002_alter_rhsmcertguard_contentguard_ptr_and_more.py +0 -0
  37. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/app/migrations/__init__.py +0 -0
  38. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/app/models.py +0 -0
  39. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/app/serializers.py +0 -0
  40. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/app/viewsets.py +0 -0
  41. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/pytest_plugin.py +0 -0
  42. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/rhsm/__init__.py +0 -0
  43. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/rhsm/rhsm_check_path.py +0 -0
  44. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/__init__.py +0 -0
  45. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/__init__.py +0 -0
  46. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/api/__init__.py +0 -0
  47. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/api/test_rhsm_certguard.py +0 -0
  48. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/api/test_x509_certguard.py +0 -0
  49. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/katello-default-ca.crt +0 -0
  50. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/katello-default-ca.key +0 -0
  51. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/trusted_but_expired.pem +0 -0
  52. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/uber.cert +0 -0
  53. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/untrusted_cert-key.pem +0 -0
  54. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/untrusted_cert.pem +0 -0
  55. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/1514454871848760713-key.pem +0 -0
  56. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/1514454871848760713.pem +0 -0
  57. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/159442575569388840-key.pem +0 -0
  58. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/159442575569388840.pem +0 -0
  59. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/4260035510644027985-key.pem +0 -0
  60. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/4260035510644027985.pem +0 -0
  61. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/5527980418107729172-key.pem +0 -0
  62. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/5527980418107729172.pem +0 -0
  63. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/certificates/ca.pem +0 -0
  64. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/genca.sh +0 -0
  65. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/keys/ca.pem +0 -0
  66. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/ca.pem +0 -0
  67. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/client.pem +0 -0
  68. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/server.pem +0 -0
  69. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/un_urlencoded_cert.txt +0 -0
  70. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/untrusted_client.pem +0 -0
  71. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/x509/genall.sh +0 -0
  72. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/x509/genca.sh +0 -0
  73. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/x509/genclient.sh +0 -0
  74. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/x509/gensrv.sh +0 -0
  75. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/x509/keys/ca.pem +0 -0
  76. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/x509/keys/client.pem +0 -0
  77. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/x509/keys/server.pem +0 -0
  78. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/conftest.py +0 -0
  79. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/functional/constants.py +0 -0
  80. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/unit/__init__.py +0 -0
  81. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/unit/certdata.py +0 -0
  82. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_certguard/tests/unit/test_rhsm_check_path.py +0 -0
  83. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/__init__.py +0 -0
  84. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/app/migrations/0001_initial_squashed_0016_add_domain.py +0 -0
  85. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/app/migrations/0017_alter_filealternatecontentsource_alternatecontentsource_ptr_and_more.py +0 -0
  86. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/app/migrations/__init__.py +0 -0
  87. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/app/modelresource.py +0 -0
  88. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/app/models.py +0 -0
  89. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/app/replica.py +0 -0
  90. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/app/serializers.py +0 -0
  91. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/app/tasks/__init__.py +0 -0
  92. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/app/tasks/publishing.py +0 -0
  93. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/app/tasks/synchronizing.py +0 -0
  94. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/app/viewsets.py +0 -0
  95. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/manifest.py +0 -0
  96. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/pytest_plugin.py +0 -0
  97. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/tests/__init__.py +0 -0
  98. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/tests/functional/__init__.py +0 -0
  99. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/tests/functional/api/__init__.py +0 -0
  100. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_acs.py +0 -0
  101. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_auto_publish.py +0 -0
  102. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_bad_sync.py +0 -0
  103. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_content_labels.py +0 -0
  104. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_crud_content_unit.py +0 -0
  105. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_crud_remotes.py +0 -0
  106. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_domains.py +0 -0
  107. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_download_policies.py +0 -0
  108. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_generic_list.py +0 -0
  109. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_labels.py +0 -0
  110. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_mime_types.py +0 -0
  111. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_publish.py +0 -0
  112. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_pulp_export.py +0 -0
  113. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_rbac.py +0 -0
  114. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_remote_settings.py +0 -0
  115. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_sync.py +0 -0
  116. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/tests/unit/__init__.py +0 -0
  117. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/tests/unit/test_safe_paths.py +0 -0
  118. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulp_file/tests/unit/test_serializers.py +0 -0
  119. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/__init__.py +0 -0
  120. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/__init__.py +0 -0
  121. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/access_policy.py +0 -0
  122. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/authentication.py +0 -0
  123. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/checks.py +0 -0
  124. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/entrypoint.py +0 -0
  125. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/files.py +0 -0
  126. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/global_access_conditions.py +0 -0
  127. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/importexport.py +0 -0
  128. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/loggers.py +0 -0
  129. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/manage.py +0 -0
  130. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/management/__init__.py +0 -0
  131. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/management/commands/__init__.py +0 -0
  132. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/management/commands/add-signing-service.py +0 -0
  133. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/management/commands/analyze-publication.py +0 -0
  134. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/management/commands/clean-up-progress-reports.py +0 -0
  135. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/management/commands/datarepair-2327.py +0 -0
  136. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/management/commands/dump-permissions.py +0 -0
  137. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/management/commands/dump-publications-to-fs.py +0 -0
  138. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/management/commands/handle-artifact-checksums.py +0 -0
  139. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/management/commands/migrationstat.py +0 -0
  140. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/management/commands/openapi.py +0 -0
  141. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/management/commands/optimizemigration.py +0 -0
  142. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/management/commands/rebasemigrations.py +0 -0
  143. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/management/commands/remove-plugin.py +0 -0
  144. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/management/commands/remove-signing-service.py +0 -0
  145. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/management/commands/repository-size.py +0 -0
  146. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/management/commands/reset-admin-password.py +0 -0
  147. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/management/commands/rotate-db-key.py +0 -0
  148. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0001_squashed_0090_char_to_text_field.py +0 -0
  149. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0091_systemid.py +0 -0
  150. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0092_alter_upload_options.py +0 -0
  151. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0093_add_info_field_repositoryversion.py +0 -0
  152. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0094_protect_repository_content.py +0 -0
  153. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0095_artifactdistribution.py +0 -0
  154. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0096_alter_task_logging_cid.py +0 -0
  155. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0097_remove_telemetry_task_schedule.py +0 -0
  156. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0098_pulp_labels.py +0 -0
  157. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0099_versions_field.py +0 -0
  158. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0100_upstreampulp.py +0 -0
  159. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0101_add_domain.py +0 -0
  160. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0102_add_domain_relations.py +0 -0
  161. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0103_alter_export_task.py +0 -0
  162. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0104_delete_label.py +0 -0
  163. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0105_abstract_uuid_gen.py +0 -0
  164. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0106_alter_artifactdistribution_distribution_ptr_and_more.py +0 -0
  165. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0107_distribution_hidden.py +0 -0
  166. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0108_task_versions.py +0 -0
  167. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0109_contentartifact_relative_path_index.py +0 -0
  168. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0110_apiappstatus.py +0 -0
  169. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0111_task_enc_args_task_enc_kwargs.py +0 -0
  170. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0112_alter_upstreampulp_options.py +0 -0
  171. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0113_headercontentguard.py +0 -0
  172. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0114_remove_task_args_remove_task_kwargs.py +0 -0
  173. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0115_compositecontentguard.py +0 -0
  174. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0116_alter_remoteartifact_md5_alter_remoteartifact_sha1_and_more.py +0 -0
  175. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0117_task_unblocked_at.py +0 -0
  176. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0118_task_core_task_unblock_2276a4_idx_and_more.py +0 -0
  177. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0119_grouprole_core_groupr_object__250e22_idx_and_more.py +0 -0
  178. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0120_get_url_removal.py +0 -0
  179. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0121_add_profile_artifacts_table.py +0 -0
  180. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0122_record_last_replication_timestamp.py +0 -0
  181. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0123_upstreampulp_q_select.py +0 -0
  182. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0124_task_deferred_task_immediate.py +0 -0
  183. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0125_openpgpdistribution_openpgpkeyring_openpgppublickey_and_more.py +0 -0
  184. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0126_remoteartifact_failed_at.py +0 -0
  185. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0127_remove_upstreampulp_pulp_label_select.py +0 -0
  186. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0128_domain_pulp_labels.py +0 -0
  187. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0129_content_pulp_labels.py +0 -0
  188. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0130_upstreampulp_policy.py +0 -0
  189. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0131_distribution_checkpoint_publication_checkpoint.py +0 -0
  190. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0132_alter_content_options.py +0 -0
  191. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0132_task_profile_options.py +0 -0
  192. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0133_repositoryversion_content_ids.py +0 -0
  193. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0134_task_insert_trigger.py +0 -0
  194. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0135_task_pulp_task_resources_index.py +0 -0
  195. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0136_delete_basedistribution.py +0 -0
  196. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0137_appstatus.py +0 -0
  197. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0138_vulnerabilityreport.py +0 -0
  198. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0139_task_app_lock.py +0 -0
  199. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0140_require_appstatus_zdu.py +0 -0
  200. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0141_alter_appstatus_name.py +0 -0
  201. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/0142_task_result.py +0 -0
  202. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/migrations/__init__.py +0 -0
  203. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/mime_types.py +0 -0
  204. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/modelresource.py +0 -0
  205. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/models/__init__.py +0 -0
  206. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/models/access_policy.py +0 -0
  207. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/models/acs.py +0 -0
  208. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/models/analytics.py +0 -0
  209. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/models/base.py +0 -0
  210. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/models/content.py +0 -0
  211. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/models/domain.py +0 -0
  212. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/models/exporter.py +0 -0
  213. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/models/fields.py +0 -0
  214. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/models/generic.py +0 -0
  215. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/models/importer.py +0 -0
  216. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/models/openpgp.py +0 -0
  217. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/models/progress.py +0 -0
  218. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/models/publication.py +0 -0
  219. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/models/replica.py +0 -0
  220. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/models/repository.py +0 -0
  221. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/models/role.py +0 -0
  222. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/models/status.py +0 -0
  223. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/models/storage.py +0 -0
  224. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/models/upload.py +0 -0
  225. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/models/vulnerability_report.py +0 -0
  226. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/netutil.py +0 -0
  227. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/openpgp.py +0 -0
  228. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/protobuf/__init__.py +0 -0
  229. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/protobuf/analytics_pb2.py +0 -0
  230. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/pulp_hashlib.py +0 -0
  231. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/pulpcore_gunicorn_application.py +0 -0
  232. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/redis_connection.py +0 -0
  233. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/replica.py +0 -0
  234. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/response.py +0 -0
  235. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/role_util.py +0 -0
  236. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/serializers/__init__.py +0 -0
  237. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/serializers/access_policy.py +0 -0
  238. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/serializers/acs.py +0 -0
  239. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/serializers/base.py +0 -0
  240. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/serializers/content.py +0 -0
  241. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/serializers/domain.py +0 -0
  242. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/serializers/exporter.py +0 -0
  243. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/serializers/fields.py +0 -0
  244. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/serializers/importer.py +0 -0
  245. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/serializers/openpgp.py +0 -0
  246. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/serializers/orphans.py +0 -0
  247. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/serializers/progress.py +0 -0
  248. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/serializers/publication.py +0 -0
  249. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/serializers/purge.py +0 -0
  250. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/serializers/reclaim.py +0 -0
  251. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/serializers/repair.py +0 -0
  252. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/serializers/replica.py +0 -0
  253. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/serializers/repository.py +0 -0
  254. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/serializers/status.py +0 -0
  255. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/serializers/task.py +0 -0
  256. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/serializers/upload.py +0 -0
  257. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/serializers/user.py +0 -0
  258. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/serializers/vulnerability_report.py +0 -0
  259. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/tasks/__init__.py +0 -0
  260. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/tasks/analytics.py +0 -0
  261. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/tasks/base.py +0 -0
  262. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/tasks/export.py +0 -0
  263. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/tasks/importer.py +0 -0
  264. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/tasks/migrate.py +0 -0
  265. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/tasks/orphan.py +0 -0
  266. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/tasks/purge.py +0 -0
  267. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/tasks/reclaim_space.py +0 -0
  268. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/tasks/replica.py +0 -0
  269. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/tasks/repository.py +0 -0
  270. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/tasks/telemetry.py +0 -0
  271. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/tasks/test.py +0 -0
  272. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/tasks/upload.py +0 -0
  273. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/tasks/vulnerability_report.py +0 -0
  274. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/templates/rest_framework/api.html +0 -0
  275. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/templatetags/__init__.py +0 -0
  276. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/templatetags/pulp_urls.py +0 -0
  277. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/urls.py +0 -0
  278. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/util.py +0 -0
  279. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/views/__init__.py +0 -0
  280. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/views/importer.py +0 -0
  281. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/views/orphans.py +0 -0
  282. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/views/repair.py +0 -0
  283. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/views/status.py +0 -0
  284. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/viewsets/__init__.py +0 -0
  285. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/viewsets/access_policy.py +0 -0
  286. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/viewsets/acs.py +0 -0
  287. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/viewsets/base.py +0 -0
  288. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/viewsets/content.py +0 -0
  289. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/viewsets/custom_filters.py +0 -0
  290. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/viewsets/domain.py +0 -0
  291. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/viewsets/exporter.py +0 -0
  292. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/viewsets/importer.py +0 -0
  293. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/viewsets/openpgp.py +0 -0
  294. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/viewsets/orphans.py +0 -0
  295. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/viewsets/publication.py +0 -0
  296. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/viewsets/reclaim.py +0 -0
  297. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/viewsets/replica.py +0 -0
  298. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/viewsets/repository.py +0 -0
  299. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/viewsets/task.py +0 -0
  300. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/viewsets/upload.py +0 -0
  301. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/viewsets/user.py +0 -0
  302. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/viewsets/vulnerability_report.py +0 -0
  303. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/app/wsgi.py +0 -0
  304. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/backends.py +0 -0
  305. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/cache/__init__.py +0 -0
  306. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/cache/cache.py +0 -0
  307. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/constants.py +0 -0
  308. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/content/__init__.py +0 -0
  309. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/content/authentication.py +0 -0
  310. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/content/entrypoint.py +0 -0
  311. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/content/instrumentation.py +0 -0
  312. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/download/__init__.py +0 -0
  313. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/download/base.py +0 -0
  314. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/download/factory.py +0 -0
  315. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/download/file.py +0 -0
  316. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/download/http.py +0 -0
  317. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/exceptions/__init__.py +0 -0
  318. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/exceptions/base.py +0 -0
  319. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/exceptions/plugin.py +0 -0
  320. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/exceptions/validation.py +0 -0
  321. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/filters.py +0 -0
  322. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/metrics.py +0 -0
  323. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/middleware.py +0 -0
  324. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/migrations.py +0 -0
  325. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/openapi/__init__.py +0 -0
  326. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/openapi/hooks.py +0 -0
  327. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/__init__.py +0 -0
  328. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/access_policy.py +0 -0
  329. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/actions.py +0 -0
  330. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/apps.py +0 -0
  331. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/authentication/__init__.py +0 -0
  332. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/cache/__init__.py +0 -0
  333. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/constants.py +0 -0
  334. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/content.py +0 -0
  335. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/download/__init__.py +0 -0
  336. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/exceptions.py +0 -0
  337. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/files.py +0 -0
  338. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/importexport.py +0 -0
  339. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/migrations.py +0 -0
  340. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/modelresources.py +0 -0
  341. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/models/__init__.py +0 -0
  342. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/models/role.py +0 -0
  343. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/publication_utils.py +0 -0
  344. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/pulp_hashlib.py +0 -0
  345. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/replica.py +0 -0
  346. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/repo_version_utils.py +0 -0
  347. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/responses.py +0 -0
  348. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/serializers/__init__.py +0 -0
  349. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/serializers/content.py +0 -0
  350. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/stages/__init__.py +0 -0
  351. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/stages/api.py +0 -0
  352. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/stages/artifact_stages.py +0 -0
  353. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/stages/content_stages.py +0 -0
  354. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/stages/declarative_version.py +0 -0
  355. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/stages/models.py +0 -0
  356. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/storage.py +0 -0
  357. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/sync.py +0 -0
  358. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/tasking.py +0 -0
  359. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/util.py +0 -0
  360. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/viewsets/__init__.py +0 -0
  361. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/plugin/viewsets/content.py +0 -0
  362. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/pytest_plugin.py +0 -0
  363. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/responses.py +0 -0
  364. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tasking/__init__.py +0 -0
  365. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tasking/_util.py +0 -0
  366. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tasking/entrypoint.py +0 -0
  367. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tasking/kafka.py +0 -0
  368. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tasking/storage.py +0 -0
  369. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/__init__.py +0 -0
  370. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/__init__.py +0 -0
  371. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/__init__.py +0 -0
  372. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_access_policy.py +0 -0
  373. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_api_docs.py +0 -0
  374. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_api_root_rewrite.py +0 -0
  375. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_artifact_distribution.py +0 -0
  376. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_auth.py +0 -0
  377. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_correlation_id.py +0 -0
  378. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_crd_artifacts.py +0 -0
  379. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_crud_domains.py +0 -0
  380. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_filter.py +0 -0
  381. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_login.py +0 -0
  382. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_openapi_schema.py +0 -0
  383. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_openpgp.py +0 -0
  384. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_replication.py +0 -0
  385. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_repos.py +0 -0
  386. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_role.py +0 -0
  387. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_root_endpoint.py +0 -0
  388. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_scoping.py +0 -0
  389. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_signing_service.py +0 -0
  390. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_task_purge.py +0 -0
  391. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_tasking.py +0 -0
  392. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_users_groups.py +0 -0
  393. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_workers.py +0 -0
  394. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/__init__.py +0 -0
  395. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_checkpoint.py +0 -0
  396. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_content_access.py +0 -0
  397. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_content_cache.py +0 -0
  398. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_content_delivery.py +0 -0
  399. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_content_directory.py +0 -0
  400. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_content_path.py +0 -0
  401. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_content_promotion.py +0 -0
  402. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_contentguard.py +0 -0
  403. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_crud_repos.py +0 -0
  404. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_filesystemexport.py +0 -0
  405. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_labels.py +0 -0
  406. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_migrate.py +0 -0
  407. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_orphans.py +0 -0
  408. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_pagination.py +0 -0
  409. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_prn.py +0 -0
  410. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_proxy.py +0 -0
  411. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_pulpimport.py +0 -0
  412. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_reclaim_disk_space.py +0 -0
  413. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_repair.py +0 -0
  414. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_repo_versions.py +0 -0
  415. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_tasks.py +0 -0
  416. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_unlinking_repo.py +0 -0
  417. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/assets/__init__.py +0 -0
  418. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/functional/content_with_coverage.py +0 -0
  419. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/performance/__init__.py +0 -0
  420. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/performance/test_performance.py +0 -0
  421. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/__init__.py +0 -0
  422. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/conftest.py +0 -0
  423. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/content/__init__.py +0 -0
  424. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/content/test_handler.py +0 -0
  425. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/content/test_heartbeat.py +0 -0
  426. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/download/__init__.py +0 -0
  427. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/download/test_downloader_base.py +0 -0
  428. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/download/test_downloader_factory.py +0 -0
  429. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/metrics/__init__.py +0 -0
  430. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/metrics/conftest.py +0 -0
  431. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/metrics/test_django_instrumentation.py +0 -0
  432. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/migration/__init__.py +0 -0
  433. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/models/__init__.py +0 -0
  434. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/models/test_base.py +0 -0
  435. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/models/test_content.py +0 -0
  436. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/models/test_remote.py +0 -0
  437. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/models/test_repository.py +0 -0
  438. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/roles/__init__.py +0 -0
  439. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/roles/test_roles.py +0 -0
  440. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/serializers/__init__.py +0 -0
  441. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/serializers/test_base.py +0 -0
  442. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/serializers/test_domain.py +0 -0
  443. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/serializers/test_fields.py +0 -0
  444. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/serializers/test_orphans_cleanup.py +0 -0
  445. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/serializers/test_pulpexport.py +0 -0
  446. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/serializers/test_repository.py +0 -0
  447. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/serializers/test_user.py +0 -0
  448. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/stages/__init__.py +0 -0
  449. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/stages/test_stages.py +0 -0
  450. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/test_cache.py +0 -0
  451. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/test_chunked_file.py +0 -0
  452. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/test_content_guard.py +0 -0
  453. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/test_files.py +0 -0
  454. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/test_import_checks.py +0 -0
  455. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/test_pulp_urls.py +0 -0
  456. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/test_settings.py +0 -0
  457. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/test_util.py +0 -0
  458. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/test_viewsets.py +0 -0
  459. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/test_vulnerability_report.py +0 -0
  460. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore/tests/unit/viewsets/__init__.py +0 -0
  461. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore.egg-info/dependency_links.txt +0 -0
  462. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore.egg-info/entry_points.txt +0 -0
  463. {pulpcore-3.88.0 → pulpcore-3.89.0}/pulpcore.egg-info/top_level.txt +0 -0
  464. {pulpcore-3.88.0 → pulpcore-3.89.0}/setup.cfg +0 -0
  465. {pulpcore-3.88.0 → pulpcore-3.89.0}/test_requirements.txt +0 -0
  466. {pulpcore-3.88.0 → pulpcore-3.89.0}/unittest_requirements.txt +0 -0
@@ -8,6 +8,28 @@
8
8
 
9
9
  [//]: # (towncrier release notes start)
10
10
 
11
+ ## 3.89.0 (2025-09-09) {: #3.89.0 }
12
+
13
+ ### REST API {: #3.89.0-rest-api }
14
+
15
+ #### Features {: #3.89.0-rest-api-feature }
16
+
17
+ - Stop using advisory locks in favor of a database column for locking on tasks.
18
+
19
+ ### Plugin API {: #3.89.0-plugin-api }
20
+
21
+ No significant changes.
22
+
23
+ ### Pulp File {: #3.89.0-pulp-file }
24
+
25
+ No significant changes.
26
+
27
+ ### Pulp Cert Guard {: #3.89.0-pulp-cert-guard }
28
+
29
+ No significant changes.
30
+
31
+ ---
32
+
11
33
  ## 3.88.0 (2025-09-03) {: #3.88.0 }
12
34
 
13
35
  ### REST API {: #3.88.0-rest-api }
@@ -19,7 +41,7 @@
19
41
 
20
42
  #### Bugfixes {: #3.88.0-rest-api-bugfix }
21
43
 
22
- - Fixed error case where worker tried to aquire the app_lock for a Task that was already finished.
44
+ - Fixed error case where worker tried to aquire the app lock for a Task that was already finished.
23
45
  [#6899](https://github.com/pulp/pulpcore/issues/6899)
24
46
 
25
47
  ### Plugin API {: #3.88.0-plugin-api }
@@ -43,6 +65,29 @@ No significant changes.
43
65
 
44
66
  ---
45
67
 
68
+ ## 3.87.1 (2025-09-03) {: #3.87.1 }
69
+
70
+ ### REST API {: #3.87.1-rest-api }
71
+
72
+ #### Bugfixes {: #3.87.1-rest-api-bugfix }
73
+
74
+ - Fixed error case where worker tried to aquire the app lock for a Task that was already finished.
75
+ [#6899](https://github.com/pulp/pulpcore/issues/6899)
76
+
77
+ ### Plugin API {: #3.87.1-plugin-api }
78
+
79
+ No significant changes.
80
+
81
+ ### Pulp File {: #3.87.1-pulp-file }
82
+
83
+ No significant changes.
84
+
85
+ ### Pulp Cert Guard {: #3.87.1-pulp-cert-guard }
86
+
87
+ No significant changes.
88
+
89
+ ---
90
+
46
91
  ## 3.87.0 (2025-08-29) {: #3.87.0 }
47
92
 
48
93
  ### REST API {: #3.87.0-rest-api }
@@ -72,7 +117,7 @@ No significant changes.
72
117
 
73
118
  #### Features {: #3.86.0-rest-api-feature }
74
119
 
75
- - Added a configurable bucket boundary for API request duration metric using the OTEL_PULP_API_HISTOGRAM_BUCKETS setting.
120
+ - Added a configurable bucket boundary for API request duration metric using the `OTEL_PULP_API_HISTOGRAM_BUCKETS` setting.
76
121
  [#6845](https://github.com/pulp/pulpcore/issues/6845)
77
122
 
78
123
  #### Bugfixes {: #3.86.0-rest-api-bugfix }
@@ -85,7 +130,7 @@ No significant changes.
85
130
 
86
131
  #### Improved Documentation {: #3.86.0-rest-api-doc }
87
132
 
88
- - Updated documentation for the TASK_DIAGNOSTICS setting.
133
+ - Updated documentation for the `TASK_DIAGNOSTICS` setting.
89
134
  [#6854](https://github.com/pulp/pulpcore/issues/6854)
90
135
 
91
136
  ### Plugin API {: #3.86.0-plugin-api }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pulpcore
3
- Version: 3.88.0
3
+ Version: 3.89.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
@@ -46,7 +46,7 @@ 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
48
  Requires-Dist: protobuf<7.0,>=4.21.1
49
- Requires-Dist: pulp-glue<0.36,>=0.28.0
49
+ Requires-Dist: pulp-glue<0.37,>=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
@@ -6,6 +6,6 @@ class PulpCertGuardPluginAppConfig(PulpPluginAppConfig):
6
6
 
7
7
  name = "pulp_certguard.app"
8
8
  label = "certguard"
9
- version = "3.88.0"
9
+ version = "3.89.0"
10
10
  python_package_name = "pulpcore"
11
11
  domain_compatible = True
@@ -8,6 +8,6 @@ class PulpFilePluginAppConfig(PulpPluginAppConfig):
8
8
 
9
9
  name = "pulp_file.app"
10
10
  label = "file"
11
- version = "3.88.0"
11
+ version = "3.89.0"
12
12
  python_package_name = "pulpcore"
13
13
  domain_compatible = True
@@ -239,7 +239,7 @@ class PulpAppConfig(PulpPluginAppConfig):
239
239
  label = "core"
240
240
 
241
241
  # The version of this app
242
- version = "3.88.0"
242
+ version = "3.89.0"
243
243
 
244
244
  # The python package name providing this app
245
245
  python_package_name = "pulpcore"
@@ -0,0 +1,15 @@
1
+ # Generated by Django 4.2.23 on 2025-09-04 08:58
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", "0142_task_result"),
11
+ ]
12
+
13
+ operations = [
14
+ RequireVersion("core", "3.87"),
15
+ ]
@@ -12,7 +12,7 @@ from django.conf import settings
12
12
  from django.contrib.postgres.fields import ArrayField, HStoreField
13
13
  from django.contrib.postgres.indexes import GinIndex
14
14
  from django.core.serializers.json import DjangoJSONEncoder
15
- from django.db import connection, models
15
+ from django.db import models
16
16
  from django.utils import timezone
17
17
  from django_lifecycle import hook, AFTER_CREATE
18
18
 
@@ -21,10 +21,10 @@ from pulpcore.app.models import (
21
21
  BaseModel,
22
22
  GenericRelationModel,
23
23
  )
24
- from pulpcore.app.models.status import BaseAppStatus
24
+ from pulpcore.app.models.status import AppStatus, BaseAppStatus
25
25
  from pulpcore.app.models.fields import EncryptedJSONField
26
26
  from pulpcore.constants import TASK_CHOICES, TASK_INCOMPLETE_STATES, TASK_STATES
27
- from pulpcore.exceptions import AdvisoryLockError, exception_to_dict
27
+ from pulpcore.exceptions import exception_to_dict
28
28
  from pulpcore.app.util import get_domain_pk, current_task
29
29
  from pulpcore.app.loggers import deprecation_logger
30
30
 
@@ -141,7 +141,7 @@ class Task(BaseModel, AutoAddObjPermsMixin):
141
141
  enc_kwargs = EncryptedJSONField(null=True, encoder=DjangoJSONEncoder)
142
142
 
143
143
  worker = models.ForeignKey("Worker", null=True, related_name="tasks", on_delete=models.SET_NULL)
144
- # This field is supposed to replace the session advisory locks to protect tasks.
144
+ # This field is the lock to protect tasks.
145
145
  app_lock = models.ForeignKey(
146
146
  "AppStatus", null=True, related_name="tasks", on_delete=models.SET_NULL
147
147
  )
@@ -167,22 +167,6 @@ class Task(BaseModel, AutoAddObjPermsMixin):
167
167
  def __str__(self):
168
168
  return "Task: {name} [{state}]".format(name=self.name, state=self.state)
169
169
 
170
- def __enter__(self):
171
- self.lock = _uuid_to_advisory_lock(self.pk.int)
172
- with connection.cursor() as cursor:
173
- cursor.execute("SELECT pg_try_advisory_lock(%s)", [self.lock])
174
- acquired = cursor.fetchone()[0]
175
- if not acquired:
176
- raise AdvisoryLockError("Could not acquire lock.")
177
- return self
178
-
179
- def __exit__(self, exc_type, exc_value, traceback):
180
- with connection.cursor() as cursor:
181
- cursor.execute("SELECT pg_advisory_unlock(%s)", [self.lock])
182
- released = cursor.fetchone()[0]
183
- if not released:
184
- raise RuntimeError("Lock not held.")
185
-
186
170
  @staticmethod
187
171
  def current_id():
188
172
  """
@@ -218,7 +202,11 @@ class Task(BaseModel, AutoAddObjPermsMixin):
218
202
  This updates the :attr:`started_at` and sets the :attr:`state` to :attr:`RUNNING`.
219
203
  """
220
204
  started_at = timezone.now()
221
- rows = Task.objects.filter(pk=self.pk, state=TASK_STATES.WAITING).update(
205
+ rows = Task.objects.filter(
206
+ pk=self.pk,
207
+ state=TASK_STATES.WAITING,
208
+ app_lock=AppStatus.objects.current(),
209
+ ).update(
222
210
  state=TASK_STATES.RUNNING,
223
211
  started_at=started_at,
224
212
  )
@@ -254,7 +242,11 @@ class Task(BaseModel, AutoAddObjPermsMixin):
254
242
  # Only set the state to finished if it's running. This is important for when the task has
255
243
  # been canceled, so we don't move the task from canceled to finished.
256
244
  finished_at = timezone.now()
257
- rows = Task.objects.filter(pk=self.pk, state=TASK_STATES.RUNNING).update(
245
+ rows = Task.objects.filter(
246
+ pk=self.pk,
247
+ state=TASK_STATES.RUNNING,
248
+ app_lock=AppStatus.objects.current(),
249
+ ).update(
258
250
  state=TASK_STATES.COMPLETED,
259
251
  finished_at=finished_at,
260
252
  result=result,
@@ -289,7 +281,11 @@ class Task(BaseModel, AutoAddObjPermsMixin):
289
281
  finished_at = timezone.now()
290
282
  tb_str = "".join(traceback.format_tb(tb))
291
283
  error = exception_to_dict(exc, tb_str)
292
- rows = Task.objects.filter(pk=self.pk, state=TASK_STATES.RUNNING).update(
284
+ rows = Task.objects.filter(
285
+ pk=self.pk,
286
+ state=TASK_STATES.RUNNING,
287
+ app_lock=AppStatus.objects.current(),
288
+ ).update(
293
289
  state=TASK_STATES.FAILED,
294
290
  finished_at=finished_at,
295
291
  error=error,
@@ -336,7 +332,11 @@ class Task(BaseModel, AutoAddObjPermsMixin):
336
332
  task_data = {}
337
333
  if reason:
338
334
  task_data["error"] = {"reason": reason}
339
- rows = Task.objects.filter(pk=self.pk, state=TASK_STATES.CANCELING).update(
335
+ rows = Task.objects.filter(
336
+ pk=self.pk,
337
+ state=TASK_STATES.CANCELING,
338
+ app_lock=AppStatus.objects.current(),
339
+ ).update(
340
340
  state=final_state,
341
341
  finished_at=finished_at,
342
342
  **task_data,
@@ -216,8 +216,6 @@ TIME_ZONE = "UTC"
216
216
 
217
217
  USE_I18N = "USE_I18N", True
218
218
 
219
- USE_L10N = True
220
-
221
219
  USE_TZ = True
222
220
 
223
221
 
@@ -7,6 +7,7 @@ import socket
7
7
  import struct
8
8
  from gettext import gettext as _
9
9
  from datetime import datetime, timedelta
10
+ from datetime import timezone as dt_timezone
10
11
 
11
12
  from aiohttp.client_exceptions import ClientResponseError, ClientConnectionError
12
13
  from aiohttp.web import FileResponse, StreamResponse, HTTPOk
@@ -115,7 +116,7 @@ class DistroListings(HTTPOk):
115
116
  if path == "":
116
117
  path = settings.CONTENT_PATH_PREFIX
117
118
  html = Handler.render_html(directory_list, path=path)
118
- super().__init__(body=html, headers={"Content-Type": "text/html"})
119
+ super().__init__(text=html, headers={"Content-Type": "text/html"})
119
120
 
120
121
 
121
122
  class CheckpointListings(HTTPOk):
@@ -137,7 +138,7 @@ class CheckpointListings(HTTPOk):
137
138
  dates = {f"{Handler._format_checkpoint_timestamp(s)}/": s for s in checkpoints}
138
139
  directory_list = dates.keys()
139
140
  html = Handler.render_html(directory_list, dates=dates, path=path)
140
- super().__init__(body=html, headers={"Content-Type": "text/html"})
141
+ super().__init__(text=html, headers={"Content-Type": "text/html"})
141
142
 
142
143
 
143
144
  class ArtifactNotFound(Exception):
@@ -439,9 +440,9 @@ class Handler:
439
440
  else:
440
441
  raise PathNotResolved(path)
441
442
 
442
- request_timestamp = request_timestamp.replace(tzinfo=timezone.utc)
443
+ request_timestamp = request_timestamp.replace(tzinfo=dt_timezone.utc)
443
444
  # Future timestamps are not allowed for checkpoints
444
- if request_timestamp > datetime.now(tz=timezone.utc):
445
+ if request_timestamp > datetime.now(tz=dt_timezone.utc):
445
446
  raise PathNotResolved(path)
446
447
  # The timestamp is truncated to seconds, so we need to cover the whole second
447
448
  request_timestamp = request_timestamp.replace(microsecond=999999)
@@ -787,7 +788,7 @@ class Handler:
787
788
  elif dir_list:
788
789
  return HTTPOk(
789
790
  headers={"Content-Type": "text/html"},
790
- body=self.render_html(
791
+ text=self.render_html(
791
792
  dir_list, path=request.path, dates=dates, sizes=sizes
792
793
  ),
793
794
  )
@@ -862,7 +863,7 @@ class Handler:
862
863
  elif dir_list:
863
864
  return HTTPOk(
864
865
  headers={"Content-Type": "text/html"},
865
- body=self.render_html(
866
+ text=self.render_html(
866
867
  dir_list, path=request.path, dates=dates, sizes=sizes
867
868
  ),
868
869
  )
@@ -1,5 +1,4 @@
1
1
  import asyncio
2
- import contextlib
3
2
  import contextvars
4
3
  import importlib
5
4
  import logging
@@ -11,7 +10,7 @@ import threading
11
10
  from gettext import gettext as _
12
11
 
13
12
  from django.conf import settings
14
- from django.db import connection, transaction
13
+ from django.db import connection
15
14
  from django.db.models import Model
16
15
  from django_guid import get_guid
17
16
  from pulpcore.app.apps import MODULE_PLUGIN_VERSIONS
@@ -26,6 +25,7 @@ from pulpcore.constants import (
26
25
  TASK_INCOMPLETE_STATES,
27
26
  TASK_STATES,
28
27
  IMMEDIATE_TIMEOUT,
28
+ TASK_WAKEUP_HANDLE,
29
29
  TASK_WAKEUP_UNBLOCK,
30
30
  )
31
31
  from pulpcore.middleware import x_task_diagnostics_var
@@ -49,7 +49,7 @@ def _validate_and_get_resources(resources):
49
49
  return list(resource_set)
50
50
 
51
51
 
52
- def wakeup_worker(reason="unknown"):
52
+ def wakeup_worker(reason):
53
53
  # Notify workers
54
54
  with connection.connection.cursor() as cursor:
55
55
  cursor.execute("SELECT pg_notify('pulp_worker_wakeup', %s)", (reason,))
@@ -222,67 +222,61 @@ def dispatch(
222
222
  resources = exclusive_resources + [f"shared:{resource}" for resource in shared_resources]
223
223
 
224
224
  notify_workers = False
225
- with contextlib.ExitStack() as stack:
226
- with transaction.atomic():
227
- task = Task.objects.create(
228
- state=TASK_STATES.WAITING,
229
- logging_cid=(get_guid()),
230
- task_group=task_group,
231
- name=function_name,
232
- enc_args=args,
233
- enc_kwargs=kwargs,
234
- parent_task=Task.current(),
235
- reserved_resources_record=resources,
236
- versions=versions,
237
- immediate=immediate,
238
- deferred=deferred,
239
- profile_options=x_task_diagnostics_var.get(None),
240
- app_lock=(immediate and AppStatus.objects.current()) or None,
241
- )
242
- task.refresh_from_db() # The database may have assigned a timestamp for us.
243
- if immediate:
244
- # Grab the advisory lock before the task hits the db.
245
- stack.enter_context(task)
246
- else:
247
- notify_workers = True
248
- if immediate:
249
- prior_tasks = Task.objects.filter(
250
- state__in=TASK_INCOMPLETE_STATES, pulp_created__lt=task.pulp_created
251
- )
252
- # Compile a list of resources that must not be taken by other tasks.
253
- colliding_resources = (
254
- shared_resources
255
- + exclusive_resources
256
- + [f"shared:{resource}" for resource in exclusive_resources]
257
- )
258
- # Can we execute this task immediately?
259
- if (
260
- not colliding_resources
261
- or not prior_tasks.filter(
262
- reserved_resources_record__overlap=colliding_resources
263
- ).exists()
264
- ):
265
- task.unblock()
266
-
267
- cur_dir = os.getcwd()
268
- with tempfile.TemporaryDirectory(dir=settings.WORKING_DIRECTORY) as working_dir:
269
- os.chdir(working_dir)
270
- try:
271
- execute_task(task)
272
- finally:
273
- # Whether the task fails or not, we should always restore the workdir.
274
- os.chdir(cur_dir)
275
-
276
- if resources:
277
- notify_workers = True
278
- elif deferred:
279
- # Resources are blocked. Let the others handle it.
225
+ task = Task.objects.create(
226
+ state=TASK_STATES.WAITING,
227
+ logging_cid=(get_guid()),
228
+ task_group=task_group,
229
+ name=function_name,
230
+ enc_args=args,
231
+ enc_kwargs=kwargs,
232
+ parent_task=Task.current(),
233
+ reserved_resources_record=resources,
234
+ versions=versions,
235
+ immediate=immediate,
236
+ deferred=deferred,
237
+ profile_options=x_task_diagnostics_var.get(None),
238
+ app_lock=None if not immediate else AppStatus.objects.current(), # Lazy evaluation...
239
+ )
240
+ task.refresh_from_db() # The database will have assigned a timestamp for us.
241
+ if immediate:
242
+ prior_tasks = Task.objects.filter(
243
+ state__in=TASK_INCOMPLETE_STATES, pulp_created__lt=task.pulp_created
244
+ )
245
+ # Compile a list of resources that must not be taken by other tasks.
246
+ colliding_resources = (
247
+ shared_resources
248
+ + exclusive_resources
249
+ + [f"shared:{resource}" for resource in exclusive_resources]
250
+ )
251
+ # Can we execute this task immediately?
252
+ if (
253
+ not colliding_resources
254
+ or not prior_tasks.filter(
255
+ reserved_resources_record__overlap=colliding_resources
256
+ ).exists()
257
+ ):
258
+ task.unblock()
259
+
260
+ cur_dir = os.getcwd()
261
+ with tempfile.TemporaryDirectory(dir=settings.WORKING_DIRECTORY) as working_dir:
262
+ os.chdir(working_dir)
263
+ try:
264
+ execute_task(task)
265
+ finally:
266
+ # Whether the task fails or not, we should always restore the workdir.
267
+ os.chdir(cur_dir)
268
+
269
+ if resources:
280
270
  notify_workers = True
281
- task.app_lock = None
282
- task.save()
283
- else:
284
- task.set_canceling()
285
- task.set_canceled(TASK_STATES.CANCELED, "Resources temporarily unavailable.")
271
+ elif deferred:
272
+ # Resources are blocked. Let the others handle it.
273
+ task.app_lock = None
274
+ task.save()
275
+ else:
276
+ task.set_canceling()
277
+ task.set_canceled(TASK_STATES.CANCELED, "Resources temporarily unavailable.")
278
+ else:
279
+ notify_workers = True
286
280
  if notify_workers:
287
281
  wakeup_worker(TASK_WAKEUP_UNBLOCK)
288
282
  return task
@@ -304,7 +298,7 @@ def cancel_task(task_id):
304
298
  task = Task.objects.select_related("pulp_domain").get(pk=task_id)
305
299
 
306
300
  if task.state in TASK_FINAL_STATES:
307
- # If the task is already done, just stop
301
+ # If the task is already done, just stop.
308
302
  _logger.debug(
309
303
  "Task [{task_id}] in domain: {name} already in a final state: {state}".format(
310
304
  task_id=task_id, name=task.pulp_domain.name, state=task.state
@@ -315,12 +309,14 @@ def cancel_task(task_id):
315
309
  "Canceling task: {id} in domain: {name}".format(id=task_id, name=task.pulp_domain.name)
316
310
  )
317
311
 
318
- # This is the only valid transition without holding the task lock
312
+ # This is the only valid transition without holding the task lock.
319
313
  task.set_canceling()
320
- # Notify the worker that might be running that task and other workers to clean up
314
+ # Notify the worker that might be running that task.
321
315
  with connection.cursor() as cursor:
322
- cursor.execute("SELECT pg_notify('pulp_worker_cancel', %s)", (str(task.pk),))
323
- cursor.execute("NOTIFY pulp_worker_wakeup")
316
+ if task.app_lock is None:
317
+ wakeup_worker(TASK_WAKEUP_HANDLE)
318
+ else:
319
+ cursor.execute("SELECT pg_notify('pulp_worker_cancel', %s)", (str(task.pk),))
324
320
  return task
325
321
 
326
322