django-bolt 0.2.7__tar.gz → 0.2.8__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.

Potentially problematic release.


This version of django-bolt might be problematic. Click here for more details.

Files changed (248) hide show
  1. {django_bolt-0.2.7 → django_bolt-0.2.8}/Cargo.lock +1 -1
  2. {django_bolt-0.2.7 → django_bolt-0.2.8}/Cargo.toml +1 -1
  3. {django_bolt-0.2.7 → django_bolt-0.2.8}/PKG-INFO +2 -1
  4. {django_bolt-0.2.7 → django_bolt-0.2.8}/pyproject.toml +2 -1
  5. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/__init__.py +1 -1
  6. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/api.py +27 -22
  7. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/middleware/__init__.py +2 -0
  8. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_compression.py +1 -2
  9. {django_bolt-0.2.7 → django_bolt-0.2.8}/.github/workflows/CI.yml +0 -0
  10. {django_bolt-0.2.7 → django_bolt-0.2.8}/.gitignore +0 -0
  11. {django_bolt-0.2.7 → django_bolt-0.2.8}/.python-version +0 -0
  12. {django_bolt-0.2.7 → django_bolt-0.2.8}/BENCHMARK_BASELINE.md +0 -0
  13. {django_bolt-0.2.7 → django_bolt-0.2.8}/BENCHMARK_DEV.md +0 -0
  14. {django_bolt-0.2.7 → django_bolt-0.2.8}/CLAUDE.md +0 -0
  15. {django_bolt-0.2.7 → django_bolt-0.2.8}/Makefile +0 -0
  16. {django_bolt-0.2.7 → django_bolt-0.2.8}/README.md +0 -0
  17. {django_bolt-0.2.7 → django_bolt-0.2.8}/TODO.md +0 -0
  18. {django_bolt-0.2.7 → django_bolt-0.2.8}/docs/ANNOTATION_GUIDE.md +0 -0
  19. {django_bolt-0.2.7 → django_bolt-0.2.8}/docs/ASYNC_DJANGO.md +0 -0
  20. {django_bolt-0.2.7 → django_bolt-0.2.8}/docs/CLASS_BASED_VIEWS.md +0 -0
  21. {django_bolt-0.2.7 → django_bolt-0.2.8}/docs/COMPRESSION.md +0 -0
  22. {django_bolt-0.2.7 → django_bolt-0.2.8}/docs/DEPENDENCY_INJECTION.md +0 -0
  23. {django_bolt-0.2.7 → django_bolt-0.2.8}/docs/DJANGO_ADMIN.md +0 -0
  24. {django_bolt-0.2.7 → django_bolt-0.2.8}/docs/EXCEPTIONS.md +0 -0
  25. {django_bolt-0.2.7 → django_bolt-0.2.8}/docs/GETTING_STARTED.md +0 -0
  26. {django_bolt-0.2.7 → django_bolt-0.2.8}/docs/GIL_OPTIMIZATION.md +0 -0
  27. {django_bolt-0.2.7 → django_bolt-0.2.8}/docs/LOGGING.md +0 -0
  28. {django_bolt-0.2.7 → django_bolt-0.2.8}/docs/MIDDLEWARE.md +0 -0
  29. {django_bolt-0.2.7 → django_bolt-0.2.8}/docs/OPENAPI.md +0 -0
  30. {django_bolt-0.2.7 → django_bolt-0.2.8}/docs/OPENAPI_ERROR_RESPONSES.md +0 -0
  31. {django_bolt-0.2.7 → django_bolt-0.2.8}/docs/OPENAPI_METADATA_IMPLEMENTATION.md +0 -0
  32. {django_bolt-0.2.7 → django_bolt-0.2.8}/docs/PAGINATION.md +0 -0
  33. {django_bolt-0.2.7 → django_bolt-0.2.8}/docs/PUBLISHING.md +0 -0
  34. {django_bolt-0.2.7 → django_bolt-0.2.8}/docs/README.md +0 -0
  35. {django_bolt-0.2.7 → django_bolt-0.2.8}/docs/RESPONSES.md +0 -0
  36. {django_bolt-0.2.7 → django_bolt-0.2.8}/docs/SECURITY.md +0 -0
  37. {django_bolt-0.2.7 → django_bolt-0.2.8}/docs/SERIALIZATION.md +0 -0
  38. {django_bolt-0.2.7 → django_bolt-0.2.8}/docs/TESTING_UTILITIES.md +0 -0
  39. {django_bolt-0.2.7 → django_bolt-0.2.8}/docs/favicon.png +0 -0
  40. {django_bolt-0.2.7 → django_bolt-0.2.8}/docs/icon.png +0 -0
  41. {django_bolt-0.2.7 → django_bolt-0.2.8}/docs/logo.png +0 -0
  42. {django_bolt-0.2.7 → django_bolt-0.2.8}/pytest.ini +0 -0
  43. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/_json.py +0 -0
  44. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/admin/__init__.py +0 -0
  45. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/admin/admin_detection.py +0 -0
  46. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/admin/asgi_bridge.py +0 -0
  47. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/admin/routes.py +0 -0
  48. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/admin/static.py +0 -0
  49. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/admin/static_routes.py +0 -0
  50. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/apps.py +0 -0
  51. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/async_collector.py +0 -0
  52. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/auth/__init__.py +0 -0
  53. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/auth/backends.py +0 -0
  54. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/auth/guards.py +0 -0
  55. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/auth/jwt_utils.py +0 -0
  56. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/auth/revocation.py +0 -0
  57. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/auth/token.py +0 -0
  58. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/binding.py +0 -0
  59. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/bootstrap.py +0 -0
  60. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/cli.py +0 -0
  61. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/decorators.py +0 -0
  62. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/dependencies.py +0 -0
  63. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/error_handlers.py +0 -0
  64. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/exceptions.py +0 -0
  65. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/health.py +0 -0
  66. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/logging/__init__.py +0 -0
  67. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/logging/config.py +0 -0
  68. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/logging/middleware.py +0 -0
  69. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/management/__init__.py +0 -0
  70. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/management/commands/__init__.py +0 -0
  71. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/management/commands/runbolt.py +0 -0
  72. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/middleware/compiler.py +0 -0
  73. {django_bolt-0.2.7/python/django_bolt → django_bolt-0.2.8/python/django_bolt/middleware}/compression.py +0 -0
  74. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/middleware/middleware.py +0 -0
  75. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/__init__.py +0 -0
  76. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/config.py +0 -0
  77. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/plugins.py +0 -0
  78. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/routes.py +0 -0
  79. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/schema_generator.py +0 -0
  80. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/__init__.py +0 -0
  81. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/base.py +0 -0
  82. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/callback.py +0 -0
  83. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/components.py +0 -0
  84. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/contact.py +0 -0
  85. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/discriminator.py +0 -0
  86. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/encoding.py +0 -0
  87. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/enums.py +0 -0
  88. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/example.py +0 -0
  89. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/external_documentation.py +0 -0
  90. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/header.py +0 -0
  91. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/info.py +0 -0
  92. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/license.py +0 -0
  93. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/link.py +0 -0
  94. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/media_type.py +0 -0
  95. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/oauth_flow.py +0 -0
  96. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/oauth_flows.py +0 -0
  97. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/open_api.py +0 -0
  98. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/operation.py +0 -0
  99. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/parameter.py +0 -0
  100. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/path_item.py +0 -0
  101. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/paths.py +0 -0
  102. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/reference.py +0 -0
  103. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/request_body.py +0 -0
  104. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/response.py +0 -0
  105. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/responses.py +0 -0
  106. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/schema.py +0 -0
  107. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/security_requirement.py +0 -0
  108. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/security_scheme.py +0 -0
  109. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/server.py +0 -0
  110. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/server_variable.py +0 -0
  111. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/tag.py +0 -0
  112. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/openapi/spec/xml.py +0 -0
  113. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/pagination.py +0 -0
  114. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/param_functions.py +0 -0
  115. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/params.py +0 -0
  116. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/request_parsing.py +0 -0
  117. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/responses.py +0 -0
  118. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/router.py +0 -0
  119. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/serialization.py +0 -0
  120. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/status_codes.py +0 -0
  121. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/testing/__init__.py +0 -0
  122. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/testing/client.py +0 -0
  123. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/testing/helpers.py +0 -0
  124. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/types.py +0 -0
  125. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/typing.py +0 -0
  126. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/django_bolt/views.py +0 -0
  127. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/README.md +0 -0
  128. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/bench/__init__.py +0 -0
  129. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/bench/admin.py +0 -0
  130. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/bench/api.py +0 -0
  131. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/bench/apps.py +0 -0
  132. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/bench/migrations/0001_initial.py +0 -0
  133. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/bench/migrations/__init__.py +0 -0
  134. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/bench/models.py +0 -0
  135. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/bench/tests.py +0 -0
  136. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/bench/views.py +0 -0
  137. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/manage.py +0 -0
  138. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/100B +0 -0
  139. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/100B.txt +0 -0
  140. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/100K +0 -0
  141. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/100K.json +0 -0
  142. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/100K.txt +0 -0
  143. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/10K +0 -0
  144. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/10K.json +0 -0
  145. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/10K.txt +0 -0
  146. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/1K +0 -0
  147. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/1K.json +0 -0
  148. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/1K.txt +0 -0
  149. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/1M +0 -0
  150. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/1M.json +0 -0
  151. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/1M.txt +0 -0
  152. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/500K +0 -0
  153. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/500K.json +0 -0
  154. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/500K.txt +0 -0
  155. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/5M +0 -0
  156. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/5M.json +0 -0
  157. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/5M.txt +0 -0
  158. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/FILE_UPLOAD_1K +0 -0
  159. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/FILE_UPLOAD_1K_HEADERS.json +0 -0
  160. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/FORM_URLENCODED_1K +0 -0
  161. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/FORM_URLENCODED_1K_HEADERS.json +0 -0
  162. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/MULTIPART_1K +0 -0
  163. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/MULTIPART_1K_HEADERS.json +0 -0
  164. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/__init__.py +0 -0
  165. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/objects.py +0 -0
  166. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/persons_100.json +0 -0
  167. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/persons_50.json +0 -0
  168. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/test_data/persons_500.json +0 -0
  169. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/testproject/__init__.py +0 -0
  170. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/testproject/api.py +0 -0
  171. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/testproject/asgi.py +0 -0
  172. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/testproject/settings.py +0 -0
  173. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/testproject/test_api.py +0 -0
  174. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/testproject/urls.py +0 -0
  175. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/testproject/views.py +0 -0
  176. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/testproject/wsgi.py +0 -0
  177. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/users/__init__.py +0 -0
  178. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/users/admin.py +0 -0
  179. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/users/api.py +0 -0
  180. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/users/apps.py +0 -0
  181. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/users/migrations/0001_initial.py +0 -0
  182. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/users/migrations/__init__.py +0 -0
  183. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/users/models.py +0 -0
  184. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/users/tests.py +0 -0
  185. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/example/users/views.py +0 -0
  186. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/__init__.py +0 -0
  187. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/admin_tests/__init__.py +0 -0
  188. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/admin_tests/conftest.py +0 -0
  189. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/admin_tests/test_admin_with_django.py +0 -0
  190. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/admin_tests/urls.py +0 -0
  191. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/cbv/__init__.py +0 -0
  192. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/cbv/test_class_views.py +0 -0
  193. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/cbv/test_class_views_django_orm.py +0 -0
  194. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/cbv/test_class_views_features.py +0 -0
  195. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/cbv/test_class_views_with_client.py +0 -0
  196. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/conftest.py +0 -0
  197. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_action_decorator.py +0 -0
  198. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_auth_secret_key.py +0 -0
  199. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_cors_implementation.py +0 -0
  200. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_decorator_syntax.py +0 -0
  201. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_error_handling.py +0 -0
  202. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_file_response.py +0 -0
  203. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_global_cors.py +0 -0
  204. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_guards_auth.py +0 -0
  205. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_guards_integration.py +0 -0
  206. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_health.py +0 -0
  207. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_integration_validation.py +0 -0
  208. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_json_validation.py +0 -0
  209. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_jwt_auth.py +0 -0
  210. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_jwt_token.py +0 -0
  211. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_logging.py +0 -0
  212. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_logging_merge.py +0 -0
  213. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_middleware.py +0 -0
  214. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_middleware_server.py +0 -0
  215. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_model_viewset.py +0 -0
  216. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_models.py +0 -0
  217. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_openapi_docs.py +0 -0
  218. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_openapi_metadata.py +0 -0
  219. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_pagination.py +0 -0
  220. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_parameter_validation.py +0 -0
  221. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_request_get.py +0 -0
  222. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_syntax.py +0 -0
  223. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_testing_utilities.py +0 -0
  224. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_testing_utilities_simple.py +0 -0
  225. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_types.py +0 -0
  226. {django_bolt-0.2.7 → django_bolt-0.2.8}/python/tests/test_viewset_unified.py +0 -0
  227. {django_bolt-0.2.7 → django_bolt-0.2.8}/scripts/benchmark.sh +0 -0
  228. {django_bolt-0.2.7 → django_bolt-0.2.8}/scripts/install_hey.sh +0 -0
  229. {django_bolt-0.2.7 → django_bolt-0.2.8}/scripts/release.sh +0 -0
  230. {django_bolt-0.2.7 → django_bolt-0.2.8}/src/direct_stream.rs +0 -0
  231. {django_bolt-0.2.7 → django_bolt-0.2.8}/src/error.rs +0 -0
  232. {django_bolt-0.2.7 → django_bolt-0.2.8}/src/handler.rs +0 -0
  233. {django_bolt-0.2.7 → django_bolt-0.2.8}/src/json.rs +0 -0
  234. {django_bolt-0.2.7 → django_bolt-0.2.8}/src/lib.rs +0 -0
  235. {django_bolt-0.2.7 → django_bolt-0.2.8}/src/metadata.rs +0 -0
  236. {django_bolt-0.2.7 → django_bolt-0.2.8}/src/middleware/auth.rs +0 -0
  237. {django_bolt-0.2.7 → django_bolt-0.2.8}/src/middleware/compression.rs +0 -0
  238. {django_bolt-0.2.7 → django_bolt-0.2.8}/src/middleware/mod.rs +0 -0
  239. {django_bolt-0.2.7 → django_bolt-0.2.8}/src/middleware/rate_limit.rs +0 -0
  240. {django_bolt-0.2.7 → django_bolt-0.2.8}/src/permissions.rs +0 -0
  241. {django_bolt-0.2.7 → django_bolt-0.2.8}/src/request.rs +0 -0
  242. {django_bolt-0.2.7 → django_bolt-0.2.8}/src/router.rs +0 -0
  243. {django_bolt-0.2.7 → django_bolt-0.2.8}/src/server.rs +0 -0
  244. {django_bolt-0.2.7 → django_bolt-0.2.8}/src/state.rs +0 -0
  245. {django_bolt-0.2.7 → django_bolt-0.2.8}/src/streaming.rs +0 -0
  246. {django_bolt-0.2.7 → django_bolt-0.2.8}/src/test_state.rs +0 -0
  247. {django_bolt-0.2.7 → django_bolt-0.2.8}/src/testing.rs +0 -0
  248. {django_bolt-0.2.7 → django_bolt-0.2.8}/src/validation.rs +0 -0
@@ -599,7 +599,7 @@ dependencies = [
599
599
 
600
600
  [[package]]
601
601
  name = "django-bolt"
602
- version = "0.2.7"
602
+ version = "0.2.8"
603
603
  dependencies = [
604
604
  "actix-cors",
605
605
  "actix-files",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "django-bolt"
3
- version = "0.2.7"
3
+ version = "0.2.8"
4
4
  edition = "2021"
5
5
  readme = "README.md"
6
6
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-bolt
3
- Version: 0.2.7
3
+ Version: 0.2.8
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -25,6 +25,7 @@ Requires-Dist: click>=8.1
25
25
  Requires-Dist: msgspec>=0.18
26
26
  Requires-Dist: multipart>=1.3
27
27
  Requires-Dist: pyjwt>=2.10.1
28
+ Requires-Dist: typing-extensions>=4.5.0
28
29
  Requires-Dist: uvloop>=0.22.1 ; sys_platform != 'win32'
29
30
  Requires-Dist: pyyaml>=6.0 ; extra == 'yaml'
30
31
  Provides-Extra: yaml
@@ -4,7 +4,7 @@ build-backend = "maturin"
4
4
 
5
5
  [project]
6
6
  name = "django-bolt"
7
- version = "0.2.7"
7
+ version = "0.2.8"
8
8
  description = "High-performance API framework for Django with Rust-powered endpoints delivering 60k+ RPS"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -40,6 +40,7 @@ dependencies = [
40
40
  "msgspec>=0.18",
41
41
  "multipart>=1.3",
42
42
  "pyjwt>=2.10.1",
43
+ "typing-extensions>=4.5.0",
43
44
  "uvloop>=0.22.1; sys_platform != 'win32'"
44
45
  ]
45
46
 
@@ -1,6 +1,6 @@
1
1
  from .api import BoltAPI
2
2
  from .responses import Response, JSON, StreamingResponse
3
- from .compression import CompressionConfig
3
+ from .middleware import CompressionConfig
4
4
  from .types import Request
5
5
 
6
6
  # Views module
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import inspect
4
+ import logging
4
5
  import msgspec
5
6
  import re
6
7
  import time
@@ -8,17 +9,22 @@ from typing import Any, Callable, Dict, List, Tuple, Optional, get_origin, get_a
8
9
 
9
10
  from .bootstrap import ensure_django_ready
10
11
  from django_bolt import _core
12
+
13
+ # Import local modules
11
14
  from .responses import StreamingResponse
12
15
  from .exceptions import HTTPException
13
16
  from .params import Param, Depends as DependsMarker
14
17
  from .typing import FieldDefinition
15
-
18
+ from .middleware import CompressionConfig
19
+ from .logging.middleware import create_logging_middleware, LoggingMiddleware
20
+ from .exceptions import RequestValidationError, parse_msgspec_decode_error
16
21
  # Import modularized components
17
22
  from .binding import (
18
23
  coerce_to_response_type,
19
24
  coerce_to_response_type_async,
20
25
  convert_primitive,
21
26
  create_extractor,
27
+ get_msgspec_decoder
22
28
  )
23
29
  from .typing import is_msgspec_struct, is_optional, unwrap_optional
24
30
  from .request_parsing import parse_form_data
@@ -26,12 +32,27 @@ from .dependencies import resolve_dependency
26
32
  from .serialization import serialize_response
27
33
  from .middleware.compiler import compile_middleware_meta
28
34
  from .types import Request
35
+ from .views import APIView, ViewSet
36
+ from .status_codes import HTTP_201_CREATED, HTTP_204_NO_CONTENT
37
+ from .decorators import ActionHandler
38
+ from .error_handlers import handle_exception
39
+ from .openapi.schema_generator import SchemaGenerator
40
+ from .openapi import OpenAPIConfig, SwaggerRenderPlugin, RedocRenderPlugin, ScalarRenderPlugin, RapidocRenderPlugin, StoplightRenderPlugin, JsonRenderPlugin, YamlRenderPlugin
41
+ from .openapi.routes import OpenAPIRouteRegistrar
42
+ from .admin.routes import AdminRouteRegistrar
43
+ from .admin.static_routes import StaticRouteRegistrar
44
+ from .admin.admin_detection import detect_admin_url_prefix
45
+
46
+ from . import _json
29
47
 
30
48
  Response = Tuple[int, List[Tuple[str, str]], bytes]
31
49
 
32
50
  # Global registry for BoltAPI instances (used by autodiscovery)
33
51
  _BOLT_API_REGISTRY = []
34
52
 
53
+ # Pre-compiled regex pattern for extracting path parameters
54
+ _PATH_PARAM_REGEX = re.compile(r'\{(\w+)\}')
55
+
35
56
 
36
57
  def _extract_path_params(path: str) -> set[str]:
37
58
  """
@@ -41,7 +62,7 @@ def _extract_path_params(path: str) -> set[str]:
41
62
  "/users/{user_id}" -> {"user_id"}
42
63
  "/posts/{post_id}/comments/{comment_id}" -> {"post_id", "comment_id"}
43
64
  """
44
- return set(re.findall(r'\{(\w+)\}', path))
65
+ return set(_PATH_PARAM_REGEX.findall(path))
45
66
 
46
67
 
47
68
  def extract_parameter_value(
@@ -156,8 +177,7 @@ def extract_parameter_value(
156
177
  if not body_loaded:
157
178
  body_bytes: bytes = request["body"]
158
179
  if is_msgspec_struct(meta["body_struct_type"]):
159
- from .binding import get_msgspec_decoder
160
- from .exceptions import RequestValidationError, parse_msgspec_decode_error
180
+
161
181
  decoder = get_msgspec_decoder(meta["body_struct_type"])
162
182
  try:
163
183
  value = decoder.decode(body_bytes)
@@ -173,7 +193,7 @@ def extract_parameter_value(
173
193
  body=body_bytes,
174
194
  ) from e
175
195
  else:
176
- from .exceptions import RequestValidationError, parse_msgspec_decode_error
196
+
177
197
  try:
178
198
  value = msgspec.json.decode(body_bytes, type=meta["body_struct_type"])
179
199
  except msgspec.ValidationError:
@@ -230,11 +250,9 @@ class BoltAPI:
230
250
  if self.enable_logging:
231
251
  # Create logging middleware (actual logging setup happens at server startup)
232
252
  if logging_config is not None:
233
- from .logging.middleware import LoggingMiddleware
234
253
  self._logging_middleware = LoggingMiddleware(logging_config)
235
254
  else:
236
255
  # Use default logging configuration
237
- from .logging.middleware import create_logging_middleware
238
256
  self._logging_middleware = create_logging_middleware()
239
257
 
240
258
  # Compression configuration
@@ -244,7 +262,6 @@ class BoltAPI:
244
262
  self.compression = None
245
263
  elif compression is None:
246
264
  # Not provided, use default
247
- from .compression import CompressionConfig
248
265
  self.compression = CompressionConfig()
249
266
  else:
250
267
  # Custom config provided
@@ -253,7 +270,6 @@ class BoltAPI:
253
270
  # OpenAPI configuration - enabled by default with sensible defaults
254
271
  if openapi_config is None:
255
272
  # Create default OpenAPI config
256
- from .openapi import OpenAPIConfig, SwaggerRenderPlugin, RedocRenderPlugin, ScalarRenderPlugin, RapidocRenderPlugin, StoplightRenderPlugin, JsonRenderPlugin, YamlRenderPlugin
257
273
  try:
258
274
  # Try to get Django project name from settings
259
275
  from django.conf import settings
@@ -420,7 +436,6 @@ class BoltAPI:
420
436
  Raises:
421
437
  ValueError: If view class doesn't implement any requested methods
422
438
  """
423
- from .views import APIView
424
439
 
425
440
  def decorator(view_cls: type) -> type:
426
441
  # Validate that view_cls is an APIView subclass
@@ -538,8 +553,6 @@ class BoltAPI:
538
553
  Returns:
539
554
  Decorator function that registers the viewset
540
555
  """
541
- from .views import ViewSet
542
- from .status_codes import HTTP_201_CREATED, HTTP_204_NO_CONTENT
543
556
 
544
557
  def decorator(viewset_cls: type) -> type:
545
558
  # Validate that viewset_cls is a ViewSet subclass
@@ -627,7 +640,6 @@ class BoltAPI:
627
640
  """
628
641
  import inspect
629
642
  import types
630
- from .decorators import ActionHandler
631
643
 
632
644
  # Get class-level auth and guards (if any)
633
645
  class_auth = getattr(view_cls, 'auth', None)
@@ -934,7 +946,6 @@ class BoltAPI:
934
946
  def _handle_http_exception(self, he: HTTPException) -> Response:
935
947
  """Handle HTTPException and return response."""
936
948
  try:
937
- from . import _json
938
949
  body = _json.encode({"detail": he.detail})
939
950
  headers = [("content-type", "application/json")]
940
951
  except Exception:
@@ -948,9 +959,8 @@ class BoltAPI:
948
959
 
949
960
  def _handle_generic_exception(self, e: Exception, request: Dict[str, Any] = None) -> Response:
950
961
  """Handle generic exception using error_handlers module."""
951
- from . import error_handlers
952
962
  # Use the error handler which respects Django DEBUG setting
953
- return error_handlers.handle_exception(e, debug=None, request=request) # debug will be checked dynamically
963
+ return handle_exception(e, debug=None, request=request) # debug will be checked dynamically
954
964
 
955
965
  async def _dispatch(self, handler: Callable, request: Dict[str, Any], handler_id: int = None) -> Response:
956
966
  """Async dispatch that calls the handler and returns response tuple.
@@ -975,7 +985,7 @@ class BoltAPI:
975
985
  logger = logging_middleware.logger
976
986
  should_time = False
977
987
  try:
978
- if logger.isEnabledFor(__import__('logging').INFO):
988
+ if logger.isEnabledFor(logging.INFO):
979
989
  should_time = True
980
990
  except Exception:
981
991
  pass
@@ -1034,7 +1044,6 @@ class BoltAPI:
1034
1044
  OpenAPI schema as dictionary.
1035
1045
  """
1036
1046
  if self._openapi_schema is None:
1037
- from .openapi.schema_generator import SchemaGenerator
1038
1047
 
1039
1048
  generator = SchemaGenerator(self, self.openapi_config)
1040
1049
  openapi = generator.generate()
@@ -1047,7 +1056,6 @@ class BoltAPI:
1047
1056
 
1048
1057
  Delegates to OpenAPIRouteRegistrar for cleaner separation of concerns.
1049
1058
  """
1050
- from .openapi.routes import OpenAPIRouteRegistrar
1051
1059
 
1052
1060
  registrar = OpenAPIRouteRegistrar(self)
1053
1061
  registrar.register_routes()
@@ -1061,7 +1069,6 @@ class BoltAPI:
1061
1069
  host: Server hostname for ASGI scope
1062
1070
  port: Server port for ASGI scope
1063
1071
  """
1064
- from .admin.routes import AdminRouteRegistrar
1065
1072
 
1066
1073
  registrar = AdminRouteRegistrar(self)
1067
1074
  registrar.register_routes(host, port)
@@ -1071,7 +1078,6 @@ class BoltAPI:
1071
1078
 
1072
1079
  Delegates to StaticRouteRegistrar for cleaner separation of concerns.
1073
1080
  """
1074
- from .admin.static_routes import StaticRouteRegistrar
1075
1081
 
1076
1082
  registrar = StaticRouteRegistrar(self)
1077
1083
  registrar.register_routes()
@@ -1089,7 +1095,6 @@ class BoltAPI:
1089
1095
  if self.enable_admin:
1090
1096
  self._register_admin_routes(host, port)
1091
1097
  if self._admin_routes_registered:
1092
- from .admin.admin_detection import detect_admin_url_prefix
1093
1098
  admin_prefix = detect_admin_url_prefix() or 'admin'
1094
1099
  print(f"[django-bolt] Django admin available at http://{host}:{port}/{admin_prefix}/")
1095
1100
 
@@ -17,6 +17,7 @@ from .middleware import (
17
17
  CORSMiddleware,
18
18
  RateLimitMiddleware,
19
19
  )
20
+ from .compression import CompressionConfig
20
21
 
21
22
  __all__ = [
22
23
  "Middleware",
@@ -29,4 +30,5 @@ __all__ = [
29
30
  "no_compress",
30
31
  "CORSMiddleware",
31
32
  "RateLimitMiddleware",
33
+ "CompressionConfig",
32
34
  ]
@@ -5,8 +5,7 @@ Tests both global compression configuration and per-route skip functionality.
5
5
  """
6
6
  import pytest
7
7
  from django_bolt import BoltAPI
8
- from django_bolt.compression import CompressionConfig
9
- from django_bolt.middleware import skip_middleware, no_compress
8
+ from django_bolt.middleware import skip_middleware, no_compress, CompressionConfig
10
9
  from django_bolt.testing import TestClient
11
10
 
12
11
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes