pulpcore 3.120.0__tar.gz → 3.121.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 (534) hide show
  1. {pulpcore-3.120.0 → pulpcore-3.121.0}/CHANGES.md +77 -0
  2. {pulpcore-3.120.0 → pulpcore-3.121.0}/PKG-INFO +4 -4
  3. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/app/__init__.py +1 -1
  4. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/app/__init__.py +1 -1
  5. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/app/tasks/synchronizing.py +0 -3
  6. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/apps.py +1 -1
  7. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/models/publication.py +4 -3
  8. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/tasks/vulnerability_report.py +3 -1
  9. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/util.py +20 -0
  10. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/cache/cache.py +18 -9
  11. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/content/handler.py +96 -6
  12. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/test_workers.py +2 -1
  13. pulpcore-3.121.0/pulpcore/tests/functional/api/using_plugin/test_cdn_cache_validation.py +267 -0
  14. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/models/test_publication_retention.py +9 -10
  15. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/test_vulnerability_report.py +32 -0
  16. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore.egg-info/PKG-INFO +4 -4
  17. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore.egg-info/SOURCES.txt +1 -0
  18. pulpcore-3.121.0/pulpcore.egg-info/dependency_links.txt +1 -0
  19. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore.egg-info/requires.txt +3 -3
  20. {pulpcore-3.120.0 → pulpcore-3.121.0}/pyproject.toml +5 -5
  21. pulpcore-3.120.0/pulp_file/app/settings.py +0 -1
  22. {pulpcore-3.120.0 → pulpcore-3.121.0}/CODE_OF_CONDUCT.md +0 -0
  23. {pulpcore-3.120.0 → pulpcore-3.121.0}/COMMITMENT +0 -0
  24. {pulpcore-3.120.0 → pulpcore-3.121.0}/CONTRIBUTING.md +0 -0
  25. {pulpcore-3.120.0 → pulpcore-3.121.0}/COPYRIGHT +0 -0
  26. {pulpcore-3.120.0 → pulpcore-3.121.0}/LICENSE +0 -0
  27. {pulpcore-3.120.0 → pulpcore-3.121.0}/MANIFEST.in +0 -0
  28. {pulpcore-3.120.0 → pulpcore-3.121.0}/README.md +0 -0
  29. {pulpcore-3.120.0 → pulpcore-3.121.0}/ci_requirements.txt +0 -0
  30. {pulpcore-3.120.0 → pulpcore-3.121.0}/functest_requirements.txt +0 -0
  31. {pulpcore-3.120.0 → pulpcore-3.121.0}/manage.py +0 -0
  32. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/__init__.py +0 -0
  33. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/app/migrations/0001_initial.py +0 -0
  34. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/app/migrations/0002_alter_rhsmcertguard_contentguard_ptr_and_more.py +0 -0
  35. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/app/migrations/__init__.py +0 -0
  36. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/app/models.py +0 -0
  37. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/app/serializers.py +0 -0
  38. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/app/viewsets.py +0 -0
  39. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/pytest_plugin.py +0 -0
  40. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/rhsm/__init__.py +0 -0
  41. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/rhsm/rhsm_check_path.py +0 -0
  42. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/__init__.py +0 -0
  43. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/__init__.py +0 -0
  44. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/api/__init__.py +0 -0
  45. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/api/test_rhsm_certguard.py +0 -0
  46. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/api/test_x509_certguard.py +0 -0
  47. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/rhsm/katello-default-ca.crt +0 -0
  48. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/rhsm/katello-default-ca.key +0 -0
  49. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/rhsm/trusted_but_expired.pem +0 -0
  50. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/rhsm/uber.cert +0 -0
  51. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/rhsm/untrusted_cert-key.pem +0 -0
  52. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/rhsm/untrusted_cert.pem +0 -0
  53. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/1514454871848760713-key.pem +0 -0
  54. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/1514454871848760713.pem +0 -0
  55. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/159442575569388840-key.pem +0 -0
  56. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/rhsm/v1/159442575569388840.pem +0 -0
  57. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/4260035510644027985-key.pem +0 -0
  58. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/4260035510644027985.pem +0 -0
  59. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/5527980418107729172-key.pem +0 -0
  60. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/rhsm/v3/5527980418107729172.pem +0 -0
  61. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/certificates/ca.pem +0 -0
  62. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/genca.sh +0 -0
  63. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/thirdparty_ca/keys/ca.pem +0 -0
  64. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/ca.pem +0 -0
  65. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/client.pem +0 -0
  66. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/server.pem +0 -0
  67. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/un_urlencoded_cert.txt +0 -0
  68. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/x509/certificates/untrusted_client.pem +0 -0
  69. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/x509/genall.sh +0 -0
  70. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/x509/genca.sh +0 -0
  71. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/x509/genclient.sh +0 -0
  72. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/x509/gensrv.sh +0 -0
  73. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/x509/keys/ca.pem +0 -0
  74. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/x509/keys/client.pem +0 -0
  75. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/artifacts/x509/keys/server.pem +0 -0
  76. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/conftest.py +0 -0
  77. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/functional/constants.py +0 -0
  78. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/unit/__init__.py +0 -0
  79. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/unit/certdata.py +0 -0
  80. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_certguard/tests/unit/test_rhsm_check_path.py +0 -0
  81. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/__init__.py +0 -0
  82. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/app/migrations/0001_initial_squashed_0016_add_domain.py +0 -0
  83. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/app/migrations/0017_alter_filealternatecontentsource_alternatecontentsource_ptr_and_more.py +0 -0
  84. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/app/migrations/0018_alter_filecontent_options.py +0 -0
  85. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/app/migrations/0019_add_filegitremote.py +0 -0
  86. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/app/migrations/0020_filerepository_last_sync_details.py +0 -0
  87. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/app/migrations/__init__.py +0 -0
  88. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/app/modelresource.py +0 -0
  89. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/app/models.py +0 -0
  90. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/app/replica.py +0 -0
  91. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/app/serializers.py +0 -0
  92. /pulpcore-3.120.0/pulpcore.egg-info/dependency_links.txt → /pulpcore-3.121.0/pulp_file/app/settings.py +0 -0
  93. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/app/tasks/__init__.py +0 -0
  94. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/app/tasks/publishing.py +0 -0
  95. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/app/viewsets.py +0 -0
  96. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/manifest.py +0 -0
  97. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/pytest_plugin.py +0 -0
  98. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/__init__.py +0 -0
  99. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/functional/__init__.py +0 -0
  100. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/functional/api/__init__.py +0 -0
  101. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/functional/api/test_acs.py +0 -0
  102. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/functional/api/test_auto_publish.py +0 -0
  103. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/functional/api/test_bad_sync.py +0 -0
  104. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/functional/api/test_content_labels.py +0 -0
  105. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/functional/api/test_crud_content_unit.py +0 -0
  106. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/functional/api/test_crud_remotes.py +0 -0
  107. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/functional/api/test_distributed_publication.py +0 -0
  108. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/functional/api/test_domains.py +0 -0
  109. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/functional/api/test_download_policies.py +0 -0
  110. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/functional/api/test_filesystem_export.py +0 -0
  111. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/functional/api/test_generic_list.py +0 -0
  112. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/functional/api/test_git_sync.py +0 -0
  113. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/functional/api/test_labels.py +0 -0
  114. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/functional/api/test_mime_types.py +0 -0
  115. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/functional/api/test_overwrite_content.py +0 -0
  116. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/functional/api/test_publish.py +0 -0
  117. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/functional/api/test_pulp_export.py +0 -0
  118. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/functional/api/test_rbac.py +0 -0
  119. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/functional/api/test_remote_settings.py +0 -0
  120. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/functional/api/test_sync.py +0 -0
  121. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/functional/api/test_sync_optimization.py +0 -0
  122. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/unit/__init__.py +0 -0
  123. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/unit/test_git_sync.py +0 -0
  124. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/unit/test_safe_paths.py +0 -0
  125. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/unit/test_serializers.py +0 -0
  126. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulp_file/tests/unit/test_sync_optimization.py +0 -0
  127. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/__init__.py +0 -0
  128. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/__init__.py +0 -0
  129. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/access_policy.py +0 -0
  130. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/authentication.py +0 -0
  131. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/checks.py +0 -0
  132. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/contexts.py +0 -0
  133. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/entrypoint.py +0 -0
  134. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/files.py +0 -0
  135. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/find_url.py +0 -0
  136. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/global_access_conditions.py +0 -0
  137. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/importexport.py +0 -0
  138. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/loggers.py +0 -0
  139. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/manage.py +0 -0
  140. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/management/__init__.py +0 -0
  141. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/management/commands/__init__.py +0 -0
  142. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/management/commands/add-signing-service.py +0 -0
  143. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/management/commands/analyze-publication.py +0 -0
  144. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/management/commands/clean-up-progress-reports.py +0 -0
  145. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/management/commands/datarepair-2327.py +0 -0
  146. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/management/commands/datarepair.py +0 -0
  147. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/management/commands/dump-permissions.py +0 -0
  148. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/management/commands/dump-publications-to-fs.py +0 -0
  149. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/management/commands/handle-artifact-checksums.py +0 -0
  150. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/management/commands/list-signing-services.py +0 -0
  151. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/management/commands/migrationstat.py +0 -0
  152. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/management/commands/openapi.py +0 -0
  153. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/management/commands/optimizemigration.py +0 -0
  154. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/management/commands/rebasemigrations.py +0 -0
  155. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/management/commands/remove-plugin.py +0 -0
  156. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/management/commands/remove-signing-service.py +0 -0
  157. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/management/commands/repository-size.py +0 -0
  158. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/management/commands/reset-admin-password.py +0 -0
  159. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/management/commands/rotate-db-key.py +0 -0
  160. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/management/commands/shell.py +0 -0
  161. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0001_squashed_0090_char_to_text_field.py +0 -0
  162. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0091_systemid.py +0 -0
  163. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0092_alter_upload_options.py +0 -0
  164. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0093_add_info_field_repositoryversion.py +0 -0
  165. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0094_protect_repository_content.py +0 -0
  166. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0095_artifactdistribution.py +0 -0
  167. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0096_alter_task_logging_cid.py +0 -0
  168. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0097_remove_telemetry_task_schedule.py +0 -0
  169. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0098_pulp_labels.py +0 -0
  170. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0099_versions_field.py +0 -0
  171. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0100_upstreampulp.py +0 -0
  172. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0101_add_domain.py +0 -0
  173. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0102_add_domain_relations.py +0 -0
  174. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0103_alter_export_task.py +0 -0
  175. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0104_delete_label.py +0 -0
  176. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0105_abstract_uuid_gen.py +0 -0
  177. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0106_alter_artifactdistribution_distribution_ptr_and_more.py +0 -0
  178. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0107_distribution_hidden.py +0 -0
  179. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0108_task_versions.py +0 -0
  180. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0109_contentartifact_relative_path_index.py +0 -0
  181. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0110_apiappstatus.py +0 -0
  182. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0111_task_enc_args_task_enc_kwargs.py +0 -0
  183. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0112_alter_upstreampulp_options.py +0 -0
  184. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0113_headercontentguard.py +0 -0
  185. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0114_remove_task_args_remove_task_kwargs.py +0 -0
  186. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0115_compositecontentguard.py +0 -0
  187. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0116_alter_remoteartifact_md5_alter_remoteartifact_sha1_and_more.py +0 -0
  188. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0117_task_unblocked_at.py +0 -0
  189. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0118_task_core_task_unblock_2276a4_idx_and_more.py +0 -0
  190. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0119_grouprole_core_groupr_object__250e22_idx_and_more.py +0 -0
  191. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0120_get_url_removal.py +0 -0
  192. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0121_add_profile_artifacts_table.py +0 -0
  193. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0122_record_last_replication_timestamp.py +0 -0
  194. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0123_upstreampulp_q_select.py +0 -0
  195. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0124_task_deferred_task_immediate.py +0 -0
  196. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0125_openpgpdistribution_openpgpkeyring_openpgppublickey_and_more.py +0 -0
  197. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0126_remoteartifact_failed_at.py +0 -0
  198. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0127_remove_upstreampulp_pulp_label_select.py +0 -0
  199. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0128_domain_pulp_labels.py +0 -0
  200. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0129_content_pulp_labels.py +0 -0
  201. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0130_upstreampulp_policy.py +0 -0
  202. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0131_distribution_checkpoint_publication_checkpoint.py +0 -0
  203. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0132_alter_content_options.py +0 -0
  204. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0132_task_profile_options.py +0 -0
  205. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0133_repositoryversion_content_ids.py +0 -0
  206. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0134_task_insert_trigger.py +0 -0
  207. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0135_task_pulp_task_resources_index.py +0 -0
  208. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0136_delete_basedistribution.py +0 -0
  209. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0137_appstatus.py +0 -0
  210. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0138_vulnerabilityreport.py +0 -0
  211. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0139_task_app_lock.py +0 -0
  212. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0140_require_appstatus_zdu.py +0 -0
  213. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0141_alter_appstatus_name.py +0 -0
  214. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0142_task_result.py +0 -0
  215. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0143_require_app_lock_zdu.py +0 -0
  216. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0144_delete_old_appstatus.py +0 -0
  217. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0145_domainize_import_export.py +0 -0
  218. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0146_repository_retain_checkpoints.py +0 -0
  219. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0147_content_pulp_labels_gin.py +0 -0
  220. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0148_artifact_artifact_domain_size_index.py +0 -0
  221. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0149_distributedpublication.py +0 -0
  222. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0150_taskschedule_task_kwargs.py +0 -0
  223. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0151_upstreampulp_connect_timeout_and_more.py +0 -0
  224. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0152_alter_repositoryversion_content_ids.py +0 -0
  225. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0153_taskschedule_pulp_domain_alter_taskschedule_name_and_more.py +0 -0
  226. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0154_task_api_version.py +0 -0
  227. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0155_create_rel_path_domains.py +0 -0
  228. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0156_alter_contentartifact_relative_path_and_more.py +0 -0
  229. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0157_distribution_base_path_constraint.py +0 -0
  230. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0158_domain_default_content_guard.py +0 -0
  231. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0159_alter_contentartifact_relative_path_and_more.py +0 -0
  232. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/0160_envvarheadercontentguard.py +0 -0
  233. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/migrations/__init__.py +0 -0
  234. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/mime_types.py +0 -0
  235. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/modelresource.py +0 -0
  236. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/models/__init__.py +0 -0
  237. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/models/access_policy.py +0 -0
  238. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/models/acs.py +0 -0
  239. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/models/analytics.py +0 -0
  240. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/models/base.py +0 -0
  241. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/models/content.py +0 -0
  242. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/models/domain.py +0 -0
  243. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/models/exporter.py +0 -0
  244. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/models/fields.py +0 -0
  245. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/models/generic.py +0 -0
  246. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/models/importer.py +0 -0
  247. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/models/openpgp.py +0 -0
  248. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/models/progress.py +0 -0
  249. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/models/replica.py +0 -0
  250. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/models/repository.py +0 -0
  251. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/models/role.py +0 -0
  252. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/models/status.py +0 -0
  253. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/models/storage.py +0 -0
  254. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/models/task.py +0 -0
  255. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/models/upload.py +0 -0
  256. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/models/vulnerability_report.py +0 -0
  257. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/netutil.py +0 -0
  258. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/openpgp.py +0 -0
  259. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/protobuf/__init__.py +0 -0
  260. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/protobuf/analytics_pb2.py +0 -0
  261. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/pulp_hashlib.py +0 -0
  262. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/pulpcore_gunicorn_application.py +0 -0
  263. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/redis_connection.py +0 -0
  264. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/replica.py +0 -0
  265. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/response.py +0 -0
  266. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/role_util.py +0 -0
  267. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/serializers/__init__.py +0 -0
  268. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/serializers/access_policy.py +0 -0
  269. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/serializers/acs.py +0 -0
  270. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/serializers/base.py +0 -0
  271. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/serializers/content.py +0 -0
  272. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/serializers/domain.py +0 -0
  273. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/serializers/exporter.py +0 -0
  274. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/serializers/fields.py +0 -0
  275. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/serializers/importer.py +0 -0
  276. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/serializers/openpgp.py +0 -0
  277. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/serializers/orphans.py +0 -0
  278. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/serializers/progress.py +0 -0
  279. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/serializers/publication.py +0 -0
  280. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/serializers/purge.py +0 -0
  281. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/serializers/reclaim.py +0 -0
  282. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/serializers/repair.py +0 -0
  283. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/serializers/replica.py +0 -0
  284. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/serializers/repository.py +0 -0
  285. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/serializers/status.py +0 -0
  286. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/serializers/task.py +0 -0
  287. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/serializers/upload.py +0 -0
  288. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/serializers/user.py +0 -0
  289. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/serializers/vulnerability_report.py +0 -0
  290. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/settings.py +0 -0
  291. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/tasks/__init__.py +0 -0
  292. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/tasks/analytics.py +0 -0
  293. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/tasks/base.py +0 -0
  294. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/tasks/datarepair.py +0 -0
  295. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/tasks/export.py +0 -0
  296. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/tasks/importer.py +0 -0
  297. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/tasks/migrate.py +0 -0
  298. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/tasks/orphan.py +0 -0
  299. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/tasks/purge.py +0 -0
  300. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/tasks/reclaim_space.py +0 -0
  301. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/tasks/replica.py +0 -0
  302. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/tasks/repository.py +0 -0
  303. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/tasks/telemetry.py +0 -0
  304. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/tasks/test.py +0 -0
  305. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/tasks/upload.py +0 -0
  306. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/templates/rest_framework/api.html +0 -0
  307. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/templatetags/__init__.py +0 -0
  308. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/templatetags/pulp_urls.py +0 -0
  309. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/urls.py +0 -0
  310. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/views/__init__.py +0 -0
  311. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/views/datarepair.py +0 -0
  312. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/views/importer.py +0 -0
  313. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/views/orphans.py +0 -0
  314. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/views/repair.py +0 -0
  315. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/views/status.py +0 -0
  316. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/viewsets/__init__.py +0 -0
  317. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/viewsets/access_policy.py +0 -0
  318. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/viewsets/acs.py +0 -0
  319. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/viewsets/base.py +0 -0
  320. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/viewsets/content.py +0 -0
  321. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/viewsets/custom_filters.py +0 -0
  322. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/viewsets/domain.py +0 -0
  323. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/viewsets/exporter.py +0 -0
  324. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/viewsets/importer.py +0 -0
  325. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/viewsets/openpgp.py +0 -0
  326. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/viewsets/orphans.py +0 -0
  327. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/viewsets/publication.py +0 -0
  328. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/viewsets/reclaim.py +0 -0
  329. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/viewsets/replica.py +0 -0
  330. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/viewsets/repository.py +0 -0
  331. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/viewsets/task.py +0 -0
  332. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/viewsets/upload.py +0 -0
  333. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/viewsets/user.py +0 -0
  334. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/viewsets/vulnerability_report.py +0 -0
  335. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/workload_identity/__init__.py +0 -0
  336. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/workload_identity/authentication.py +0 -0
  337. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/workload_identity/authz.py +0 -0
  338. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/workload_identity/backend.py +0 -0
  339. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/workload_identity/config.py +0 -0
  340. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/workload_identity/principal.py +0 -0
  341. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/workload_identity/rules.py +0 -0
  342. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/app/wsgi.py +0 -0
  343. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/backends.py +0 -0
  344. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/cache/__init__.py +0 -0
  345. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/constants.py +0 -0
  346. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/content/__init__.py +0 -0
  347. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/content/authentication.py +0 -0
  348. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/content/entrypoint.py +0 -0
  349. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/content/instrumentation.py +0 -0
  350. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/download/__init__.py +0 -0
  351. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/download/base.py +0 -0
  352. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/download/factory.py +0 -0
  353. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/download/file.py +0 -0
  354. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/download/http.py +0 -0
  355. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/exceptions/__init__.py +0 -0
  356. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/exceptions/base.py +0 -0
  357. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/exceptions/plugin.py +0 -0
  358. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/exceptions/validation.py +0 -0
  359. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/filters.py +0 -0
  360. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/metrics.py +0 -0
  361. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/middleware.py +0 -0
  362. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/migrations.py +0 -0
  363. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/openapi/__init__.py +0 -0
  364. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/openapi/hooks.py +0 -0
  365. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/__init__.py +0 -0
  366. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/access_policy.py +0 -0
  367. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/actions.py +0 -0
  368. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/apps.py +0 -0
  369. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/authentication/__init__.py +0 -0
  370. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/cache/__init__.py +0 -0
  371. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/constants.py +0 -0
  372. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/content.py +0 -0
  373. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/download/__init__.py +0 -0
  374. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/exceptions.py +0 -0
  375. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/files.py +0 -0
  376. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/find_url.py +0 -0
  377. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/importexport.py +0 -0
  378. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/migrations.py +0 -0
  379. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/modelresources.py +0 -0
  380. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/models/__init__.py +0 -0
  381. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/models/role.py +0 -0
  382. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/publication_utils.py +0 -0
  383. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/pulp_hashlib.py +0 -0
  384. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/replica.py +0 -0
  385. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/repo_version_utils.py +0 -0
  386. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/responses.py +0 -0
  387. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/serializers/__init__.py +0 -0
  388. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/serializers/content.py +0 -0
  389. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/stages/__init__.py +0 -0
  390. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/stages/api.py +0 -0
  391. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/stages/artifact_stages.py +0 -0
  392. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/stages/content_stages.py +0 -0
  393. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/stages/declarative_version.py +0 -0
  394. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/stages/models.py +0 -0
  395. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/storage.py +0 -0
  396. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/sync.py +0 -0
  397. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/tasking.py +0 -0
  398. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/util.py +0 -0
  399. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/viewsets/__init__.py +0 -0
  400. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/plugin/viewsets/content.py +0 -0
  401. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/pytest_plugin.py +0 -0
  402. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/responses.py +0 -0
  403. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tasking/__init__.py +0 -0
  404. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tasking/_util.py +0 -0
  405. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tasking/entrypoint.py +0 -0
  406. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tasking/kafka.py +0 -0
  407. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tasking/redis_locks.py +0 -0
  408. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tasking/redis_tasks.py +0 -0
  409. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tasking/redis_worker.py +0 -0
  410. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tasking/storage.py +0 -0
  411. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tasking/tasks.py +0 -0
  412. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tasking/worker.py +0 -0
  413. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/__init__.py +0 -0
  414. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/__init__.py +0 -0
  415. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/__init__.py +0 -0
  416. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/test_access_policy.py +0 -0
  417. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/test_api_docs.py +0 -0
  418. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/test_api_root_rewrite.py +0 -0
  419. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/test_artifact_distribution.py +0 -0
  420. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/test_auth.py +0 -0
  421. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/test_correlation_id.py +0 -0
  422. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/test_crd_artifacts.py +0 -0
  423. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/test_crud_domains.py +0 -0
  424. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/test_filter.py +0 -0
  425. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/test_login.py +0 -0
  426. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/test_openapi_schema.py +0 -0
  427. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/test_openpgp.py +0 -0
  428. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/test_replication.py +0 -0
  429. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/test_repos.py +0 -0
  430. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/test_role.py +0 -0
  431. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/test_root_endpoint.py +0 -0
  432. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/test_scoping.py +0 -0
  433. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/test_signing_service.py +0 -0
  434. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/test_status.py +0 -0
  435. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/test_task_purge.py +0 -0
  436. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/test_tasking.py +0 -0
  437. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/test_upload.py +0 -0
  438. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/test_users_groups.py +0 -0
  439. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/test_v4_status.py +0 -0
  440. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/using_plugin/__init__.py +0 -0
  441. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/using_plugin/test_checkpoint.py +0 -0
  442. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/using_plugin/test_content_access.py +0 -0
  443. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/using_plugin/test_content_cache.py +0 -0
  444. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/using_plugin/test_content_delivery.py +0 -0
  445. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/using_plugin/test_content_directory.py +0 -0
  446. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/using_plugin/test_content_path.py +0 -0
  447. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/using_plugin/test_content_promotion.py +0 -0
  448. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/using_plugin/test_contentguard.py +0 -0
  449. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/using_plugin/test_crud_repos.py +0 -0
  450. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/using_plugin/test_distributions.py +0 -0
  451. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/using_plugin/test_filesystemexport.py +0 -0
  452. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/using_plugin/test_labels.py +0 -0
  453. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/using_plugin/test_migrate.py +0 -0
  454. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/using_plugin/test_orphans.py +0 -0
  455. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/using_plugin/test_pagination.py +0 -0
  456. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/using_plugin/test_prn.py +0 -0
  457. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/using_plugin/test_proxy.py +0 -0
  458. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/using_plugin/test_pulpimport.py +0 -0
  459. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/using_plugin/test_reclaim_disk_space.py +0 -0
  460. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/using_plugin/test_repair.py +0 -0
  461. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/using_plugin/test_repo_versions.py +0 -0
  462. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/using_plugin/test_tasks.py +0 -0
  463. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/api/using_plugin/test_unlinking_repo.py +0 -0
  464. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/assets/__init__.py +0 -0
  465. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/content_with_coverage.py +0 -0
  466. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/functional/utils.py +0 -0
  467. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/performance/__init__.py +0 -0
  468. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/performance/test_performance.py +0 -0
  469. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/__init__.py +0 -0
  470. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/conftest.py +0 -0
  471. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/content/__init__.py +0 -0
  472. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/content/test_handler.py +0 -0
  473. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/content/test_heartbeat.py +0 -0
  474. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/download/__init__.py +0 -0
  475. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/download/test_downloader_base.py +0 -0
  476. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/download/test_downloader_factory.py +0 -0
  477. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/download/test_downloader_file.py +0 -0
  478. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/metrics/__init__.py +0 -0
  479. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/metrics/conftest.py +0 -0
  480. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/metrics/test_aiohttp_instrumentation.py +0 -0
  481. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/metrics/test_django_instrumentation.py +0 -0
  482. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/migration/__init__.py +0 -0
  483. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/models/__init__.py +0 -0
  484. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/models/test_base.py +0 -0
  485. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/models/test_content.py +0 -0
  486. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/models/test_content_ids_migration.py +0 -0
  487. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/models/test_distribution.py +0 -0
  488. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/models/test_remote.py +0 -0
  489. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/models/test_repository.py +0 -0
  490. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/models/test_task.py +0 -0
  491. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/roles/__init__.py +0 -0
  492. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/roles/test_adjust_roles.py +0 -0
  493. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/roles/test_roles.py +0 -0
  494. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/serializers/__init__.py +0 -0
  495. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/serializers/test_base.py +0 -0
  496. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/serializers/test_domain.py +0 -0
  497. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/serializers/test_fields.py +0 -0
  498. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/serializers/test_orphans_cleanup.py +0 -0
  499. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/serializers/test_pulpexport.py +0 -0
  500. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/serializers/test_repository.py +0 -0
  501. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/serializers/test_user.py +0 -0
  502. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/stages/__init__.py +0 -0
  503. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/stages/test_artifactdownloader.py +0 -0
  504. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/stages/test_resource_budget.py +0 -0
  505. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/stages/test_stages.py +0 -0
  506. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/tasking/__init__.py +0 -0
  507. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/tasking/test_delete_tasks.py +0 -0
  508. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/tasking/test_missing_worker_cleanup.py +0 -0
  509. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/tasking/test_orphan_redis_locks.py +0 -0
  510. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/tasking/test_redis_fetch_task.py +0 -0
  511. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/tasking/test_waiting_tasks_metric.py +0 -0
  512. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/test_cache.py +0 -0
  513. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/test_chunked_file.py +0 -0
  514. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/test_content_guard.py +0 -0
  515. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/test_fetch_task_hol_blocking.py +0 -0
  516. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/test_files.py +0 -0
  517. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/test_gpg_verify.py +0 -0
  518. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/test_import_checks.py +0 -0
  519. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/test_list_signing_services_command.py +0 -0
  520. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/test_middleware.py +0 -0
  521. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/test_pulp_urls.py +0 -0
  522. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/test_replica.py +0 -0
  523. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/test_settings.py +0 -0
  524. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/test_util.py +0 -0
  525. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/test_viewsets.py +0 -0
  526. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/viewsets/__init__.py +0 -0
  527. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/viewsets/test_viewset_base.py +0 -0
  528. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/workload_identity/__init__.py +0 -0
  529. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore/tests/unit/workload_identity/test_workload_identity.py +0 -0
  530. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore.egg-info/entry_points.txt +0 -0
  531. {pulpcore-3.120.0 → pulpcore-3.121.0}/pulpcore.egg-info/top_level.txt +0 -0
  532. {pulpcore-3.120.0 → pulpcore-3.121.0}/setup.cfg +0 -0
  533. {pulpcore-3.120.0 → pulpcore-3.121.0}/test_requirements.txt +0 -0
  534. {pulpcore-3.120.0 → pulpcore-3.121.0}/unittest_requirements.txt +0 -0
@@ -8,6 +8,37 @@
8
8
 
9
9
  [//]: # (towncrier release notes start)
10
10
 
11
+ ## 3.121.0 (2026-10-06) {: #3.121.0 }
12
+
13
+ ### REST API {: #3.121.0-rest-api }
14
+
15
+ #### Features {: #3.121.0-rest-api-feature }
16
+
17
+ - Added `ETag`/`If-None-Match` and `Last-Modified`/`If-Modified-Since` (`304 Not Modified`) support on content-app responses so edge caches can revalidate without re-downloading.
18
+ [#7929](https://github.com/pulp/pulpcore/issues/7929)
19
+
20
+ #### Bugfixes {: #3.121.0-rest-api-bugfix }
21
+
22
+ - Avoid loading repository version content IDs when serving fallback content during the grace period.
23
+ - Fixed vulnerability report rescans to update existing reports.
24
+
25
+ ### Plugin API {: #3.121.0-plugin-api }
26
+
27
+ No significant changes.
28
+
29
+ ### Pulp File {: #3.121.0-pulp-file }
30
+
31
+ #### Bugfixes {: #3.121.0-pulp-file-bugfix }
32
+
33
+ - Fixed `optimize` in file sync to honor the value `False`.
34
+ [#8141](https://github.com/pulp/pulpcore/issues/8141)
35
+
36
+ ### Pulp Cert Guard {: #3.121.0-pulp-cert-guard }
37
+
38
+ No significant changes.
39
+
40
+ ---
41
+
11
42
  ## 3.120.0 (2026-09-29) {: #3.120.0 }
12
43
 
13
44
  ### REST API {: #3.120.0-rest-api }
@@ -40,6 +71,30 @@ No significant changes.
40
71
 
41
72
  ---
42
73
 
74
+ ## 3.119.2 (2026-09-29) {: #3.119.2 }
75
+
76
+ ### REST API {: #3.119.2-rest-api }
77
+
78
+ #### Bugfixes {: #3.119.2-rest-api-bugfix }
79
+
80
+ - Improved the performance of the latest publication lookup when serving content
81
+ from a repository-backed distribution.
82
+ [#1995](https://github.com/pulp/pulpcore/issues/1995)
83
+
84
+ ### Plugin API {: #3.119.2-plugin-api }
85
+
86
+ No significant changes.
87
+
88
+ ### Pulp File {: #3.119.2-pulp-file }
89
+
90
+ No significant changes.
91
+
92
+ ### Pulp Cert Guard {: #3.119.2-pulp-cert-guard }
93
+
94
+ No significant changes.
95
+
96
+ ---
97
+
43
98
  ## 3.119.1 (2026-09-23) {: #3.119.1 }
44
99
 
45
100
  ### REST API {: #3.119.1-rest-api }
@@ -1218,6 +1273,28 @@ No significant changes.
1218
1273
 
1219
1274
  ---
1220
1275
 
1276
+ ## 3.105.21 (2026-10-01) {: #3.105.21 }
1277
+
1278
+ ### REST API {: #3.105.21-rest-api }
1279
+
1280
+ #### Bugfixes {: #3.105.21-rest-api-bugfix }
1281
+
1282
+ - Preserve OpenPGP verification compatibility for failed signatures and fix key ID calculation for OpenPGP v6.
1283
+
1284
+ ### Plugin API {: #3.105.21-plugin-api }
1285
+
1286
+ No significant changes.
1287
+
1288
+ ### Pulp File {: #3.105.21-pulp-file }
1289
+
1290
+ No significant changes.
1291
+
1292
+ ### Pulp Cert Guard {: #3.105.21-pulp-cert-guard }
1293
+
1294
+ No significant changes.
1295
+
1296
+ ---
1297
+
1221
1298
  ## 3.105.20 (2026-09-23) {: #3.105.20 }
1222
1299
 
1223
1300
  ### REST API {: #3.105.20-rest-api }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pulpcore
3
- Version: 3.120.0
3
+ Version: 3.121.0
4
4
  Summary: Pulp Django Application and Related Modules
5
5
  Author-email: Pulp Team <pulp-list@redhat.com>
6
6
  License-Expression: GPL-2.0-or-later
@@ -42,9 +42,9 @@ Requires-Dist: gunicorn<26.3.0,>=22.0
42
42
  Requires-Dist: jinja2<=3.1.6,>=3.1
43
43
  Requires-Dist: json_stream<2.6,>=2.3.2
44
44
  Requires-Dist: jq<1.13.0,>=1.6.0
45
- Requires-Dist: opentelemetry-api<1.45,>=1.27.0
46
- Requires-Dist: opentelemetry-sdk<1.45,>=1.27.0
47
- Requires-Dist: opentelemetry-exporter-otlp-proto-http<1.45,>=1.27.0
45
+ Requires-Dist: opentelemetry-api<1.46,>=1.27.0
46
+ Requires-Dist: opentelemetry-sdk<1.46,>=1.27.0
47
+ Requires-Dist: opentelemetry-exporter-otlp-proto-http<1.46,>=1.27.0
48
48
  Requires-Dist: protobuf<8.0,>=4.21.1
49
49
  Requires-Dist: pulp-glue<0.41,>=0.35.0
50
50
  Requires-Dist: PyOpenSSL<27.0,>=26.3.0
@@ -6,6 +6,6 @@ class PulpCertGuardPluginAppConfig(PulpPluginAppConfig):
6
6
 
7
7
  name = "pulp_certguard.app"
8
8
  label = "certguard"
9
- version = "3.120.0"
9
+ version = "3.121.0"
10
10
  python_package_name = "pulpcore"
11
11
  domain_compatible = True
@@ -8,6 +8,6 @@ class PulpFilePluginAppConfig(PulpPluginAppConfig):
8
8
 
9
9
  name = "pulp_file.app"
10
10
  label = "file"
11
- version = "3.120.0"
11
+ version = "3.121.0"
12
12
  python_package_name = "pulpcore"
13
13
  domain_compatible = True
@@ -7,7 +7,6 @@ from gettext import gettext as _
7
7
  from hashlib import sha256
8
8
  from urllib.parse import quote, urlparse, urlunparse
9
9
 
10
- from django.conf import settings
11
10
  from django.core.files import File
12
11
 
13
12
  from pulpcore.plugin.exceptions import SyncError
@@ -113,8 +112,6 @@ def synchronize(remote_pk, repository_pk, mirror, optimize=False, url=None, **kw
113
112
  remote = Remote.objects.get(pk=remote_pk).cast()
114
113
  repository = FileRepository.objects.get(pk=repository_pk)
115
114
 
116
- optimize = optimize or settings.FILE_SYNC_OPTIMIZATION
117
-
118
115
  if not remote.url:
119
116
  raise SyncError(_("A remote must have a url specified to synchronize."))
120
117
 
@@ -238,7 +238,7 @@ class PulpAppConfig(PulpPluginAppConfig):
238
238
  label = "core"
239
239
 
240
240
  # The version of this app
241
- version = "3.120.0"
241
+ version = "3.121.0"
242
242
 
243
243
  # The python package name providing this app
244
244
  python_package_name = "pulpcore"
@@ -868,7 +868,7 @@ class Distribution(MasterModel):
868
868
 
869
869
  def get_fallback_ca(self, path):
870
870
  """
871
- Return a ContentArtifact for path from the grace-period publication history, or None.
871
+ Return the ContentArtifact and RepositoryVersion for path from publication history, or None.
872
872
 
873
873
  Iterates DistributedPublication records for this distribution from newest to oldest,
874
874
  trying each publication until the path is found. Handles both pass-through and
@@ -883,6 +883,7 @@ class Distribution(MasterModel):
883
883
  .filter(distribution=self)
884
884
  .order_by("-pulp_created")
885
885
  .select_related("publication__repository_version")
886
+ .defer("publication__repository_version__content_ids")
886
887
  )
887
888
  for dp in recent_dp.iterator():
888
889
  pub = dp.publication
@@ -893,7 +894,7 @@ class Distribution(MasterModel):
893
894
  .first()
894
895
  )
895
896
  if ca is not None:
896
- return ca
897
+ return ca, pub.repository_version
897
898
  else:
898
899
  pa = (
899
900
  pub.published_artifact.select_related(
@@ -904,7 +905,7 @@ class Distribution(MasterModel):
904
905
  .first()
905
906
  )
906
907
  if pa is not None:
907
- return pa.content_artifact
908
+ return pa.content_artifact, pub.repository_version
908
909
  return None
909
910
 
910
911
  @hook(BEFORE_CREATE)
@@ -131,7 +131,9 @@ class VulnerabilityReportScanner:
131
131
  """
132
132
 
133
133
  vuln_report, created = await sync_to_async(VulnerabilityReport.objects.update_or_create)(
134
- vulns=vulns, pulp_domain=get_domain(), content=content
134
+ pulp_domain=get_domain(),
135
+ content=content,
136
+ defaults={"vulns": vulns},
135
137
  )
136
138
  await vuln_report.repo_versions.aadd(repo_version)
137
139
 
@@ -17,6 +17,7 @@ from django.apps import apps
17
17
  from django.conf import settings
18
18
  from django.db import connection
19
19
  from django.db.models import Model, UUIDField
20
+ from django.utils.http import parse_http_date
20
21
  from rest_framework.reverse import reverse as drf_reverse
21
22
  from rest_framework.serializers import ValidationError
22
23
 
@@ -714,6 +715,25 @@ def normalize_http_status(status):
714
715
  return ""
715
716
 
716
717
 
718
+ def check_request_was_modified(request, last_modified, etag=None):
719
+ if_none_match = request.headers.get("If-None-Match")
720
+ if_modified_since = request.headers.get("If-Modified-Since")
721
+
722
+ if not if_none_match and not (last_modified and if_modified_since):
723
+ return True
724
+
725
+ if if_none_match:
726
+ client_etags = [etag == client_etag.strip() for client_etag in if_none_match.split(",")]
727
+ return not any(client_etags)
728
+
729
+ try:
730
+ last_modified_ts = parse_http_date(last_modified)
731
+ if_modified_ts = parse_http_date(if_modified_since)
732
+ return last_modified_ts > if_modified_ts
733
+ except (TypeError, ValueError):
734
+ return True
735
+
736
+
717
737
  class HashingFileWriter(RawIOBase):
718
738
  """
719
739
  A file-like object that handles writing data to disk with simultaneous
@@ -3,8 +3,8 @@ import json
3
3
  import time
4
4
  from functools import wraps
5
5
 
6
- from aiohttp.web import FileResponse, HTTPSuccessful, Request, Response, StreamResponse
7
- from aiohttp.web_exceptions import HTTPException, HTTPFound, HTTPNotFound
6
+ from aiohttp.web import FileResponse, HTTPSuccessful, Request, Response
7
+ from aiohttp.web_exceptions import HTTPException, HTTPFound, HTTPNotFound, HTTPNotModified
8
8
  from django.conf import settings
9
9
  from django.http import FileResponse as ApiFileResponse
10
10
  from django.http import HttpResponse, HttpResponseRedirect
@@ -18,6 +18,7 @@ from pulpcore.app.redis_connection import (
18
18
  get_async_redis_connection,
19
19
  get_redis_connection,
20
20
  )
21
+ from pulpcore.app.util import check_request_was_modified
21
22
  from pulpcore.metrics import artifacts_size_counter
22
23
  from pulpcore.responses import ArtifactResponse
23
24
 
@@ -352,7 +353,7 @@ class AsyncContentCache(AsyncCache):
352
353
  await self.auth(request, self, bk)
353
354
  key = self.make_key(request)
354
355
  # Check cache
355
- response = await self.make_response(key, bk)
356
+ response = await self.make_response(key, bk, request)
356
357
  if response is None:
357
358
  # Cache miss, create new entry
358
359
  response = await self.make_entry(
@@ -373,7 +374,7 @@ class AsyncContentCache(AsyncCache):
373
374
  if isinstance(arg, Request):
374
375
  return arg
375
376
 
376
- async def make_response(self, key, base_key):
377
+ async def make_response(self, key, base_key, request=None):
377
378
  """Tries to find the cached entry and turn it into a proper response"""
378
379
  entry = await self.get(key, base_key)
379
380
  if not entry:
@@ -396,7 +397,16 @@ class AsyncContentCache(AsyncCache):
396
397
  # Bad entry, delete from cache
397
398
  await self.delete(key, base_key)
398
399
  return None
399
- response = self.RESPONSE_TYPES[response_type](**entry)
400
+
401
+ headers = entry.get("headers", {})
402
+ if request and not check_request_was_modified(
403
+ request, last_modified=headers.get("Last-Modified"), etag=headers.get("ETag")
404
+ ):
405
+ response = HTTPNotModified(
406
+ headers={key: headers[key] for key in ("Cache-Control", "ETag") if key in headers}
407
+ )
408
+ else:
409
+ response = self.RESPONSE_TYPES[response_type](**entry)
400
410
  response.headers.update({"X-PULP-CACHE": "HIT"})
401
411
  return response
402
412
 
@@ -404,13 +414,12 @@ class AsyncContentCache(AsyncCache):
404
414
  """Gets the response for the request and try to turn it into a cacheable entry"""
405
415
  try:
406
416
  response = await handler(*args, **kwargs)
407
- except (HTTPSuccessful, HTTPFound, HTTPNotFound) as e:
417
+ except (HTTPSuccessful, HTTPFound, HTTPNotFound, HTTPNotModified) as e:
408
418
  response = e
409
419
 
410
420
  original_response = response
411
- if isinstance(response, StreamResponse):
412
- if hasattr(response, "future_response"):
413
- response = response.future_response
421
+ if hasattr(response, "future_response"):
422
+ response = response.future_response
414
423
 
415
424
  entry = {"headers": dict(response.headers), "status": response.status}
416
425
 
@@ -18,10 +18,12 @@ from aiohttp.web_exceptions import (
18
18
  HTTPFound,
19
19
  HTTPMovedPermanently,
20
20
  HTTPNotFound,
21
+ HTTPNotModified,
21
22
  HTTPRequestRangeNotSatisfiable,
22
23
  )
23
24
  from asgiref.sync import sync_to_async
24
25
  from django.utils import timezone
26
+ from django.utils.http import http_date
25
27
  from multidict import CIMultiDict
26
28
  from yarl import URL
27
29
 
@@ -57,6 +59,7 @@ from pulpcore.app.models import ( # noqa: E402
57
59
  )
58
60
  from pulpcore.app.util import ( # noqa: E402
59
61
  cache_key,
62
+ check_request_was_modified,
60
63
  get_domain,
61
64
  )
62
65
  from pulpcore.cache import AsyncContentCache # noqa: E402
@@ -69,6 +72,12 @@ from pulpcore.metrics import artifacts_size_counter # noqa: E402
69
72
  log = logging.getLogger(__name__)
70
73
  _current_distribution = ContextVar("current_distribution", default=None)
71
74
 
75
+ # The "shared cache" (cdn/edge) should always ask pulp if their cache is still valid
76
+ EDGE_CACHE_CONTROL = "public, max-age=0, must-revalidate"
77
+
78
+ # Tell HTTP caches not to store redirects containing signed URLs.
79
+ NO_STORE_EDGE_CACHE_CONTROL = "no-store"
80
+
72
81
 
73
82
  class PathNotResolved(HTTPNotFound):
74
83
  """
@@ -536,6 +545,8 @@ class Handler:
536
545
  if content_type:
537
546
  headers["Content-Type"] = content_type
538
547
 
548
+ headers["Cache-Control"] = EDGE_CACHE_CONTROL
549
+
539
550
  # Let plugin-Distribution set headers for this path if it wants.
540
551
  if distribution:
541
552
  headers.update(distribution.content_headers_for(path))
@@ -594,6 +605,48 @@ class Handler:
594
605
  sizes=sizes,
595
606
  )
596
607
 
608
+ @staticmethod
609
+ async def _set_last_modified_header(
610
+ headers,
611
+ last_modified: datetime | None = None,
612
+ ca=None,
613
+ rv=None,
614
+ ):
615
+ """Add the last-modified header to the response headers if not already present.
616
+
617
+ Pulp doesnt track "content served by a distribution" over time, so we need to use some
618
+ heuristics here. Lets call hypothesis 1 (H1) the common case where the distribution D is
619
+ serving content from RVs monotonically (either auto-publish, or something else) and that
620
+ the handler found a ContentArtifact (CA) matching the path for a request.
621
+
622
+ If H1 is true, we can use the repository version history as the distributed content history.
623
+ In other words, we can use the following strategy for establishing last-modified for the
624
+ path/resource in the request with a matching CA/RV:
625
+
626
+ Given a CA is provided with its RepositoryVersion (RV_n), find the earliest version RV_k
627
+ such that CA is in RV_k and use that timestamp as last-modified.
628
+
629
+ If H1 is not true, (e.g the distribution rolled back the RV it serves, changed repository, etc)
630
+ then this can produce incorrect last_modified results (e.g, say resource dist/path/to/resource
631
+ was not modified, when in fact it was).
632
+ """
633
+
634
+ def _find_repo_add_time():
635
+ cpk = ca.content_id
636
+ rc = rv._content_relationships().filter(content_id=cpk).first()
637
+ return rc.pulp_created if rc else rv.pulp_created
638
+
639
+ if "Last-Modified" not in headers:
640
+ if last_modified is None and ca and rv:
641
+ last_modified = await sync_to_async(_find_repo_add_time)()
642
+
643
+ if last_modified is not None:
644
+ headers["Last-Modified"] = http_date(last_modified.timestamp())
645
+
646
+ @staticmethod
647
+ def _set_etag_headers(headers, sha):
648
+ headers["ETag"] = f'"{sha}"'
649
+
597
650
  async def list_directory(self, repo_version, publication, path):
598
651
  """
599
652
  Generate a set with directory listing of the path.
@@ -734,6 +787,13 @@ class Handler:
734
787
  content_handler_result = await sync_to_async(distro.content_handler)(original_rel_path)
735
788
  if content_handler_result is not None:
736
789
  if isinstance(content_handler_result, ContentArtifact):
790
+ # infer the RV which CA returned by content handler probably belongs to
791
+ __, rv_candidate, __ = await sync_to_async(
792
+ distro.get_repository_publication_and_version
793
+ )()
794
+ await self._set_last_modified_header(
795
+ headers, ca=content_handler_result, rv=rv_candidate
796
+ )
737
797
  if content_handler_result.artifact:
738
798
  return await self._serve_content_artifact(
739
799
  content_handler_result, headers, request
@@ -769,6 +829,10 @@ class Handler:
769
829
  raise HTTPMovedPermanently(f"{request.path}/")
770
830
  original_rel_path = index_path
771
831
  headers = self.response_headers(original_rel_path, distro)
832
+ # last-modified heuristic assumes distribution doesn't rollback to older publications
833
+ await self._set_last_modified_header(
834
+ headers, last_modified=publication.pulp_created
835
+ )
772
836
  except ObjectDoesNotExist:
773
837
  dir_list, dates, sizes = await self.list_directory(None, publication, rel_path)
774
838
  dir_list.update(
@@ -798,6 +862,8 @@ class Handler:
798
862
  except ObjectDoesNotExist:
799
863
  pass
800
864
  else:
865
+ publication_rv = publication.repository_version
866
+ await self._set_last_modified_header(headers, ca=ca, rv=publication_rv)
801
867
  if ca.artifact:
802
868
  return await self._serve_content_artifact(ca, headers, request)
803
869
  else:
@@ -827,6 +893,8 @@ class Handler:
827
893
  except ObjectDoesNotExist:
828
894
  pass
829
895
  else:
896
+ publication_rv = publication.repository_version
897
+ await self._set_last_modified_header(headers, ca=ca, rv=publication_rv)
830
898
  if ca.artifact:
831
899
  return await self._serve_content_artifact(ca, headers, request)
832
900
  else:
@@ -836,8 +904,10 @@ class Handler:
836
904
 
837
905
  # Grace-period fallback: serve from a recently-superseded publication
838
906
  if distro.SERVE_FROM_PUBLICATION:
839
- ca = await sync_to_async(distro.get_fallback_ca)(original_rel_path)
840
- if ca is not None:
907
+ fallback = await sync_to_async(distro.get_fallback_ca)(original_rel_path)
908
+ if fallback is not None:
909
+ ca, fallback_rv = fallback
910
+ await self._set_last_modified_header(headers, ca=ca, rv=fallback_rv)
841
911
  if ca.artifact:
842
912
  return await self._serve_content_artifact(ca, headers, request)
843
913
  else:
@@ -885,6 +955,7 @@ class Handler:
885
955
  except ObjectDoesNotExist:
886
956
  pass
887
957
  else:
958
+ await self._set_last_modified_header(headers, ca=ca, rv=repo_version)
888
959
  if ca.artifact:
889
960
  return await self._serve_content_artifact(ca, headers, request)
890
961
  else:
@@ -1130,6 +1201,12 @@ class Handler:
1130
1201
 
1131
1202
  return URL(storage_url, encoded=True)
1132
1203
 
1204
+ def _build_redirect_response(**kwargs):
1205
+ url = _build_url(**kwargs)
1206
+ # Contains signed URL. Tell external caches to not store this
1207
+ headers["Cache-Control"] = NO_STORE_EDGE_CACHE_CONTROL
1208
+ return HTTPFound(url, headers=headers)
1209
+
1133
1210
  artifact_file = content_artifact.artifact.file
1134
1211
  artifact_name = artifact_file.name
1135
1212
  domain = get_domain()
@@ -1147,12 +1224,12 @@ class Handler:
1147
1224
  "storages.backends.s3boto3.S3Boto3Storage",
1148
1225
  "storages.backends.s3.S3Storage",
1149
1226
  ):
1150
- return HTTPFound(_build_url(http_method=request.method), headers=headers)
1227
+ return _build_redirect_response(http_method=request.method)
1151
1228
  elif domain.storage_class in (
1152
1229
  "storages.backends.azure_storage.AzureStorage",
1153
1230
  "storages.backends.gcloud.GoogleCloudStorage",
1154
1231
  ):
1155
- return HTTPFound(_build_url(), headers=headers)
1232
+ return _build_redirect_response()
1156
1233
  else:
1157
1234
  raise NotImplementedError()
1158
1235
 
@@ -1177,8 +1254,10 @@ class Handler:
1177
1254
  Returns:
1178
1255
  The [aiohttp.web.FileResponse][] for the file.
1179
1256
  """
1180
- artifact_file = content_artifact.artifact.file
1257
+ artifact = content_artifact.artifact
1258
+ artifact_file = artifact.file
1181
1259
  content_length = artifact_file.size
1260
+ self._set_etag_headers(headers, artifact.sha256)
1182
1261
 
1183
1262
  try:
1184
1263
  range_start, range_stop = request.http_range.start, request.http_range.stop
@@ -1192,9 +1271,20 @@ class Handler:
1192
1271
  size = artifact_file.size or "*"
1193
1272
  raise HTTPRequestRangeNotSatisfiable(headers={"Content-Range": f"bytes */{size}"})
1194
1273
 
1274
+ response = self._build_response_from_content_artifact(content_artifact, headers, request)
1275
+
1276
+ if not check_request_was_modified(
1277
+ request, last_modified=headers.get("Last-Modified"), etag=headers.get("ETag")
1278
+ ):
1279
+ nmod_response = HTTPNotModified(
1280
+ headers={key: headers[key] for key in ("Cache-Control", "ETag") if key in headers}
1281
+ )
1282
+ if settings.CACHE_ENABLED:
1283
+ nmod_response.future_response = response
1284
+ raise nmod_response
1285
+
1195
1286
  artifacts_size_counter.add(content_length)
1196
1287
 
1197
- response = self._build_response_from_content_artifact(content_artifact, headers, request)
1198
1288
  if isinstance(response, HTTPFound):
1199
1289
  raise response
1200
1290
  else:
@@ -127,7 +127,7 @@ def test_task_schedule(task_schedule, pulpcore_bindings):
127
127
 
128
128
 
129
129
  @pytest.mark.parallel
130
- def test_task_schedule_domain(domain_factory, pulpcore_bindings):
130
+ def test_task_schedule_domain(domain_factory, pulpcore_bindings, monitor_task):
131
131
  """Test that a scheduled task dispatches in the TaskSchedule's domain, not the default."""
132
132
  domain = domain_factory()
133
133
  domain_name = domain.name
@@ -163,6 +163,7 @@ def test_task_schedule_domain(domain_factory, pulpcore_bindings):
163
163
  ts = task_schedules.results[0]
164
164
  assert f"/{domain_name}/" in ts.pulp_href
165
165
  assert f"/{domain_name}/" in ts.last_task
166
+ monitor_task(ts.last_task)
166
167
  task = pulpcore_bindings.TasksApi.read(ts.last_task)
167
168
  assert task.state == "completed"
168
169
  assert f"/{domain_name}/" in task.pulp_href