pulpcore 3.22.28__tar.gz → 3.22.30__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.28 → pulpcore-3.22.30}/CHANGES.md +32 -0
  2. {pulpcore-3.22.28 → pulpcore-3.22.30}/PKG-INFO +1 -1
  3. {pulpcore-3.22.28 → pulpcore-3.22.30}/functest_requirements.txt +0 -2
  4. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/apps.py +1 -1
  5. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/models/task.py +6 -0
  6. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/templatetags/pulp_urls.py +7 -4
  7. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/viewsets/task.py +13 -0
  8. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tasking/pulpcore_worker.py +18 -1
  9. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/functional/api/test_tasking.py +39 -0
  10. pulpcore-3.22.30/pulpcore/tests/unit/test_pulp_urls.py +55 -0
  11. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore.egg-info/PKG-INFO +1 -1
  12. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore.egg-info/SOURCES.txt +1 -0
  13. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore.egg-info/requires.txt +2 -2
  14. {pulpcore-3.22.28 → pulpcore-3.22.30}/requirements.txt +2 -2
  15. {pulpcore-3.22.28 → pulpcore-3.22.30}/setup.py +1 -1
  16. {pulpcore-3.22.28 → pulpcore-3.22.30}/CODE_OF_CONDUCT.md +0 -0
  17. {pulpcore-3.22.28 → pulpcore-3.22.30}/COMMITMENT +0 -0
  18. {pulpcore-3.22.28 → pulpcore-3.22.30}/CONTRIBUTING.md +0 -0
  19. {pulpcore-3.22.28 → pulpcore-3.22.30}/COPYRIGHT +0 -0
  20. {pulpcore-3.22.28 → pulpcore-3.22.30}/LICENSE +0 -0
  21. {pulpcore-3.22.28 → pulpcore-3.22.30}/MANIFEST.in +0 -0
  22. {pulpcore-3.22.28 → pulpcore-3.22.30}/README.md +0 -0
  23. {pulpcore-3.22.28 → pulpcore-3.22.30}/bin/pulp-content +0 -0
  24. {pulpcore-3.22.28 → pulpcore-3.22.30}/ci_requirements.txt +0 -0
  25. {pulpcore-3.22.28 → pulpcore-3.22.30}/manage.py +0 -0
  26. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/__init__.py +0 -0
  27. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/__init__.py +0 -0
  28. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/access_policy.py +0 -0
  29. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/authentication.py +0 -0
  30. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/checks.py +0 -0
  31. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/files.py +0 -0
  32. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/global_access_conditions.py +0 -0
  33. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/importexport.py +0 -0
  34. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/loggers.py +0 -0
  35. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/manage.py +0 -0
  36. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/management/__init__.py +0 -0
  37. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/management/commands/__init__.py +0 -0
  38. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/management/commands/add-signing-service.py +0 -0
  39. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/management/commands/analyze-publication.py +0 -0
  40. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/management/commands/datarepair-2327.py +0 -0
  41. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/management/commands/datarepair-labels.py +0 -0
  42. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/management/commands/dump-permissions.py +0 -0
  43. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/management/commands/dump-publications-to-fs.py +0 -0
  44. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/management/commands/handle-artifact-checksums.py +0 -0
  45. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/management/commands/openapi.py +0 -0
  46. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/management/commands/remove-plugin.py +0 -0
  47. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/management/commands/remove-signing-service.py +0 -0
  48. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/management/commands/reset-admin-password.py +0 -0
  49. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/management/commands/stage-profile-summary.py +0 -0
  50. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0001_initial.py +0 -0
  51. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0002_increase_artifact_size_field.py +0 -0
  52. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0003_remove_upload_completed.py +0 -0
  53. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0004_add_duplicated_reserved_resources.py +0 -0
  54. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0005_progressreport_code.py +0 -0
  55. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0006_repository_plugin_managed.py +0 -0
  56. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0007_delete_progress_proxies.py +0 -0
  57. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0008_published_metadata_as_content.py +0 -0
  58. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0009_remove_task_non_fatal_errors.py +0 -0
  59. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0010_pulp_fields.py +0 -0
  60. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0011_relative_path.py +0 -0
  61. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0012_auto_20191104_2000.py +0 -0
  62. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0013_repository_pulp_type.py +0 -0
  63. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0014_remove_repository_plugin_managed.py +0 -0
  64. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0015_auto_20191112_1426.py +0 -0
  65. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0016_charfield_to_textfield.py +0 -0
  66. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0017_remove_task_parent.py +0 -0
  67. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0018_auto_20191127_2350.py +0 -0
  68. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0019_add_signing_service_model.py +0 -0
  69. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0020_change_publishedartifact_constraints.py +0 -0
  70. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0021_add_signing_service_foreign_key.py +0 -0
  71. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0022_rename_last_version.py +0 -0
  72. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0023_change_exporter_models.py +0 -0
  73. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0024_use_local_storage_for_uploads.py +0 -0
  74. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0025_task_parent_task.py +0 -0
  75. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0026_task_group.py +0 -0
  76. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0027_export_backend.py +0 -0
  77. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0028_import_importer_pulpimporter_pulpimporterrepository.py +0 -0
  78. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0029_export_delete.py +0 -0
  79. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0030_taskgroup_all_tasks_dispatched.py +0 -0
  80. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0031_import_export_validate_params.py +0 -0
  81. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0032_export_to_chunks.py +0 -0
  82. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0033_increase_remote_artifact_size_field.py +0 -0
  83. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0034_groupprogressreport.py +0 -0
  84. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0035_content_upstream_id.py +0 -0
  85. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0036_unprotect_last_export.py +0 -0
  86. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0037_pulptemporaryfile.py +0 -0
  87. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0038_repository_remote.py +0 -0
  88. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0039_change_download_concurrency.py +0 -0
  89. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0040_set_admin_is_staff.py +0 -0
  90. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0041_accesspolicy.py +0 -0
  91. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0042_rbac_for_tasks.py +0 -0
  92. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0043_toc_attribute.py +0 -0
  93. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0044_temp_file_artifact_field.py +0 -0
  94. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0045_accesspolicy_permissions_allow_null.py +0 -0
  95. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0046_task__resource_job_id.py +0 -0
  96. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0047_improve_orphan_cleanup.py +0 -0
  97. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0048_fips_checksums.py +0 -0
  98. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0049_add_file_field_to_uploadchunk.py +0 -0
  99. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0050_namespace_access_policies.py +0 -0
  100. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0051_timeoutfields.py +0 -0
  101. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0052_tasking_logging_cid.py +0 -0
  102. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0053_remote_headers.py +0 -0
  103. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0054_add_public_key.py +0 -0
  104. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0055_label.py +0 -0
  105. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0056_remote_rate_limit.py +0 -0
  106. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0057_add_label_indexes.py +0 -0
  107. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0058_accesspolicy_customized.py +0 -0
  108. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0059_proxy_creds.py +0 -0
  109. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0060_data_migration_proxy_creds.py +0 -0
  110. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0061_call_handle_artifact_checksums_command.py +0 -0
  111. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0062_add_new_distribution_mastermodel.py +0 -0
  112. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0063_repository_retained_versions.py +0 -0
  113. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0064_add_new_style_task_columns.py +0 -0
  114. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0064_repository_user_hidden.py +0 -0
  115. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0065_merge_20210615_1211.py +0 -0
  116. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0066_download_concurrency_and_retry_changes.py +0 -0
  117. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0067_add_protect_to_task_reservation.py +0 -0
  118. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0068_add_timestamp_of_interest.py +0 -0
  119. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0069_update_json_fields.py +0 -0
  120. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0070_rename_retained_versions.py +0 -0
  121. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0071_filesystemexport_filesystemexporter.py +0 -0
  122. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0072_add_method_to_filesystem_exporter.py +0 -0
  123. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0073_encrypt_remote_fields.py +0 -0
  124. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0074_acs.py +0 -0
  125. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0075_rbaccontentguard.py +0 -0
  126. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0076_remove_reserved_resource.py +0 -0
  127. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0077_move_remote_url_credentials.py +0 -0
  128. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0078_grouprole_role_userrole.py +0 -0
  129. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0079_rename_permissions_assignment_accesspolicy_creation_hooks.py +0 -0
  130. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0080_proxy_group_model.py +0 -0
  131. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0081_reapplabel_group_permissions.py +0 -0
  132. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0082_add_manage_roles_permissions.py +0 -0
  133. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0083_alter_group_options.py +0 -0
  134. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0084_alter_rbaccontentguard_options.py +0 -0
  135. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0085_contentredirectcontentguard.py +0 -0
  136. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0086_task_json_fields.py +0 -0
  137. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0087_taskschedule.py +0 -0
  138. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0088_accesspolicy_queryset_scoping.py +0 -0
  139. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0089_alter_contentredirectcontentguard_options.py +0 -0
  140. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0090_char_to_text_field.py +0 -0
  141. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0091_systemid.py +0 -0
  142. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0092_alter_upload_options.py +0 -0
  143. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0093_add_info_field_repositoryversion.py +0 -0
  144. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0094_protect_repository_content.py +0 -0
  145. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0095_artifactdistribution.py +0 -0
  146. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0096_alter_task_logging_cid.py +0 -0
  147. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0097_remove_telemetry_task_schedule.py +0 -0
  148. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/0098_pulp_labels.py +0 -0
  149. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/migrations/__init__.py +0 -0
  150. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/mime_types.py +0 -0
  151. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/modelresource.py +0 -0
  152. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/models/__init__.py +0 -0
  153. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/models/access_policy.py +0 -0
  154. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/models/acs.py +0 -0
  155. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/models/analytics.py +0 -0
  156. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/models/base.py +0 -0
  157. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/models/content.py +0 -0
  158. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/models/exporter.py +0 -0
  159. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/models/fields.py +0 -0
  160. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/models/generic.py +0 -0
  161. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/models/importer.py +0 -0
  162. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/models/progress.py +0 -0
  163. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/models/publication.py +0 -0
  164. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/models/repository.py +0 -0
  165. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/models/role.py +0 -0
  166. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/models/status.py +0 -0
  167. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/models/storage.py +0 -0
  168. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/models/upload.py +0 -0
  169. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/monkeypatch.py +0 -0
  170. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/protobuf/__init__.py +0 -0
  171. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/protobuf/analytics_pb2.py +0 -0
  172. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/pulp_hashlib.py +0 -0
  173. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/redis_connection.py +0 -0
  174. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/response.py +0 -0
  175. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/role_util.py +0 -0
  176. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/serializers/__init__.py +0 -0
  177. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/serializers/access_policy.py +0 -0
  178. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/serializers/acs.py +0 -0
  179. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/serializers/base.py +0 -0
  180. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/serializers/content.py +0 -0
  181. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/serializers/exporter.py +0 -0
  182. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/serializers/fields.py +0 -0
  183. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/serializers/importer.py +0 -0
  184. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/serializers/orphans.py +0 -0
  185. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/serializers/progress.py +0 -0
  186. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/serializers/publication.py +0 -0
  187. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/serializers/purge.py +0 -0
  188. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/serializers/reclaim.py +0 -0
  189. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/serializers/repair.py +0 -0
  190. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/serializers/repository.py +0 -0
  191. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/serializers/status.py +0 -0
  192. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/serializers/task.py +0 -0
  193. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/serializers/upload.py +0 -0
  194. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/serializers/user.py +0 -0
  195. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/settings.py +0 -0
  196. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/tasks/__init__.py +0 -0
  197. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/tasks/analytics.py +0 -0
  198. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/tasks/base.py +0 -0
  199. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/tasks/export.py +0 -0
  200. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/tasks/importer.py +0 -0
  201. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/tasks/orphan.py +0 -0
  202. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/tasks/purge.py +0 -0
  203. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/tasks/reclaim_space.py +0 -0
  204. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/tasks/repository.py +0 -0
  205. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/tasks/test.py +0 -0
  206. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/tasks/upload.py +0 -0
  207. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/templates/rest_framework/api.html +0 -0
  208. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/templatetags/__init__.py +0 -0
  209. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/urls.py +0 -0
  210. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/util.py +0 -0
  211. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/views/__init__.py +0 -0
  212. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/views/importer.py +0 -0
  213. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/views/orphans.py +0 -0
  214. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/views/repair.py +0 -0
  215. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/views/status.py +0 -0
  216. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/viewsets/__init__.py +0 -0
  217. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/viewsets/access_policy.py +0 -0
  218. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/viewsets/acs.py +0 -0
  219. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/viewsets/base.py +0 -0
  220. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/viewsets/content.py +0 -0
  221. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/viewsets/custom_filters.py +0 -0
  222. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/viewsets/exporter.py +0 -0
  223. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/viewsets/importer.py +0 -0
  224. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/viewsets/orphans.py +0 -0
  225. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/viewsets/publication.py +0 -0
  226. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/viewsets/reclaim.py +0 -0
  227. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/viewsets/repository.py +0 -0
  228. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/viewsets/upload.py +0 -0
  229. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/viewsets/user.py +0 -0
  230. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/app/wsgi.py +0 -0
  231. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/backends.py +0 -0
  232. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/cache/__init__.py +0 -0
  233. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/cache/cache.py +0 -0
  234. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/constants.py +0 -0
  235. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/content/__init__.py +0 -0
  236. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/content/authentication.py +0 -0
  237. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/content/handler.py +0 -0
  238. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/download/__init__.py +0 -0
  239. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/download/base.py +0 -0
  240. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/download/factory.py +0 -0
  241. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/download/file.py +0 -0
  242. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/download/http.py +0 -0
  243. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/exceptions/__init__.py +0 -0
  244. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/exceptions/base.py +0 -0
  245. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/exceptions/plugin.py +0 -0
  246. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/exceptions/validation.py +0 -0
  247. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/filters.py +0 -0
  248. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/openapi/__init__.py +0 -0
  249. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/__init__.py +0 -0
  250. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/access_policy.py +0 -0
  251. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/actions.py +0 -0
  252. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/apps.py +0 -0
  253. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/authentication/__init__.py +0 -0
  254. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/cache/__init__.py +0 -0
  255. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/constants.py +0 -0
  256. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/content.py +0 -0
  257. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/download/__init__.py +0 -0
  258. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/exceptions.py +0 -0
  259. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/files.py +0 -0
  260. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/importexport.py +0 -0
  261. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/modelresources.py +0 -0
  262. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/models/__init__.py +0 -0
  263. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/models/role.py +0 -0
  264. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/publication_utils.py +0 -0
  265. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/pulp_hashlib.py +0 -0
  266. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/repo_version_utils.py +0 -0
  267. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/responses.py +0 -0
  268. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/serializers/__init__.py +0 -0
  269. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/serializers/content.py +0 -0
  270. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/stages/__init__.py +0 -0
  271. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/stages/api.py +0 -0
  272. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/stages/artifact_stages.py +0 -0
  273. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/stages/content_stages.py +0 -0
  274. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/stages/declarative_version.py +0 -0
  275. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/stages/models.py +0 -0
  276. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/stages/profiler.py +0 -0
  277. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/storage.py +0 -0
  278. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/sync.py +0 -0
  279. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/tasking.py +0 -0
  280. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/util.py +0 -0
  281. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/viewsets/__init__.py +0 -0
  282. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/plugin/viewsets/content.py +0 -0
  283. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/responses.py +0 -0
  284. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tasking/__init__.py +0 -0
  285. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tasking/constants.py +0 -0
  286. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tasking/entrypoint.py +0 -0
  287. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tasking/storage.py +0 -0
  288. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tasking/tasks.py +0 -0
  289. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tasking/util.py +0 -0
  290. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/__init__.py +0 -0
  291. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/functional/__init__.py +0 -0
  292. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/functional/api/__init__.py +0 -0
  293. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/functional/api/test_access_policy.py +0 -0
  294. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/functional/api/test_api_docs.py +0 -0
  295. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/functional/api/test_artifact_distribution.py +0 -0
  296. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/functional/api/test_auth.py +0 -0
  297. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/functional/api/test_correlation_id.py +0 -0
  298. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/functional/api/test_crd_artifacts.py +0 -0
  299. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/functional/api/test_openapi_schema.py +0 -0
  300. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/functional/api/test_role.py +0 -0
  301. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/functional/api/test_root_endpoint.py +0 -0
  302. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/functional/api/test_scoping.py +0 -0
  303. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/functional/api/test_signing_service.py +0 -0
  304. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/functional/api/test_status.py +0 -0
  305. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/functional/api/test_upload.py +0 -0
  306. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/functional/api/test_users_groups.py +0 -0
  307. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/functional/api/test_workers.py +0 -0
  308. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/functional/content_with_coverage.py +0 -0
  309. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/functional/gpg_ascii_armor_signing_service.py +0 -0
  310. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/functional/utils.py +0 -0
  311. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/__init__.py +0 -0
  312. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/content/__init__.py +0 -0
  313. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/content/test_handler.py +0 -0
  314. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/content/test_heartbeat.py +0 -0
  315. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/download/__init__.py +0 -0
  316. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/download/test_download_base.py +0 -0
  317. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/download/test_factory.py +0 -0
  318. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/migrations/__init__.py +0 -0
  319. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/migrations/test_0077_move_remote_url_credentials.py +0 -0
  320. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/models/__init__.py +0 -0
  321. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/models/test_content.py +0 -0
  322. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/models/test_remote.py +0 -0
  323. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/models/test_repository.py +0 -0
  324. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/roles/__init__.py +0 -0
  325. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/roles/test_roles.py +0 -0
  326. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/serializers/__init__.py +0 -0
  327. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/serializers/test_base.py +0 -0
  328. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/serializers/test_pulpexport.py +0 -0
  329. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/serializers/test_repository.py +0 -0
  330. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/stages/__init__.py +0 -0
  331. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/stages/test_artifactdownloader.py +0 -0
  332. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/stages/test_stages.py +0 -0
  333. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/test_cache.py +0 -0
  334. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/test_content_guard.py +0 -0
  335. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/test_files.py +0 -0
  336. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/test_import_checks.py +0 -0
  337. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/test_settings.py +0 -0
  338. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/test_util.py +0 -0
  339. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/viewsets/__init__.py +0 -0
  340. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore/tests/unit/viewsets/test_base.py +0 -0
  341. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore.egg-info/dependency_links.txt +0 -0
  342. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore.egg-info/entry_points.txt +0 -0
  343. {pulpcore-3.22.28 → pulpcore-3.22.30}/pulpcore.egg-info/top_level.txt +0 -0
  344. {pulpcore-3.22.28 → pulpcore-3.22.30}/pyproject.toml +0 -0
  345. {pulpcore-3.22.28 → pulpcore-3.22.30}/setup.cfg +0 -0
  346. {pulpcore-3.22.28 → pulpcore-3.22.30}/test_requirements.txt +0 -0
  347. {pulpcore-3.22.28 → pulpcore-3.22.30}/unittest_requirements.txt +0 -0
@@ -8,6 +8,38 @@
8
8
 
9
9
  [//]: # (towncrier release notes start)
10
10
 
11
+ # ## 3.22.30 (2024-08-10) {: #3.22.30 }
12
+
13
+ ### REST API {: #3.22.30-rest-api }
14
+
15
+ #### Bugfixes {: #3.22.30-rest-api-bugfix }
16
+
17
+ - Fixed RBAC permissions being incorrectly assigned in tasks that create objects.
18
+ https://access.redhat.com/security/cve/cve-2024-7143
19
+ [#5683](https://github.com/pulp/pulpcore/issues/5683)
20
+
21
+ ### Plugin API {: #3.22.30-plugin-api }
22
+
23
+ No significant changes.
24
+
25
+ ---
26
+
27
+ ## 3.22.29 (2024-07-16) {: #3.22.29 }
28
+
29
+
30
+ ### REST API {: #3.22.29-rest-api }
31
+
32
+ #### Bugfixes {: #3.22.29-rest-api-bugfix }
33
+
34
+ - Browsable HREFs now have clickable links again.
35
+ [#5563](https://github.com/pulp/pulpcore/issues/5563)
36
+
37
+ ### Plugin API {: #3.22.29-plugin-api }
38
+
39
+ No significant changes.
40
+
41
+ ---
42
+
11
43
  ## 3.22.28 (2024-06-24) {: #3.22.28 }
12
44
 
13
45
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pulpcore
3
- Version: 3.22.28
3
+ Version: 3.22.30
4
4
  Summary: Pulp Django Application and Related Modules
5
5
  Home-page: https://pulpproject.org
6
6
  Author: Pulp Team
@@ -3,8 +3,6 @@ django
3
3
  dynaconf
4
4
  drf-spectacular
5
5
  pulp-smash @ git+https://github.com/pulp/pulp-smash.git
6
- pulpcore-client
7
- pulp-file-client
8
6
  pytest<8
9
7
  python-gnupg
10
8
 
@@ -207,7 +207,7 @@ class PulpAppConfig(PulpPluginAppConfig):
207
207
  label = "core"
208
208
 
209
209
  # The version of this app
210
- version = "3.22.28"
210
+ version = "3.22.30"
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.
@@ -3,7 +3,7 @@ import re
3
3
  from django import template
4
4
  from django.conf import settings
5
5
  from django.utils.encoding import force_text
6
- from django.utils.html import escape
6
+ from django.utils.html import escape, smart_urlquote
7
7
  from django.utils.safestring import SafeData, mark_safe
8
8
 
9
9
  register = template.Library()
@@ -20,6 +20,8 @@ WRAPPING_PUNCTUATION = [
20
20
  ("&quot;", "&quot;"),
21
21
  ]
22
22
  word_split_re = re.compile(r"(\s+)")
23
+ api_root_prefix = r"^" + settings.V3_API_ROOT.replace("/", r"\/")
24
+ href_re = re.compile(api_root_prefix, re.IGNORECASE)
23
25
 
24
26
 
25
27
  @register.filter(needs_autoescape=True)
@@ -57,6 +59,9 @@ def urlize_quoted_hrefs(text, trim_url_limit=None, nofollow=True, autoescape=Tru
57
59
  url = None
58
60
  nofollow_attr = ' rel="nofollow"' if nofollow else ""
59
61
 
62
+ if href_re.match(middle):
63
+ url = smart_urlquote(middle)
64
+
60
65
  # Check if it's a real URL
61
66
  if url and ("{" in url or "%7B" in url):
62
67
  url = None
@@ -74,8 +79,6 @@ def urlize_quoted_hrefs(text, trim_url_limit=None, nofollow=True, autoescape=Tru
74
79
  words[i] = mark_safe(word)
75
80
  elif autoescape:
76
81
  words[i] = escape(word)
77
- elif safe_input:
78
- words[i] = mark_safe(word)
79
- elif autoescape:
82
+ else:
80
83
  words[i] = escape(word)
81
84
  return "".join(words)
@@ -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
@@ -0,0 +1,55 @@
1
+ from django.conf import settings
2
+
3
+ from pulpcore.app.templatetags import pulp_urls
4
+
5
+
6
+ def test_urlize_quoted_hrefs_basic_url():
7
+ """
8
+ text starts with API_ROOT, defaults. Should be made clickable
9
+ """
10
+ txt = settings.V3_API_ROOT + "foo/bar/"
11
+ ret = pulp_urls.urlize_quoted_hrefs(txt)
12
+ assert ret == f'<a href="{txt}" rel="nofollow">{txt}</a>'
13
+
14
+
15
+ def test_urlize_quoted_hrefs_nofollow():
16
+ """
17
+ text starts with API_ROOT, defaults. Should be made clickable
18
+ """
19
+ txt = settings.V3_API_ROOT + "foo/bar/"
20
+ ret = pulp_urls.urlize_quoted_hrefs(txt, nofollow=False)
21
+ assert ret == f'<a href="{txt}">{txt}</a>'
22
+
23
+
24
+ def test_urlize_quoted_hrefs_trim():
25
+ """
26
+ text starts with API_ROOT, defaults. Should be made clickable
27
+ """
28
+ txt = settings.V3_API_ROOT + "foo/bar/"
29
+ trim_txt = txt[0] + "..."
30
+ ret = pulp_urls.urlize_quoted_hrefs(txt, trim_url_limit=4)
31
+ assert ret == f'<a href="{txt}" rel="nofollow">{trim_txt}</a>'
32
+
33
+
34
+ def test_urlize_quoted_hrefs_basic_url_xss():
35
+ """
36
+ text starts with API_ROOT, includes XSS, defaults. Should be made clickable, escape XSS
37
+ """
38
+ txt = settings.V3_API_ROOT + "foo/bar/<script>alert('ALERT!')</script>blech/"
39
+ escapified_linked_text = (
40
+ '<a href="' + settings.V3_API_ROOT + "foo/bar/"
41
+ '%3Cscript%3Ealert(&#x27;ALERT!&#x27;)%3C/script%3Eblech/" '
42
+ 'rel="nofollow">' + settings.V3_API_ROOT + "foo/bar/&lt;script&gt;"
43
+ "alert(&#x27;ALERT!&#x27;)&lt;/script&gt;blech/</a>"
44
+ )
45
+ ret = pulp_urls.urlize_quoted_hrefs(txt)
46
+ assert ret == escapified_linked_text
47
+
48
+
49
+ def test_urlize_quoted_hrefs_basic_escape():
50
+ """
51
+ text contains XSS. Expect escaped
52
+ """
53
+ txt = "foo/bar/<script>alert('ALERT!')</script>blech/"
54
+ ret = pulp_urls.urlize_quoted_hrefs(txt)
55
+ assert ret == "foo/bar/&lt;script&gt;alert(&#x27;ALERT!&#x27;)&lt;/script&gt;blech/"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pulpcore
3
- Version: 3.22.28
3
+ Version: 3.22.30
4
4
  Summary: Pulp Django Application and Related Modules
5
5
  Home-page: https://pulpproject.org
6
6
  Author: Pulp Team
@@ -317,6 +317,7 @@ pulpcore/tests/unit/test_cache.py
317
317
  pulpcore/tests/unit/test_content_guard.py
318
318
  pulpcore/tests/unit/test_files.py
319
319
  pulpcore/tests/unit/test_import_checks.py
320
+ pulpcore/tests/unit/test_pulp_urls.py
320
321
  pulpcore/tests/unit/test_settings.py
321
322
  pulpcore/tests/unit/test_util.py
322
323
  pulpcore/tests/unit/content/__init__.py
@@ -1,10 +1,10 @@
1
1
  aiodns<=3.1.1,>=3.0
2
- aiofiles<=23.3.0,>=22.1
2
+ aiofiles<23.3.0,>=22.1
3
3
  aiohttp<3.9.2,>=3.8.1
4
4
  asyncio-throttle<=1.0.2,>=1.0
5
5
  backoff<2.2.2,>=2.1.2
6
6
  click<=8.1.7,>=8.1.0
7
- cryptography<42.0.1,>=38.0.1
7
+ cryptography<42.0,>=38.0.1
8
8
  Django~=3.2.16
9
9
  django-currentuser<=0.5.3,>=0.5.3
10
10
  django-filter<=22.1,>=22.1
@@ -1,11 +1,11 @@
1
1
  aiodns>=3.0,<=3.1.1
2
- aiofiles>=22.1,<=23.3.0
2
+ aiofiles>=22.1,<23.3.0
3
3
  aiohttp>=3.8.1,<3.9.2
4
4
  asyncio-throttle>=1.0,<=1.0.2
5
5
  async-timeout>=4.0.3,<4.0.4;python_version<"3.11"
6
6
  backoff>=2.1.2,<2.2.2
7
7
  click>=8.1.0,<=8.1.7
8
- cryptography>=38.0.1,<42.0.1
8
+ cryptography>=38.0.1,<42.0
9
9
  Django~=3.2.16 # LTS version, switch only if we have a compelling reason to
10
10
  django-currentuser>=0.5.3,<=0.5.3
11
11
  django-filter>=22.1,<=22.1
@@ -8,7 +8,7 @@ with open("requirements.txt") as requirements:
8
8
 
9
9
  setup(
10
10
  name="pulpcore",
11
- version="3.22.28",
11
+ version="3.22.30",
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