bustapi 0.13.3__tar.gz → 0.13.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 (259) hide show
  1. {bustapi-0.13.3 → bustapi-0.13.4}/CHANGELOG.md +24 -0
  2. {bustapi-0.13.3 → bustapi-0.13.4}/Cargo.lock +11 -11
  3. {bustapi-0.13.3 → bustapi-0.13.4}/Cargo.toml +1 -1
  4. {bustapi-0.13.3 → bustapi-0.13.4}/PKG-INFO +1 -1
  5. {bustapi-0.13.3 → bustapi-0.13.4}/docs/changelog.md +24 -0
  6. {bustapi-0.13.3 → bustapi-0.13.4}/pyproject.toml +1 -1
  7. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/__init__.py +1 -1
  8. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/dispatch.py +0 -1
  9. bustapi-0.13.4/tests/test_discussion_22.py +60 -0
  10. bustapi-0.13.4/tests/test_issue_23.py +45 -0
  11. {bustapi-0.13.3 → bustapi-0.13.4}/- +0 -0
  12. {bustapi-0.13.3 → bustapi-0.13.4}/.github/FUNDING.yml +0 -0
  13. {bustapi-0.13.3 → bustapi-0.13.4}/.github/workflows/ci-multiplatform.yml +0 -0
  14. {bustapi-0.13.3 → bustapi-0.13.4}/.github/workflows/ci.yml +0 -0
  15. {bustapi-0.13.3 → bustapi-0.13.4}/.github/workflows/docs.yml +0 -0
  16. {bustapi-0.13.3 → bustapi-0.13.4}/.github/workflows/manual-publish.yml +0 -0
  17. {bustapi-0.13.3 → bustapi-0.13.4}/.gitignore +0 -0
  18. {bustapi-0.13.3 → bustapi-0.13.4}/.python-version +0 -0
  19. {bustapi-0.13.3 → bustapi-0.13.4}/AGENT_KNOWLEDGE.md +0 -0
  20. {bustapi-0.13.3 → bustapi-0.13.4}/Dockerfile +0 -0
  21. {bustapi-0.13.3 → bustapi-0.13.4}/LICENSE +0 -0
  22. {bustapi-0.13.3 → bustapi-0.13.4}/README.md +0 -0
  23. {bustapi-0.13.3 → bustapi-0.13.4}/benchmarks/CACHE_BENCHMARK.md +0 -0
  24. {bustapi-0.13.3 → bustapi-0.13.4}/benchmarks/README.md +0 -0
  25. {bustapi-0.13.3 → bustapi-0.13.4}/benchmarks/app.py +0 -0
  26. {bustapi-0.13.3 → bustapi-0.13.4}/benchmarks/benchmark_all.py +0 -0
  27. {bustapi-0.13.3 → bustapi-0.13.4}/benchmarks/benchmark_avg.py +0 -0
  28. {bustapi-0.13.3 → bustapi-0.13.4}/benchmarks/benchmark_cache.py +0 -0
  29. {bustapi-0.13.3 → bustapi-0.13.4}/benchmarks/benchmark_combined.png +0 -0
  30. {bustapi-0.13.3 → bustapi-0.13.4}/benchmarks/bustapi.md +0 -0
  31. {bustapi-0.13.3 → bustapi-0.13.4}/benchmarks/bustapi_bench.py +0 -0
  32. {bustapi-0.13.3 → bustapi-0.13.4}/benchmarks/bustapi_internal.py +0 -0
  33. {bustapi-0.13.3 → bustapi-0.13.4}/benchmarks/comparison_bench.py +0 -0
  34. {bustapi-0.13.3 → bustapi-0.13.4}/benchmarks/comprehensive_benchmark.py +0 -0
  35. {bustapi-0.13.3 → bustapi-0.13.4}/benchmarks/gen_graph.py +0 -0
  36. {bustapi-0.13.3 → bustapi-0.13.4}/benchmarks/quick_bench.py +0 -0
  37. {bustapi-0.13.3 → bustapi-0.13.4}/benchmarks/resource_bench.py +0 -0
  38. {bustapi-0.13.3 → bustapi-0.13.4}/benchmarks/rps_comparison.png +0 -0
  39. {bustapi-0.13.3 → bustapi-0.13.4}/benchmarks/run_comparison_auto.py +0 -0
  40. {bustapi-0.13.3 → bustapi-0.13.4}/benchmarks/ws_benchmark.py +0 -0
  41. {bustapi-0.13.3 → bustapi-0.13.4}/docs/advanced/async.md +0 -0
  42. {bustapi-0.13.3 → bustapi-0.13.4}/docs/advanced/blueprints.md +0 -0
  43. {bustapi-0.13.3 → bustapi-0.13.4}/docs/advanced/dependency_injection.md +0 -0
  44. {bustapi-0.13.3 → bustapi-0.13.4}/docs/advanced/deployment.md +0 -0
  45. {bustapi-0.13.3 → bustapi-0.13.4}/docs/advanced/middleware.md +0 -0
  46. {bustapi-0.13.3 → bustapi-0.13.4}/docs/advanced/security.md +0 -0
  47. {bustapi-0.13.3 → bustapi-0.13.4}/docs/advanced/validation.md +0 -0
  48. {bustapi-0.13.3 → bustapi-0.13.4}/docs/api-reference.md +0 -0
  49. {bustapi-0.13.3 → bustapi-0.13.4}/docs/assets/logo.png +0 -0
  50. {bustapi-0.13.3 → bustapi-0.13.4}/docs/complete-api-reference.md +0 -0
  51. {bustapi-0.13.3 → bustapi-0.13.4}/docs/deployment-performance-guide.md +0 -0
  52. {bustapi-0.13.3 → bustapi-0.13.4}/docs/deployment.md +0 -0
  53. {bustapi-0.13.3 → bustapi-0.13.4}/docs/examples-guide.md +0 -0
  54. {bustapi-0.13.3 → bustapi-0.13.4}/docs/index.md +0 -0
  55. {bustapi-0.13.3 → bustapi-0.13.4}/docs/installation.md +0 -0
  56. {bustapi-0.13.3 → bustapi-0.13.4}/docs/overrides/.gitkeep +0 -0
  57. {bustapi-0.13.3 → bustapi-0.13.4}/docs/quickstart.md +0 -0
  58. {bustapi-0.13.3 → bustapi-0.13.4}/docs/release_track.md +0 -0
  59. {bustapi-0.13.3 → bustapi-0.13.4}/docs/site/advanced/async_support.html +0 -0
  60. {bustapi-0.13.3 → bustapi-0.13.4}/docs/site/advanced/blueprints.html +0 -0
  61. {bustapi-0.13.3 → bustapi-0.13.4}/docs/site/advanced/dependency_injection.html +0 -0
  62. {bustapi-0.13.3 → bustapi-0.13.4}/docs/site/advanced/middleware.html +0 -0
  63. {bustapi-0.13.3 → bustapi-0.13.4}/docs/site/advanced/validation.html +0 -0
  64. {bustapi-0.13.3 → bustapi-0.13.4}/docs/site/api/all.html +0 -0
  65. {bustapi-0.13.3 → bustapi-0.13.4}/docs/site/api/app.html +0 -0
  66. {bustapi-0.13.3 → bustapi-0.13.4}/docs/site/api/context.html +0 -0
  67. {bustapi-0.13.3 → bustapi-0.13.4}/docs/site/api/utilities.html +0 -0
  68. {bustapi-0.13.3 → bustapi-0.13.4}/docs/site/assets/logo.png +0 -0
  69. {bustapi-0.13.3 → bustapi-0.13.4}/docs/site/changelog.html +0 -0
  70. {bustapi-0.13.3 → bustapi-0.13.4}/docs/site/core_concepts/request_data.html +0 -0
  71. {bustapi-0.13.3 → bustapi-0.13.4}/docs/site/core_concepts/responses.html +0 -0
  72. {bustapi-0.13.3 → bustapi-0.13.4}/docs/site/core_concepts/routing.html +0 -0
  73. {bustapi-0.13.3 → bustapi-0.13.4}/docs/site/core_concepts/templates.html +0 -0
  74. {bustapi-0.13.3 → bustapi-0.13.4}/docs/site/examples/index.html +0 -0
  75. {bustapi-0.13.3 → bustapi-0.13.4}/docs/site/getting_started/index.html +0 -0
  76. {bustapi-0.13.3 → bustapi-0.13.4}/docs/site/getting_started/quickstart.html +0 -0
  77. {bustapi-0.13.3 → bustapi-0.13.4}/docs/site/index.html +0 -0
  78. {bustapi-0.13.3 → bustapi-0.13.4}/docs/site/script.js +0 -0
  79. {bustapi-0.13.3 → bustapi-0.13.4}/docs/site/style.css +0 -0
  80. {bustapi-0.13.3 → bustapi-0.13.4}/docs/stylesheets/extra.css +0 -0
  81. {bustapi-0.13.3 → bustapi-0.13.4}/docs/user-guide/authentication.md +0 -0
  82. {bustapi-0.13.3 → bustapi-0.13.4}/docs/user-guide/caching.md +0 -0
  83. {bustapi-0.13.3 → bustapi-0.13.4}/docs/user-guide/cli.md +0 -0
  84. {bustapi-0.13.3 → bustapi-0.13.4}/docs/user-guide/database.md +0 -0
  85. {bustapi-0.13.3 → bustapi-0.13.4}/docs/user-guide/documentation.md +0 -0
  86. {bustapi-0.13.3 → bustapi-0.13.4}/docs/user-guide/error_handling.md +0 -0
  87. {bustapi-0.13.3 → bustapi-0.13.4}/docs/user-guide/jwt.md +0 -0
  88. {bustapi-0.13.3 → bustapi-0.13.4}/docs/user-guide/logging.md +0 -0
  89. {bustapi-0.13.3 → bustapi-0.13.4}/docs/user-guide/multiprocessing.md +0 -0
  90. {bustapi-0.13.3 → bustapi-0.13.4}/docs/user-guide/request_data.md +0 -0
  91. {bustapi-0.13.3 → bustapi-0.13.4}/docs/user-guide/responses.md +0 -0
  92. {bustapi-0.13.3 → bustapi-0.13.4}/docs/user-guide/routing.md +0 -0
  93. {bustapi-0.13.3 → bustapi-0.13.4}/docs/user-guide/sessions.md +0 -0
  94. {bustapi-0.13.3 → bustapi-0.13.4}/docs/user-guide/static_files.md +0 -0
  95. {bustapi-0.13.3 → bustapi-0.13.4}/docs/user-guide/templates.md +0 -0
  96. {bustapi-0.13.3 → bustapi-0.13.4}/docs/user-guide/turbo-routes.md +0 -0
  97. {bustapi-0.13.3 → bustapi-0.13.4}/docs/user-guide/video-streaming.md +0 -0
  98. {bustapi-0.13.3 → bustapi-0.13.4}/docs/websockets.md +0 -0
  99. {bustapi-0.13.3 → bustapi-0.13.4}/examples/advanced/08_auto_docs.py +0 -0
  100. {bustapi-0.13.3 → bustapi-0.13.4}/examples/advanced/12_test_modes.py +0 -0
  101. {bustapi-0.13.3 → bustapi-0.13.4}/examples/advanced/13_error_handling.py +0 -0
  102. {bustapi-0.13.3 → bustapi-0.13.4}/examples/advanced/14_middleware.py +0 -0
  103. {bustapi-0.13.3 → bustapi-0.13.4}/examples/advanced/16_middleware_session.py +0 -0
  104. {bustapi-0.13.3 → bustapi-0.13.4}/examples/advanced/20_file_uploads.py +0 -0
  105. {bustapi-0.13.3 → bustapi-0.13.4}/examples/advanced/24_body_and_depends.py +0 -0
  106. {bustapi-0.13.3 → bustapi-0.13.4}/examples/advanced/27_video_stream.py +0 -0
  107. {bustapi-0.13.3 → bustapi-0.13.4}/examples/advanced/28_websocket.py +0 -0
  108. {bustapi-0.13.3 → bustapi-0.13.4}/examples/advanced/29_turbo_websocket.py +0 -0
  109. {bustapi-0.13.3 → bustapi-0.13.4}/examples/basics/01_hello_world.py +0 -0
  110. {bustapi-0.13.3 → bustapi-0.13.4}/examples/basics/02_parameters.py +0 -0
  111. {bustapi-0.13.3 → bustapi-0.13.4}/examples/basics/03_async.py +0 -0
  112. {bustapi-0.13.3 → bustapi-0.13.4}/examples/basics/04_request_data.py +0 -0
  113. {bustapi-0.13.3 → bustapi-0.13.4}/examples/basics/19_all_types.py +0 -0
  114. {bustapi-0.13.3 → bustapi-0.13.4}/examples/database/07_database_raw.py +0 -0
  115. {bustapi-0.13.3 → bustapi-0.13.4}/examples/database/10_database_sqlmodel.py +0 -0
  116. {bustapi-0.13.3 → bustapi-0.13.4}/examples/routing/06_blueprints.py +0 -0
  117. {bustapi-0.13.3 → bustapi-0.13.4}/examples/routing/09_complex_routing.py +0 -0
  118. {bustapi-0.13.3 → bustapi-0.13.4}/examples/routing/21_path_validation.py +0 -0
  119. {bustapi-0.13.3 → bustapi-0.13.4}/examples/routing/22_path_docs.py +0 -0
  120. {bustapi-0.13.3 → bustapi-0.13.4}/examples/routing/23_query_validation.py +0 -0
  121. {bustapi-0.13.3 → bustapi-0.13.4}/examples/routing/blueprint_with_jwt.py +0 -0
  122. {bustapi-0.13.3 → bustapi-0.13.4}/examples/security/10_rate_limit_demo.py +0 -0
  123. {bustapi-0.13.3 → bustapi-0.13.4}/examples/security/11_security_demo.py +0 -0
  124. {bustapi-0.13.3 → bustapi-0.13.4}/examples/security/17_jwt_auth.py +0 -0
  125. {bustapi-0.13.3 → bustapi-0.13.4}/examples/security/17_safe_features.py +0 -0
  126. {bustapi-0.13.3 → bustapi-0.13.4}/examples/security/18_jwt_cookies.py +0 -0
  127. {bustapi-0.13.3 → bustapi-0.13.4}/examples/security/18_safe_advanced.py +0 -0
  128. {bustapi-0.13.3 → bustapi-0.13.4}/examples/security/18_session_login.py +0 -0
  129. {bustapi-0.13.3 → bustapi-0.13.4}/examples/templates/05_templates.py +0 -0
  130. {bustapi-0.13.3 → bustapi-0.13.4}/examples/templates/26_complex_template.py +0 -0
  131. {bustapi-0.13.3 → bustapi-0.13.4}/examples/templates/templates/index.html +0 -0
  132. {bustapi-0.13.3 → bustapi-0.13.4}/examples/turbo/cache_test.py +0 -0
  133. {bustapi-0.13.3 → bustapi-0.13.4}/examples/turbo/fair_benchmark.py +0 -0
  134. {bustapi-0.13.3 → bustapi-0.13.4}/examples/turbo/typed_turbo_example.py +0 -0
  135. {bustapi-0.13.3 → bustapi-0.13.4}/examples/ws/app.py +0 -0
  136. {bustapi-0.13.3 → bustapi-0.13.4}/examples/ws/templates/index.html +0 -0
  137. {bustapi-0.13.3 → bustapi-0.13.4}/examples/ws/websockets_demo.py +0 -0
  138. {bustapi-0.13.3 → bustapi-0.13.4}/examples/ws/ws_limit.py +0 -0
  139. {bustapi-0.13.3 → bustapi-0.13.4}/mkdocs.yml +0 -0
  140. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/app.py +0 -0
  141. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/auth/__init__.py +0 -0
  142. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/auth/csrf.py +0 -0
  143. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/auth/decorators.py +0 -0
  144. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/auth/login.py +0 -0
  145. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/auth/password.py +0 -0
  146. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/auth/tokens.py +0 -0
  147. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/auth/user.py +0 -0
  148. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/cli/__init__.py +0 -0
  149. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/cli/main.py +0 -0
  150. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/context.py +0 -0
  151. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/core/__init__.py +0 -0
  152. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/core/asgi.py +0 -0
  153. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/core/exceptions.py +0 -0
  154. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/core/helpers.py +0 -0
  155. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/core/logging.py +0 -0
  156. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/dependencies.py +0 -0
  157. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/documentation/__init__.py +0 -0
  158. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/documentation/generator.py +0 -0
  159. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/extraction.py +0 -0
  160. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/fastapi_compat.py +0 -0
  161. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/hooks.py +0 -0
  162. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/http/__init__.py +0 -0
  163. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/http/request.py +0 -0
  164. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/http/response.py +0 -0
  165. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/jwt.py +0 -0
  166. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/logging.py +0 -0
  167. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/middleware.py +0 -0
  168. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/multiprocess.py +0 -0
  169. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/params.py +0 -0
  170. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/py.typed +0 -0
  171. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/responses.py +0 -0
  172. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/routing/__init__.py +0 -0
  173. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/routing/blueprints.py +0 -0
  174. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/routing/decorators.py +0 -0
  175. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/safe/__init__.py +0 -0
  176. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/safe/concurrency.py +0 -0
  177. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/safe/types.py +0 -0
  178. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/security/__init__.py +0 -0
  179. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/security/extension.py +0 -0
  180. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/security/rate_limit.py +0 -0
  181. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/server/__init__.py +0 -0
  182. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/server/runner.py +0 -0
  183. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/server/wsgi.py +0 -0
  184. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/sessions.py +0 -0
  185. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/templating/__init__.py +0 -0
  186. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/templating/engine.py +0 -0
  187. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/templating/mixin.py +0 -0
  188. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/testing/__init__.py +0 -0
  189. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/testing/client.py +0 -0
  190. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/utils.py +0 -0
  191. {bustapi-0.13.3 → bustapi-0.13.4}/python/bustapi/websocket.py +0 -0
  192. {bustapi-0.13.3 → bustapi-0.13.4}/run_all_examples.py +0 -0
  193. {bustapi-0.13.3 → bustapi-0.13.4}/scratch/test_abort.py +0 -0
  194. {bustapi-0.13.3 → bustapi-0.13.4}/scratch/test_headers.py +0 -0
  195. {bustapi-0.13.3 → bustapi-0.13.4}/src/bindings/app.rs +0 -0
  196. {bustapi-0.13.3 → bustapi-0.13.4}/src/bindings/converters.rs +0 -0
  197. {bustapi-0.13.3 → bustapi-0.13.4}/src/bindings/handlers.rs +0 -0
  198. {bustapi-0.13.3 → bustapi-0.13.4}/src/bindings/mod.rs +0 -0
  199. {bustapi-0.13.3 → bustapi-0.13.4}/src/bindings/request.rs +0 -0
  200. {bustapi-0.13.3 → bustapi-0.13.4}/src/bindings/typed_turbo.rs +0 -0
  201. {bustapi-0.13.3 → bustapi-0.13.4}/src/bindings/websocket.rs +0 -0
  202. {bustapi-0.13.3 → bustapi-0.13.4}/src/crypto.rs +0 -0
  203. {bustapi-0.13.3 → bustapi-0.13.4}/src/jwt.rs +0 -0
  204. {bustapi-0.13.3 → bustapi-0.13.4}/src/lib.rs +0 -0
  205. {bustapi-0.13.3 → bustapi-0.13.4}/src/logger.rs +0 -0
  206. {bustapi-0.13.3 → bustapi-0.13.4}/src/rate_limiter.rs +0 -0
  207. {bustapi-0.13.3 → bustapi-0.13.4}/src/request/methods.rs +0 -0
  208. {bustapi-0.13.3 → bustapi-0.13.4}/src/request/mod.rs +0 -0
  209. {bustapi-0.13.3 → bustapi-0.13.4}/src/request/tests.rs +0 -0
  210. {bustapi-0.13.3 → bustapi-0.13.4}/src/response/builders.rs +0 -0
  211. {bustapi-0.13.3 → bustapi-0.13.4}/src/response/methods.rs +0 -0
  212. {bustapi-0.13.3 → bustapi-0.13.4}/src/response/mod.rs +0 -0
  213. {bustapi-0.13.3 → bustapi-0.13.4}/src/router/handlers.rs +0 -0
  214. {bustapi-0.13.3 → bustapi-0.13.4}/src/router/matching.rs +0 -0
  215. {bustapi-0.13.3 → bustapi-0.13.4}/src/router/middleware.rs +0 -0
  216. {bustapi-0.13.3 → bustapi-0.13.4}/src/router/mod.rs +0 -0
  217. {bustapi-0.13.3 → bustapi-0.13.4}/src/router/tests.rs +0 -0
  218. {bustapi-0.13.3 → bustapi-0.13.4}/src/server/handlers.rs +0 -0
  219. {bustapi-0.13.3 → bustapi-0.13.4}/src/server/mod.rs +0 -0
  220. {bustapi-0.13.3 → bustapi-0.13.4}/src/server/startup.rs +0 -0
  221. {bustapi-0.13.3 → bustapi-0.13.4}/src/server/stream.rs +0 -0
  222. {bustapi-0.13.3 → bustapi-0.13.4}/src/static_files.rs +0 -0
  223. {bustapi-0.13.3 → bustapi-0.13.4}/src/templating.rs +0 -0
  224. {bustapi-0.13.3 → bustapi-0.13.4}/src/watcher.rs +0 -0
  225. {bustapi-0.13.3 → bustapi-0.13.4}/src/websocket/config.rs +0 -0
  226. {bustapi-0.13.3 → bustapi-0.13.4}/src/websocket/mod.rs +0 -0
  227. {bustapi-0.13.3 → bustapi-0.13.4}/src/websocket/session.rs +0 -0
  228. {bustapi-0.13.3 → bustapi-0.13.4}/src/websocket/turbo.rs +0 -0
  229. {bustapi-0.13.3 → bustapi-0.13.4}/static/style.css +0 -0
  230. {bustapi-0.13.3 → bustapi-0.13.4}/templates/base.html +0 -0
  231. {bustapi-0.13.3 → bustapi-0.13.4}/templates/complex.html +0 -0
  232. {bustapi-0.13.3 → bustapi-0.13.4}/tests/docs_test_all.py +0 -0
  233. {bustapi-0.13.3 → bustapi-0.13.4}/tests/docs_test_api_reference.py +0 -0
  234. {bustapi-0.13.3 → bustapi-0.13.4}/tests/docs_test_installation.py +0 -0
  235. {bustapi-0.13.3 → bustapi-0.13.4}/tests/docs_test_quickstart.py +0 -0
  236. {bustapi-0.13.3 → bustapi-0.13.4}/tests/docs_test_simple.py +0 -0
  237. {bustapi-0.13.3 → bustapi-0.13.4}/tests/test_050_features.py +0 -0
  238. {bustapi-0.13.3 → bustapi-0.13.4}/tests/test_async_hooks.py +0 -0
  239. {bustapi-0.13.3 → bustapi-0.13.4}/tests/test_async_login.py +0 -0
  240. {bustapi-0.13.3 → bustapi-0.13.4}/tests/test_auth.py +0 -0
  241. {bustapi-0.13.3 → bustapi-0.13.4}/tests/test_discussion_21.py +0 -0
  242. {bustapi-0.13.3 → bustapi-0.13.4}/tests/test_examples.py +0 -0
  243. {bustapi-0.13.3 → bustapi-0.13.4}/tests/test_hot_reload.py +0 -0
  244. {bustapi-0.13.3 → bustapi-0.13.4}/tests/test_issue_18.py +0 -0
  245. {bustapi-0.13.3 → bustapi-0.13.4}/tests/test_jwt.py +0 -0
  246. {bustapi-0.13.3 → bustapi-0.13.4}/tests/test_jwt_cookies.py +0 -0
  247. {bustapi-0.13.3 → bustapi-0.13.4}/tests/test_login_manager.py +0 -0
  248. {bustapi-0.13.3 → bustapi-0.13.4}/tests/test_middleware.py +0 -0
  249. {bustapi-0.13.3 → bustapi-0.13.4}/tests/test_multiprocess_stability.py +0 -0
  250. {bustapi-0.13.3 → bustapi-0.13.4}/tests/test_new_examples.py +0 -0
  251. {bustapi-0.13.3 → bustapi-0.13.4}/tests/test_orm_conflict.py +0 -0
  252. {bustapi-0.13.3 → bustapi-0.13.4}/tests/test_path_standalone.py +0 -0
  253. {bustapi-0.13.3 → bustapi-0.13.4}/tests/test_path_validation.py +0 -0
  254. {bustapi-0.13.3 → bustapi-0.13.4}/tests/test_rate_limit_rust.py +0 -0
  255. {bustapi-0.13.3 → bustapi-0.13.4}/tests/test_safe.py +0 -0
  256. {bustapi-0.13.3 → bustapi-0.13.4}/tests/test_security_unit.py +0 -0
  257. {bustapi-0.13.3 → bustapi-0.13.4}/tests/test_sessions.py +0 -0
  258. {bustapi-0.13.3 → bustapi-0.13.4}/tests/test_zero_copy.py +0 -0
  259. {bustapi-0.13.3 → bustapi-0.13.4}/tests/verify_router.py +0 -0
@@ -2,6 +2,30 @@
2
2
 
3
3
  All notable changes to this project will be documented here.
4
4
 
5
+ ## [0.13.4] - 2026-06-02
6
+
7
+ ### Added
8
+ - **Session and Redirect Tests**: Added regression tests (`test_discussion_22.py` and `test_issue_23.py`) to verify `session.permanent` scoping and redirect execution.
9
+
10
+ ### Fixed
11
+ - **Token Double-Reset**: Fixed a `RuntimeError` when returning a response from a synchronous before-request hook by removing a redundant contextvar token reset call in `create_sync_wrapper`.
12
+
13
+ ## [0.13.3] - 2026-05-30
14
+
15
+ ### Fixed
16
+ - **CI Linting**: Formatted `generator.py` with `black` to resolve CI linting pipeline failure.
17
+
18
+ ### Changed
19
+ - **Git Config**: Added `*.db` to `.gitignore` to prevent tracking database files.
20
+
21
+ ## [0.13.2] - 2026-05-30
22
+
23
+ ### Added
24
+ - **Authentication Tests**: Added comprehensive test cases (`test_discussion_21.py`) verifying role and permission decorators (`@roles_required`, `@permission_required`).
25
+
26
+ ### Fixed
27
+ - **Request State Initialization**: Initialized `_login_user` and `_login_fresh` attributes directly on `Request` object instantiation to ensure robust compatibility with login management decorators.
28
+
5
29
  ## [0.13.1] - 2026-05-03
6
30
 
7
31
  ### Fixed
@@ -372,9 +372,9 @@ checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06"
372
372
 
373
373
  [[package]]
374
374
  name = "bitflags"
375
- version = "2.11.1"
375
+ version = "2.12.1"
376
376
  source = "registry+https://github.com/rust-lang/crates.io-index"
377
- checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3"
377
+ checksum = "84d7ced0ae9557296835c32bf1b1e02b44c746701f898460fb000d7eaa84f00a"
378
378
 
379
379
  [[package]]
380
380
  name = "blake2"
@@ -432,7 +432,7 @@ checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
432
432
 
433
433
  [[package]]
434
434
  name = "bustapi_core"
435
- version = "0.13.3"
435
+ version = "0.13.4"
436
436
  dependencies = [
437
437
  "actix-files",
438
438
  "actix-http",
@@ -1284,9 +1284,9 @@ dependencies = [
1284
1284
 
1285
1285
  [[package]]
1286
1286
  name = "inotify"
1287
- version = "0.11.1"
1287
+ version = "0.11.2"
1288
1288
  source = "registry+https://github.com/rust-lang/crates.io-index"
1289
- checksum = "bd5b3eaf1a28b758ac0faa5a4254e8ab2705605496f1b1f3fbbc3988ad73d199"
1289
+ checksum = "533e68a5842e734946fe159fb03fc9bbbb254f590dd0d8ad321ae5ff7beca2c1"
1290
1290
  dependencies = [
1291
1291
  "bitflags",
1292
1292
  "inotify-sys",
@@ -1341,9 +1341,9 @@ dependencies = [
1341
1341
 
1342
1342
  [[package]]
1343
1343
  name = "kqueue"
1344
- version = "1.1.1"
1344
+ version = "1.2.0"
1345
1345
  source = "registry+https://github.com/rust-lang/crates.io-index"
1346
- checksum = "eac30106d7dce88daf4a3fcb4879ea939476d5074a9b7ddd0fb97fa4bed5596a"
1346
+ checksum = "273c0752728918e0ac4976f2b275b6fefb9ecd400585dec929419f3844cd87b5"
1347
1347
  dependencies = [
1348
1348
  "kqueue-sys",
1349
1349
  "libc",
@@ -1432,9 +1432,9 @@ dependencies = [
1432
1432
 
1433
1433
  [[package]]
1434
1434
  name = "log"
1435
- version = "0.4.30"
1435
+ version = "0.4.31"
1436
1436
  source = "registry+https://github.com/rust-lang/crates.io-index"
1437
- checksum = "616ec5685824bcc94416c6d4a7a446eea774a31efd7062c8480ba6fd06d7a6e5"
1437
+ checksum = "113b30b4cd05f7c06868fdb2854f66a7b9fece9a48425351cd532e810d74024f"
1438
1438
 
1439
1439
  [[package]]
1440
1440
  name = "matchers"
@@ -2365,9 +2365,9 @@ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
2365
2365
 
2366
2366
  [[package]]
2367
2367
  name = "unicode-segmentation"
2368
- version = "1.13.2"
2368
+ version = "1.13.3"
2369
2369
  source = "registry+https://github.com/rust-lang/crates.io-index"
2370
- checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c"
2370
+ checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8"
2371
2371
 
2372
2372
  [[package]]
2373
2373
  name = "unicode-xid"
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "bustapi_core"
3
- version = "0.13.3"
3
+ version = "0.13.4"
4
4
  edition = "2021"
5
5
  readme = "README.md"
6
6
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bustapi
3
- Version: 0.13.3
3
+ Version: 0.13.4
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -2,6 +2,30 @@
2
2
 
3
3
  All notable changes to this project will be documented here.
4
4
 
5
+ ## [0.13.4] - 2026-06-02
6
+
7
+ ### Added
8
+ - **Session and Redirect Tests**: Added regression tests (`test_discussion_22.py` and `test_issue_23.py`) to verify `session.permanent` scoping and redirect execution.
9
+
10
+ ### Fixed
11
+ - **Token Double-Reset**: Fixed a `RuntimeError` when returning a response from a synchronous before-request hook by removing a redundant contextvar token reset call in `create_sync_wrapper`.
12
+
13
+ ## [0.13.3] - 2026-05-30
14
+
15
+ ### Fixed
16
+ - **CI Linting**: Formatted `generator.py` with `black` to resolve CI linting pipeline failure.
17
+
18
+ ### Changed
19
+ - **Git Config**: Added `*.db` to `.gitignore` to prevent tracking database files.
20
+
21
+ ## [0.13.2] - 2026-05-30
22
+
23
+ ### Added
24
+ - **Authentication Tests**: Added comprehensive test cases (`test_discussion_21.py`) verifying role and permission decorators (`@roles_required`, `@permission_required`).
25
+
26
+ ### Fixed
27
+ - **Request State Initialization**: Initialized `_login_user` and `_login_fresh` attributes directly on `Request` object instantiation to ensure robust compatibility with login management decorators.
28
+
5
29
  ## [0.13.1] - 2026-05-03
6
30
 
7
31
  ### Fixed
@@ -4,7 +4,7 @@ build-backend = "maturin"
4
4
 
5
5
  [project]
6
6
  name = "bustapi"
7
- version = "0.13.3"
7
+ version = "0.13.4"
8
8
  description = "High-performance Python web framework with Rust backend"
9
9
  authors = [
10
10
  {name = "GrandpaEJ", email = ""}
@@ -22,7 +22,7 @@ import platform
22
22
  import sys
23
23
  from http import HTTPStatus
24
24
 
25
- __version__ = "0.13.3"
25
+ __version__ = "0.13.4"
26
26
  __author__ = "BustAPI" # with GrandpaEJ
27
27
  __email__ = ""
28
28
 
@@ -130,7 +130,6 @@ def create_sync_wrapper(app: "BustAPI", handler: Callable, rule: str) -> Callabl
130
130
  response = app._make_response(res)
131
131
  if session:
132
132
  app.session_interface.save_session(app, session, response)
133
- _request_ctx.reset(token)
134
133
  return app._response_to_rust_format(response)
135
134
 
136
135
  # 4. Main Request Processing (Branching based on Middleware presence)
@@ -0,0 +1,60 @@
1
+ from datetime import timedelta
2
+
3
+ import pytest
4
+ from bustapi import BustAPI, session
5
+
6
+
7
+ def test_session_permanent_outside_context():
8
+ """Verify that accessing session.permanent outside of a request context raises a RuntimeError."""
9
+ with pytest.raises(RuntimeError) as exc_info:
10
+ session.permanent = True
11
+ assert "Working outside of request context" in str(exc_info.value)
12
+
13
+ with pytest.raises(RuntimeError) as exc_info:
14
+ _ = session.permanent
15
+ assert "Working outside of request context" in str(exc_info.value)
16
+
17
+
18
+ def test_session_permanent_inside_view():
19
+ """Verify that setting session.permanent inside a request view works and correctly sets max_age/expires on the cookie."""
20
+ app = BustAPI()
21
+ app.secret_key = "test-secret"
22
+ app.permanent_session_lifetime = timedelta(days=5)
23
+
24
+ @app.route("/login")
25
+ def login():
26
+ session["user_id"] = 123
27
+ session.permanent = True
28
+ return "logged in"
29
+
30
+ client = app.test_client()
31
+ resp = client.get("/login")
32
+ assert resp.status_code == 200
33
+
34
+ cookie_header = resp.headers.get("Set-Cookie", "")
35
+ assert "session=" in cookie_header
36
+ assert "Max-Age=" in cookie_header or "expires=" in cookie_header.lower()
37
+
38
+
39
+ def test_session_permanent_in_before_request():
40
+ """Verify that setting session.permanent in a before_request hook works."""
41
+ app = BustAPI()
42
+ app.secret_key = "test-secret"
43
+ app.permanent_session_lifetime = timedelta(days=5)
44
+
45
+ @app.before_request
46
+ def make_session_permanent():
47
+ session.permanent = True
48
+
49
+ @app.route("/test")
50
+ def test_route():
51
+ session["foo"] = "bar"
52
+ return "ok"
53
+
54
+ client = app.test_client()
55
+ resp = client.get("/test")
56
+ assert resp.status_code == 200
57
+
58
+ cookie_header = resp.headers.get("Set-Cookie", "")
59
+ assert "session=" in cookie_header
60
+ assert "Max-Age=" in cookie_header or "expires=" in cookie_header.lower()
@@ -0,0 +1,45 @@
1
+ import pytest
2
+ from bustapi import BustAPI, redirect
3
+
4
+
5
+ def test_sync_before_request_redirect():
6
+ """Verify that returning a redirect from a synchronous before_request hook works without raising RuntimeError."""
7
+ app = BustAPI()
8
+ app.secret_key = "test-secret"
9
+
10
+ @app.before_request
11
+ def redirect_hook():
12
+ return redirect("/target")
13
+
14
+ @app.route("/")
15
+ def index():
16
+ return "Home"
17
+
18
+ @app.route("/target")
19
+ def target():
20
+ return "Target"
21
+
22
+ client = app.test_client()
23
+ # This request should be intercepted by the redirect_hook and return 302
24
+ resp = client.get("/")
25
+ assert resp.status_code == 302
26
+ assert resp.headers.get("Location") == "/target"
27
+
28
+
29
+ def test_async_before_request_redirect():
30
+ """Verify that returning a redirect from an asynchronous before_request hook also works correctly."""
31
+ app = BustAPI()
32
+ app.secret_key = "test-secret"
33
+
34
+ @app.before_request
35
+ async def redirect_hook():
36
+ return redirect("/target")
37
+
38
+ @app.route("/")
39
+ def index():
40
+ return "Home"
41
+
42
+ client = app.test_client()
43
+ resp = client.get("/")
44
+ assert resp.status_code == 302
45
+ assert resp.headers.get("Location") == "/target"
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
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
File without changes