pulpcore 3.22.29__tar.gz → 3.22.31__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.
Files changed (347) hide show
  1. {pulpcore-3.22.29 → pulpcore-3.22.31}/CHANGES.md +32 -0
  2. {pulpcore-3.22.29 → pulpcore-3.22.31}/PKG-INFO +1 -1
  3. {pulpcore-3.22.29 → pulpcore-3.22.31}/functest_requirements.txt +2 -0
  4. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/apps.py +1 -1
  5. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/models/task.py +6 -0
  6. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/viewsets/content.py +6 -1
  7. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/viewsets/task.py +13 -0
  8. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tasking/pulpcore_worker.py +18 -1
  9. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/functional/api/test_tasking.py +39 -0
  10. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/functional/api/test_workers.py +5 -4
  11. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore.egg-info/PKG-INFO +1 -1
  12. {pulpcore-3.22.29 → pulpcore-3.22.31}/setup.py +1 -1
  13. {pulpcore-3.22.29 → pulpcore-3.22.31}/CODE_OF_CONDUCT.md +0 -0
  14. {pulpcore-3.22.29 → pulpcore-3.22.31}/COMMITMENT +0 -0
  15. {pulpcore-3.22.29 → pulpcore-3.22.31}/CONTRIBUTING.md +0 -0
  16. {pulpcore-3.22.29 → pulpcore-3.22.31}/COPYRIGHT +0 -0
  17. {pulpcore-3.22.29 → pulpcore-3.22.31}/LICENSE +0 -0
  18. {pulpcore-3.22.29 → pulpcore-3.22.31}/MANIFEST.in +0 -0
  19. {pulpcore-3.22.29 → pulpcore-3.22.31}/README.md +0 -0
  20. {pulpcore-3.22.29 → pulpcore-3.22.31}/bin/pulp-content +0 -0
  21. {pulpcore-3.22.29 → pulpcore-3.22.31}/ci_requirements.txt +0 -0
  22. {pulpcore-3.22.29 → pulpcore-3.22.31}/manage.py +0 -0
  23. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/__init__.py +0 -0
  24. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/__init__.py +0 -0
  25. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/access_policy.py +0 -0
  26. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/authentication.py +0 -0
  27. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/checks.py +0 -0
  28. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/files.py +0 -0
  29. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/global_access_conditions.py +0 -0
  30. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/importexport.py +0 -0
  31. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/loggers.py +0 -0
  32. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/manage.py +0 -0
  33. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/management/__init__.py +0 -0
  34. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/management/commands/__init__.py +0 -0
  35. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/management/commands/add-signing-service.py +0 -0
  36. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/management/commands/analyze-publication.py +0 -0
  37. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/management/commands/datarepair-2327.py +0 -0
  38. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/management/commands/datarepair-labels.py +0 -0
  39. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/management/commands/dump-permissions.py +0 -0
  40. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/management/commands/dump-publications-to-fs.py +0 -0
  41. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/management/commands/handle-artifact-checksums.py +0 -0
  42. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/management/commands/openapi.py +0 -0
  43. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/management/commands/remove-plugin.py +0 -0
  44. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/management/commands/remove-signing-service.py +0 -0
  45. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/management/commands/reset-admin-password.py +0 -0
  46. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/management/commands/stage-profile-summary.py +0 -0
  47. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0001_initial.py +0 -0
  48. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0002_increase_artifact_size_field.py +0 -0
  49. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0003_remove_upload_completed.py +0 -0
  50. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0004_add_duplicated_reserved_resources.py +0 -0
  51. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0005_progressreport_code.py +0 -0
  52. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0006_repository_plugin_managed.py +0 -0
  53. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0007_delete_progress_proxies.py +0 -0
  54. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0008_published_metadata_as_content.py +0 -0
  55. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0009_remove_task_non_fatal_errors.py +0 -0
  56. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0010_pulp_fields.py +0 -0
  57. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0011_relative_path.py +0 -0
  58. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0012_auto_20191104_2000.py +0 -0
  59. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0013_repository_pulp_type.py +0 -0
  60. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0014_remove_repository_plugin_managed.py +0 -0
  61. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0015_auto_20191112_1426.py +0 -0
  62. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0016_charfield_to_textfield.py +0 -0
  63. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0017_remove_task_parent.py +0 -0
  64. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0018_auto_20191127_2350.py +0 -0
  65. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0019_add_signing_service_model.py +0 -0
  66. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0020_change_publishedartifact_constraints.py +0 -0
  67. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0021_add_signing_service_foreign_key.py +0 -0
  68. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0022_rename_last_version.py +0 -0
  69. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0023_change_exporter_models.py +0 -0
  70. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0024_use_local_storage_for_uploads.py +0 -0
  71. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0025_task_parent_task.py +0 -0
  72. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0026_task_group.py +0 -0
  73. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0027_export_backend.py +0 -0
  74. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0028_import_importer_pulpimporter_pulpimporterrepository.py +0 -0
  75. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0029_export_delete.py +0 -0
  76. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0030_taskgroup_all_tasks_dispatched.py +0 -0
  77. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0031_import_export_validate_params.py +0 -0
  78. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0032_export_to_chunks.py +0 -0
  79. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0033_increase_remote_artifact_size_field.py +0 -0
  80. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0034_groupprogressreport.py +0 -0
  81. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0035_content_upstream_id.py +0 -0
  82. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0036_unprotect_last_export.py +0 -0
  83. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0037_pulptemporaryfile.py +0 -0
  84. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0038_repository_remote.py +0 -0
  85. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0039_change_download_concurrency.py +0 -0
  86. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0040_set_admin_is_staff.py +0 -0
  87. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0041_accesspolicy.py +0 -0
  88. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0042_rbac_for_tasks.py +0 -0
  89. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0043_toc_attribute.py +0 -0
  90. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0044_temp_file_artifact_field.py +0 -0
  91. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0045_accesspolicy_permissions_allow_null.py +0 -0
  92. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0046_task__resource_job_id.py +0 -0
  93. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0047_improve_orphan_cleanup.py +0 -0
  94. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0048_fips_checksums.py +0 -0
  95. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0049_add_file_field_to_uploadchunk.py +0 -0
  96. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0050_namespace_access_policies.py +0 -0
  97. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0051_timeoutfields.py +0 -0
  98. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0052_tasking_logging_cid.py +0 -0
  99. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0053_remote_headers.py +0 -0
  100. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0054_add_public_key.py +0 -0
  101. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0055_label.py +0 -0
  102. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0056_remote_rate_limit.py +0 -0
  103. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0057_add_label_indexes.py +0 -0
  104. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0058_accesspolicy_customized.py +0 -0
  105. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0059_proxy_creds.py +0 -0
  106. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0060_data_migration_proxy_creds.py +0 -0
  107. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0061_call_handle_artifact_checksums_command.py +0 -0
  108. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0062_add_new_distribution_mastermodel.py +0 -0
  109. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0063_repository_retained_versions.py +0 -0
  110. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0064_add_new_style_task_columns.py +0 -0
  111. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0064_repository_user_hidden.py +0 -0
  112. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0065_merge_20210615_1211.py +0 -0
  113. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0066_download_concurrency_and_retry_changes.py +0 -0
  114. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0067_add_protect_to_task_reservation.py +0 -0
  115. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0068_add_timestamp_of_interest.py +0 -0
  116. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0069_update_json_fields.py +0 -0
  117. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0070_rename_retained_versions.py +0 -0
  118. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0071_filesystemexport_filesystemexporter.py +0 -0
  119. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0072_add_method_to_filesystem_exporter.py +0 -0
  120. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0073_encrypt_remote_fields.py +0 -0
  121. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0074_acs.py +0 -0
  122. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0075_rbaccontentguard.py +0 -0
  123. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0076_remove_reserved_resource.py +0 -0
  124. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0077_move_remote_url_credentials.py +0 -0
  125. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0078_grouprole_role_userrole.py +0 -0
  126. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0079_rename_permissions_assignment_accesspolicy_creation_hooks.py +0 -0
  127. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0080_proxy_group_model.py +0 -0
  128. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0081_reapplabel_group_permissions.py +0 -0
  129. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0082_add_manage_roles_permissions.py +0 -0
  130. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0083_alter_group_options.py +0 -0
  131. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0084_alter_rbaccontentguard_options.py +0 -0
  132. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0085_contentredirectcontentguard.py +0 -0
  133. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0086_task_json_fields.py +0 -0
  134. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0087_taskschedule.py +0 -0
  135. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0088_accesspolicy_queryset_scoping.py +0 -0
  136. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0089_alter_contentredirectcontentguard_options.py +0 -0
  137. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0090_char_to_text_field.py +0 -0
  138. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0091_systemid.py +0 -0
  139. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0092_alter_upload_options.py +0 -0
  140. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0093_add_info_field_repositoryversion.py +0 -0
  141. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0094_protect_repository_content.py +0 -0
  142. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0095_artifactdistribution.py +0 -0
  143. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0096_alter_task_logging_cid.py +0 -0
  144. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0097_remove_telemetry_task_schedule.py +0 -0
  145. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/0098_pulp_labels.py +0 -0
  146. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/migrations/__init__.py +0 -0
  147. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/mime_types.py +0 -0
  148. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/modelresource.py +0 -0
  149. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/models/__init__.py +0 -0
  150. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/models/access_policy.py +0 -0
  151. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/models/acs.py +0 -0
  152. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/models/analytics.py +0 -0
  153. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/models/base.py +0 -0
  154. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/models/content.py +0 -0
  155. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/models/exporter.py +0 -0
  156. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/models/fields.py +0 -0
  157. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/models/generic.py +0 -0
  158. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/models/importer.py +0 -0
  159. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/models/progress.py +0 -0
  160. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/models/publication.py +0 -0
  161. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/models/repository.py +0 -0
  162. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/models/role.py +0 -0
  163. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/models/status.py +0 -0
  164. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/models/storage.py +0 -0
  165. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/models/upload.py +0 -0
  166. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/monkeypatch.py +0 -0
  167. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/protobuf/__init__.py +0 -0
  168. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/protobuf/analytics_pb2.py +0 -0
  169. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/pulp_hashlib.py +0 -0
  170. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/redis_connection.py +0 -0
  171. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/response.py +0 -0
  172. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/role_util.py +0 -0
  173. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/serializers/__init__.py +0 -0
  174. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/serializers/access_policy.py +0 -0
  175. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/serializers/acs.py +0 -0
  176. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/serializers/base.py +0 -0
  177. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/serializers/content.py +0 -0
  178. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/serializers/exporter.py +0 -0
  179. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/serializers/fields.py +0 -0
  180. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/serializers/importer.py +0 -0
  181. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/serializers/orphans.py +0 -0
  182. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/serializers/progress.py +0 -0
  183. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/serializers/publication.py +0 -0
  184. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/serializers/purge.py +0 -0
  185. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/serializers/reclaim.py +0 -0
  186. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/serializers/repair.py +0 -0
  187. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/serializers/repository.py +0 -0
  188. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/serializers/status.py +0 -0
  189. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/serializers/task.py +0 -0
  190. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/serializers/upload.py +0 -0
  191. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/serializers/user.py +0 -0
  192. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/settings.py +0 -0
  193. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/tasks/__init__.py +0 -0
  194. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/tasks/analytics.py +0 -0
  195. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/tasks/base.py +0 -0
  196. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/tasks/export.py +0 -0
  197. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/tasks/importer.py +0 -0
  198. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/tasks/orphan.py +0 -0
  199. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/tasks/purge.py +0 -0
  200. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/tasks/reclaim_space.py +0 -0
  201. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/tasks/repository.py +0 -0
  202. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/tasks/test.py +0 -0
  203. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/tasks/upload.py +0 -0
  204. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/templates/rest_framework/api.html +0 -0
  205. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/templatetags/__init__.py +0 -0
  206. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/templatetags/pulp_urls.py +0 -0
  207. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/urls.py +0 -0
  208. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/util.py +0 -0
  209. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/views/__init__.py +0 -0
  210. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/views/importer.py +0 -0
  211. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/views/orphans.py +0 -0
  212. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/views/repair.py +0 -0
  213. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/views/status.py +0 -0
  214. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/viewsets/__init__.py +0 -0
  215. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/viewsets/access_policy.py +0 -0
  216. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/viewsets/acs.py +0 -0
  217. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/viewsets/base.py +0 -0
  218. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/viewsets/custom_filters.py +0 -0
  219. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/viewsets/exporter.py +0 -0
  220. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/viewsets/importer.py +0 -0
  221. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/viewsets/orphans.py +0 -0
  222. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/viewsets/publication.py +0 -0
  223. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/viewsets/reclaim.py +0 -0
  224. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/viewsets/repository.py +0 -0
  225. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/viewsets/upload.py +0 -0
  226. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/viewsets/user.py +0 -0
  227. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/app/wsgi.py +0 -0
  228. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/backends.py +0 -0
  229. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/cache/__init__.py +0 -0
  230. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/cache/cache.py +0 -0
  231. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/constants.py +0 -0
  232. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/content/__init__.py +0 -0
  233. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/content/authentication.py +0 -0
  234. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/content/handler.py +0 -0
  235. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/download/__init__.py +0 -0
  236. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/download/base.py +0 -0
  237. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/download/factory.py +0 -0
  238. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/download/file.py +0 -0
  239. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/download/http.py +0 -0
  240. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/exceptions/__init__.py +0 -0
  241. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/exceptions/base.py +0 -0
  242. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/exceptions/plugin.py +0 -0
  243. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/exceptions/validation.py +0 -0
  244. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/filters.py +0 -0
  245. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/openapi/__init__.py +0 -0
  246. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/__init__.py +0 -0
  247. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/access_policy.py +0 -0
  248. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/actions.py +0 -0
  249. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/apps.py +0 -0
  250. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/authentication/__init__.py +0 -0
  251. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/cache/__init__.py +0 -0
  252. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/constants.py +0 -0
  253. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/content.py +0 -0
  254. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/download/__init__.py +0 -0
  255. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/exceptions.py +0 -0
  256. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/files.py +0 -0
  257. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/importexport.py +0 -0
  258. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/modelresources.py +0 -0
  259. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/models/__init__.py +0 -0
  260. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/models/role.py +0 -0
  261. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/publication_utils.py +0 -0
  262. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/pulp_hashlib.py +0 -0
  263. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/repo_version_utils.py +0 -0
  264. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/responses.py +0 -0
  265. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/serializers/__init__.py +0 -0
  266. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/serializers/content.py +0 -0
  267. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/stages/__init__.py +0 -0
  268. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/stages/api.py +0 -0
  269. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/stages/artifact_stages.py +0 -0
  270. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/stages/content_stages.py +0 -0
  271. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/stages/declarative_version.py +0 -0
  272. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/stages/models.py +0 -0
  273. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/stages/profiler.py +0 -0
  274. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/storage.py +0 -0
  275. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/sync.py +0 -0
  276. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/tasking.py +0 -0
  277. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/util.py +0 -0
  278. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/viewsets/__init__.py +0 -0
  279. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/plugin/viewsets/content.py +0 -0
  280. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/responses.py +0 -0
  281. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tasking/__init__.py +0 -0
  282. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tasking/constants.py +0 -0
  283. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tasking/entrypoint.py +0 -0
  284. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tasking/storage.py +0 -0
  285. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tasking/tasks.py +0 -0
  286. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tasking/util.py +0 -0
  287. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/__init__.py +0 -0
  288. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/functional/__init__.py +0 -0
  289. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/functional/api/__init__.py +0 -0
  290. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/functional/api/test_access_policy.py +0 -0
  291. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/functional/api/test_api_docs.py +0 -0
  292. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/functional/api/test_artifact_distribution.py +0 -0
  293. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/functional/api/test_auth.py +0 -0
  294. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/functional/api/test_correlation_id.py +0 -0
  295. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/functional/api/test_crd_artifacts.py +0 -0
  296. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/functional/api/test_openapi_schema.py +0 -0
  297. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/functional/api/test_role.py +0 -0
  298. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/functional/api/test_root_endpoint.py +0 -0
  299. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/functional/api/test_scoping.py +0 -0
  300. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/functional/api/test_signing_service.py +0 -0
  301. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/functional/api/test_status.py +0 -0
  302. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/functional/api/test_upload.py +0 -0
  303. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/functional/api/test_users_groups.py +0 -0
  304. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/functional/content_with_coverage.py +0 -0
  305. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/functional/gpg_ascii_armor_signing_service.py +0 -0
  306. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/functional/utils.py +0 -0
  307. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/__init__.py +0 -0
  308. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/content/__init__.py +0 -0
  309. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/content/test_handler.py +0 -0
  310. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/content/test_heartbeat.py +0 -0
  311. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/download/__init__.py +0 -0
  312. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/download/test_download_base.py +0 -0
  313. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/download/test_factory.py +0 -0
  314. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/migrations/__init__.py +0 -0
  315. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/migrations/test_0077_move_remote_url_credentials.py +0 -0
  316. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/models/__init__.py +0 -0
  317. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/models/test_content.py +0 -0
  318. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/models/test_remote.py +0 -0
  319. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/models/test_repository.py +0 -0
  320. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/roles/__init__.py +0 -0
  321. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/roles/test_roles.py +0 -0
  322. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/serializers/__init__.py +0 -0
  323. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/serializers/test_base.py +0 -0
  324. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/serializers/test_pulpexport.py +0 -0
  325. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/serializers/test_repository.py +0 -0
  326. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/stages/__init__.py +0 -0
  327. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/stages/test_artifactdownloader.py +0 -0
  328. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/stages/test_stages.py +0 -0
  329. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/test_cache.py +0 -0
  330. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/test_content_guard.py +0 -0
  331. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/test_files.py +0 -0
  332. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/test_import_checks.py +0 -0
  333. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/test_pulp_urls.py +0 -0
  334. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/test_settings.py +0 -0
  335. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/test_util.py +0 -0
  336. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/viewsets/__init__.py +0 -0
  337. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore/tests/unit/viewsets/test_base.py +0 -0
  338. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore.egg-info/SOURCES.txt +0 -0
  339. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore.egg-info/dependency_links.txt +0 -0
  340. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore.egg-info/entry_points.txt +0 -0
  341. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore.egg-info/requires.txt +0 -0
  342. {pulpcore-3.22.29 → pulpcore-3.22.31}/pulpcore.egg-info/top_level.txt +0 -0
  343. {pulpcore-3.22.29 → pulpcore-3.22.31}/pyproject.toml +0 -0
  344. {pulpcore-3.22.29 → pulpcore-3.22.31}/requirements.txt +0 -0
  345. {pulpcore-3.22.29 → pulpcore-3.22.31}/setup.cfg +0 -0
  346. {pulpcore-3.22.29 → pulpcore-3.22.31}/test_requirements.txt +0 -0
  347. {pulpcore-3.22.29 → pulpcore-3.22.31}/unittest_requirements.txt +0 -0
@@ -8,6 +8,38 @@
8
8
 
9
9
  [//]: # (towncrier release notes start)
10
10
 
11
+ ## 3.22.31 (2024-10-01) {: #3.22.31 }
12
+
13
+ ### REST API {: #3.22.31-rest-api }
14
+
15
+ #### Bugfixes {: #3.22.31-rest-api-bugfix }
16
+
17
+ - Fixed a bug that caused Pulp to return duplicate content when a user was logged in as a
18
+ non-superuser while the content was part of multiple repositories.
19
+ [#3641](https://github.com/pulp/pulpcore/issues/3641)
20
+
21
+ ### Plugin API {: #3.22.31-plugin-api }
22
+
23
+ No significant changes.
24
+
25
+ ---
26
+
27
+ # ## 3.22.30 (2024-08-10) {: #3.22.30 }
28
+
29
+ ### REST API {: #3.22.30-rest-api }
30
+
31
+ #### Bugfixes {: #3.22.30-rest-api-bugfix }
32
+
33
+ - Fixed RBAC permissions being incorrectly assigned in tasks that create objects.
34
+ https://access.redhat.com/security/cve/cve-2024-7143
35
+ [#5683](https://github.com/pulp/pulpcore/issues/5683)
36
+
37
+ ### Plugin API {: #3.22.30-plugin-api }
38
+
39
+ No significant changes.
40
+
41
+ ---
42
+
11
43
  ## 3.22.29 (2024-07-16) {: #3.22.29 }
12
44
 
13
45
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pulpcore
3
- Version: 3.22.29
3
+ Version: 3.22.31
4
4
  Summary: Pulp Django Application and Related Modules
5
5
  Home-page: https://pulpproject.org
6
6
  Author: Pulp Team
@@ -8,3 +8,5 @@ python-gnupg
8
8
 
9
9
  # from pulp_file
10
10
  beautifulsoup4
11
+ pytest-xdist
12
+ pytest-timeout
@@ -207,7 +207,7 @@ class PulpAppConfig(PulpPluginAppConfig):
207
207
  label = "core"
208
208
 
209
209
  # The version of this app
210
- version = "3.22.29"
210
+ version = "3.22.31"
211
211
 
212
212
  # The python package name providing this app
213
213
  python_package_name = "pulpcore"
@@ -14,6 +14,7 @@ from django.contrib.postgres.fields import ArrayField
14
14
  from django.core.serializers.json import DjangoJSONEncoder
15
15
  from django.db import connection, models
16
16
  from django.utils import timezone
17
+ from django_lifecycle import hook, AFTER_CREATE
17
18
 
18
19
  from pulpcore.app.models import (
19
20
  AutoAddObjPermsMixin,
@@ -231,6 +232,11 @@ class Task(BaseModel, AutoAddObjPermsMixin):
231
232
  task = Task.objects.get(pk=task_id)
232
233
  return task
233
234
 
235
+ @hook(AFTER_CREATE)
236
+ def add_role_dispatcher(self):
237
+ """Set the "core.task_user_dispatcher" role for the current user after creation."""
238
+ self.add_roles_for_object_creator("core.task_user_dispatcher")
239
+
234
240
  def set_running(self):
235
241
  """
236
242
  Set this Task to the running state, save it, and log output in warning cases.
@@ -121,7 +121,12 @@ class BaseContentViewSet(NamedModelViewSet):
121
121
  repo_viewset = get_viewset_for_model(repo)()
122
122
  setattr(repo_viewset, "request", self.request)
123
123
  scoped_repos.extend(repo_viewset.get_queryset().values_list("pk", flat=True))
124
- return qs.filter(repositories__in=scoped_repos)
124
+
125
+ # calling the distinct clause at end of the query ensures that no duplicates from
126
+ # joined tables will be returned to the end-user; this behaviour is documented at
127
+ # https://docs.djangoproject.com/en/3.2/topics/db/queries, in the section Spanning
128
+ # multi-valued relationships
129
+ return qs.filter(repositories__in=scoped_repos).distinct()
125
130
  return qs
126
131
 
127
132
 
@@ -133,8 +133,21 @@ class TaskViewSet(
133
133
  ],
134
134
  },
135
135
  "core.task_viewer": ["core.view_task"],
136
+ # This is a special role to designate the user who dispatched the task, it is assigned to
137
+ # the user on the object-level at task creation. It is not meant to be edited or manually
138
+ # added/removed from users.
139
+ "core.task_user_dispatcher": ["core.add_task"],
136
140
  }
137
141
 
142
+ def get_queryset(self):
143
+ qs = super().get_queryset()
144
+ if self.action in ("add_role", "remove_role"):
145
+ if "core.task_user_dispatcher" == self.request.data.get("role"):
146
+ raise ValidationError(
147
+ _("core.task_user_dispatcher can not be added/removed from a task.")
148
+ )
149
+ return qs
150
+
138
151
  @extend_schema(
139
152
  description="This operation cancels a task.",
140
153
  summary="Cancel a task",
@@ -442,7 +442,24 @@ def _perform_task(task_pk, task_working_dir_rel_path):
442
442
  task.set_running()
443
443
  # Store the task id in the environment for `Task.current()`.
444
444
  os.environ["PULP_TASK_ID"] = str(task.pk)
445
- user = get_users_with_perms(task, with_group_users=False).first()
445
+ # These queries were specifically constructed and ordered this way to ensure we have the highest
446
+ # chance of getting the user who dispatched the task since we don't have a user relation on the
447
+ # task model. The second query acts as a fallback to provide ZDU support. Future changes will
448
+ # require to keep these around till a breaking change release is planned (3.70 the earliest).
449
+ user = (
450
+ get_users_with_perms(
451
+ task,
452
+ only_with_perms_in=["core.add_task"],
453
+ with_group_users=False,
454
+ include_model_permissions=False,
455
+ ).first()
456
+ or get_users_with_perms(
457
+ task,
458
+ only_with_perms_in=["core.manage_roles_task"],
459
+ with_group_users=False,
460
+ include_model_permissions=False,
461
+ ).first()
462
+ )
446
463
  _set_current_user(user)
447
464
  set_guid(task.logging_cid)
448
465
 
@@ -17,10 +17,16 @@ from pulpcore.tests.functional.utils import download_file
17
17
  def dispatch_task(pulpcore_client):
18
18
  def _dispatch_task(*args, **kwargs):
19
19
  cid = pulpcore_client.default_headers.get("Correlation-ID") or str(uuid4())
20
+ username = pulpcore_client.configuration.username
20
21
  commands = (
21
22
  "from django_guid import set_guid; "
22
23
  "from pulpcore.tasking.tasks import dispatch; "
23
24
  "from pulpcore.app.util import get_url; "
25
+ "from django.contrib.auth import get_user_model; "
26
+ "from django_currentuser.middleware import _set_current_user; "
27
+ "User = get_user_model(); "
28
+ f"user = User.objects.filter(username='{username}').first(); "
29
+ "_set_current_user(user); "
24
30
  f"set_guid({cid!r}); "
25
31
  f"task = dispatch(*{args!r}, **{kwargs!r}); "
26
32
  "print(get_url(task))"
@@ -296,3 +302,36 @@ def test_cancel_gooey_task(tasks_api_client, dispatch_task, monitor_task):
296
302
  task = tasks_api_client.read(task_href)
297
303
 
298
304
  assert task.state == "canceled"
305
+
306
+
307
+ @pytest.mark.parallel
308
+ def test_correct_task_ownership(dispatch_task, users_roles_api_client, gen_user):
309
+ """Test that tasks get the correct ownership when dispatched."""
310
+ alice = gen_user(model_roles=["core.task_viewer"])
311
+ bob = gen_user(model_roles=["file.filerepository_creator"])
312
+
313
+ with alice:
314
+ atask_href = dispatch_task("pulpcore.app.tasks.test.sleep", args=(0,))
315
+ aroles = users_roles_api_client.list(alice.user.pulp_href)
316
+ assert aroles.count == 3
317
+ roles = {r.role: r.content_object for r in aroles.results}
318
+ correct_roles = {
319
+ "core.task_owner": atask_href,
320
+ "core.task_user_dispatcher": atask_href,
321
+ "core.task_viewer": None,
322
+ }
323
+ assert roles == correct_roles
324
+
325
+ with bob:
326
+ btask_href = dispatch_task("pulpcore.app.tasks.test.sleep", args=(0,))
327
+ aroles = users_roles_api_client.list(alice.user.pulp_href)
328
+ assert aroles.count == 3
329
+ broles = users_roles_api_client.list(bob.user.pulp_href)
330
+ assert broles.count == 3
331
+ roles = {r.role: r.content_object for r in broles.results}
332
+ correct_roles = {
333
+ "core.task_owner": btask_href,
334
+ "core.task_user_dispatcher": btask_href,
335
+ "file.filerepository_creator": None,
336
+ }
337
+ assert roles == correct_roles
@@ -76,7 +76,7 @@ def task_schedule(cli_client):
76
76
  "from django.utils.timezone import now;"
77
77
  "from datetime import timedelta;"
78
78
  "from pulpcore.app.models import TaskSchedule;"
79
- "dispatch_interval = timedelta(seconds=4);"
79
+ "dispatch_interval = timedelta(seconds=5);"
80
80
  "next_dispatch = now() + dispatch_interval;"
81
81
  "TaskSchedule("
82
82
  f" name='{name}', task_name='{task_name}', "
@@ -100,8 +100,9 @@ def task_schedule(cli_client):
100
100
  def test_task_schedule(task_schedule, task_schedules_api_client):
101
101
  """Test that a worker will schedule a task roughly at a given time."""
102
102
  # Worker TTL is configured to 30s, therefore they will have a heartbeat each 10s (6 bpm). The
103
- # task is scheduled 4s in the future to give us time to invesitgate the state before and after.
104
- # 15s later we can be sure it was scheduled (as long as at least one worker is running).
103
+ # task is scheduled 5s in the future to give us time to invesitgate the state before and after.
104
+ # 16s later we can be sure it was scheduled (as long as at least one worker is running).
105
+ # Waiting for 18s to give some more slack.
105
106
 
106
107
  result = task_schedules_api_client.list(name=task_schedule["name"])
107
108
  assert result.count == 1
@@ -110,7 +111,7 @@ def test_task_schedule(task_schedule, task_schedules_api_client):
110
111
  assert ts.task_name == task_schedule["task_name"]
111
112
  assert ts.last_task is None
112
113
  # At least a worker heartbeat is needed
113
- for i in range(15):
114
+ for i in range(18):
114
115
  sleep(1)
115
116
  ts = task_schedules_api_client.read(task_schedule_href=result.results[0].pulp_href)
116
117
  if ts.last_task is not None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pulpcore
3
- Version: 3.22.29
3
+ Version: 3.22.31
4
4
  Summary: Pulp Django Application and Related Modules
5
5
  Home-page: https://pulpproject.org
6
6
  Author: Pulp Team
@@ -8,7 +8,7 @@ with open("requirements.txt") as requirements:
8
8
 
9
9
  setup(
10
10
  name="pulpcore",
11
- version="3.22.29",
11
+ version="3.22.31",
12
12
  description="Pulp Django Application and Related Modules",
13
13
  long_description=long_description,
14
14
  long_description_content_type="text/markdown",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes