pulpcore 3.49.53__tar.gz → 3.49.55__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 (514) hide show
  1. {pulpcore-3.49.53 → pulpcore-3.49.55}/CHANGES.md +44 -0
  2. {pulpcore-3.49.53 → pulpcore-3.49.55}/PKG-INFO +2 -2
  3. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/app/__init__.py +1 -1
  4. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/app/__init__.py +1 -1
  5. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/apps.py +1 -1
  6. pulpcore-3.49.55/pulpcore/app/checks.py +119 -0
  7. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/settings.py +6 -65
  8. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/openapi/__init__.py +64 -110
  9. pulpcore-3.49.55/pulpcore/openapi/hooks.py +36 -0
  10. pulpcore-3.49.55/pulpcore/tests/functional/api/test_openapi_schema.py +121 -0
  11. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore.egg-info/PKG-INFO +2 -2
  12. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore.egg-info/SOURCES.txt +1 -0
  13. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore.egg-info/requires.txt +1 -1
  14. {pulpcore-3.49.53 → pulpcore-3.49.55}/pyproject.toml +3 -1
  15. {pulpcore-3.49.53 → pulpcore-3.49.55}/requirements.txt +1 -1
  16. {pulpcore-3.49.53 → pulpcore-3.49.55}/setup.py +1 -1
  17. pulpcore-3.49.53/pulpcore/app/checks.py +0 -58
  18. pulpcore-3.49.53/pulpcore/tests/functional/api/test_openapi_schema.py +0 -88
  19. {pulpcore-3.49.53 → pulpcore-3.49.55}/CODE_OF_CONDUCT.md +0 -0
  20. {pulpcore-3.49.53 → pulpcore-3.49.55}/COMMITMENT +0 -0
  21. {pulpcore-3.49.53 → pulpcore-3.49.55}/CONTRIBUTING.md +0 -0
  22. {pulpcore-3.49.53 → pulpcore-3.49.55}/COPYRIGHT +0 -0
  23. {pulpcore-3.49.53 → pulpcore-3.49.55}/LICENSE +0 -0
  24. {pulpcore-3.49.53 → pulpcore-3.49.55}/MANIFEST.in +0 -0
  25. {pulpcore-3.49.53 → pulpcore-3.49.55}/README.md +0 -0
  26. {pulpcore-3.49.53 → pulpcore-3.49.55}/ci_requirements.txt +0 -0
  27. {pulpcore-3.49.53 → pulpcore-3.49.55}/functest_requirements.txt +0 -0
  28. {pulpcore-3.49.53 → pulpcore-3.49.55}/manage.py +0 -0
  29. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/__init__.py +0 -0
  30. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/app/migrations/0001_initial.py +0 -0
  31. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/app/migrations/0002_alter_rhsmcertguard_contentguard_ptr_and_more.py +0 -0
  32. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/app/migrations/__init__.py +0 -0
  33. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/app/models.py +0 -0
  34. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/app/serializers.py +0 -0
  35. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/app/utils.py +0 -0
  36. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/app/viewsets.py +0 -0
  37. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/pytest_plugin.py +0 -0
  38. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/__init__.py +0 -0
  39. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/__init__.py +0 -0
  40. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/api/__init__.py +0 -0
  41. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/api/test_rhsm_certguard.py +0 -0
  42. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/api/test_x509_certguard.py +0 -0
  43. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/rhsm/katello-default-ca.crt +0 -0
  44. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/rhsm/katello-default-ca.key +0 -0
  45. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/rhsm/trusted_but_expired.pem +0 -0
  46. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/rhsm/uber.cert +0 -0
  47. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/rhsm/untrusted_cert-key.pem +0 -0
  48. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/rhsm/untrusted_cert.pem +0 -0
  49. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/rhsm/v1/1514454871848760713-key.pem +0 -0
  50. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/rhsm/v1/1514454871848760713.pem +0 -0
  51. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/rhsm/v1/159442575569388840-key.pem +0 -0
  52. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/rhsm/v1/159442575569388840.pem +0 -0
  53. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/rhsm/v3/4260035510644027985-key.pem +0 -0
  54. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/rhsm/v3/4260035510644027985.pem +0 -0
  55. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/rhsm/v3/5527980418107729172-key.pem +0 -0
  56. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/rhsm/v3/5527980418107729172.pem +0 -0
  57. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/certificates/ca.pem +0 -0
  58. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/genca.sh +0 -0
  59. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/keys/ca.pem +0 -0
  60. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/x509/certificates/ca.pem +0 -0
  61. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/x509/certificates/client.pem +0 -0
  62. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/x509/certificates/server.pem +0 -0
  63. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/x509/certificates/un_urlencoded_cert.txt +0 -0
  64. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/x509/certificates/untrusted_client.pem +0 -0
  65. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/x509/genall.sh +0 -0
  66. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/x509/genca.sh +0 -0
  67. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/x509/genclient.sh +0 -0
  68. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/x509/gensrv.sh +0 -0
  69. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/x509/keys/ca.pem +0 -0
  70. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/x509/keys/client.pem +0 -0
  71. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/artifacts/x509/keys/server.pem +0 -0
  72. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/conftest.py +0 -0
  73. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/functional/constants.py +0 -0
  74. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/unit/__init__.py +0 -0
  75. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_certguard/tests/unit/test_models.py +0 -0
  76. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/__init__.py +0 -0
  77. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/app/migrations/0001_initial.py +0 -0
  78. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/app/migrations/0002_file_related_names.py +0 -0
  79. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/app/migrations/0003_auto_20191014_1721.py +0 -0
  80. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/app/migrations/0004_filefilesystemexporter.py +0 -0
  81. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/app/migrations/0005_filerepository.py +0 -0
  82. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/app/migrations/0006_delete_filefilesystemexporter.py +0 -0
  83. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/app/migrations/0007_filefilesystemexporter.py +0 -0
  84. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/app/migrations/0008_add_manifest_field.py +0 -0
  85. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/app/migrations/0009_move_data_to_new_master_distribution_model.py +0 -0
  86. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/app/migrations/0010_auto_publish.py +0 -0
  87. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/app/migrations/0011_fix_auto_publish.py +0 -0
  88. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/app/migrations/0012_delete_filefilesystemexporter.py +0 -0
  89. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/app/migrations/0013_file_acs.py +0 -0
  90. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/app/migrations/0014_new_rbac_permissions.py +0 -0
  91. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/app/migrations/0015_allow_null_manifest.py +0 -0
  92. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/app/migrations/0016_add_domain.py +0 -0
  93. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/app/migrations/0017_alter_filealternatecontentsource_alternatecontentsource_ptr_and_more.py +0 -0
  94. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/app/migrations/__init__.py +0 -0
  95. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/app/modelresource.py +0 -0
  96. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/app/models.py +0 -0
  97. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/app/replica.py +0 -0
  98. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/app/serializers.py +0 -0
  99. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/app/tasks/__init__.py +0 -0
  100. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/app/tasks/publishing.py +0 -0
  101. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/app/tasks/synchronizing.py +0 -0
  102. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/app/viewsets.py +0 -0
  103. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/manifest.py +0 -0
  104. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/pytest_plugin.py +0 -0
  105. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/tests/__init__.py +0 -0
  106. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/tests/functional/__init__.py +0 -0
  107. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/tests/functional/api/__init__.py +0 -0
  108. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/tests/functional/api/test_acs.py +0 -0
  109. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/tests/functional/api/test_auto_publish.py +0 -0
  110. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/tests/functional/api/test_bad_sync.py +0 -0
  111. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/tests/functional/api/test_crud_content_unit.py +0 -0
  112. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/tests/functional/api/test_crud_remotes.py +0 -0
  113. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/tests/functional/api/test_domains.py +0 -0
  114. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/tests/functional/api/test_download_policies.py +0 -0
  115. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/tests/functional/api/test_generic_list.py +0 -0
  116. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/tests/functional/api/test_labels.py +0 -0
  117. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/tests/functional/api/test_mime_types.py +0 -0
  118. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/tests/functional/api/test_publish.py +0 -0
  119. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/tests/functional/api/test_pulp_export.py +0 -0
  120. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/tests/functional/api/test_rbac.py +0 -0
  121. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/tests/functional/api/test_remote_settings.py +0 -0
  122. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/tests/functional/api/test_sync.py +0 -0
  123. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/tests/unit/__init__.py +0 -0
  124. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulp_file/tests/unit/test_serializers.py +0 -0
  125. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/__init__.py +0 -0
  126. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/__init__.py +0 -0
  127. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/access_policy.py +0 -0
  128. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/authentication.py +0 -0
  129. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/entrypoint.py +0 -0
  130. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/files.py +0 -0
  131. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/global_access_conditions.py +0 -0
  132. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/importexport.py +0 -0
  133. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/loggers.py +0 -0
  134. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/manage.py +0 -0
  135. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/management/__init__.py +0 -0
  136. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/management/commands/__init__.py +0 -0
  137. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/management/commands/add-signing-service.py +0 -0
  138. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/management/commands/analyze-publication.py +0 -0
  139. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/management/commands/datarepair-2327.py +0 -0
  140. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/management/commands/dump-permissions.py +0 -0
  141. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/management/commands/dump-publications-to-fs.py +0 -0
  142. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/management/commands/handle-artifact-checksums.py +0 -0
  143. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/management/commands/openapi.py +0 -0
  144. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/management/commands/remove-plugin.py +0 -0
  145. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/management/commands/remove-signing-service.py +0 -0
  146. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/management/commands/repository-size.py +0 -0
  147. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/management/commands/reset-admin-password.py +0 -0
  148. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/management/commands/rotate-db-key.py +0 -0
  149. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/management/commands/shell.py +0 -0
  150. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0001_initial.py +0 -0
  151. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0002_increase_artifact_size_field.py +0 -0
  152. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0003_remove_upload_completed.py +0 -0
  153. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0004_add_duplicated_reserved_resources.py +0 -0
  154. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0005_progressreport_code.py +0 -0
  155. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0006_repository_plugin_managed.py +0 -0
  156. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0007_delete_progress_proxies.py +0 -0
  157. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0008_published_metadata_as_content.py +0 -0
  158. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0009_remove_task_non_fatal_errors.py +0 -0
  159. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0010_pulp_fields.py +0 -0
  160. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0011_relative_path.py +0 -0
  161. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0012_auto_20191104_2000.py +0 -0
  162. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0013_repository_pulp_type.py +0 -0
  163. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0014_remove_repository_plugin_managed.py +0 -0
  164. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0015_auto_20191112_1426.py +0 -0
  165. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0016_charfield_to_textfield.py +0 -0
  166. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0017_remove_task_parent.py +0 -0
  167. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0018_auto_20191127_2350.py +0 -0
  168. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0019_add_signing_service_model.py +0 -0
  169. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0020_change_publishedartifact_constraints.py +0 -0
  170. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0021_add_signing_service_foreign_key.py +0 -0
  171. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0022_rename_last_version.py +0 -0
  172. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0023_change_exporter_models.py +0 -0
  173. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0024_use_local_storage_for_uploads.py +0 -0
  174. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0025_task_parent_task.py +0 -0
  175. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0026_task_group.py +0 -0
  176. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0027_export_backend.py +0 -0
  177. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0028_import_importer_pulpimporter_pulpimporterrepository.py +0 -0
  178. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0029_export_delete.py +0 -0
  179. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0030_taskgroup_all_tasks_dispatched.py +0 -0
  180. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0031_import_export_validate_params.py +0 -0
  181. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0032_export_to_chunks.py +0 -0
  182. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0033_increase_remote_artifact_size_field.py +0 -0
  183. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0034_groupprogressreport.py +0 -0
  184. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0035_content_upstream_id.py +0 -0
  185. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0036_unprotect_last_export.py +0 -0
  186. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0037_pulptemporaryfile.py +0 -0
  187. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0038_repository_remote.py +0 -0
  188. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0039_change_download_concurrency.py +0 -0
  189. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0040_set_admin_is_staff.py +0 -0
  190. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0041_accesspolicy.py +0 -0
  191. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0042_rbac_for_tasks.py +0 -0
  192. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0043_toc_attribute.py +0 -0
  193. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0044_temp_file_artifact_field.py +0 -0
  194. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0045_accesspolicy_permissions_allow_null.py +0 -0
  195. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0046_task__resource_job_id.py +0 -0
  196. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0047_improve_orphan_cleanup.py +0 -0
  197. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0048_fips_checksums.py +0 -0
  198. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0049_add_file_field_to_uploadchunk.py +0 -0
  199. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0050_namespace_access_policies.py +0 -0
  200. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0051_timeoutfields.py +0 -0
  201. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0052_tasking_logging_cid.py +0 -0
  202. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0053_remote_headers.py +0 -0
  203. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0054_add_public_key.py +0 -0
  204. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0055_label.py +0 -0
  205. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0056_remote_rate_limit.py +0 -0
  206. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0057_add_label_indexes.py +0 -0
  207. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0058_accesspolicy_customized.py +0 -0
  208. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0059_proxy_creds.py +0 -0
  209. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0060_data_migration_proxy_creds.py +0 -0
  210. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0061_call_handle_artifact_checksums_command.py +0 -0
  211. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0062_add_new_distribution_mastermodel.py +0 -0
  212. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0063_repository_retained_versions.py +0 -0
  213. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0064_add_new_style_task_columns.py +0 -0
  214. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0064_repository_user_hidden.py +0 -0
  215. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0065_merge_20210615_1211.py +0 -0
  216. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0066_download_concurrency_and_retry_changes.py +0 -0
  217. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0067_add_protect_to_task_reservation.py +0 -0
  218. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0068_add_timestamp_of_interest.py +0 -0
  219. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0069_update_json_fields.py +0 -0
  220. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0070_rename_retained_versions.py +0 -0
  221. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0071_filesystemexport_filesystemexporter.py +0 -0
  222. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0072_add_method_to_filesystem_exporter.py +0 -0
  223. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0073_encrypt_remote_fields.py +0 -0
  224. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0074_acs.py +0 -0
  225. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0075_rbaccontentguard.py +0 -0
  226. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0076_remove_reserved_resource.py +0 -0
  227. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0077_move_remote_url_credentials.py +0 -0
  228. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0078_grouprole_role_userrole.py +0 -0
  229. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0079_rename_permissions_assignment_accesspolicy_creation_hooks.py +0 -0
  230. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0080_proxy_group_model.py +0 -0
  231. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0081_reapplabel_group_permissions.py +0 -0
  232. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0082_add_manage_roles_permissions.py +0 -0
  233. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0083_alter_group_options.py +0 -0
  234. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0084_alter_rbaccontentguard_options.py +0 -0
  235. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0085_contentredirectcontentguard.py +0 -0
  236. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0086_task_json_fields.py +0 -0
  237. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0087_taskschedule.py +0 -0
  238. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0088_accesspolicy_queryset_scoping.py +0 -0
  239. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0089_alter_contentredirectcontentguard_options.py +0 -0
  240. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0090_char_to_text_field.py +0 -0
  241. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0091_systemid.py +0 -0
  242. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0092_alter_upload_options.py +0 -0
  243. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0093_add_info_field_repositoryversion.py +0 -0
  244. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0094_protect_repository_content.py +0 -0
  245. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0095_artifactdistribution.py +0 -0
  246. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0096_alter_task_logging_cid.py +0 -0
  247. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0097_remove_telemetry_task_schedule.py +0 -0
  248. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0098_pulp_labels.py +0 -0
  249. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0099_versions_field.py +0 -0
  250. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0100_upstreampulp.py +0 -0
  251. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0101_add_domain.py +0 -0
  252. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0102_add_domain_relations.py +0 -0
  253. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0103_alter_export_task.py +0 -0
  254. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0104_delete_label.py +0 -0
  255. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0105_abstract_uuid_gen.py +0 -0
  256. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0106_alter_artifactdistribution_distribution_ptr_and_more.py +0 -0
  257. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0107_distribution_hidden.py +0 -0
  258. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0108_task_versions.py +0 -0
  259. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0109_contentartifact_relative_path_index.py +0 -0
  260. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0110_apiappstatus.py +0 -0
  261. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0111_task_enc_args_task_enc_kwargs.py +0 -0
  262. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0112_alter_upstreampulp_options.py +0 -0
  263. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0113_headercontentguard.py +0 -0
  264. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0114_remove_task_args_remove_task_kwargs.py +0 -0
  265. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0115_compositecontentguard.py +0 -0
  266. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0116_alter_remoteartifact_md5_alter_remoteartifact_sha1_and_more.py +0 -0
  267. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/0117_task_unblocked_at.py +0 -0
  268. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/migrations/__init__.py +0 -0
  269. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/mime_types.py +0 -0
  270. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/modelresource.py +0 -0
  271. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/models/__init__.py +0 -0
  272. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/models/access_policy.py +0 -0
  273. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/models/acs.py +0 -0
  274. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/models/analytics.py +0 -0
  275. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/models/base.py +0 -0
  276. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/models/content.py +0 -0
  277. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/models/domain.py +0 -0
  278. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/models/exporter.py +0 -0
  279. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/models/fields.py +0 -0
  280. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/models/generic.py +0 -0
  281. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/models/importer.py +0 -0
  282. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/models/progress.py +0 -0
  283. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/models/publication.py +0 -0
  284. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/models/replica.py +0 -0
  285. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/models/repository.py +0 -0
  286. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/models/role.py +0 -0
  287. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/models/status.py +0 -0
  288. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/models/storage.py +0 -0
  289. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/models/task.py +0 -0
  290. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/models/upload.py +0 -0
  291. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/protobuf/__init__.py +0 -0
  292. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/protobuf/analytics_pb2.py +0 -0
  293. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/pulp_hashlib.py +0 -0
  294. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/pulpcore_gunicorn_application.py +0 -0
  295. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/redis_connection.py +0 -0
  296. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/replica.py +0 -0
  297. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/response.py +0 -0
  298. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/role_util.py +0 -0
  299. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/serializers/__init__.py +0 -0
  300. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/serializers/access_policy.py +0 -0
  301. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/serializers/acs.py +0 -0
  302. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/serializers/base.py +0 -0
  303. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/serializers/content.py +0 -0
  304. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/serializers/domain.py +0 -0
  305. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/serializers/exporter.py +0 -0
  306. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/serializers/fields.py +0 -0
  307. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/serializers/importer.py +0 -0
  308. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/serializers/orphans.py +0 -0
  309. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/serializers/progress.py +0 -0
  310. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/serializers/publication.py +0 -0
  311. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/serializers/purge.py +0 -0
  312. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/serializers/reclaim.py +0 -0
  313. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/serializers/repair.py +0 -0
  314. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/serializers/replica.py +0 -0
  315. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/serializers/repository.py +0 -0
  316. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/serializers/status.py +0 -0
  317. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/serializers/task.py +0 -0
  318. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/serializers/upload.py +0 -0
  319. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/serializers/user.py +0 -0
  320. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/tasks/__init__.py +0 -0
  321. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/tasks/analytics.py +0 -0
  322. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/tasks/base.py +0 -0
  323. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/tasks/export.py +0 -0
  324. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/tasks/importer.py +0 -0
  325. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/tasks/orphan.py +0 -0
  326. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/tasks/purge.py +0 -0
  327. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/tasks/reclaim_space.py +0 -0
  328. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/tasks/replica.py +0 -0
  329. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/tasks/repository.py +0 -0
  330. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/tasks/test.py +0 -0
  331. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/tasks/upload.py +0 -0
  332. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/templates/rest_framework/api.html +0 -0
  333. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/templatetags/__init__.py +0 -0
  334. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/templatetags/pulp_urls.py +0 -0
  335. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/urls.py +0 -0
  336. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/util.py +0 -0
  337. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/views/__init__.py +0 -0
  338. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/views/importer.py +0 -0
  339. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/views/orphans.py +0 -0
  340. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/views/repair.py +0 -0
  341. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/views/status.py +0 -0
  342. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/viewsets/__init__.py +0 -0
  343. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/viewsets/access_policy.py +0 -0
  344. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/viewsets/acs.py +0 -0
  345. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/viewsets/base.py +0 -0
  346. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/viewsets/content.py +0 -0
  347. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/viewsets/custom_filters.py +0 -0
  348. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/viewsets/domain.py +0 -0
  349. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/viewsets/exporter.py +0 -0
  350. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/viewsets/importer.py +0 -0
  351. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/viewsets/orphans.py +0 -0
  352. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/viewsets/publication.py +0 -0
  353. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/viewsets/reclaim.py +0 -0
  354. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/viewsets/replica.py +0 -0
  355. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/viewsets/repository.py +0 -0
  356. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/viewsets/task.py +0 -0
  357. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/viewsets/upload.py +0 -0
  358. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/viewsets/user.py +0 -0
  359. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/app/wsgi.py +0 -0
  360. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/backends.py +0 -0
  361. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/cache/__init__.py +0 -0
  362. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/cache/cache.py +0 -0
  363. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/constants.py +0 -0
  364. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/content/__init__.py +0 -0
  365. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/content/authentication.py +0 -0
  366. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/content/entrypoint.py +0 -0
  367. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/content/handler.py +0 -0
  368. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/content/instrumentation.py +0 -0
  369. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/download/__init__.py +0 -0
  370. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/download/base.py +0 -0
  371. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/download/factory.py +0 -0
  372. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/download/file.py +0 -0
  373. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/download/http.py +0 -0
  374. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/exceptions/__init__.py +0 -0
  375. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/exceptions/base.py +0 -0
  376. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/exceptions/plugin.py +0 -0
  377. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/exceptions/validation.py +0 -0
  378. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/filters.py +0 -0
  379. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/middleware.py +0 -0
  380. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/migrations.py +0 -0
  381. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/__init__.py +0 -0
  382. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/access_policy.py +0 -0
  383. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/actions.py +0 -0
  384. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/apps.py +0 -0
  385. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/authentication/__init__.py +0 -0
  386. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/cache/__init__.py +0 -0
  387. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/constants.py +0 -0
  388. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/content.py +0 -0
  389. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/download/__init__.py +0 -0
  390. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/exceptions.py +0 -0
  391. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/files.py +0 -0
  392. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/importexport.py +0 -0
  393. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/migrations.py +0 -0
  394. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/modelresources.py +0 -0
  395. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/models/__init__.py +0 -0
  396. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/models/role.py +0 -0
  397. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/publication_utils.py +0 -0
  398. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/pulp_hashlib.py +0 -0
  399. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/replica.py +0 -0
  400. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/repo_version_utils.py +0 -0
  401. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/responses.py +0 -0
  402. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/serializers/__init__.py +0 -0
  403. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/serializers/content.py +0 -0
  404. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/stages/__init__.py +0 -0
  405. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/stages/api.py +0 -0
  406. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/stages/artifact_stages.py +0 -0
  407. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/stages/content_stages.py +0 -0
  408. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/stages/declarative_version.py +0 -0
  409. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/stages/models.py +0 -0
  410. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/storage.py +0 -0
  411. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/sync.py +0 -0
  412. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/tasking.py +0 -0
  413. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/util.py +0 -0
  414. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/viewsets/__init__.py +0 -0
  415. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/plugin/viewsets/content.py +0 -0
  416. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/responses.py +0 -0
  417. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tasking/__init__.py +0 -0
  418. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tasking/_util.py +0 -0
  419. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tasking/entrypoint.py +0 -0
  420. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tasking/storage.py +0 -0
  421. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tasking/tasks.py +0 -0
  422. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tasking/worker.py +0 -0
  423. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/__init__.py +0 -0
  424. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/__init__.py +0 -0
  425. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/__init__.py +0 -0
  426. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/test_access_policy.py +0 -0
  427. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/test_api_docs.py +0 -0
  428. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/test_artifact_distribution.py +0 -0
  429. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/test_auth.py +0 -0
  430. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/test_correlation_id.py +0 -0
  431. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/test_crd_artifacts.py +0 -0
  432. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/test_crud_domains.py +0 -0
  433. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/test_filter.py +0 -0
  434. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/test_replication.py +0 -0
  435. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/test_repos.py +0 -0
  436. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/test_role.py +0 -0
  437. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/test_root_endpoint.py +0 -0
  438. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/test_scoping.py +0 -0
  439. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/test_signing_service.py +0 -0
  440. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/test_status.py +0 -0
  441. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/test_tasking.py +0 -0
  442. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/test_upload.py +0 -0
  443. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/test_users_groups.py +0 -0
  444. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/test_workers.py +0 -0
  445. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/using_plugin/__init__.py +0 -0
  446. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/using_plugin/test_content_access.py +0 -0
  447. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/using_plugin/test_content_cache.py +0 -0
  448. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/using_plugin/test_content_delivery.py +0 -0
  449. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/using_plugin/test_content_directory.py +0 -0
  450. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/using_plugin/test_content_path.py +0 -0
  451. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/using_plugin/test_content_promotion.py +0 -0
  452. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/using_plugin/test_contentguard.py +0 -0
  453. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/using_plugin/test_crud_repos.py +0 -0
  454. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/using_plugin/test_distributions.py +0 -0
  455. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/using_plugin/test_filesystemexport.py +0 -0
  456. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/using_plugin/test_labels.py +0 -0
  457. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/using_plugin/test_orphans.py +0 -0
  458. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/using_plugin/test_pagination.py +0 -0
  459. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/using_plugin/test_proxy.py +0 -0
  460. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/using_plugin/test_pulpimport.py +0 -0
  461. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/using_plugin/test_purge.py +0 -0
  462. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/using_plugin/test_reclaim_disk_space.py +0 -0
  463. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/using_plugin/test_repair.py +0 -0
  464. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/using_plugin/test_repo_versions.py +0 -0
  465. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/using_plugin/test_tasks.py +0 -0
  466. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/api/using_plugin/test_unlinking_repo.py +0 -0
  467. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/assets/__init__.py +0 -0
  468. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/content_with_coverage.py +0 -0
  469. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/gpg_ascii_armor_signing_service.py +0 -0
  470. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/functional/utils.py +0 -0
  471. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/performance/__init__.py +0 -0
  472. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/performance/test_performance.py +0 -0
  473. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/__init__.py +0 -0
  474. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/conftest.py +0 -0
  475. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/content/__init__.py +0 -0
  476. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/content/test_handler.py +0 -0
  477. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/content/test_heartbeat.py +0 -0
  478. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/download/__init__.py +0 -0
  479. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/download/test_downloader_base.py +0 -0
  480. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/download/test_downloader_factory.py +0 -0
  481. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/migration/__init__.py +0 -0
  482. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/migration/test_0077_move_remote_url_credentials.py +0 -0
  483. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/models/__init__.py +0 -0
  484. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/models/test_base.py +0 -0
  485. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/models/test_content.py +0 -0
  486. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/models/test_remote.py +0 -0
  487. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/models/test_repository.py +0 -0
  488. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/roles/__init__.py +0 -0
  489. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/roles/test_roles.py +0 -0
  490. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/serializers/__init__.py +0 -0
  491. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/serializers/test_base.py +0 -0
  492. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/serializers/test_domain.py +0 -0
  493. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/serializers/test_pulpexport.py +0 -0
  494. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/serializers/test_repository.py +0 -0
  495. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/stages/__init__.py +0 -0
  496. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/stages/test_artifactdownloader.py +0 -0
  497. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/stages/test_stages.py +0 -0
  498. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/test_cache.py +0 -0
  499. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/test_chunked_file.py +0 -0
  500. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/test_content_guard.py +0 -0
  501. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/test_files.py +0 -0
  502. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/test_import_checks.py +0 -0
  503. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/test_pulp_urls.py +0 -0
  504. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/test_settings.py +0 -0
  505. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/test_util.py +0 -0
  506. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/test_viewsets.py +0 -0
  507. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/viewsets/__init__.py +0 -0
  508. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore/tests/unit/viewsets/test_viewset_base.py +0 -0
  509. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore.egg-info/dependency_links.txt +0 -0
  510. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore.egg-info/entry_points.txt +0 -0
  511. {pulpcore-3.49.53 → pulpcore-3.49.55}/pulpcore.egg-info/top_level.txt +0 -0
  512. {pulpcore-3.49.53 → pulpcore-3.49.55}/setup.cfg +0 -0
  513. {pulpcore-3.49.53 → pulpcore-3.49.55}/test_requirements.txt +0 -0
  514. {pulpcore-3.49.53 → pulpcore-3.49.55}/unittest_requirements.txt +0 -0
@@ -8,6 +8,50 @@
8
8
 
9
9
  [//]: # (towncrier release notes start)
10
10
 
11
+ ## 3.49.55 (2026-03-10) {: #3.49.55 }
12
+
13
+ ### REST API {: #3.49.55-rest-api }
14
+
15
+ #### Bugfixes {: #3.49.55-rest-api-bugfix }
16
+
17
+ - Moved artifact checksum validation from module-level settings code to a Django system check.
18
+ [#7380](https://github.com/pulp/pulpcore/issues/7380)
19
+ - Fixed the url of the generated openapi schemas when using `pulpcore-manager openapi`.
20
+
21
+ ### Plugin API {: #3.49.55-plugin-api }
22
+
23
+ No significant changes.
24
+
25
+ ### Pulp File {: #3.49.55-pulp-file }
26
+
27
+ No significant changes.
28
+
29
+ ### Pulp Cert Guard {: #3.49.55-pulp-cert-guard }
30
+
31
+ No significant changes.
32
+
33
+ ---
34
+
35
+ ## 3.49.54 (2026-03-06) {: #3.49.54 }
36
+
37
+ ### REST API {: #3.49.54-rest-api }
38
+
39
+ No significant changes.
40
+
41
+ ### Plugin API {: #3.49.54-plugin-api }
42
+
43
+ No significant changes.
44
+
45
+ ### Pulp File {: #3.49.54-pulp-file }
46
+
47
+ No significant changes.
48
+
49
+ ### Pulp Cert Guard {: #3.49.54-pulp-cert-guard }
50
+
51
+ No significant changes.
52
+
53
+ ---
54
+
11
55
  ## 3.49.53 (2026-03-03) {: #3.49.53 }
12
56
 
13
57
  ### REST API {: #3.49.53-rest-api }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pulpcore
3
- Version: 3.49.53
3
+ Version: 3.49.55
4
4
  Summary: Pulp Django Application and Related Modules
5
5
  Home-page: https://pulpproject.org
6
6
  Author: Pulp Team
@@ -36,7 +36,7 @@ Requires-Dist: djangorestframework<=3.15.2,>=3.14.0
36
36
  Requires-Dist: djangorestframework-queryfields<=1.1.0,>=1.0
37
37
  Requires-Dist: drf-access-policy<1.5.1,>=1.1.2
38
38
  Requires-Dist: drf-nested-routers<=0.93.5,>=0.93.4
39
- Requires-Dist: drf-spectacular==0.26.5
39
+ Requires-Dist: drf-spectacular<0.30,>=0.26.5
40
40
  Requires-Dist: dynaconf<3.3.0,>=3.1.12
41
41
  Requires-Dist: gunicorn<23.1.0,>=20.1
42
42
  Requires-Dist: importlib-metadata<=6.0.1,>=6.0.1
@@ -6,6 +6,6 @@ class PulpCertGuardPluginAppConfig(PulpPluginAppConfig):
6
6
 
7
7
  name = "pulp_certguard.app"
8
8
  label = "certguard"
9
- version = "3.49.53"
9
+ version = "3.49.55"
10
10
  python_package_name = "pulpcore"
11
11
  domain_compatible = True
@@ -8,6 +8,6 @@ class PulpFilePluginAppConfig(PulpPluginAppConfig):
8
8
 
9
9
  name = "pulp_file.app"
10
10
  label = "file"
11
- version = "3.49.53"
11
+ version = "3.49.55"
12
12
  python_package_name = "pulpcore"
13
13
  domain_compatible = True
@@ -244,7 +244,7 @@ class PulpAppConfig(PulpPluginAppConfig):
244
244
  label = "core"
245
245
 
246
246
  # The version of this app
247
- version = "3.49.53"
247
+ version = "3.49.55"
248
248
 
249
249
  # The python package name providing this app
250
250
  python_package_name = "pulpcore"
@@ -0,0 +1,119 @@
1
+ from pathlib import Path
2
+
3
+ from django.conf import settings
4
+ from django.core.checks import (
5
+ Debug as CheckDebug,
6
+ Error as CheckError,
7
+ Warning as CheckWarning,
8
+ Tags,
9
+ register,
10
+ )
11
+ from django.db.models import Q
12
+
13
+ from pulpcore import constants
14
+
15
+
16
+ @register(deploy=True)
17
+ def content_origin_check(app_configs, **kwargs):
18
+ messages = []
19
+ if getattr(settings, "CONTENT_ORIGIN", "UNREACHABLE") == "UNREACHABLE":
20
+ messages.append(
21
+ CheckError(
22
+ "CONTENT_ORIGIN is a required setting but it was not configured. This may be "
23
+ "caused by invalid read permissions of the settings file. Note that "
24
+ "CONTENT_ORIGIN is set by the installation automatically.",
25
+ id="pulpcore.E001",
26
+ )
27
+ )
28
+ return messages
29
+
30
+
31
+ @register(deploy=True)
32
+ def storage_paths(app_configs, **kwargs):
33
+ warnings = []
34
+
35
+ if settings.STORAGES["default"]["BACKEND"] == "pulpcore.app.models.storage.FileSystem":
36
+ try:
37
+ media_root_dev = Path(settings.MEDIA_ROOT).stat().st_dev
38
+ except OSError:
39
+ media_root_dev = None
40
+ warnings.append(
41
+ CheckWarning(
42
+ "Your MEDIA_ROOT setting points to a path that does not exist.",
43
+ id="pulpcore.W001",
44
+ )
45
+ )
46
+
47
+ try:
48
+ working_dir_dev = Path(settings.WORKING_DIRECTORY).stat().st_dev
49
+ except OSError:
50
+ working_dir_dev = None
51
+ warnings.append(
52
+ CheckWarning(
53
+ "Your WORKING_DIRECTORY setting points to a path that does not exist.",
54
+ id="pulpcore.W002",
55
+ )
56
+ )
57
+
58
+ if media_root_dev and media_root_dev != working_dir_dev:
59
+ warnings.append(
60
+ CheckWarning(
61
+ "MEDIA_ROOT and WORKING_DIRECTORY are on different filesystems. "
62
+ "It is highly recommended that these live on the same filesystem",
63
+ id="pulpcore.W003",
64
+ )
65
+ )
66
+
67
+ return warnings
68
+
69
+
70
+ @register(Tags.database)
71
+ def check_artifact_checksums(app_configs, **kwargs):
72
+ from pulpcore.app.models import Artifact, RemoteArtifact
73
+
74
+ messages = []
75
+ allowed = set(settings.ALLOWED_CONTENT_CHECKSUMS)
76
+ forbidden = set(constants.ALL_KNOWN_CONTENT_CHECKSUMS).difference(allowed)
77
+
78
+ try:
79
+ for checksum in allowed:
80
+ if Artifact.objects.filter(**{checksum: None}).exists():
81
+ messages.append(
82
+ CheckError(
83
+ f"There have been identified artifacts missing checksum '{checksum}'. "
84
+ "Run 'pulpcore-manager handle-artifact-checksums' first to populate "
85
+ "missing artifact checksums.",
86
+ id="pulpcore.E002",
87
+ )
88
+ )
89
+ for checksum in forbidden:
90
+ if Artifact.objects.exclude(**{checksum: None}).exists():
91
+ messages.append(
92
+ CheckWarning(
93
+ f"There have been identified artifacts with forbidden checksum "
94
+ f"'{checksum}'. Run 'pulpcore-manager handle-artifact-checksums' "
95
+ "to unset forbidden checksums.",
96
+ id="pulpcore.W004",
97
+ )
98
+ )
99
+
100
+ has_any_checksum = ~Q(**{c: None for c in constants.ALL_KNOWN_CONTENT_CHECKSUMS})
101
+ missing_allowed = Q(**{c: None for c in allowed})
102
+ if RemoteArtifact.objects.filter(has_any_checksum & missing_allowed).exists():
103
+ messages.append(
104
+ CheckWarning(
105
+ "Detected remote content without allowed checksums. "
106
+ "Run 'pulpcore-manager handle-artifact-checksums --report' to "
107
+ "view this content.",
108
+ id="pulpcore.W005",
109
+ )
110
+ )
111
+ except Exception:
112
+ messages.append(
113
+ CheckDebug(
114
+ "Skipping artifact checksum checks (table may not exist yet).",
115
+ id="pulpcore.D001",
116
+ )
117
+ )
118
+
119
+ return messages
@@ -19,7 +19,6 @@ from cryptography.fernet import Fernet
19
19
  from django.conf import global_settings
20
20
  from django.core.files.storage import storages # noqa: F401
21
21
  from django.core.exceptions import ImproperlyConfigured
22
- from django.db import connection
23
22
 
24
23
  from pulpcore import constants
25
24
 
@@ -307,6 +306,10 @@ SPECTACULAR_SETTINGS = {
307
306
  "COMPONENT_NO_READ_ONLY_REQUIRED": True,
308
307
  "GENERIC_ADDITIONAL_PROPERTIES": None,
309
308
  "DISABLE_ERRORS_AND_WARNINGS": not DEBUG,
309
+ "POSTPROCESSING_HOOKS": [
310
+ "drf_spectacular.hooks.postprocess_schema_enums",
311
+ "pulpcore.openapi.hooks.add_info_hook",
312
+ ],
310
313
  "TITLE": "Pulp 3 API",
311
314
  "DESCRIPTION": "Fetch, Upload, Organize, and Distribute Software Packages",
312
315
  "VERSION": "v3",
@@ -316,8 +319,9 @@ SPECTACULAR_SETTINGS = {
316
319
  "url": "https://pulpproject.org",
317
320
  },
318
321
  "LICENSE": {
319
- "name": "GPLv2+",
320
322
  "url": "https://raw.githubusercontent.com/pulp/pulpcore/master/LICENSE",
323
+ "name": "GNU General Public License v2.0 or later",
324
+ "identifier": "GPL-2.0-or-later",
321
325
  },
322
326
  }
323
327
 
@@ -471,69 +475,6 @@ FORBIDDEN_CHECKSUMS = set(constants.ALL_KNOWN_CONTENT_CHECKSUMS).difference(
471
475
  ALLOWED_CONTENT_CHECKSUMS
472
476
  )
473
477
 
474
- _SKIPPED_COMMANDS_FOR_CONTENT_CHECKS = [
475
- "handle-artifact-checksums",
476
- "migrate",
477
- "collectstatic",
478
- "openapi",
479
- ]
480
-
481
- if not (len(sys.argv) >= 2 and sys.argv[1] in _SKIPPED_COMMANDS_FOR_CONTENT_CHECKS):
482
- try:
483
- with connection.cursor() as cursor:
484
- for checksum in ALLOWED_CONTENT_CHECKSUMS:
485
- # can't import Artifact here so use a direct db connection
486
- cursor.execute(f"SELECT count(pulp_id) FROM core_artifact WHERE {checksum} IS NULL")
487
- row = cursor.fetchone()
488
- if row[0] > 0:
489
- raise ImproperlyConfigured(
490
- (
491
- "There have been identified artifacts missing checksum '{}'. "
492
- "Run 'pulpcore-manager handle-artifact-checksums' first to populate "
493
- "missing artifact checksums."
494
- ).format(checksum)
495
- )
496
- for checksum in FORBIDDEN_CHECKSUMS:
497
- # can't import Artifact here so use a direct db connection
498
- cursor.execute(
499
- f"SELECT count(pulp_id) FROM core_artifact WHERE {checksum} IS NOT NULL"
500
- )
501
- row = cursor.fetchone()
502
- if row[0] > 0:
503
- raise ImproperlyConfigured(
504
- (
505
- "There have been identified artifacts with forbidden checksum '{}'. "
506
- "Run 'pulpcore-manager handle-artifact-checksums' first to unset "
507
- "forbidden checksums."
508
- ).format(checksum)
509
- )
510
-
511
- # warn if there are remote artifacts with checksums but no allowed checksums
512
- cond = " AND ".join([f"{c} IS NULL" for c in constants.ALL_KNOWN_CONTENT_CHECKSUMS])
513
- no_checksum_query = f"SELECT pulp_id FROM core_remoteartifact WHERE {cond}"
514
- cond = " AND ".join([f"{c} IS NULL" for c in ALLOWED_CONTENT_CHECKSUMS])
515
- cursor.execute(
516
- f"SELECT count(pulp_id) FROM core_remoteartifact WHERE {cond} AND "
517
- f"pulp_id NOT IN ({no_checksum_query})"
518
- )
519
- row = cursor.fetchone()
520
- if row[0] > 0:
521
- _logger.warning(
522
- (
523
- "Warning: detected remote content without allowed checksums. "
524
- "Run 'pulpcore-manager handle-artifact-checksums --report' to "
525
- "view this content."
526
- )
527
- )
528
-
529
- except ImproperlyConfigured as e:
530
- raise e
531
- except Exception:
532
- # our check could fail if the table hasn't been created yet or we can't get a db connection
533
- pass
534
- finally:
535
- connection.close()
536
-
537
478
  # Ensures the cached property storage.backends uses the right value after dynaconf init
538
479
  storages._backends = settings.STORAGES.copy()
539
480
  storages.backends
@@ -5,6 +5,7 @@ from urllib.parse import urljoin
5
5
 
6
6
  from django.conf import settings
7
7
  from django.core.exceptions import FieldDoesNotExist
8
+ from django.http import HttpRequest
8
9
  from django.utils.html import strip_tags
9
10
  from drf_spectacular.drainage import reset_generator_stats
10
11
  from drf_spectacular.generators import SchemaGenerator
@@ -21,9 +22,11 @@ from drf_spectacular.plumbing import (
21
22
  )
22
23
  from drf_spectacular.settings import spectacular_settings
23
24
  from drf_spectacular.types import OpenApiTypes
24
- from drf_spectacular.utils import OpenApiParameter, extend_schema_field
25
+ from drf_spectacular.utils import OpenApiParameter, extend_schema, extend_schema_field
26
+ from drf_spectacular.extensions import OpenApiViewExtension, OpenApiAuthenticationExtension
25
27
  from rest_framework import mixins, serializers
26
28
  from rest_framework.exceptions import ParseError
29
+ from rest_framework.request import Request
27
30
  from rest_framework.schemas.utils import get_pk_description
28
31
 
29
32
  from pulpcore.app.apps import pulp_plugin_configs
@@ -36,11 +39,14 @@ else:
36
39
  API_ROOT_NO_FRONT_SLASH = settings.V3_API_ROOT_NO_FRONT_SLASH
37
40
  API_ROOT_NO_FRONT_SLASH = API_ROOT_NO_FRONT_SLASH.replace("<", "{").replace(">", "}")
38
41
 
39
-
40
42
  # Python does not distinguish integer sizes. The safest assumption is that they are large.
41
43
  extend_schema_field(OpenApiTypes.INT64)(serializers.IntegerField)
42
44
 
43
45
 
46
+ class InheritSerializer(serializers.Serializer):
47
+ """This is a dummy tracer to allow mixins to refer to the natural serializer of a viewset."""
48
+
49
+
44
50
  class PulpAutoSchema(AutoSchema):
45
51
  """Pulp Auto Schema."""
46
52
 
@@ -51,6 +57,7 @@ class PulpAutoSchema(AutoSchema):
51
57
  "patch": "partial_update",
52
58
  "delete": "delete",
53
59
  }
60
+ V3_API = API_ROOT_NO_FRONT_SLASH.replace("{pulp_domain}/", "")
54
61
 
55
62
  def _tokenize_path(self):
56
63
  """
@@ -78,7 +85,7 @@ class PulpAutoSchema(AutoSchema):
78
85
  if not tokenized_path and getattr(self.view, "get_view_name", None):
79
86
  tokenized_path.extend(self.view.get_view_name().split())
80
87
 
81
- path = "/".join(tokenized_path).replace(settings.V3_API_ROOT_NO_FRONT_SLASH, "")
88
+ path = "/".join(tokenized_path).replace(self.V3_API, "")
82
89
  tokenized_path = path.split("/")
83
90
 
84
91
  return tokenized_path
@@ -193,6 +200,19 @@ class PulpAutoSchema(AutoSchema):
193
200
  name = name + "Response"
194
201
  return name
195
202
 
203
+ def get_override_parameters(self):
204
+ parameters = super().get_override_parameters()
205
+ parameters.append(
206
+ OpenApiParameter(
207
+ name="X-Task-Diagnostics",
208
+ location=OpenApiParameter.HEADER,
209
+ required=False,
210
+ type={"type": "array", "items": {"type": "string"}},
211
+ description="List of profilers to use on tasks.",
212
+ )
213
+ )
214
+ return parameters
215
+
196
216
  def map_parsers(self):
197
217
  """
198
218
  Get request parsers.
@@ -213,82 +233,11 @@ class PulpAutoSchema(AutoSchema):
213
233
  request_body["required"] = True
214
234
  return request_body
215
235
 
216
- def _resolve_path_parameters(self, variables):
217
- """
218
- Resolve path parameters.
219
-
220
- Extended to omit undesired warns.
221
- """
222
- model = getattr(getattr(self.view, "queryset", None), "model", None)
223
- parameters = []
224
-
225
- for variable in variables:
226
- schema = build_basic_type(OpenApiTypes.STR)
227
- description = ""
228
-
229
- resolved_parameter = resolve_django_path_parameter(
230
- self.path_regex,
231
- variable,
232
- self.map_renderers("format"),
233
- )
234
- if not resolved_parameter:
235
- resolved_parameter = resolve_regex_path_parameter(self.path_regex, variable)
236
-
237
- if resolved_parameter:
238
- schema = resolved_parameter["schema"]
239
- elif model:
240
- try:
241
- model_field = model._meta.get_field(variable)
242
- schema = self._map_model_field(model_field, direction=None)
243
- # strip irrelevant meta data
244
- irrelevant_field_meta = ["readOnly", "writeOnly", "nullable", "default"]
245
- schema = {k: v for k, v in schema.items() if k not in irrelevant_field_meta}
246
- if "description" not in schema and model_field.primary_key:
247
- description = get_pk_description(model, model_field)
248
- except FieldDoesNotExist:
249
- pass
250
-
251
- # Used by the bindings to identify which param is the domain path
252
- extensions = {}
253
- if settings.DOMAIN_ENABLED and variable == "pulp_domain":
254
- extensions["x-isDomain"] = True
255
-
256
- parameters.append(
257
- build_parameter_type(
258
- name=variable,
259
- location=OpenApiParameter.PATH,
260
- description=description,
261
- schema=schema,
262
- extensions=extensions,
263
- )
264
- )
265
-
266
- return parameters
267
-
268
- def resolve_serializer(self, serializer, direction):
269
- """Serializer to component."""
270
- component_schema = self._map_serializer(serializer, direction)
271
- if not component_schema.get("properties", {}):
272
- component = ResolvedComponent(
273
- name=self._get_serializer_name(serializer, direction),
274
- type=ResolvedComponent.SCHEMA,
275
- object=serializer,
276
- )
277
- if component in self.registry:
278
- return self.registry[component]
279
-
280
- component.schema = component_schema
281
- self.registry.register(component)
282
-
283
- else:
284
- component = super().resolve_serializer(serializer, direction)
285
-
286
- return component
287
-
288
236
  def _get_response_bodies(self):
289
237
  """
290
238
  Handle response status code.
291
239
  """
240
+ # DRF handles this most of the time. But it seems set_label still needs it.
292
241
  response = super()._get_response_bodies()
293
242
  if (
294
243
  self.method == "POST"
@@ -299,6 +248,15 @@ class PulpAutoSchema(AutoSchema):
299
248
 
300
249
  return response
301
250
 
251
+ def _get_response_for_code(
252
+ self, serializer, status_code, media_types=None, direction="response"
253
+ ):
254
+ """Hack to replace the InheritSerializer with the real deal."""
255
+ if serializer == InheritSerializer:
256
+ serializer = self._get_serializer()
257
+
258
+ return super()._get_response_for_code(serializer, status_code, media_types, direction)
259
+
302
260
 
303
261
  class PulpSchemaGenerator(SchemaGenerator):
304
262
  """Pulp Schema Generator."""
@@ -311,7 +269,7 @@ class PulpSchemaGenerator(SchemaGenerator):
311
269
  prefix (str): Optional prefix to add to the slug
312
270
  pulp_model_alias (str): Optional model name to use instead of model.__name__
313
271
  Returns:
314
- str: *pulp_href where * is the model name in all lower case letters
272
+ str: '{model_name_snake_case}_href'
315
273
  """
316
274
  app_label = model._meta.app_label
317
275
  model_name = pulp_model_alias or model.__name__
@@ -377,7 +335,7 @@ class PulpSchemaGenerator(SchemaGenerator):
377
335
  resource_path = "%s}/" % path.rsplit(sep="}", maxsplit=1)[0]
378
336
  # This check prevents /pulp/{pulp_domain}/ from being converted for non-detail endpoints
379
337
  # Possibly affects plugin-specific urls, depends on their url structure
380
- if resource_path.lstrip("/") not in API_ROOT_NO_FRONT_SLASH:
338
+ if not resource_path.endswith("/{pulp_domain}/"):
381
339
  path = path.replace(resource_path, "{%s}" % param_name)
382
340
  return path
383
341
 
@@ -470,51 +428,47 @@ class PulpSchemaGenerator(SchemaGenerator):
470
428
 
471
429
  def get_schema(self, request=None, public=False):
472
430
  """Generate a OpenAPI schema."""
473
- reset_generator_stats()
431
+ if request is None:
432
+ request = Request(HttpRequest())
433
+ request.META["SERVER_NAME"] = "localhost"
434
+ request.META["SERVER_PORT"] = "24817"
474
435
 
475
436
  apps = list(pulp_plugin_configs())
437
+ if request and "plugin" in request.query_params:
438
+ raise ParseError("'plugin' has been removed. Use 'component' instead.")
476
439
  if request and "component" in request.query_params:
477
440
  # /pulp/api/v3/docs/api.json?component=core,file
478
- if "plugin" in request.query_params:
479
- raise ParseError("'component' and 'plugin' cannot be combined.")
480
441
  app_labels = request.query_params["component"].split(",")
442
+ if "core" not in app_labels:
443
+ core_app = [app for app in apps if app.label == "core"]
444
+ else:
445
+ core_app = []
481
446
  apps = [app for app in apps if app.label in app_labels]
482
447
  if len(apps) != len(app_labels):
483
448
  raise ParseError("Invalid component specified.")
484
449
  request.plugins = [app.name.split(".")[0] for app in apps]
450
+ # Adding core back because we want to report it's version too.
451
+ apps.extend(core_app)
452
+ request.apps = apps
485
453
 
486
- if request and "plugin" in request.query_params:
487
- # /pulp/api/v3/docs/api.json?plugin=pulp_file
488
- deprecation_logger.warn(
489
- _(
490
- "The query parameter `plugin` has been deprecated and "
491
- "will be removed with pulpcore>=3.55. "
492
- "Please use `component` with a list of app labels instead."
493
- )
494
- )
495
- request.plugins = request.query_params["plugin"].split(",")
454
+ request.bindings = "bindings" in request.query_params
496
455
 
497
- result = build_root_object(
498
- paths=self.parse(request, public),
499
- components=self.registry.build(spectacular_settings.APPEND_COMPONENTS),
500
- version=self.api_version or getattr(request, "version", None),
501
- )
502
- for hook in spectacular_settings.POSTPROCESSING_HOOKS:
503
- result = hook(result=result, generator=self, request=request, public=public)
456
+ result = super().get_schema(request, public)
504
457
 
505
- # Basically I'm doing it to get pulp logo at redoc page
506
- result["info"]["x-logo"] = {
507
- "url": "https://pulp.plan.io/attachments/download/517478/pulp_logo_word_rectangle.svg"
508
- }
509
-
510
- # Adding plugin version config
511
- result["info"]["x-pulp-app-versions"] = {app.label: app.version for app in apps}
458
+ if request.bindings:
459
+ # Undo the spectacular sanitization of operation ids
460
+ for path, path_spec in result["paths"].items():
461
+ for operation, operation_spec in path_spec.items():
462
+ operation_spec["operationId"] = operation_spec.pop("x-copy-operationId")
463
+ return result
512
464
 
513
- # Add domain-settings value
514
- result["info"]["x-pulp-domain-enabled"] = settings.DOMAIN_ENABLED
515
465
 
516
- # Adding current host as server (it will provide a default value for the bindings)
517
- server_url = "http://localhost:24817" if not request else request.build_absolute_uri("/")
518
- result["servers"] = [{"url": server_url}]
466
+ class BasicAuthenticationScheme(OpenApiAuthenticationExtension):
467
+ target_class = "pulpcore.app.authentication.BasicAuthentication"
468
+ name = "basicAuth"
519
469
 
520
- return normalize_result_object(result)
470
+ def get_security_definition(self, auto_schema):
471
+ return {
472
+ "type": "http",
473
+ "scheme": "basic",
474
+ }
@@ -0,0 +1,36 @@
1
+ from django.conf import settings
2
+
3
+
4
+ def add_info_hook(result, generator, request, **kwargs):
5
+ # Basically I'm doing it to get pulp logo at redoc page
6
+ result["info"]["x-logo"] = {"url": "https://pulpproject.org/assets/pulp_logo_icon.svg"}
7
+
8
+ if result["openapi"].split(".", maxsplit=2)[:-1] == ["3", "0"]:
9
+ result["info"]["license"].pop("identifier", None)
10
+ else:
11
+ result["info"]["license"].pop("url", None)
12
+
13
+ # Adding plugin version config
14
+ result["info"]["x-pulp-app-versions"] = {app.label: app.version for app in request.apps}
15
+
16
+ # Add domain-settings value
17
+ result["info"]["x-pulp-domain-enabled"] = settings.DOMAIN_ENABLED
18
+
19
+ # Add x-isDomain flag to domain path parameters
20
+ # Save a copy of the bad operationId in case we generate bindings
21
+ for path, path_spec in result["paths"].items():
22
+ for operation, operation_spec in path_spec.items():
23
+ if request.bindings:
24
+ # Keep the operation id before sanitization
25
+ operation_spec["x-copy-operationId"] = operation_spec["operationId"]
26
+ if settings.DOMAIN_ENABLED:
27
+ parameters = operation_spec.get("parameters")
28
+ if parameters:
29
+ for parameter in parameters:
30
+ if parameter["name"] == "pulp_domain" and parameter["in"] == "path":
31
+ parameter["x-isDomain"] = True
32
+
33
+ # Adding current host as server (it will provide a default value for the bindings)
34
+ result["servers"] = [{"url": request.build_absolute_uri("/")}]
35
+
36
+ return result