pulpcore 3.42.0__tar.gz → 3.43.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.
Files changed (457) hide show
  1. {pulpcore-3.42.0 → pulpcore-3.43.0}/CHANGES.rst +120 -0
  2. {pulpcore-3.42.0 → pulpcore-3.43.0}/PKG-INFO +1 -1
  3. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/app/__init__.py +1 -1
  4. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/apps.py +1 -1
  5. pulpcore-3.43.0/pulpcore/app/migrations/0115_compositecontentguard.py +27 -0
  6. pulpcore-3.43.0/pulpcore/app/migrations/0116_alter_remoteartifact_md5_alter_remoteartifact_sha1_and_more.py +43 -0
  7. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/models/__init__.py +1 -0
  8. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/models/base.py +6 -2
  9. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/models/content.py +6 -6
  10. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/models/publication.py +50 -1
  11. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/serializers/__init__.py +1 -0
  12. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/serializers/publication.py +15 -0
  13. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/viewsets/__init__.py +1 -0
  14. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/viewsets/custom_filters.py +3 -3
  15. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/viewsets/publication.py +72 -0
  16. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/__init__.py +6 -0
  17. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/using_plugin/test_contentguard.py +160 -0
  18. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/stages/test_stages.py +5 -4
  19. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore.egg-info/PKG-INFO +1 -1
  20. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore.egg-info/SOURCES.txt +2 -0
  21. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore.egg-info/requires.txt +4 -4
  22. {pulpcore-3.42.0 → pulpcore-3.43.0}/requirements.txt +4 -4
  23. {pulpcore-3.42.0 → pulpcore-3.43.0}/setup.py +1 -1
  24. {pulpcore-3.42.0 → pulpcore-3.43.0}/CODE_OF_CONDUCT.md +0 -0
  25. {pulpcore-3.42.0 → pulpcore-3.43.0}/COMMITMENT +0 -0
  26. {pulpcore-3.42.0 → pulpcore-3.43.0}/CONTRIBUTING.md +0 -0
  27. {pulpcore-3.42.0 → pulpcore-3.43.0}/COPYRIGHT +0 -0
  28. {pulpcore-3.42.0 → pulpcore-3.43.0}/LICENSE +0 -0
  29. {pulpcore-3.42.0 → pulpcore-3.43.0}/MANIFEST.in +0 -0
  30. {pulpcore-3.42.0 → pulpcore-3.43.0}/README.md +0 -0
  31. {pulpcore-3.42.0 → pulpcore-3.43.0}/functest_requirements.txt +0 -0
  32. {pulpcore-3.42.0 → pulpcore-3.43.0}/manage.py +0 -0
  33. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/__init__.py +0 -0
  34. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/app/migrations/0001_initial.py +0 -0
  35. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/app/migrations/0002_file_related_names.py +0 -0
  36. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/app/migrations/0003_auto_20191014_1721.py +0 -0
  37. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/app/migrations/0004_filefilesystemexporter.py +0 -0
  38. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/app/migrations/0005_filerepository.py +0 -0
  39. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/app/migrations/0006_delete_filefilesystemexporter.py +0 -0
  40. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/app/migrations/0007_filefilesystemexporter.py +0 -0
  41. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/app/migrations/0008_add_manifest_field.py +0 -0
  42. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/app/migrations/0009_move_data_to_new_master_distribution_model.py +0 -0
  43. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/app/migrations/0010_auto_publish.py +0 -0
  44. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/app/migrations/0011_fix_auto_publish.py +0 -0
  45. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/app/migrations/0012_delete_filefilesystemexporter.py +0 -0
  46. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/app/migrations/0013_file_acs.py +0 -0
  47. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/app/migrations/0014_new_rbac_permissions.py +0 -0
  48. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/app/migrations/0015_allow_null_manifest.py +0 -0
  49. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/app/migrations/0016_add_domain.py +0 -0
  50. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/app/migrations/0017_alter_filealternatecontentsource_alternatecontentsource_ptr_and_more.py +0 -0
  51. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/app/migrations/__init__.py +0 -0
  52. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/app/modelresource.py +0 -0
  53. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/app/models.py +0 -0
  54. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/app/replica.py +0 -0
  55. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/app/serializers.py +0 -0
  56. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/app/tasks/__init__.py +0 -0
  57. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/app/tasks/publishing.py +0 -0
  58. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/app/tasks/synchronizing.py +0 -0
  59. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/app/viewsets.py +0 -0
  60. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/manifest.py +0 -0
  61. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulp_file/pytest_plugin.py +0 -0
  62. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/__init__.py +0 -0
  63. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/__init__.py +0 -0
  64. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/access_policy.py +0 -0
  65. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/authentication.py +0 -0
  66. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/checks.py +0 -0
  67. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/entrypoint.py +0 -0
  68. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/files.py +0 -0
  69. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/global_access_conditions.py +0 -0
  70. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/importexport.py +0 -0
  71. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/loggers.py +0 -0
  72. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/manage.py +0 -0
  73. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/management/__init__.py +0 -0
  74. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/management/commands/__init__.py +0 -0
  75. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/management/commands/add-signing-service.py +0 -0
  76. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/management/commands/analyze-publication.py +0 -0
  77. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/management/commands/datarepair-2327.py +0 -0
  78. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/management/commands/dump-permissions.py +0 -0
  79. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/management/commands/dump-publications-to-fs.py +0 -0
  80. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/management/commands/handle-artifact-checksums.py +0 -0
  81. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/management/commands/remove-plugin.py +0 -0
  82. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/management/commands/remove-signing-service.py +0 -0
  83. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/management/commands/repository-size.py +0 -0
  84. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/management/commands/reset-admin-password.py +0 -0
  85. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/management/commands/rotate-db-key.py +0 -0
  86. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0001_initial.py +0 -0
  87. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0002_increase_artifact_size_field.py +0 -0
  88. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0003_remove_upload_completed.py +0 -0
  89. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0004_add_duplicated_reserved_resources.py +0 -0
  90. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0005_progressreport_code.py +0 -0
  91. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0006_repository_plugin_managed.py +0 -0
  92. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0007_delete_progress_proxies.py +0 -0
  93. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0008_published_metadata_as_content.py +0 -0
  94. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0009_remove_task_non_fatal_errors.py +0 -0
  95. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0010_pulp_fields.py +0 -0
  96. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0011_relative_path.py +0 -0
  97. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0012_auto_20191104_2000.py +0 -0
  98. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0013_repository_pulp_type.py +0 -0
  99. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0014_remove_repository_plugin_managed.py +0 -0
  100. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0015_auto_20191112_1426.py +0 -0
  101. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0016_charfield_to_textfield.py +0 -0
  102. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0017_remove_task_parent.py +0 -0
  103. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0018_auto_20191127_2350.py +0 -0
  104. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0019_add_signing_service_model.py +0 -0
  105. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0020_change_publishedartifact_constraints.py +0 -0
  106. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0021_add_signing_service_foreign_key.py +0 -0
  107. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0022_rename_last_version.py +0 -0
  108. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0023_change_exporter_models.py +0 -0
  109. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0024_use_local_storage_for_uploads.py +0 -0
  110. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0025_task_parent_task.py +0 -0
  111. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0026_task_group.py +0 -0
  112. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0027_export_backend.py +0 -0
  113. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0028_import_importer_pulpimporter_pulpimporterrepository.py +0 -0
  114. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0029_export_delete.py +0 -0
  115. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0030_taskgroup_all_tasks_dispatched.py +0 -0
  116. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0031_import_export_validate_params.py +0 -0
  117. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0032_export_to_chunks.py +0 -0
  118. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0033_increase_remote_artifact_size_field.py +0 -0
  119. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0034_groupprogressreport.py +0 -0
  120. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0035_content_upstream_id.py +0 -0
  121. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0036_unprotect_last_export.py +0 -0
  122. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0037_pulptemporaryfile.py +0 -0
  123. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0038_repository_remote.py +0 -0
  124. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0039_change_download_concurrency.py +0 -0
  125. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0040_set_admin_is_staff.py +0 -0
  126. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0041_accesspolicy.py +0 -0
  127. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0042_rbac_for_tasks.py +0 -0
  128. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0043_toc_attribute.py +0 -0
  129. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0044_temp_file_artifact_field.py +0 -0
  130. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0045_accesspolicy_permissions_allow_null.py +0 -0
  131. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0046_task__resource_job_id.py +0 -0
  132. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0047_improve_orphan_cleanup.py +0 -0
  133. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0048_fips_checksums.py +0 -0
  134. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0049_add_file_field_to_uploadchunk.py +0 -0
  135. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0050_namespace_access_policies.py +0 -0
  136. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0051_timeoutfields.py +0 -0
  137. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0052_tasking_logging_cid.py +0 -0
  138. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0053_remote_headers.py +0 -0
  139. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0054_add_public_key.py +0 -0
  140. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0055_label.py +0 -0
  141. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0056_remote_rate_limit.py +0 -0
  142. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0057_add_label_indexes.py +0 -0
  143. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0058_accesspolicy_customized.py +0 -0
  144. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0059_proxy_creds.py +0 -0
  145. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0060_data_migration_proxy_creds.py +0 -0
  146. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0061_call_handle_artifact_checksums_command.py +0 -0
  147. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0062_add_new_distribution_mastermodel.py +0 -0
  148. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0063_repository_retained_versions.py +0 -0
  149. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0064_add_new_style_task_columns.py +0 -0
  150. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0064_repository_user_hidden.py +0 -0
  151. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0065_merge_20210615_1211.py +0 -0
  152. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0066_download_concurrency_and_retry_changes.py +0 -0
  153. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0067_add_protect_to_task_reservation.py +0 -0
  154. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0068_add_timestamp_of_interest.py +0 -0
  155. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0069_update_json_fields.py +0 -0
  156. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0070_rename_retained_versions.py +0 -0
  157. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0071_filesystemexport_filesystemexporter.py +0 -0
  158. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0072_add_method_to_filesystem_exporter.py +0 -0
  159. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0073_encrypt_remote_fields.py +0 -0
  160. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0074_acs.py +0 -0
  161. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0075_rbaccontentguard.py +0 -0
  162. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0076_remove_reserved_resource.py +0 -0
  163. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0077_move_remote_url_credentials.py +0 -0
  164. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0078_grouprole_role_userrole.py +0 -0
  165. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0079_rename_permissions_assignment_accesspolicy_creation_hooks.py +0 -0
  166. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0080_proxy_group_model.py +0 -0
  167. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0081_reapplabel_group_permissions.py +0 -0
  168. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0082_add_manage_roles_permissions.py +0 -0
  169. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0083_alter_group_options.py +0 -0
  170. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0084_alter_rbaccontentguard_options.py +0 -0
  171. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0085_contentredirectcontentguard.py +0 -0
  172. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0086_task_json_fields.py +0 -0
  173. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0087_taskschedule.py +0 -0
  174. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0088_accesspolicy_queryset_scoping.py +0 -0
  175. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0089_alter_contentredirectcontentguard_options.py +0 -0
  176. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0090_char_to_text_field.py +0 -0
  177. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0091_systemid.py +0 -0
  178. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0092_alter_upload_options.py +0 -0
  179. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0093_add_info_field_repositoryversion.py +0 -0
  180. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0094_protect_repository_content.py +0 -0
  181. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0095_artifactdistribution.py +0 -0
  182. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0096_alter_task_logging_cid.py +0 -0
  183. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0097_remove_telemetry_task_schedule.py +0 -0
  184. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0098_pulp_labels.py +0 -0
  185. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0099_versions_field.py +0 -0
  186. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0100_upstreampulp.py +0 -0
  187. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0101_add_domain.py +0 -0
  188. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0102_add_domain_relations.py +0 -0
  189. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0103_alter_export_task.py +0 -0
  190. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0104_delete_label.py +0 -0
  191. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0105_abstract_uuid_gen.py +0 -0
  192. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0106_alter_artifactdistribution_distribution_ptr_and_more.py +0 -0
  193. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0107_distribution_hidden.py +0 -0
  194. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0108_task_versions.py +0 -0
  195. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0109_contentartifact_relative_path_index.py +0 -0
  196. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0110_apiappstatus.py +0 -0
  197. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0111_task_enc_args_task_enc_kwargs.py +0 -0
  198. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0112_alter_upstreampulp_options.py +0 -0
  199. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0113_headercontentguard.py +0 -0
  200. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/0114_remove_task_args_remove_task_kwargs.py +0 -0
  201. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/migrations/__init__.py +0 -0
  202. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/mime_types.py +0 -0
  203. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/modelresource.py +0 -0
  204. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/models/access_policy.py +0 -0
  205. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/models/acs.py +0 -0
  206. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/models/analytics.py +0 -0
  207. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/models/domain.py +0 -0
  208. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/models/exporter.py +0 -0
  209. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/models/fields.py +0 -0
  210. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/models/generic.py +0 -0
  211. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/models/importer.py +0 -0
  212. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/models/progress.py +0 -0
  213. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/models/replica.py +0 -0
  214. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/models/repository.py +0 -0
  215. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/models/role.py +0 -0
  216. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/models/status.py +0 -0
  217. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/models/storage.py +0 -0
  218. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/models/task.py +0 -0
  219. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/models/upload.py +0 -0
  220. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/protobuf/__init__.py +0 -0
  221. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/protobuf/analytics_pb2.py +0 -0
  222. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/pulp_hashlib.py +0 -0
  223. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/redis_connection.py +0 -0
  224. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/replica.py +0 -0
  225. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/response.py +0 -0
  226. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/role_util.py +0 -0
  227. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/serializers/access_policy.py +0 -0
  228. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/serializers/acs.py +0 -0
  229. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/serializers/base.py +0 -0
  230. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/serializers/content.py +0 -0
  231. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/serializers/domain.py +0 -0
  232. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/serializers/exporter.py +0 -0
  233. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/serializers/fields.py +0 -0
  234. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/serializers/importer.py +0 -0
  235. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/serializers/orphans.py +0 -0
  236. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/serializers/progress.py +0 -0
  237. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/serializers/purge.py +0 -0
  238. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/serializers/reclaim.py +0 -0
  239. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/serializers/repair.py +0 -0
  240. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/serializers/replica.py +0 -0
  241. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/serializers/repository.py +0 -0
  242. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/serializers/status.py +0 -0
  243. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/serializers/task.py +0 -0
  244. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/serializers/upload.py +0 -0
  245. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/serializers/user.py +0 -0
  246. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/settings.py +0 -0
  247. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/tasks/__init__.py +0 -0
  248. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/tasks/analytics.py +0 -0
  249. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/tasks/base.py +0 -0
  250. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/tasks/export.py +0 -0
  251. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/tasks/importer.py +0 -0
  252. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/tasks/orphan.py +0 -0
  253. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/tasks/purge.py +0 -0
  254. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/tasks/reclaim_space.py +0 -0
  255. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/tasks/replica.py +0 -0
  256. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/tasks/repository.py +0 -0
  257. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/tasks/test.py +0 -0
  258. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/tasks/upload.py +0 -0
  259. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/templates/rest_framework/api.html +0 -0
  260. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/templatetags/__init__.py +0 -0
  261. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/templatetags/pulp_urls.py +0 -0
  262. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/urls.py +0 -0
  263. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/util.py +0 -0
  264. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/views/__init__.py +0 -0
  265. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/views/importer.py +0 -0
  266. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/views/orphans.py +0 -0
  267. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/views/repair.py +0 -0
  268. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/views/status.py +0 -0
  269. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/viewsets/access_policy.py +0 -0
  270. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/viewsets/acs.py +0 -0
  271. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/viewsets/base.py +0 -0
  272. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/viewsets/content.py +0 -0
  273. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/viewsets/domain.py +0 -0
  274. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/viewsets/exporter.py +0 -0
  275. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/viewsets/importer.py +0 -0
  276. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/viewsets/orphans.py +0 -0
  277. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/viewsets/reclaim.py +0 -0
  278. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/viewsets/replica.py +0 -0
  279. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/viewsets/repository.py +0 -0
  280. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/viewsets/task.py +0 -0
  281. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/viewsets/upload.py +0 -0
  282. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/viewsets/user.py +0 -0
  283. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/app/wsgi.py +0 -0
  284. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/backends.py +0 -0
  285. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/cache/__init__.py +0 -0
  286. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/cache/cache.py +0 -0
  287. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/constants.py +0 -0
  288. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/content/__init__.py +0 -0
  289. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/content/authentication.py +0 -0
  290. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/content/entrypoint.py +0 -0
  291. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/content/handler.py +0 -0
  292. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/content/instrumentation.py +0 -0
  293. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/download/__init__.py +0 -0
  294. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/download/base.py +0 -0
  295. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/download/factory.py +0 -0
  296. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/download/file.py +0 -0
  297. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/download/http.py +0 -0
  298. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/exceptions/__init__.py +0 -0
  299. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/exceptions/base.py +0 -0
  300. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/exceptions/plugin.py +0 -0
  301. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/exceptions/validation.py +0 -0
  302. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/filters.py +0 -0
  303. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/middleware.py +0 -0
  304. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/migrations.py +0 -0
  305. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/openapi/__init__.py +0 -0
  306. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/__init__.py +0 -0
  307. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/access_policy.py +0 -0
  308. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/actions.py +0 -0
  309. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/apps.py +0 -0
  310. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/authentication/__init__.py +0 -0
  311. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/cache/__init__.py +0 -0
  312. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/constants.py +0 -0
  313. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/content.py +0 -0
  314. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/download/__init__.py +0 -0
  315. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/exceptions.py +0 -0
  316. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/files.py +0 -0
  317. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/importexport.py +0 -0
  318. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/migrations.py +0 -0
  319. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/modelresources.py +0 -0
  320. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/models/__init__.py +0 -0
  321. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/models/role.py +0 -0
  322. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/publication_utils.py +0 -0
  323. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/pulp_hashlib.py +0 -0
  324. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/replica.py +0 -0
  325. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/repo_version_utils.py +0 -0
  326. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/responses.py +0 -0
  327. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/serializers/__init__.py +0 -0
  328. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/serializers/content.py +0 -0
  329. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/stages/__init__.py +0 -0
  330. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/stages/api.py +0 -0
  331. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/stages/artifact_stages.py +0 -0
  332. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/stages/content_stages.py +0 -0
  333. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/stages/declarative_version.py +0 -0
  334. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/stages/models.py +0 -0
  335. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/storage.py +0 -0
  336. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/sync.py +0 -0
  337. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/tasking.py +0 -0
  338. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/util.py +0 -0
  339. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/viewsets/__init__.py +0 -0
  340. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/plugin/viewsets/content.py +0 -0
  341. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/responses.py +0 -0
  342. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tasking/__init__.py +0 -0
  343. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tasking/_util.py +0 -0
  344. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tasking/constants.py +0 -0
  345. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tasking/entrypoint.py +0 -0
  346. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tasking/storage.py +0 -0
  347. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tasking/tasks.py +0 -0
  348. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tasking/worker.py +0 -0
  349. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/__init__.py +0 -0
  350. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/__init__.py +0 -0
  351. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/pulp_file/__init__.py +0 -0
  352. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/pulp_file/test_acs.py +0 -0
  353. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/pulp_file/test_auto_publish.py +0 -0
  354. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/pulp_file/test_bad_sync.py +0 -0
  355. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/pulp_file/test_crud_content_unit.py +0 -0
  356. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/pulp_file/test_crud_remotes.py +0 -0
  357. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/pulp_file/test_domains.py +0 -0
  358. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/pulp_file/test_download_policies.py +0 -0
  359. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/pulp_file/test_generic_list.py +0 -0
  360. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/pulp_file/test_labels.py +0 -0
  361. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/pulp_file/test_mime_types.py +0 -0
  362. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/pulp_file/test_publish.py +0 -0
  363. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/pulp_file/test_pulp_export.py +0 -0
  364. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/pulp_file/test_rbac.py +0 -0
  365. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/pulp_file/test_remote_settings.py +0 -0
  366. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/pulp_file/test_sync.py +0 -0
  367. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/pulp_file/test_telemetry_collection.py +0 -0
  368. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/test_access_policy.py +0 -0
  369. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/test_api_docs.py +0 -0
  370. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/test_artifact_distribution.py +0 -0
  371. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/test_auth.py +0 -0
  372. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/test_correlation_id.py +0 -0
  373. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/test_crd_artifacts.py +0 -0
  374. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/test_crud_domains.py +0 -0
  375. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/test_filter.py +0 -0
  376. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/test_openapi_schema.py +0 -0
  377. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/test_replication.py +0 -0
  378. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/test_repos.py +0 -0
  379. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/test_role.py +0 -0
  380. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/test_root_endpoint.py +0 -0
  381. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/test_scoping.py +0 -0
  382. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/test_signing_service.py +0 -0
  383. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/test_status.py +0 -0
  384. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/test_tasking.py +0 -0
  385. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/test_upload.py +0 -0
  386. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/test_users_groups.py +0 -0
  387. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/test_workers.py +0 -0
  388. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/using_plugin/__init__.py +0 -0
  389. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/using_plugin/test_content_access.py +0 -0
  390. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/using_plugin/test_content_cache.py +0 -0
  391. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/using_plugin/test_content_delivery.py +0 -0
  392. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/using_plugin/test_content_directory.py +0 -0
  393. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/using_plugin/test_content_path.py +0 -0
  394. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/using_plugin/test_content_promotion.py +0 -0
  395. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/using_plugin/test_crud_repos.py +0 -0
  396. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/using_plugin/test_distributions.py +0 -0
  397. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/using_plugin/test_filesystemexport.py +0 -0
  398. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/using_plugin/test_labels.py +0 -0
  399. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/using_plugin/test_orphans.py +0 -0
  400. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/using_plugin/test_pagination.py +0 -0
  401. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/using_plugin/test_proxy.py +0 -0
  402. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/using_plugin/test_pulpimport.py +0 -0
  403. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/using_plugin/test_purge.py +0 -0
  404. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/using_plugin/test_reclaim_disk_space.py +0 -0
  405. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/using_plugin/test_repair.py +0 -0
  406. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/using_plugin/test_repo_versions.py +0 -0
  407. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/using_plugin/test_tasks.py +0 -0
  408. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/api/using_plugin/test_unlinking_repo.py +0 -0
  409. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/assets/__init__.py +0 -0
  410. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/assets/otel_server.py +0 -0
  411. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/content_with_coverage.py +0 -0
  412. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/gpg_ascii_armor_signing_service.py +0 -0
  413. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/functional/utils.py +0 -0
  414. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/performance/__init__.py +0 -0
  415. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/performance/test_performance.py +0 -0
  416. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/__init__.py +0 -0
  417. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/conftest.py +0 -0
  418. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/content/__init__.py +0 -0
  419. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/content/test_handler.py +0 -0
  420. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/content/test_heartbeat.py +0 -0
  421. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/download/__init__.py +0 -0
  422. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/download/test_downloader_base.py +0 -0
  423. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/download/test_downloader_factory.py +0 -0
  424. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/migration/__init__.py +0 -0
  425. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/migration/test_0077_move_remote_url_credentials.py +0 -0
  426. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/models/__init__.py +0 -0
  427. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/models/test_base.py +0 -0
  428. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/models/test_content.py +0 -0
  429. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/models/test_remote.py +0 -0
  430. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/models/test_repository.py +0 -0
  431. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/pulp_file/__init__.py +0 -0
  432. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/pulp_file/test_serializers.py +0 -0
  433. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/roles/__init__.py +0 -0
  434. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/roles/test_roles.py +0 -0
  435. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/serializers/__init__.py +0 -0
  436. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/serializers/test_base.py +0 -0
  437. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/serializers/test_domain.py +0 -0
  438. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/serializers/test_pulpexport.py +0 -0
  439. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/serializers/test_repository.py +0 -0
  440. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/stages/__init__.py +0 -0
  441. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/stages/test_artifactdownloader.py +0 -0
  442. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/test_cache.py +0 -0
  443. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/test_content_guard.py +0 -0
  444. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/test_files.py +0 -0
  445. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/test_import_checks.py +0 -0
  446. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/test_settings.py +0 -0
  447. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/test_util.py +0 -0
  448. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/test_viewsets.py +0 -0
  449. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/viewsets/__init__.py +0 -0
  450. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore/tests/unit/viewsets/test_viewset_base.py +0 -0
  451. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore.egg-info/dependency_links.txt +0 -0
  452. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore.egg-info/entry_points.txt +0 -0
  453. {pulpcore-3.42.0 → pulpcore-3.43.0}/pulpcore.egg-info/top_level.txt +0 -0
  454. {pulpcore-3.42.0 → pulpcore-3.43.0}/pyproject.toml +0 -0
  455. {pulpcore-3.42.0 → pulpcore-3.43.0}/setup.cfg +0 -0
  456. {pulpcore-3.42.0 → pulpcore-3.43.0}/test_requirements.txt +0 -0
  457. {pulpcore-3.42.0 → pulpcore-3.43.0}/unittest_requirements.txt +0 -0
@@ -13,6 +13,47 @@ Changelog
13
13
 
14
14
  .. towncrier release notes start
15
15
 
16
+ 3.43.0 (2023-12-05)
17
+ ===================
18
+ REST API
19
+ --------
20
+
21
+ Features
22
+ ~~~~~~~~
23
+
24
+ - Added a CompositeContentGuard, that manages a list-of ContentGuards and permits
25
+ access to content if *ANY* guard permits.
26
+ :github:`4583`
27
+
28
+
29
+ Bugfixes
30
+ ~~~~~~~~
31
+
32
+ - Removed a race condition leading to 500 error in distribution filtering.
33
+ :github:`4766`
34
+ - Added missing database indices to the ``RemoteArtifact`` model.
35
+ :github:`4835`
36
+
37
+
38
+ Plugin API
39
+ ----------
40
+
41
+ Features
42
+ ~~~~~~~~
43
+
44
+ - Added the async safe `detail_model` property to master detail models.
45
+ :github:`4766`
46
+
47
+
48
+ Pulp File
49
+ ---------
50
+
51
+ No significant changes.
52
+
53
+
54
+ ----
55
+
56
+
16
57
  3.42.0 (2023-11-28)
17
58
  ===================
18
59
  REST API
@@ -1796,6 +1837,25 @@ Features
1796
1837
  :github:`3661`
1797
1838
 
1798
1839
 
1840
+ 3.23.23 (2023-11-29)
1841
+ ====================
1842
+ REST API
1843
+ --------
1844
+
1845
+ Bugfixes
1846
+ ~~~~~~~~
1847
+
1848
+ - Removed a workaround to force close all tcp connections in sync leading to an exhaustion of port
1849
+ numbers and their reuse while in time_wait state.
1850
+ :github:`4452`
1851
+
1852
+
1853
+ Plugin API
1854
+ ----------
1855
+
1856
+ No significant changes.
1857
+
1858
+
1799
1859
  3.23.22 (2023-11-23)
1800
1860
  ====================
1801
1861
  REST API
@@ -2389,6 +2449,25 @@ Deprecations
2389
2449
  :github:`3604`
2390
2450
 
2391
2451
 
2452
+ 3.22.20 (2023-11-30)
2453
+ ====================
2454
+ REST API
2455
+ --------
2456
+
2457
+ Bugfixes
2458
+ ~~~~~~~~
2459
+
2460
+ - Removed a workaround to force close all tcp connections in sync leading to an exhaustion of port
2461
+ numbers and their reuse while in time_wait state.
2462
+ :github:`4452`
2463
+
2464
+
2465
+ Plugin API
2466
+ ----------
2467
+
2468
+ No significant changes.
2469
+
2470
+
2392
2471
  3.22.19 (2023-11-15)
2393
2472
  ====================
2394
2473
  REST API
@@ -2920,6 +2999,25 @@ Removals
2920
2999
  :github:`3400`
2921
3000
 
2922
3001
 
3002
+ 3.21.24 (2023-11-30)
3003
+ ====================
3004
+ REST API
3005
+ --------
3006
+
3007
+ Bugfixes
3008
+ ~~~~~~~~
3009
+
3010
+ - Removed a workaround to force close all tcp connections in sync leading to an exhaustion of port
3011
+ numbers and their reuse while in time_wait state.
3012
+ :github:`4452`
3013
+
3014
+
3015
+ Plugin API
3016
+ ----------
3017
+
3018
+ No significant changes.
3019
+
3020
+
2923
3021
  3.21.23 (2023-11-23)
2924
3022
  ====================
2925
3023
  REST API
@@ -3928,6 +4026,28 @@ Bugfixes
3928
4026
  :github:`2069`
3929
4027
 
3930
4028
 
4029
+ 3.18.33 (2023-12-01)
4030
+ ====================
4031
+ REST API
4032
+ --------
4033
+
4034
+ Bugfixes
4035
+ ~~~~~~~~
4036
+
4037
+ - Removed a workaround to force close all tcp connections in sync leading to an exhaustion of port
4038
+ numbers and their reuse while in time_wait state.
4039
+ :github:`4452`
4040
+
4041
+
4042
+ Plugin API
4043
+ ----------
4044
+
4045
+ No significant changes.
4046
+
4047
+
4048
+ ----
4049
+
4050
+
3931
4051
  3.18.32 (2023-11-14)
3932
4052
  ====================
3933
4053
  REST API
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pulpcore
3
- Version: 3.42.0
3
+ Version: 3.43.0
4
4
  Summary: Pulp Django Application and Related Modules
5
5
  Home-page: https://pulpproject.org
6
6
  Author: Pulp Team
@@ -8,6 +8,6 @@ class PulpFilePluginAppConfig(PulpPluginAppConfig):
8
8
 
9
9
  name = "pulp_file.app"
10
10
  label = "file"
11
- version = "3.42.0"
11
+ version = "3.43.0"
12
12
  python_package_name = "pulp-file" # TODO Add python_module_name
13
13
  domain_compatible = True
@@ -239,7 +239,7 @@ class PulpAppConfig(PulpPluginAppConfig):
239
239
  label = "core"
240
240
 
241
241
  # The version of this app
242
- version = "3.42.0"
242
+ version = "3.43.0"
243
243
 
244
244
  # The python package name providing this app
245
245
  python_package_name = "pulpcore"
@@ -0,0 +1,27 @@
1
+ # Generated by Django 4.2.6 on 2023-10-19 14:20
2
+
3
+ from django.db import migrations, models
4
+ import django.db.models.deletion
5
+ import pulpcore.app.models.access_policy
6
+
7
+
8
+ class Migration(migrations.Migration):
9
+
10
+ dependencies = [
11
+ ('core', '0114_remove_task_args_remove_task_kwargs'),
12
+ ]
13
+
14
+ operations = [
15
+ migrations.CreateModel(
16
+ name='CompositeContentGuard',
17
+ fields=[
18
+ ('contentguard_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='core.contentguard')),
19
+ ('guards', models.ManyToManyField(related_name='+', to='core.contentguard')),
20
+ ],
21
+ options={
22
+ 'permissions': (('manage_roles_compositecontentguard', 'Can manage role assignments on Composite content guard'),),
23
+ 'default_related_name': '%(app_label)s_%(model_name)s',
24
+ },
25
+ bases=('core.contentguard', pulpcore.app.models.access_policy.AutoAddObjPermsMixin),
26
+ ),
27
+ ]
@@ -0,0 +1,43 @@
1
+ # Generated by Django 4.2.7 on 2023-12-04 15:58
2
+
3
+ from django.db import migrations, models
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ('core', '0115_compositecontentguard'),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AlterField(
14
+ model_name='remoteartifact',
15
+ name='md5',
16
+ field=models.CharField(db_index=True, max_length=32, null=True),
17
+ ),
18
+ migrations.AlterField(
19
+ model_name='remoteartifact',
20
+ name='sha1',
21
+ field=models.CharField(db_index=True, max_length=40, null=True),
22
+ ),
23
+ migrations.AlterField(
24
+ model_name='remoteartifact',
25
+ name='sha224',
26
+ field=models.CharField(db_index=True, max_length=56, null=True),
27
+ ),
28
+ migrations.AlterField(
29
+ model_name='remoteartifact',
30
+ name='sha256',
31
+ field=models.CharField(db_index=True, max_length=64, null=True),
32
+ ),
33
+ migrations.AlterField(
34
+ model_name='remoteartifact',
35
+ name='sha384',
36
+ field=models.CharField(db_index=True, max_length=96, null=True),
37
+ ),
38
+ migrations.AlterField(
39
+ model_name='remoteartifact',
40
+ name='sha512',
41
+ field=models.CharField(db_index=True, max_length=128, null=True),
42
+ ),
43
+ ]
@@ -55,6 +55,7 @@ from .publication import (
55
55
  PublishedArtifact,
56
56
  PublishedMetadata,
57
57
  RBACContentGuard,
58
+ CompositeContentGuard,
58
59
  ContentRedirectContentGuard,
59
60
  HeaderContentGuard,
60
61
  ArtifactDistribution,
@@ -148,16 +148,20 @@ class MasterModel(BaseModel, metaclass=MasterModelMeta):
148
148
  def get_model_for_pulp_type(cls, pulp_type):
149
149
  return cls._pulp_model_map[pulp_type]
150
150
 
151
- def save(self, *args, **kwargs):
151
+ @property
152
+ def detail_model(self):
153
+ return self._pulp_model_map[self.pulp_type]
154
+
155
+ def __init__(self, *args, **kwargs):
152
156
  # instances of "detail" models that subclass MasterModel are exposed
153
157
  # on instances of MasterModel by the string stored in that model's TYPE attr.
154
158
  # Storing this pulp_type in a column on the MasterModel next to makes it trivial
155
159
  # to filter for specific detail model types across master's relations.
156
160
  # Prepend the TYPE defined on a detail model with a django app label.
157
161
  # If a plugin sets the type field themselves, it's used as-is.
162
+ super().__init__(*args, **kwargs)
158
163
  if not self.pulp_type:
159
164
  self.pulp_type = self.get_pulp_type()
160
- return super().save(*args, **kwargs)
161
165
 
162
166
  def cast(self):
163
167
  """Return the "Detail" model instance of this master-detail object.
@@ -713,12 +713,12 @@ class RemoteArtifact(BaseModel, QueryMixin):
713
713
 
714
714
  url = models.TextField(validators=[validators.URLValidator])
715
715
  size = models.BigIntegerField(null=True)
716
- md5 = models.CharField(max_length=32, null=True)
717
- sha1 = models.CharField(max_length=40, null=True)
718
- sha224 = models.CharField(max_length=56, null=True)
719
- sha256 = models.CharField(max_length=64, null=True)
720
- sha384 = models.CharField(max_length=96, null=True)
721
- sha512 = models.CharField(max_length=128, null=True)
716
+ md5 = models.CharField(max_length=32, null=True, db_index=True)
717
+ sha1 = models.CharField(max_length=40, null=True, db_index=True)
718
+ sha224 = models.CharField(max_length=56, null=True, db_index=True)
719
+ sha256 = models.CharField(max_length=64, null=True, db_index=True)
720
+ sha384 = models.CharField(max_length=96, null=True, db_index=True)
721
+ sha512 = models.CharField(max_length=128, null=True, db_index=True)
722
722
 
723
723
  content_artifact = models.ForeignKey(ContentArtifact, on_delete=models.CASCADE)
724
724
  remote = models.ForeignKey("Remote", on_delete=models.CASCADE)
@@ -29,7 +29,7 @@ from pulpcore.cache import Cache
29
29
  from rest_framework.exceptions import APIException
30
30
  from pulpcore.app.models import AutoAddObjPermsMixin
31
31
  from pulpcore.responses import ArtifactResponse
32
- from pulpcore.app.util import get_domain_pk, cache_key
32
+ from pulpcore.app.util import get_domain_pk, cache_key, get_url
33
33
 
34
34
 
35
35
  _logger = logging.getLogger(__name__)
@@ -522,6 +522,55 @@ class HeaderContentGuard(ContentGuard, AutoAddObjPermsMixin):
522
522
  )
523
523
 
524
524
 
525
+ class CompositeContentGuard(ContentGuard, AutoAddObjPermsMixin):
526
+ """
527
+ Content guard to allow a list of contentguards to be evaluated on access.
528
+
529
+ Content-guards in the `guards` list have their permit() calls issued in order. At the
530
+ first "pass" result, access is permitted. Only if ALL guards in the list forbid access,
531
+ is access forbidden.
532
+
533
+ guards (django.db.models.ManyToManyField): ContentGuards to invoke.
534
+ """
535
+
536
+ TYPE = "composite"
537
+
538
+ guards = models.ManyToManyField(ContentGuard, related_name="+", symmetrical=False)
539
+
540
+ def permit(self, request):
541
+ """
542
+ Permit if ANY content-guard allows (OR permissions).
543
+ """
544
+ errors = []
545
+ if not self.guards.all():
546
+ # No guards specified? PASS
547
+ return
548
+
549
+ for guard in self.guards.all():
550
+ detail_guard = guard.cast()
551
+ try:
552
+ detail_guard.permit(request)
553
+ return # success on first-pass
554
+ except PermissionError as pe:
555
+ guard_error = _("Guard: '{}', HREF: '{}', class: '{}', denial: [{}].").format(
556
+ detail_guard.name, get_url(detail_guard), type(detail_guard), str(pe)
557
+ )
558
+ errors.append(guard_error)
559
+
560
+ # If we get here - FAIL
561
+ msg = _("Access forbidden. Refusals: {}").format(errors)
562
+ raise PermissionError(msg)
563
+
564
+ class Meta:
565
+ default_related_name = "%(app_label)s_%(model_name)s"
566
+ permissions = (
567
+ (
568
+ "manage_roles_compositecontentguard",
569
+ "Can manage role assignments on Composite content guard",
570
+ ),
571
+ )
572
+
573
+
525
574
  class BaseDistribution(MasterModel):
526
575
  """
527
576
  A distribution defines how a publication is distributed by the Content App.
@@ -77,6 +77,7 @@ from .publication import (
77
77
  PublicationSerializer,
78
78
  RBACContentGuardSerializer,
79
79
  RBACContentGuardPermissionSerializer,
80
+ CompositeContentGuardSerializer,
80
81
  ContentRedirectContentGuardSerializer,
81
82
  HeaderContentGuardSerializer,
82
83
  ArtifactDistributionSerializer,
@@ -108,6 +108,21 @@ class RBACContentGuardSerializer(ContentGuardSerializer):
108
108
  fields = ContentGuardSerializer.Meta.fields + ("users", "groups")
109
109
 
110
110
 
111
+ class CompositeContentGuardSerializer(ContentGuardSerializer, GetOrCreateSerializerMixin):
112
+ guards = DetailRelatedField(
113
+ many=True,
114
+ required=False,
115
+ help_text=_("List of ContentGuards to ask for access-permission."),
116
+ view_name_pattern=r"contentguards(-.*/.*)?-detail",
117
+ queryset=models.ContentGuard.objects.all(),
118
+ allow_null=True,
119
+ )
120
+
121
+ class Meta:
122
+ model = models.CompositeContentGuard
123
+ fields = ContentGuardSerializer.Meta.fields + ("guards",)
124
+
125
+
111
126
  class RBACContentGuardPermissionSerializer(serializers.Serializer):
112
127
  usernames = serializers.ListField(default=[])
113
128
  groupnames = serializers.ListField(default=[])
@@ -53,6 +53,7 @@ from .publication import (
53
53
  PublicationFilter,
54
54
  PublicationViewSet,
55
55
  RBACContentGuardViewSet,
56
+ CompositeContentGuardViewSet,
56
57
  ContentRedirectContentGuardViewSet,
57
58
  HeaderContentGuardViewSet,
58
59
  ArtifactDistributionViewSet,
@@ -355,12 +355,12 @@ class DistributionWithContentFilter(Filter):
355
355
  for dist in qs.exclude(publication=None).values("publication__repository_version", "pk"):
356
356
  versions_distributions[dist["publication__repository_version"]].append(dist["pk"])
357
357
 
358
- for dist in qs.exclude(repository_version=None).values("repository_version", "pk"):
359
- if not dist.cast().SERVE_FROM_PUBLICATION:
358
+ for dist in qs.exclude(repository_version=None).values("repository_version", "pulp_type"):
359
+ if not dist.detail_model.SERVE_FROM_PUBLICATION:
360
360
  versions_distributions[dist["repository_version"]].append(dist["pk"])
361
361
 
362
362
  for dist in qs.exclude(repository=None).prefetch_related("repository__versions"):
363
- if dist.cast().SERVE_FROM_PUBLICATION:
363
+ if dist.detail_model.SERVE_FROM_PUBLICATION:
364
364
  versions = dist.repository.versions.values_list("pk", flat=True)
365
365
  publications = Publication.objects.filter(
366
366
  repository_version__in=versions, complete=True
@@ -4,6 +4,8 @@ from django.db.models import Prefetch
4
4
  from django_filters import Filter
5
5
  from rest_framework import mixins, serializers
6
6
 
7
+ from pulpcore.app.models.publication import CompositeContentGuard
8
+ from pulpcore.app.serializers.publication import CompositeContentGuardSerializer
7
9
  from pulpcore.filters import BaseFilterSet
8
10
  from pulpcore.app.models import (
9
11
  ContentGuard,
@@ -427,6 +429,76 @@ class HeaderContentGuardViewSet(ContentGuardViewSet, RolesMixin):
427
429
  }
428
430
 
429
431
 
432
+ class CompositeContentGuardViewSet(ContentGuardViewSet, RolesMixin):
433
+ """
434
+ Content guard that queries a list-of content-guards for access permissions.
435
+ """
436
+
437
+ endpoint_name = "composite"
438
+ queryset = CompositeContentGuard.objects.all()
439
+ serializer_class = CompositeContentGuardSerializer
440
+ queryset_filtering_required_permission = "core.view_compositecontentguard"
441
+
442
+ DEFAULT_ACCESS_POLICY = {
443
+ "statements": [
444
+ {
445
+ "action": ["list"],
446
+ "principal": "authenticated",
447
+ "effect": "allow",
448
+ },
449
+ {
450
+ "action": ["create"],
451
+ "principal": "authenticated",
452
+ "effect": "allow",
453
+ "condition": "has_model_or_domain_perms:core.add_compositecontentguard",
454
+ },
455
+ {
456
+ "action": ["retrieve", "my_permissions"],
457
+ "principal": "authenticated",
458
+ "effect": "allow",
459
+ "condition": "has_model_or_domain_or_obj_perms:core." "view_compositecontentguard",
460
+ },
461
+ {
462
+ "action": ["update", "partial_update"],
463
+ "principal": "authenticated",
464
+ "effect": "allow",
465
+ "condition": ("has_model_or_domain_or_obj_perms:core.change_compositecontentguard"),
466
+ },
467
+ {
468
+ "action": ["destroy"],
469
+ "principal": "authenticated",
470
+ "effect": "allow",
471
+ "condition": ("has_model_or_domain_or_obj_perms:core.delete_compositecontentguard"),
472
+ },
473
+ {
474
+ "action": ["list_roles", "add_role", "remove_role"],
475
+ "principal": "authenticated",
476
+ "effect": "allow",
477
+ "condition": (
478
+ "has_model_or_domain_or_obj_perms:core.manage_roles_compositecontentguard"
479
+ ),
480
+ },
481
+ ],
482
+ "creation_hooks": [
483
+ {
484
+ "function": "add_roles_for_object_creator",
485
+ "parameters": {"roles": ["core.compositecontentguard_owner"]},
486
+ },
487
+ ],
488
+ "queryset_scoping": {"function": "scope_queryset"},
489
+ }
490
+ LOCKED_ROLES = {
491
+ "core.compositecontentguard_creator": ["core.add_compositecontentguard"],
492
+ "core.compositecontentguard_owner": [
493
+ "core.view_compositecontentguard",
494
+ "core.change_compositecontentguard",
495
+ "core.delete_compositecontentguard",
496
+ "core.manage_roles_compositecontentguard",
497
+ ],
498
+ "core.compositecontentguard_viewer": ["core.view_compositecontentguard"],
499
+ }
500
+
501
+
430
502
  class DistributionFilter(BaseFilterSet):
431
503
  # e.g.
432
504
  # /?name=foo
@@ -39,6 +39,7 @@ from pulpcore.client.pulpcore import (
39
39
  ContentApi,
40
40
  ContentguardsApi,
41
41
  ContentguardsRbacApi,
42
+ ContentguardsCompositeApi,
42
43
  ContentguardsContentRedirectApi,
43
44
  ContentguardsHeaderApi,
44
45
  DomainsApi,
@@ -341,6 +342,11 @@ def header_contentguard_api_client(pulpcore_client):
341
342
  return ContentguardsHeaderApi(pulpcore_client)
342
343
 
343
344
 
345
+ @pytest.fixture(scope="session")
346
+ def composite_contentguard_api_client(pulpcore_client):
347
+ return ContentguardsCompositeApi(pulpcore_client)
348
+
349
+
344
350
  @pytest.fixture(scope="session")
345
351
  def orphans_cleanup_api_client(pulpcore_client):
346
352
  return OrphansCleanupApi(pulpcore_client)