pulpcore 3.87.1__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.87.1 → pulpcore-3.89.0}/CHANGES.md +60 -3
  2. {pulpcore-3.87.1 → pulpcore-3.89.0}/PKG-INFO +2 -2
  3. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/app/__init__.py +1 -1
  4. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/app/__init__.py +1 -1
  5. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/app/tasks/publishing.py +5 -0
  6. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/app/tasks/synchronizing.py +4 -0
  7. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/apps.py +1 -1
  8. pulpcore-3.89.0/pulpcore/app/migrations/0142_task_result.py +21 -0
  9. pulpcore-3.89.0/pulpcore/app/migrations/0143_require_app_lock_zdu.py +15 -0
  10. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/models/task.py +43 -25
  11. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/serializers/task.py +5 -0
  12. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/settings.py +0 -2
  13. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/tasks/base.py +9 -2
  14. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/content/handler.py +7 -6
  15. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/serializers/__init__.py +2 -0
  16. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/serializers/content.py +1 -1
  17. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tasking/tasks.py +67 -71
  18. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tasking/worker.py +91 -89
  19. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_status.py +1 -1
  20. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_upload.py +3 -1
  21. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_distributions.py +6 -2
  22. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_tasks.py +20 -0
  23. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/utils.py +1 -1
  24. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/metrics/test_aiohttp_instrumentation.py +4 -1
  25. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/models/test_task.py +5 -3
  26. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/stages/test_artifactdownloader.py +2 -2
  27. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/viewsets/test_viewset_base.py +3 -3
  28. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore.egg-info/PKG-INFO +2 -2
  29. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore.egg-info/SOURCES.txt +2 -0
  30. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore.egg-info/requires.txt +1 -1
  31. {pulpcore-3.87.1 → pulpcore-3.89.0}/pyproject.toml +3 -3
  32. {pulpcore-3.87.1 → pulpcore-3.89.0}/CODE_OF_CONDUCT.md +0 -0
  33. {pulpcore-3.87.1 → pulpcore-3.89.0}/COMMITMENT +0 -0
  34. {pulpcore-3.87.1 → pulpcore-3.89.0}/CONTRIBUTING.md +0 -0
  35. {pulpcore-3.87.1 → pulpcore-3.89.0}/COPYRIGHT +0 -0
  36. {pulpcore-3.87.1 → pulpcore-3.89.0}/LICENSE +0 -0
  37. {pulpcore-3.87.1 → pulpcore-3.89.0}/MANIFEST.in +0 -0
  38. {pulpcore-3.87.1 → pulpcore-3.89.0}/README.md +0 -0
  39. {pulpcore-3.87.1 → pulpcore-3.89.0}/ci_requirements.txt +0 -0
  40. {pulpcore-3.87.1 → pulpcore-3.89.0}/functest_requirements.txt +0 -0
  41. {pulpcore-3.87.1 → pulpcore-3.89.0}/manage.py +0 -0
  42. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/__init__.py +0 -0
  43. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/app/migrations/0001_initial.py +0 -0
  44. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/app/migrations/0002_alter_rhsmcertguard_contentguard_ptr_and_more.py +0 -0
  45. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/app/migrations/__init__.py +0 -0
  46. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/app/models.py +0 -0
  47. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/app/serializers.py +0 -0
  48. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/app/viewsets.py +0 -0
  49. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/pytest_plugin.py +0 -0
  50. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/rhsm/__init__.py +0 -0
  51. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/rhsm/rhsm_check_path.py +0 -0
  52. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/__init__.py +0 -0
  53. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/__init__.py +0 -0
  54. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/api/__init__.py +0 -0
  55. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/api/test_rhsm_certguard.py +0 -0
  56. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/api/test_x509_certguard.py +0 -0
  57. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/katello-default-ca.crt +0 -0
  58. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/katello-default-ca.key +0 -0
  59. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/trusted_but_expired.pem +0 -0
  60. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/uber.cert +0 -0
  61. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/untrusted_cert-key.pem +0 -0
  62. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/untrusted_cert.pem +0 -0
  63. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/1514454871848760713-key.pem +0 -0
  64. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/1514454871848760713.pem +0 -0
  65. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/159442575569388840-key.pem +0 -0
  66. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/159442575569388840.pem +0 -0
  67. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/4260035510644027985-key.pem +0 -0
  68. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/4260035510644027985.pem +0 -0
  69. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/5527980418107729172-key.pem +0 -0
  70. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/5527980418107729172.pem +0 -0
  71. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/certificates/ca.pem +0 -0
  72. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/genca.sh +0 -0
  73. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/keys/ca.pem +0 -0
  74. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/ca.pem +0 -0
  75. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/client.pem +0 -0
  76. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/server.pem +0 -0
  77. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/un_urlencoded_cert.txt +0 -0
  78. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/untrusted_client.pem +0 -0
  79. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/x509/genall.sh +0 -0
  80. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/x509/genca.sh +0 -0
  81. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/x509/genclient.sh +0 -0
  82. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/x509/gensrv.sh +0 -0
  83. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/x509/keys/ca.pem +0 -0
  84. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/x509/keys/client.pem +0 -0
  85. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/artifacts/x509/keys/server.pem +0 -0
  86. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/conftest.py +0 -0
  87. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/functional/constants.py +0 -0
  88. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/unit/__init__.py +0 -0
  89. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/unit/certdata.py +0 -0
  90. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_certguard/tests/unit/test_rhsm_check_path.py +0 -0
  91. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/__init__.py +0 -0
  92. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/app/migrations/0001_initial_squashed_0016_add_domain.py +0 -0
  93. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/app/migrations/0017_alter_filealternatecontentsource_alternatecontentsource_ptr_and_more.py +0 -0
  94. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/app/migrations/__init__.py +0 -0
  95. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/app/modelresource.py +0 -0
  96. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/app/models.py +0 -0
  97. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/app/replica.py +0 -0
  98. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/app/serializers.py +0 -0
  99. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/app/tasks/__init__.py +0 -0
  100. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/app/viewsets.py +0 -0
  101. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/manifest.py +0 -0
  102. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/pytest_plugin.py +0 -0
  103. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/tests/__init__.py +0 -0
  104. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/tests/functional/__init__.py +0 -0
  105. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/tests/functional/api/__init__.py +0 -0
  106. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_acs.py +0 -0
  107. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_auto_publish.py +0 -0
  108. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_bad_sync.py +0 -0
  109. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_content_labels.py +0 -0
  110. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_crud_content_unit.py +0 -0
  111. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_crud_remotes.py +0 -0
  112. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_domains.py +0 -0
  113. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_download_policies.py +0 -0
  114. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_generic_list.py +0 -0
  115. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_labels.py +0 -0
  116. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_mime_types.py +0 -0
  117. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_publish.py +0 -0
  118. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_pulp_export.py +0 -0
  119. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_rbac.py +0 -0
  120. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_remote_settings.py +0 -0
  121. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/tests/functional/api/test_sync.py +0 -0
  122. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/tests/unit/__init__.py +0 -0
  123. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/tests/unit/test_safe_paths.py +0 -0
  124. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulp_file/tests/unit/test_serializers.py +0 -0
  125. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/__init__.py +0 -0
  126. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/__init__.py +0 -0
  127. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/access_policy.py +0 -0
  128. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/authentication.py +0 -0
  129. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/checks.py +0 -0
  130. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/entrypoint.py +0 -0
  131. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/files.py +0 -0
  132. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/global_access_conditions.py +0 -0
  133. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/importexport.py +0 -0
  134. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/loggers.py +0 -0
  135. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/manage.py +0 -0
  136. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/management/__init__.py +0 -0
  137. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/management/commands/__init__.py +0 -0
  138. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/management/commands/add-signing-service.py +0 -0
  139. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/management/commands/analyze-publication.py +0 -0
  140. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/management/commands/clean-up-progress-reports.py +0 -0
  141. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/management/commands/datarepair-2327.py +0 -0
  142. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/management/commands/dump-permissions.py +0 -0
  143. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/management/commands/dump-publications-to-fs.py +0 -0
  144. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/management/commands/handle-artifact-checksums.py +0 -0
  145. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/management/commands/migrationstat.py +0 -0
  146. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/management/commands/openapi.py +0 -0
  147. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/management/commands/optimizemigration.py +0 -0
  148. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/management/commands/rebasemigrations.py +0 -0
  149. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/management/commands/remove-plugin.py +0 -0
  150. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/management/commands/remove-signing-service.py +0 -0
  151. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/management/commands/repository-size.py +0 -0
  152. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/management/commands/reset-admin-password.py +0 -0
  153. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/management/commands/rotate-db-key.py +0 -0
  154. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0001_squashed_0090_char_to_text_field.py +0 -0
  155. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0091_systemid.py +0 -0
  156. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0092_alter_upload_options.py +0 -0
  157. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0093_add_info_field_repositoryversion.py +0 -0
  158. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0094_protect_repository_content.py +0 -0
  159. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0095_artifactdistribution.py +0 -0
  160. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0096_alter_task_logging_cid.py +0 -0
  161. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0097_remove_telemetry_task_schedule.py +0 -0
  162. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0098_pulp_labels.py +0 -0
  163. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0099_versions_field.py +0 -0
  164. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0100_upstreampulp.py +0 -0
  165. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0101_add_domain.py +0 -0
  166. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0102_add_domain_relations.py +0 -0
  167. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0103_alter_export_task.py +0 -0
  168. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0104_delete_label.py +0 -0
  169. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0105_abstract_uuid_gen.py +0 -0
  170. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0106_alter_artifactdistribution_distribution_ptr_and_more.py +0 -0
  171. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0107_distribution_hidden.py +0 -0
  172. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0108_task_versions.py +0 -0
  173. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0109_contentartifact_relative_path_index.py +0 -0
  174. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0110_apiappstatus.py +0 -0
  175. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0111_task_enc_args_task_enc_kwargs.py +0 -0
  176. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0112_alter_upstreampulp_options.py +0 -0
  177. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0113_headercontentguard.py +0 -0
  178. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0114_remove_task_args_remove_task_kwargs.py +0 -0
  179. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0115_compositecontentguard.py +0 -0
  180. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0116_alter_remoteartifact_md5_alter_remoteartifact_sha1_and_more.py +0 -0
  181. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0117_task_unblocked_at.py +0 -0
  182. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0118_task_core_task_unblock_2276a4_idx_and_more.py +0 -0
  183. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0119_grouprole_core_groupr_object__250e22_idx_and_more.py +0 -0
  184. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0120_get_url_removal.py +0 -0
  185. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0121_add_profile_artifacts_table.py +0 -0
  186. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0122_record_last_replication_timestamp.py +0 -0
  187. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0123_upstreampulp_q_select.py +0 -0
  188. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0124_task_deferred_task_immediate.py +0 -0
  189. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0125_openpgpdistribution_openpgpkeyring_openpgppublickey_and_more.py +0 -0
  190. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0126_remoteartifact_failed_at.py +0 -0
  191. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0127_remove_upstreampulp_pulp_label_select.py +0 -0
  192. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0128_domain_pulp_labels.py +0 -0
  193. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0129_content_pulp_labels.py +0 -0
  194. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0130_upstreampulp_policy.py +0 -0
  195. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0131_distribution_checkpoint_publication_checkpoint.py +0 -0
  196. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0132_alter_content_options.py +0 -0
  197. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0132_task_profile_options.py +0 -0
  198. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0133_repositoryversion_content_ids.py +0 -0
  199. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0134_task_insert_trigger.py +0 -0
  200. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0135_task_pulp_task_resources_index.py +0 -0
  201. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0136_delete_basedistribution.py +0 -0
  202. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0137_appstatus.py +0 -0
  203. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0138_vulnerabilityreport.py +0 -0
  204. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0139_task_app_lock.py +0 -0
  205. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0140_require_appstatus_zdu.py +0 -0
  206. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/0141_alter_appstatus_name.py +0 -0
  207. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/migrations/__init__.py +0 -0
  208. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/mime_types.py +0 -0
  209. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/modelresource.py +0 -0
  210. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/models/__init__.py +0 -0
  211. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/models/access_policy.py +0 -0
  212. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/models/acs.py +0 -0
  213. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/models/analytics.py +0 -0
  214. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/models/base.py +0 -0
  215. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/models/content.py +0 -0
  216. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/models/domain.py +0 -0
  217. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/models/exporter.py +0 -0
  218. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/models/fields.py +0 -0
  219. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/models/generic.py +0 -0
  220. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/models/importer.py +0 -0
  221. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/models/openpgp.py +0 -0
  222. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/models/progress.py +0 -0
  223. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/models/publication.py +0 -0
  224. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/models/replica.py +0 -0
  225. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/models/repository.py +0 -0
  226. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/models/role.py +0 -0
  227. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/models/status.py +0 -0
  228. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/models/storage.py +0 -0
  229. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/models/upload.py +0 -0
  230. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/models/vulnerability_report.py +0 -0
  231. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/netutil.py +0 -0
  232. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/openpgp.py +0 -0
  233. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/protobuf/__init__.py +0 -0
  234. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/protobuf/analytics_pb2.py +0 -0
  235. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/pulp_hashlib.py +0 -0
  236. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/pulpcore_gunicorn_application.py +0 -0
  237. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/redis_connection.py +0 -0
  238. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/replica.py +0 -0
  239. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/response.py +0 -0
  240. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/role_util.py +0 -0
  241. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/serializers/__init__.py +0 -0
  242. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/serializers/access_policy.py +0 -0
  243. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/serializers/acs.py +0 -0
  244. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/serializers/base.py +0 -0
  245. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/serializers/content.py +0 -0
  246. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/serializers/domain.py +0 -0
  247. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/serializers/exporter.py +0 -0
  248. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/serializers/fields.py +0 -0
  249. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/serializers/importer.py +0 -0
  250. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/serializers/openpgp.py +0 -0
  251. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/serializers/orphans.py +0 -0
  252. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/serializers/progress.py +0 -0
  253. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/serializers/publication.py +0 -0
  254. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/serializers/purge.py +0 -0
  255. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/serializers/reclaim.py +0 -0
  256. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/serializers/repair.py +0 -0
  257. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/serializers/replica.py +0 -0
  258. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/serializers/repository.py +0 -0
  259. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/serializers/status.py +0 -0
  260. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/serializers/upload.py +0 -0
  261. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/serializers/user.py +0 -0
  262. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/serializers/vulnerability_report.py +0 -0
  263. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/tasks/__init__.py +0 -0
  264. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/tasks/analytics.py +0 -0
  265. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/tasks/export.py +0 -0
  266. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/tasks/importer.py +0 -0
  267. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/tasks/migrate.py +0 -0
  268. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/tasks/orphan.py +0 -0
  269. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/tasks/purge.py +0 -0
  270. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/tasks/reclaim_space.py +0 -0
  271. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/tasks/replica.py +0 -0
  272. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/tasks/repository.py +0 -0
  273. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/tasks/telemetry.py +0 -0
  274. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/tasks/test.py +0 -0
  275. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/tasks/upload.py +0 -0
  276. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/tasks/vulnerability_report.py +0 -0
  277. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/templates/rest_framework/api.html +0 -0
  278. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/templatetags/__init__.py +0 -0
  279. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/templatetags/pulp_urls.py +0 -0
  280. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/urls.py +0 -0
  281. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/util.py +0 -0
  282. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/views/__init__.py +0 -0
  283. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/views/importer.py +0 -0
  284. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/views/orphans.py +0 -0
  285. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/views/repair.py +0 -0
  286. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/views/status.py +0 -0
  287. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/viewsets/__init__.py +0 -0
  288. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/viewsets/access_policy.py +0 -0
  289. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/viewsets/acs.py +0 -0
  290. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/viewsets/base.py +0 -0
  291. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/viewsets/content.py +0 -0
  292. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/viewsets/custom_filters.py +0 -0
  293. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/viewsets/domain.py +0 -0
  294. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/viewsets/exporter.py +0 -0
  295. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/viewsets/importer.py +0 -0
  296. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/viewsets/openpgp.py +0 -0
  297. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/viewsets/orphans.py +0 -0
  298. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/viewsets/publication.py +0 -0
  299. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/viewsets/reclaim.py +0 -0
  300. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/viewsets/replica.py +0 -0
  301. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/viewsets/repository.py +0 -0
  302. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/viewsets/task.py +0 -0
  303. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/viewsets/upload.py +0 -0
  304. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/viewsets/user.py +0 -0
  305. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/viewsets/vulnerability_report.py +0 -0
  306. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/app/wsgi.py +0 -0
  307. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/backends.py +0 -0
  308. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/cache/__init__.py +0 -0
  309. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/cache/cache.py +0 -0
  310. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/constants.py +0 -0
  311. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/content/__init__.py +0 -0
  312. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/content/authentication.py +0 -0
  313. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/content/entrypoint.py +0 -0
  314. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/content/instrumentation.py +0 -0
  315. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/download/__init__.py +0 -0
  316. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/download/base.py +0 -0
  317. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/download/factory.py +0 -0
  318. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/download/file.py +0 -0
  319. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/download/http.py +0 -0
  320. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/exceptions/__init__.py +0 -0
  321. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/exceptions/base.py +0 -0
  322. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/exceptions/plugin.py +0 -0
  323. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/exceptions/validation.py +0 -0
  324. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/filters.py +0 -0
  325. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/metrics.py +0 -0
  326. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/middleware.py +0 -0
  327. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/migrations.py +0 -0
  328. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/openapi/__init__.py +0 -0
  329. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/openapi/hooks.py +0 -0
  330. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/__init__.py +0 -0
  331. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/access_policy.py +0 -0
  332. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/actions.py +0 -0
  333. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/apps.py +0 -0
  334. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/authentication/__init__.py +0 -0
  335. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/cache/__init__.py +0 -0
  336. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/constants.py +0 -0
  337. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/content.py +0 -0
  338. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/download/__init__.py +0 -0
  339. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/exceptions.py +0 -0
  340. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/files.py +0 -0
  341. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/importexport.py +0 -0
  342. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/migrations.py +0 -0
  343. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/modelresources.py +0 -0
  344. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/models/__init__.py +0 -0
  345. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/models/role.py +0 -0
  346. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/publication_utils.py +0 -0
  347. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/pulp_hashlib.py +0 -0
  348. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/replica.py +0 -0
  349. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/repo_version_utils.py +0 -0
  350. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/responses.py +0 -0
  351. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/stages/__init__.py +0 -0
  352. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/stages/api.py +0 -0
  353. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/stages/artifact_stages.py +0 -0
  354. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/stages/content_stages.py +0 -0
  355. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/stages/declarative_version.py +0 -0
  356. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/stages/models.py +0 -0
  357. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/storage.py +0 -0
  358. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/sync.py +0 -0
  359. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/tasking.py +0 -0
  360. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/util.py +0 -0
  361. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/viewsets/__init__.py +0 -0
  362. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/plugin/viewsets/content.py +0 -0
  363. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/pytest_plugin.py +0 -0
  364. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/responses.py +0 -0
  365. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tasking/__init__.py +0 -0
  366. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tasking/_util.py +0 -0
  367. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tasking/entrypoint.py +0 -0
  368. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tasking/kafka.py +0 -0
  369. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tasking/storage.py +0 -0
  370. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/__init__.py +0 -0
  371. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/__init__.py +0 -0
  372. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/__init__.py +0 -0
  373. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_access_policy.py +0 -0
  374. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_api_docs.py +0 -0
  375. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_api_root_rewrite.py +0 -0
  376. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_artifact_distribution.py +0 -0
  377. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_auth.py +0 -0
  378. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_correlation_id.py +0 -0
  379. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_crd_artifacts.py +0 -0
  380. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_crud_domains.py +0 -0
  381. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_filter.py +0 -0
  382. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_login.py +0 -0
  383. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_openapi_schema.py +0 -0
  384. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_openpgp.py +0 -0
  385. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_replication.py +0 -0
  386. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_repos.py +0 -0
  387. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_role.py +0 -0
  388. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_root_endpoint.py +0 -0
  389. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_scoping.py +0 -0
  390. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_signing_service.py +0 -0
  391. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_task_purge.py +0 -0
  392. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_tasking.py +0 -0
  393. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_users_groups.py +0 -0
  394. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/test_workers.py +0 -0
  395. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/__init__.py +0 -0
  396. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_checkpoint.py +0 -0
  397. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_content_access.py +0 -0
  398. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_content_cache.py +0 -0
  399. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_content_delivery.py +0 -0
  400. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_content_directory.py +0 -0
  401. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_content_path.py +0 -0
  402. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_content_promotion.py +0 -0
  403. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_contentguard.py +0 -0
  404. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_crud_repos.py +0 -0
  405. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_filesystemexport.py +0 -0
  406. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_labels.py +0 -0
  407. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_migrate.py +0 -0
  408. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_orphans.py +0 -0
  409. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_pagination.py +0 -0
  410. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_prn.py +0 -0
  411. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_proxy.py +0 -0
  412. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_pulpimport.py +0 -0
  413. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_reclaim_disk_space.py +0 -0
  414. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_repair.py +0 -0
  415. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_repo_versions.py +0 -0
  416. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/api/using_plugin/test_unlinking_repo.py +0 -0
  417. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/assets/__init__.py +0 -0
  418. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/functional/content_with_coverage.py +0 -0
  419. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/performance/__init__.py +0 -0
  420. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/performance/test_performance.py +0 -0
  421. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/__init__.py +0 -0
  422. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/conftest.py +0 -0
  423. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/content/__init__.py +0 -0
  424. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/content/test_handler.py +0 -0
  425. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/content/test_heartbeat.py +0 -0
  426. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/download/__init__.py +0 -0
  427. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/download/test_downloader_base.py +0 -0
  428. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/download/test_downloader_factory.py +0 -0
  429. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/metrics/__init__.py +0 -0
  430. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/metrics/conftest.py +0 -0
  431. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/metrics/test_django_instrumentation.py +0 -0
  432. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/migration/__init__.py +0 -0
  433. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/models/__init__.py +0 -0
  434. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/models/test_base.py +0 -0
  435. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/models/test_content.py +0 -0
  436. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/models/test_remote.py +0 -0
  437. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/models/test_repository.py +0 -0
  438. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/roles/__init__.py +0 -0
  439. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/roles/test_roles.py +0 -0
  440. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/serializers/__init__.py +0 -0
  441. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/serializers/test_base.py +0 -0
  442. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/serializers/test_domain.py +0 -0
  443. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/serializers/test_fields.py +0 -0
  444. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/serializers/test_orphans_cleanup.py +0 -0
  445. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/serializers/test_pulpexport.py +0 -0
  446. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/serializers/test_repository.py +0 -0
  447. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/serializers/test_user.py +0 -0
  448. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/stages/__init__.py +0 -0
  449. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/stages/test_stages.py +0 -0
  450. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/test_cache.py +0 -0
  451. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/test_chunked_file.py +0 -0
  452. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/test_content_guard.py +0 -0
  453. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/test_files.py +0 -0
  454. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/test_import_checks.py +0 -0
  455. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/test_pulp_urls.py +0 -0
  456. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/test_settings.py +0 -0
  457. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/test_util.py +0 -0
  458. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/test_viewsets.py +0 -0
  459. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/test_vulnerability_report.py +0 -0
  460. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore/tests/unit/viewsets/__init__.py +0 -0
  461. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore.egg-info/dependency_links.txt +0 -0
  462. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore.egg-info/entry_points.txt +0 -0
  463. {pulpcore-3.87.1 → pulpcore-3.89.0}/pulpcore.egg-info/top_level.txt +0 -0
  464. {pulpcore-3.87.1 → pulpcore-3.89.0}/setup.cfg +0 -0
  465. {pulpcore-3.87.1 → pulpcore-3.89.0}/test_requirements.txt +0 -0
  466. {pulpcore-3.87.1 → pulpcore-3.89.0}/unittest_requirements.txt +0 -0
@@ -8,13 +8,70 @@
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
+
33
+ ## 3.88.0 (2025-09-03) {: #3.88.0 }
34
+
35
+ ### REST API {: #3.88.0-rest-api }
36
+
37
+ #### Features {: #3.88.0-rest-api-feature }
38
+
39
+ - Added a `result` JSONField to the `Task` model to store the task's return value.
40
+ [#6901](https://github.com/pulp/pulpcore/issues/6901)
41
+
42
+ #### Bugfixes {: #3.88.0-rest-api-bugfix }
43
+
44
+ - Fixed error case where worker tried to aquire the app lock for a Task that was already finished.
45
+ [#6899](https://github.com/pulp/pulpcore/issues/6899)
46
+
47
+ ### Plugin API {: #3.88.0-plugin-api }
48
+
49
+ #### Deprecations {: #3.88.0-plugin-api-deprecation }
50
+
51
+ - Deprecated returning non-JSON-serializable values from tasks.
52
+ Such values will be replaced with `None`, and this workaround will be removed in version 3.100.
53
+ [#6901](https://github.com/pulp/pulpcore/issues/6901)
54
+
55
+ ### Pulp File {: #3.88.0-pulp-file }
56
+
57
+ #### Features {: #3.88.0-pulp-file-feature }
58
+
59
+ - Updated tasks to always return JSON-serializable value.
60
+ [#6901](https://github.com/pulp/pulpcore/issues/6901)
61
+
62
+ ### Pulp Cert Guard {: #3.88.0-pulp-cert-guard }
63
+
64
+ No significant changes.
65
+
66
+ ---
67
+
11
68
  ## 3.87.1 (2025-09-03) {: #3.87.1 }
12
69
 
13
70
  ### REST API {: #3.87.1-rest-api }
14
71
 
15
72
  #### Bugfixes {: #3.87.1-rest-api-bugfix }
16
73
 
17
- - Fixed error case where worker tried to aquire the app_lock for a Task that was already finished.
74
+ - Fixed error case where worker tried to aquire the app lock for a Task that was already finished.
18
75
  [#6899](https://github.com/pulp/pulpcore/issues/6899)
19
76
 
20
77
  ### Plugin API {: #3.87.1-plugin-api }
@@ -60,7 +117,7 @@ No significant changes.
60
117
 
61
118
  #### Features {: #3.86.0-rest-api-feature }
62
119
 
63
- - 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.
64
121
  [#6845](https://github.com/pulp/pulpcore/issues/6845)
65
122
 
66
123
  #### Bugfixes {: #3.86.0-rest-api-bugfix }
@@ -73,7 +130,7 @@ No significant changes.
73
130
 
74
131
  #### Improved Documentation {: #3.86.0-rest-api-doc }
75
132
 
76
- - Updated documentation for the TASK_DIAGNOSTICS setting.
133
+ - Updated documentation for the `TASK_DIAGNOSTICS` setting.
77
134
  [#6854](https://github.com/pulp/pulpcore/issues/6854)
78
135
 
79
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.87.1
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.87.1"
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.87.1"
11
+ version = "3.89.0"
12
12
  python_package_name = "pulpcore"
13
13
  domain_compatible = True
@@ -13,6 +13,7 @@ from pulpcore.plugin.models import (
13
13
  )
14
14
 
15
15
  from pulp_file.app.models import FilePublication
16
+ from pulp_file.app.serializers import FilePublicationSerializer
16
17
  from pulp_file.manifest import Entry, Manifest
17
18
 
18
19
 
@@ -51,6 +52,10 @@ def publish(manifest, repository_version_pk, checkpoint=False):
51
52
 
52
53
  log.info(_("Publication: {publication} created").format(publication=publication.pk))
53
54
 
55
+ publication = FilePublicationSerializer(
56
+ instance=publication, context={"request": None}
57
+ ).data
58
+
54
59
  return publication
55
60
 
56
61
 
@@ -7,6 +7,7 @@ from urllib.parse import quote, urlparse, urlunparse
7
7
  from django.core.files import File
8
8
 
9
9
  from pulpcore.plugin.models import Artifact, ProgressReport, Remote, PublishedMetadata
10
+ from pulpcore.plugin.serializers import RepositoryVersionSerializer
10
11
  from pulpcore.plugin.stages import (
11
12
  DeclarativeArtifact,
12
13
  DeclarativeContent,
@@ -65,6 +66,9 @@ def synchronize(remote_pk, repository_pk, mirror, url=None):
65
66
 
66
67
  log.info(_("Publication: {publication} created").format(publication=publication.pk))
67
68
 
69
+ if rv:
70
+ rv = RepositoryVersionSerializer(instance=rv, context={"request": None}).data
71
+
68
72
  return rv
69
73
 
70
74
 
@@ -239,7 +239,7 @@ class PulpAppConfig(PulpPluginAppConfig):
239
239
  label = "core"
240
240
 
241
241
  # The version of this app
242
- version = "3.87.1"
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,21 @@
1
+ # Generated by Django 4.2.23 on 2025-08-29 13:34
2
+
3
+ import django.core.serializers.json
4
+ from django.db import migrations, models
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ ("core", "0141_alter_appstatus_name"),
11
+ ]
12
+
13
+ operations = [
14
+ migrations.AddField(
15
+ model_name="task",
16
+ name="result",
17
+ field=models.JSONField(
18
+ default=None, encoder=django.core.serializers.json.DjangoJSONEncoder, null=True
19
+ ),
20
+ ),
21
+ ]
@@ -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
+ ]
@@ -2,6 +2,7 @@
2
2
  Django models related to the Tasking system
3
3
  """
4
4
 
5
+ import json
5
6
  import logging
6
7
  import traceback
7
8
  from datetime import timedelta
@@ -11,7 +12,7 @@ from django.conf import settings
11
12
  from django.contrib.postgres.fields import ArrayField, HStoreField
12
13
  from django.contrib.postgres.indexes import GinIndex
13
14
  from django.core.serializers.json import DjangoJSONEncoder
14
- from django.db import connection, models
15
+ from django.db import models
15
16
  from django.utils import timezone
16
17
  from django_lifecycle import hook, AFTER_CREATE
17
18
 
@@ -20,10 +21,10 @@ from pulpcore.app.models import (
20
21
  BaseModel,
21
22
  GenericRelationModel,
22
23
  )
23
- from pulpcore.app.models.status import BaseAppStatus
24
+ from pulpcore.app.models.status import AppStatus, BaseAppStatus
24
25
  from pulpcore.app.models.fields import EncryptedJSONField
25
26
  from pulpcore.constants import TASK_CHOICES, TASK_INCOMPLETE_STATES, TASK_STATES
26
- from pulpcore.exceptions import AdvisoryLockError, exception_to_dict
27
+ from pulpcore.exceptions import exception_to_dict
27
28
  from pulpcore.app.util import get_domain_pk, current_task
28
29
  from pulpcore.app.loggers import deprecation_logger
29
30
 
@@ -114,6 +115,7 @@ class Task(BaseModel, AutoAddObjPermsMixin):
114
115
  deferred (models.BooleanField): Whether to allow defer running the task to a
115
116
  pulpcore_worker. Both `immediate` and `deferred` cannot both be `False`.
116
117
  Defaults to `True`.
118
+ result (models.JSONField): The result of the task
117
119
 
118
120
  Relations:
119
121
  app_lock (AppStatus): The app holding the lock on this task.
@@ -139,7 +141,7 @@ class Task(BaseModel, AutoAddObjPermsMixin):
139
141
  enc_kwargs = EncryptedJSONField(null=True, encoder=DjangoJSONEncoder)
140
142
 
141
143
  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.
144
+ # This field is the lock to protect tasks.
143
145
  app_lock = models.ForeignKey(
144
146
  "AppStatus", null=True, related_name="tasks", on_delete=models.SET_NULL
145
147
  )
@@ -160,25 +162,11 @@ class Task(BaseModel, AutoAddObjPermsMixin):
160
162
  immediate = models.BooleanField(default=False, null=True)
161
163
  deferred = models.BooleanField(default=True, null=True)
162
164
 
165
+ result = models.JSONField(default=None, null=True, encoder=DjangoJSONEncoder)
166
+
163
167
  def __str__(self):
164
168
  return "Task: {name} [{state}]".format(name=self.name, state=self.state)
165
169
 
166
- def __enter__(self):
167
- self.lock = _uuid_to_advisory_lock(self.pk.int)
168
- with connection.cursor() as cursor:
169
- cursor.execute("SELECT pg_try_advisory_lock(%s)", [self.lock])
170
- acquired = cursor.fetchone()[0]
171
- if not acquired:
172
- raise AdvisoryLockError("Could not acquire lock.")
173
- return self
174
-
175
- def __exit__(self, exc_type, exc_value, traceback):
176
- with connection.cursor() as cursor:
177
- cursor.execute("SELECT pg_advisory_unlock(%s)", [self.lock])
178
- released = cursor.fetchone()[0]
179
- if not released:
180
- raise RuntimeError("Lock not held.")
181
-
182
170
  @staticmethod
183
171
  def current_id():
184
172
  """
@@ -214,7 +202,11 @@ class Task(BaseModel, AutoAddObjPermsMixin):
214
202
  This updates the :attr:`started_at` and sets the :attr:`state` to :attr:`RUNNING`.
215
203
  """
216
204
  started_at = timezone.now()
217
- 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(
218
210
  state=TASK_STATES.RUNNING,
219
211
  started_at=started_at,
220
212
  )
@@ -229,22 +221,40 @@ class Task(BaseModel, AutoAddObjPermsMixin):
229
221
  )
230
222
  )
231
223
 
232
- def set_completed(self):
224
+ def set_completed(self, result=None):
233
225
  """
234
226
  Set this Task to the completed state, save it, and log output in warning cases.
235
227
 
236
228
  This updates the :attr:`finished_at` and sets the :attr:`state` to :attr:`COMPLETED`.
229
+ If `result` is provided, the :attr:`result` contains the result of the task.
237
230
  """
231
+ try:
232
+ json.dumps(result, cls=DjangoJSONEncoder)
233
+ except (TypeError, ValueError):
234
+ deprecation_logger.warning(
235
+ _(
236
+ "The result of the {} function is not JSON-serializable and will be "
237
+ "replaced with None: {}. This will raise an error in version 3.100."
238
+ ).format(self.name, result)
239
+ )
240
+ result = None
241
+
238
242
  # Only set the state to finished if it's running. This is important for when the task has
239
243
  # been canceled, so we don't move the task from canceled to finished.
240
244
  finished_at = timezone.now()
241
- 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(
242
250
  state=TASK_STATES.COMPLETED,
243
251
  finished_at=finished_at,
252
+ result=result,
244
253
  )
245
254
  if rows == 1:
246
255
  self.state = TASK_STATES.COMPLETED
247
256
  self.finished_at = finished_at
257
+ self.result = result
248
258
  else:
249
259
  self.refresh_from_db()
250
260
  # If the user requested to cancel this task while the worker finished it, we leave it
@@ -271,7 +281,11 @@ class Task(BaseModel, AutoAddObjPermsMixin):
271
281
  finished_at = timezone.now()
272
282
  tb_str = "".join(traceback.format_tb(tb))
273
283
  error = exception_to_dict(exc, tb_str)
274
- 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(
275
289
  state=TASK_STATES.FAILED,
276
290
  finished_at=finished_at,
277
291
  error=error,
@@ -318,7 +332,11 @@ class Task(BaseModel, AutoAddObjPermsMixin):
318
332
  task_data = {}
319
333
  if reason:
320
334
  task_data["error"] = {"reason": reason}
321
- 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(
322
340
  state=final_state,
323
341
  finished_at=finished_at,
324
342
  **task_data,
@@ -88,6 +88,10 @@ class TaskSerializer(ModelSerializer):
88
88
  help_text=_("A list of resources required by that task."),
89
89
  read_only=True,
90
90
  )
91
+ result = serializers.JSONField(
92
+ read_only=True,
93
+ help_text=_("The result of this task."),
94
+ )
91
95
 
92
96
  def get_created_by(self, obj):
93
97
  if task_user_map := self.context.get("task_user_mapping"):
@@ -115,6 +119,7 @@ class TaskSerializer(ModelSerializer):
115
119
  "progress_reports",
116
120
  "created_resources",
117
121
  "reserved_resources_record",
122
+ "result",
118
123
  )
119
124
 
120
125
 
@@ -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
 
@@ -19,7 +19,8 @@ def general_create_from_temp_file(app_label, serializer_name, temp_file_pk, *arg
19
19
  context = kwargs.pop("context", {})
20
20
  context["pulp_temp_file_pk"] = temp_file_pk
21
21
 
22
- general_create(app_label, serializer_name, data=data, context=context, *args, **kwargs)
22
+ data = general_create(app_label, serializer_name, data=data, context=context, *args, **kwargs)
23
+ return data
23
24
 
24
25
 
25
26
  def general_create(app_label, serializer_name, *args, **kwargs):
@@ -33,6 +34,7 @@ def general_create(app_label, serializer_name, *args, **kwargs):
33
34
  data = kwargs.pop("data", None)
34
35
 
35
36
  context = kwargs.pop("context", {})
37
+ context.setdefault("request", None)
36
38
  serializer_class = get_plugin_config(app_label).named_serializers[serializer_name]
37
39
  serializer = serializer_class(data=data, context=context)
38
40
 
@@ -42,6 +44,7 @@ def general_create(app_label, serializer_name, *args, **kwargs):
42
44
  instance = instance.cast()
43
45
  resource = CreatedResource(content_object=instance)
44
46
  resource.save()
47
+ return serializer.data
45
48
 
46
49
 
47
50
  def general_update(instance_id, app_label, serializer_name, *args, **kwargs):
@@ -130,13 +133,17 @@ async def ageneral_update(instance_id, app_label, serializer_name, *args, **kwar
130
133
  """
131
134
  data = kwargs.pop("data", None)
132
135
  partial = kwargs.pop("partial", False)
136
+ context = kwargs.pop("context", {})
137
+ context.setdefault("request", None)
138
+
133
139
  serializer_class = get_plugin_config(app_label).named_serializers[serializer_name]
134
140
  instance = await serializer_class.Meta.model.objects.aget(pk=instance_id)
135
141
  if isinstance(instance, MasterModel):
136
142
  instance = await instance.acast()
137
- serializer = serializer_class(instance, data=data, partial=partial)
143
+ serializer = serializer_class(instance, data=data, partial=partial, context=context)
138
144
  await sync_to_async(serializer.is_valid)(raise_exception=True)
139
145
  await sync_to_async(serializer.save)()
146
+ return await sync_to_async(lambda: serializer.data)()
140
147
 
141
148
 
142
149
  async def ageneral_delete(instance_id, app_label, serializer_name):
@@ -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
  )
@@ -31,6 +31,7 @@ from pulpcore.app.serializers import (
31
31
  RepositorySerializer,
32
32
  RepositorySyncURLSerializer,
33
33
  RepositoryVersionRelatedField,
34
+ RepositoryVersionSerializer,
34
35
  SingleArtifactContentSerializer,
35
36
  SingleContentArtifactField,
36
37
  TaskGroupOperationResponseSerializer,
@@ -79,6 +80,7 @@ __all__ = [
79
80
  "RepositorySerializer",
80
81
  "RepositorySyncURLSerializer",
81
82
  "RepositoryVersionRelatedField",
83
+ "RepositoryVersionSerializer",
82
84
  "SingleArtifactContentSerializer",
83
85
  "SingleContentArtifactField",
84
86
  "TaskGroupOperationResponseSerializer",
@@ -85,7 +85,7 @@ class UploadSerializerFieldsMixin(Serializer):
85
85
 
86
86
  data = super().validate(data)
87
87
 
88
- if "request" in self.context:
88
+ if self.context.get("request") is not None:
89
89
  upload_fields = {
90
90
  field
91
91
  for field in self.Meta.fields