pulp-ansible 0.28.3__tar.gz → 0.28.4__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 (187) hide show
  1. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/CHANGES.md +8 -0
  2. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/PKG-INFO +1 -1
  3. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/__init__.py +1 -1
  4. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/galaxy/v3/views.py +18 -12
  5. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/collection/v3/test_collection.py +37 -12
  6. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible.egg-info/PKG-INFO +1 -1
  7. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pyproject.toml +2 -2
  8. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/COMMITMENT +0 -0
  9. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/COPYRIGHT +0 -0
  10. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/LICENSE +0 -0
  11. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/MANIFEST.in +0 -0
  12. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/README.rst +0 -0
  13. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/functest_requirements.txt +0 -0
  14. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/__init__.py +0 -0
  15. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/constants.py +0 -0
  16. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/downloaders.py +0 -0
  17. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/fields.py +0 -0
  18. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/galaxy/__init__.py +0 -0
  19. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/galaxy/mixins.py +0 -0
  20. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/galaxy/serializers.py +0 -0
  21. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/galaxy/v3/__init__.py +0 -0
  22. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/galaxy/v3/exceptions.py +0 -0
  23. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/galaxy/v3/filters.py +0 -0
  24. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/galaxy/v3/pagination.py +0 -0
  25. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/galaxy/v3/serializers.py +0 -0
  26. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/galaxy/v3/viewsets.py +0 -0
  27. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/galaxy/views.py +0 -0
  28. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/global_access_conditions.py +0 -0
  29. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/logutils.py +0 -0
  30. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/management/__init__.py +0 -0
  31. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/management/commands/__init__.py +0 -0
  32. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/management/commands/download-log.py +0 -0
  33. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0001_initial.py +0 -0
  34. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0001_initial_squashed_0040_ansiblerepository_keyring.py +0 -0
  35. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0002_advanced_collections.py +0 -0
  36. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0003_add_tags_and_collectionversion_fields.py +0 -0
  37. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0004_add_fulltext_search_indexes.py +0 -0
  38. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0005_collectionversion_is_highest.py +0 -0
  39. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0006_remove_whitelist_and_alter_collection_version_name.py +0 -0
  40. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0007_collectionversion_is_certified.py +0 -0
  41. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0008_collectionremote_requirements_file.py +0 -0
  42. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0009_collectionimport.py +0 -0
  43. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0010_ansible_related_names.py +0 -0
  44. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0011_collectionimport.py +0 -0
  45. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0012_auto_20190906_2253.py +0 -0
  46. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0013_pulp_fields.py +0 -0
  47. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0014_certification_enum.py +0 -0
  48. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0015_ansiblerepository.py +0 -0
  49. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0016_add_extension.py +0 -0
  50. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0017_increase_length_collectionversion_fields.py +0 -0
  51. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0018_fix_collection_relative_path.py +0 -0
  52. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0019_collection_token.py +0 -0
  53. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0020_auto_20200810_1926.py +0 -0
  54. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0021_rename_role_remote.py +0 -0
  55. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0022_URLField_to_CharField.py +0 -0
  56. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0023_alter_requirements_file_field.py +0 -0
  57. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0024_remove_collectionversion_certification.py +0 -0
  58. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0025_increase_collection_version_version_size.py +0 -0
  59. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0026_deprecation_per_repository.py +0 -0
  60. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0027_tag_length.py +0 -0
  61. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0028_collectionversion_namespace_length.py +0 -0
  62. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0029_manifest_and_files_json_fields.py +0 -0
  63. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0030_collectionversion_requires_ansible.py +0 -0
  64. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0031_ansiblerepository_last_synced_metadata_time.py +0 -0
  65. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0032_collectionremote_sync_dependencies.py +0 -0
  66. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0033_swap_distribution_model.py +0 -0
  67. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0034_handle_jsonfield_warnings.py +0 -0
  68. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0035_deprecation_content.py +0 -0
  69. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0036_update_repository_content.py +0 -0
  70. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0037_gitremote.py +0 -0
  71. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0038_collectionversionsignature.py +0 -0
  72. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0039_collectionremote_signed_only.py +0 -0
  73. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0040_ansiblerepository_keyring.py +0 -0
  74. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0041_alter_collectionversion_collection.py +0 -0
  75. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0042_ansiblerepository_gpgkey.py +0 -0
  76. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0043_alter_collectionversionsignature_data.py +0 -0
  77. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0044_alter_collectionremote_token.py +0 -0
  78. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0045_downloadlog.py +0 -0
  79. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0046_add_fulltext_search_fix.py +0 -0
  80. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0047_ansible_namespace.py +0 -0
  81. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0048_collectionversionmark.py +0 -0
  82. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0049_rbac_permissions.py +0 -0
  83. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0050_crossrepositorycollectionversionindex.py +0 -0
  84. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0051_cvindex_build.py +0 -0
  85. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0052_alter_ansiblecollectiondeprecated_content_ptr_and_more.py +0 -0
  86. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0053_collectiondownloadcount.py +0 -0
  87. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0054_split_collection_version_numbers.py +0 -0
  88. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0055_alter_collectionversion_version_alter_role_version.py +0 -0
  89. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0056_collectionversion_sha256.py +0 -0
  90. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0057_collectionversion_sha256_migrate.py +0 -0
  91. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0058_fix_0056_regression.py +0 -0
  92. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0059_collectionversion_unique_sha256.py +0 -0
  93. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0060_remove_collectionversion_unique_is_highest_and_more.py +0 -0
  94. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0061_collectionversion_new_tags.py +0 -0
  95. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0062_pivot_collectionversion_tags.py +0 -0
  96. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0063_domain_support.py +0 -0
  97. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0064_alter_collection_unique_together_and_more.py +0 -0
  98. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/0065_collectionversion_ansible_col_namespa_ea6f75_idx.py +0 -0
  99. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/migrations/__init__.py +0 -0
  100. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/modelresource.py +0 -0
  101. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/models.py +0 -0
  102. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/schema/__init__.py +0 -0
  103. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/schema/copy_config.json +0 -0
  104. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/serializers.py +0 -0
  105. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/settings.py +0 -0
  106. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/tasks/__init__.py +0 -0
  107. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/tasks/collections.py +0 -0
  108. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/tasks/collectionversion_index.py +0 -0
  109. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/tasks/copy.py +0 -0
  110. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/tasks/deletion.py +0 -0
  111. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/tasks/git.py +0 -0
  112. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/tasks/mark.py +0 -0
  113. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/tasks/roles.py +0 -0
  114. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/tasks/signature.py +0 -0
  115. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/tasks/test_tasks.py +0 -0
  116. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/tasks/upload.py +0 -0
  117. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/tasks/utils.py +0 -0
  118. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/urls.py +0 -0
  119. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/utils.py +0 -0
  120. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/viewsets.py +0 -0
  121. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/webserver_snippets/__init__.py +0 -0
  122. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/webserver_snippets/apache.conf +0 -0
  123. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/app/webserver_snippets/nginx.conf +0 -0
  124. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/pytest_plugin.py +0 -0
  125. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/__init__.py +0 -0
  126. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/__init__.py +0 -0
  127. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/__init__.py +0 -0
  128. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/collection/__init__.py +0 -0
  129. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/collection/test_copy_and_move.py +0 -0
  130. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/collection/test_crud_collection_versions.py +0 -0
  131. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/collection/test_marks.py +0 -0
  132. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/collection/test_remote.py +0 -0
  133. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/collection/test_signatures.py +0 -0
  134. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/collection/test_sync.py +0 -0
  135. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/collection/v3/__init__.py +0 -0
  136. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/collection/v3/test_client_configuration.py +0 -0
  137. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/collection/v3/test_collection_naming_edgecases.py +0 -0
  138. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/collection/v3/test_collection_version_search.py +0 -0
  139. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/collection/v3/test_content_guard.py +0 -0
  140. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/collection/v3/test_deletion.py +0 -0
  141. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/collection/v3/test_deprecation.py +0 -0
  142. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/collection/v3/test_namespace.py +0 -0
  143. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/collection/v3/test_proxy.py +0 -0
  144. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/collection/v3/test_redirects.py +0 -0
  145. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/collection/v3/test_serializers.py +0 -0
  146. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/collection/v3/test_sync.py +0 -0
  147. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/git/__init__.py +0 -0
  148. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/git/test_crud_remotes.py +0 -0
  149. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/git/test_sync.py +0 -0
  150. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/role/__init__.py +0 -0
  151. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/role/test_crud_distribution.py +0 -0
  152. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/role/test_crud_remote.py +0 -0
  153. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/role/test_sync.py +0 -0
  154. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/test_domain.py +0 -0
  155. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/test_export_import.py +0 -0
  156. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/api/test_rbac.py +0 -0
  157. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/cli/__init__.py +0 -0
  158. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/cli/test_collection_download_count.py +0 -0
  159. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/cli/test_collection_install.py +0 -0
  160. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/cli/test_collection_upload.py +0 -0
  161. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/cli/test_role_install.py +0 -0
  162. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/constants.py +0 -0
  163. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/functional/utils.py +0 -0
  164. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/performance/__init__.py +0 -0
  165. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/performance/create_repos_with_collections.py +0 -0
  166. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/performance/fast_load_collections.py +0 -0
  167. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/performance/generate_collections.py +0 -0
  168. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/performance/promote.py +0 -0
  169. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/unit/__init__.py +0 -0
  170. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/unit/migrations/__init__.py +0 -0
  171. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/unit/migrations/conftest.py +0 -0
  172. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/unit/migrations/test_0057_collection_version_sha256_migrate.py +0 -0
  173. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/unit/migrations/test_x_repo_search_migration.py +0 -0
  174. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/unit/test_cv_index.py +0 -0
  175. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/unit/test_models.py +0 -0
  176. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/unit/test_search.py +0 -0
  177. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/unit/test_serializers.py +0 -0
  178. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/unit/test_tasks.py +0 -0
  179. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible/tests/unit/utils.py +0 -0
  180. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible.egg-info/SOURCES.txt +0 -0
  181. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible.egg-info/dependency_links.txt +0 -0
  182. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible.egg-info/entry_points.txt +0 -0
  183. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible.egg-info/requires.txt +0 -0
  184. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/pulp_ansible.egg-info/top_level.txt +0 -0
  185. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/setup.cfg +0 -0
  186. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/test_requirements.txt +0 -0
  187. {pulp_ansible-0.28.3 → pulp_ansible-0.28.4}/unittest_requirements.txt +0 -0
@@ -8,6 +8,14 @@
8
8
 
9
9
  [//]: # (towncrier release notes start)
10
10
 
11
+ ## 0.28.4 (2026-02-06) {: #0.28.4 }
12
+
13
+ #### Bugfixes {: #0.28.4-bugfix }
14
+
15
+ - Fixed a 500 error when attempting to download a collection with and invalid name.
16
+
17
+ ---
18
+
11
19
  ## 0.28.3 (2026-01-27) {: #0.28.3 }
12
20
 
13
21
  #### Bugfixes {: #0.28.3-bugfix }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pulp-ansible
3
- Version: 0.28.3
3
+ Version: 0.28.4
4
4
  Summary: Pulp plugin to manage Ansible content, e.g. roles
5
5
  Author-email: Pulp Ansible Plugin Project Developers <pulp-dev@redhat.com>
6
6
  Project-URL: Homepage, https://pulpproject.org
@@ -8,6 +8,6 @@ class PulpAnsiblePluginAppConfig(PulpPluginAppConfig):
8
8
 
9
9
  name = "pulp_ansible.app"
10
10
  label = "ansible"
11
- version = "0.28.3"
11
+ version = "0.28.4"
12
12
  python_package_name = "pulp-ansible"
13
13
  domain_compatible = True
@@ -2,6 +2,7 @@ from datetime import datetime
2
2
  from gettext import gettext as _
3
3
  import semantic_version
4
4
  import base64
5
+ import re
5
6
 
6
7
  from django.db import DatabaseError, IntegrityError
7
8
  from django.db.models import F, OuterRef, Exists, Subquery, Prefetch
@@ -633,7 +634,7 @@ class CollectionArtifactDownloadView(GalaxyAuthMixin, views.APIView, AnsibleDist
633
634
  DEFAULT_ACCESS_POLICY = _PERMISSIVE_ACCESS_POLICY
634
635
 
635
636
  @staticmethod
636
- def log_download(request, filename, distro_base_path):
637
+ def log_download(request, namespace, name, version, distro_base_path):
637
638
  """Log the download of the collection version."""
638
639
 
639
640
  def _get_org_id(request):
@@ -651,7 +652,7 @@ class CollectionArtifactDownloadView(GalaxyAuthMixin, views.APIView, AnsibleDist
651
652
 
652
653
  return identity["internal"]["org_id"]
653
654
 
654
- # Gettung user IP
655
+ # Get user IP
655
656
  x_forwarded_for = request.META.get("HTTP_X_FORWARDED_FOR")
656
657
  ip = x_forwarded_for.split(",")[0] if x_forwarded_for else request.META.get("REMOTE_ADDR")
657
658
 
@@ -662,13 +663,9 @@ class CollectionArtifactDownloadView(GalaxyAuthMixin, views.APIView, AnsibleDist
662
663
  distribution.repository_version or distribution.repository.latest_version()
663
664
  )
664
665
 
665
- # Getting collection version
666
- ns, name, version = filename.split("-", maxsplit=2)
667
- # Get off the ending .tar.gz
668
- version = ".".join(version.split(".")[:3])
669
666
  collection_version = get_object_or_404(
670
667
  CollectionVersion.objects.filter(pk__in=repository_version.content),
671
- namespace=ns,
668
+ namespace=namespace,
672
669
  name=name,
673
670
  version=version,
674
671
  )
@@ -693,11 +690,10 @@ class CollectionArtifactDownloadView(GalaxyAuthMixin, views.APIView, AnsibleDist
693
690
  return
694
691
  raise
695
692
 
696
- def count_download(filename):
697
- ns, name, _ = filename.split("-", maxsplit=2)
693
+ def count_download(namespace, name):
698
694
  try:
699
695
  collection, created = CollectionDownloadCount.objects.get_or_create(
700
- namespace=ns, name=name, defaults={"download_count": 1}
696
+ namespace=namespace, name=name, defaults={"download_count": 1}
701
697
  )
702
698
  if not created:
703
699
  collection.download_count = F("download_count") + 1
@@ -728,13 +724,23 @@ class CollectionArtifactDownloadView(GalaxyAuthMixin, views.APIView, AnsibleDist
728
724
  filename=self.kwargs["filename"],
729
725
  )
730
726
 
727
+ match = re.fullmatch(
728
+ r"(?P<namespace>\w+)-(?P<name>\w+)-(?P<version>[\w.-]+)\.tar\.gz",
729
+ self.kwargs["filename"],
730
+ )
731
+ if not match:
732
+ raise NotFound()
733
+ namespace = match.group("namespace")
734
+ name = match.group("name")
735
+ version = match.group("version")
736
+
731
737
  if settings.ANSIBLE_COLLECT_DOWNLOAD_LOG:
732
738
  CollectionArtifactDownloadView.log_download(
733
- request, self.kwargs["filename"], distro_base_path
739
+ request, namespace, name, version, distro_base_path
734
740
  )
735
741
 
736
742
  if settings.ANSIBLE_COLLECT_DOWNLOAD_COUNT:
737
- CollectionArtifactDownloadView.count_download(self.kwargs["filename"])
743
+ CollectionArtifactDownloadView.count_download(namespace, name)
738
744
 
739
745
  if (
740
746
  distribution.content_guard
@@ -125,6 +125,13 @@ def collection_detail(http_session, collection_upload, pulp_dist, collection_art
125
125
  return response.json()
126
126
 
127
127
 
128
+ @pytest.fixture(scope="class")
129
+ def collection_highest_version(http_session, collection_detail):
130
+ response = http_session.get(collection_detail["highest_version"]["href"])
131
+ response.raise_for_status()
132
+ return response.json()
133
+
134
+
128
135
  @pytest.fixture(scope="class")
129
136
  def pulp_dist(ansible_repository_factory, ansible_distribution_factory):
130
137
  """Create an Ansible Distribution to simulate the automation hub environment for testing."""
@@ -298,34 +305,52 @@ class TestCollection:
298
305
  # # 'repository': 'http://github.example.com/orionuser1/skeleton',
299
306
  # # 'tags': ['collectiontest']},
300
307
 
301
- def test_collection_download(
308
+ def test_collection_download_metadata_unauthorized_fails(
302
309
  self,
303
310
  http_session,
304
311
  collection_detail,
305
- collection_artifact,
306
312
  ):
307
- """Test collection download URL.
308
-
309
- Should require authentication and redirect to a download location.
310
- """
311
313
  response = http_session.get(collection_detail["highest_version"]["href"], auth=NullAuth())
312
314
  assert response.status_code == 401
313
- response = http_session.get(collection_detail["highest_version"]["href"])
314
- response.raise_for_status()
315
- version = response.json()
316
315
 
316
+ def test_collection_download_redirects(
317
+ self,
318
+ http_session,
319
+ collection_highest_version,
320
+ collection_artifact,
321
+ ):
317
322
  # Artifact Download Endoint
318
- url = version["download_url"]
323
+ url = collection_highest_version["download_url"]
319
324
 
320
325
  with open(collection_artifact.filename, "rb") as fp:
321
326
  tarball = fp.read()
322
327
 
323
- response = http_session.get(url, auth=NullAuth())
324
- assert response.status_code == 401
325
328
  response = http_session.get(url)
326
329
  assert response.status_code == 200, (url, response.request.headers)
327
330
  assert response.content == tarball
328
331
 
332
+ def test_collection_download_redirect_fails_unauthorized(
333
+ self,
334
+ http_session,
335
+ collection_highest_version,
336
+ ):
337
+ # Artifact Download Endoint
338
+ url = collection_highest_version["download_url"]
339
+
340
+ response = http_session.get(url, auth=NullAuth())
341
+ assert response.status_code == 401
342
+
343
+ def test_downloading_collection_with_bad_name_returns_not_found(
344
+ self,
345
+ http_session,
346
+ collection_highest_version,
347
+ ):
348
+ # Artifact Download Endoint, but we mess up the address.
349
+ url = collection_highest_version["download_url"].replace("-", "_")
350
+
351
+ response = http_session.get(url)
352
+ assert response.status_code == 404
353
+
329
354
  def test_collection_upload_repeat(
330
355
  self, http_session, ansible_collection_factory, pulp_dist, collection_upload
331
356
  ):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pulp-ansible
3
- Version: 0.28.3
3
+ Version: 0.28.4
4
4
  Summary: Pulp plugin to manage Ansible content, e.g. roles
5
5
  Author-email: Pulp Ansible Plugin Project Developers <pulp-dev@redhat.com>
6
6
  Project-URL: Homepage, https://pulpproject.org
@@ -7,7 +7,7 @@ build-backend = 'setuptools.build_meta'
7
7
 
8
8
  [project]
9
9
  name = "pulp-ansible"
10
- version = "0.28.3"
10
+ version = "0.28.4"
11
11
  description = "Pulp plugin to manage Ansible content, e.g. roles"
12
12
  readme = "README.rst"
13
13
  authors = [
@@ -99,7 +99,7 @@ ignore = [
99
99
  [tool.bumpversion]
100
100
  # This section is managed by the plugin template. Do not edit manually.
101
101
 
102
- current_version = "0.28.3"
102
+ current_version = "0.28.4"
103
103
  commit = false
104
104
  tag = false
105
105
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<alpha>0a)?(?P<patch>\\d+)(\\.(?P<release>[a-z]+))?"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes