bustapi 0.14.0__tar.gz → 0.14.1__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 (262) hide show
  1. {bustapi-0.14.0 → bustapi-0.14.1}/.gitignore +2 -1
  2. {bustapi-0.14.0 → bustapi-0.14.1}/CHANGELOG.md +6 -0
  3. {bustapi-0.14.0 → bustapi-0.14.1}/Cargo.lock +1 -1
  4. {bustapi-0.14.0 → bustapi-0.14.1}/Cargo.toml +1 -1
  5. {bustapi-0.14.0 → bustapi-0.14.1}/PKG-INFO +1 -1
  6. {bustapi-0.14.0 → bustapi-0.14.1}/docs/changelog.md +6 -0
  7. {bustapi-0.14.0 → bustapi-0.14.1}/pyproject.toml +1 -1
  8. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/__init__.py +1 -1
  9. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/auth/login.py +5 -1
  10. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/sessions.py +3 -1
  11. {bustapi-0.14.0 → bustapi-0.14.1}/tests/test_async_login.py +28 -0
  12. {bustapi-0.14.0 → bustapi-0.14.1}/- +0 -0
  13. {bustapi-0.14.0 → bustapi-0.14.1}/.github/FUNDING.yml +0 -0
  14. {bustapi-0.14.0 → bustapi-0.14.1}/.github/workflows/ci-multiplatform.yml +0 -0
  15. {bustapi-0.14.0 → bustapi-0.14.1}/.github/workflows/ci.yml +0 -0
  16. {bustapi-0.14.0 → bustapi-0.14.1}/.github/workflows/docs.yml +0 -0
  17. {bustapi-0.14.0 → bustapi-0.14.1}/.github/workflows/manual-publish.yml +0 -0
  18. {bustapi-0.14.0 → bustapi-0.14.1}/.python-version +0 -0
  19. {bustapi-0.14.0 → bustapi-0.14.1}/AGENT_KNOWLEDGE.md +0 -0
  20. {bustapi-0.14.0 → bustapi-0.14.1}/Dockerfile +0 -0
  21. {bustapi-0.14.0 → bustapi-0.14.1}/LICENSE +0 -0
  22. {bustapi-0.14.0 → bustapi-0.14.1}/README.md +0 -0
  23. {bustapi-0.14.0 → bustapi-0.14.1}/benchmarks/CACHE_BENCHMARK.md +0 -0
  24. {bustapi-0.14.0 → bustapi-0.14.1}/benchmarks/README.md +0 -0
  25. {bustapi-0.14.0 → bustapi-0.14.1}/benchmarks/app.py +0 -0
  26. {bustapi-0.14.0 → bustapi-0.14.1}/benchmarks/benchmark_all.py +0 -0
  27. {bustapi-0.14.0 → bustapi-0.14.1}/benchmarks/benchmark_avg.py +0 -0
  28. {bustapi-0.14.0 → bustapi-0.14.1}/benchmarks/benchmark_cache.py +0 -0
  29. {bustapi-0.14.0 → bustapi-0.14.1}/benchmarks/benchmark_combined.png +0 -0
  30. {bustapi-0.14.0 → bustapi-0.14.1}/benchmarks/bustapi.md +0 -0
  31. {bustapi-0.14.0 → bustapi-0.14.1}/benchmarks/bustapi_bench.py +0 -0
  32. {bustapi-0.14.0 → bustapi-0.14.1}/benchmarks/bustapi_internal.py +0 -0
  33. {bustapi-0.14.0 → bustapi-0.14.1}/benchmarks/comparison_bench.py +0 -0
  34. {bustapi-0.14.0 → bustapi-0.14.1}/benchmarks/comprehensive_benchmark.py +0 -0
  35. {bustapi-0.14.0 → bustapi-0.14.1}/benchmarks/gen_graph.py +0 -0
  36. {bustapi-0.14.0 → bustapi-0.14.1}/benchmarks/quick_bench.py +0 -0
  37. {bustapi-0.14.0 → bustapi-0.14.1}/benchmarks/resource_bench.py +0 -0
  38. {bustapi-0.14.0 → bustapi-0.14.1}/benchmarks/rps_comparison.png +0 -0
  39. {bustapi-0.14.0 → bustapi-0.14.1}/benchmarks/run_comparison_auto.py +0 -0
  40. {bustapi-0.14.0 → bustapi-0.14.1}/benchmarks/ws_benchmark.py +0 -0
  41. {bustapi-0.14.0 → bustapi-0.14.1}/docs/advanced/async.md +0 -0
  42. {bustapi-0.14.0 → bustapi-0.14.1}/docs/advanced/blueprints.md +0 -0
  43. {bustapi-0.14.0 → bustapi-0.14.1}/docs/advanced/dependency_injection.md +0 -0
  44. {bustapi-0.14.0 → bustapi-0.14.1}/docs/advanced/deployment.md +0 -0
  45. {bustapi-0.14.0 → bustapi-0.14.1}/docs/advanced/middleware.md +0 -0
  46. {bustapi-0.14.0 → bustapi-0.14.1}/docs/advanced/security.md +0 -0
  47. {bustapi-0.14.0 → bustapi-0.14.1}/docs/advanced/validation.md +0 -0
  48. {bustapi-0.14.0 → bustapi-0.14.1}/docs/api-reference.md +0 -0
  49. {bustapi-0.14.0 → bustapi-0.14.1}/docs/assets/logo.png +0 -0
  50. {bustapi-0.14.0 → bustapi-0.14.1}/docs/complete-api-reference.md +0 -0
  51. {bustapi-0.14.0 → bustapi-0.14.1}/docs/deployment-performance-guide.md +0 -0
  52. {bustapi-0.14.0 → bustapi-0.14.1}/docs/deployment.md +0 -0
  53. {bustapi-0.14.0 → bustapi-0.14.1}/docs/examples-guide.md +0 -0
  54. {bustapi-0.14.0 → bustapi-0.14.1}/docs/index.md +0 -0
  55. {bustapi-0.14.0 → bustapi-0.14.1}/docs/installation.md +0 -0
  56. {bustapi-0.14.0 → bustapi-0.14.1}/docs/overrides/.gitkeep +0 -0
  57. {bustapi-0.14.0 → bustapi-0.14.1}/docs/quickstart.md +0 -0
  58. {bustapi-0.14.0 → bustapi-0.14.1}/docs/release_track.md +0 -0
  59. {bustapi-0.14.0 → bustapi-0.14.1}/docs/site/advanced/async_support.html +0 -0
  60. {bustapi-0.14.0 → bustapi-0.14.1}/docs/site/advanced/blueprints.html +0 -0
  61. {bustapi-0.14.0 → bustapi-0.14.1}/docs/site/advanced/dependency_injection.html +0 -0
  62. {bustapi-0.14.0 → bustapi-0.14.1}/docs/site/advanced/middleware.html +0 -0
  63. {bustapi-0.14.0 → bustapi-0.14.1}/docs/site/advanced/validation.html +0 -0
  64. {bustapi-0.14.0 → bustapi-0.14.1}/docs/site/api/all.html +0 -0
  65. {bustapi-0.14.0 → bustapi-0.14.1}/docs/site/api/app.html +0 -0
  66. {bustapi-0.14.0 → bustapi-0.14.1}/docs/site/api/context.html +0 -0
  67. {bustapi-0.14.0 → bustapi-0.14.1}/docs/site/api/utilities.html +0 -0
  68. {bustapi-0.14.0 → bustapi-0.14.1}/docs/site/assets/logo.png +0 -0
  69. {bustapi-0.14.0 → bustapi-0.14.1}/docs/site/changelog.html +0 -0
  70. {bustapi-0.14.0 → bustapi-0.14.1}/docs/site/core_concepts/request_data.html +0 -0
  71. {bustapi-0.14.0 → bustapi-0.14.1}/docs/site/core_concepts/responses.html +0 -0
  72. {bustapi-0.14.0 → bustapi-0.14.1}/docs/site/core_concepts/routing.html +0 -0
  73. {bustapi-0.14.0 → bustapi-0.14.1}/docs/site/core_concepts/templates.html +0 -0
  74. {bustapi-0.14.0 → bustapi-0.14.1}/docs/site/examples/index.html +0 -0
  75. {bustapi-0.14.0 → bustapi-0.14.1}/docs/site/getting_started/index.html +0 -0
  76. {bustapi-0.14.0 → bustapi-0.14.1}/docs/site/getting_started/quickstart.html +0 -0
  77. {bustapi-0.14.0 → bustapi-0.14.1}/docs/site/index.html +0 -0
  78. {bustapi-0.14.0 → bustapi-0.14.1}/docs/site/script.js +0 -0
  79. {bustapi-0.14.0 → bustapi-0.14.1}/docs/site/style.css +0 -0
  80. {bustapi-0.14.0 → bustapi-0.14.1}/docs/stylesheets/extra.css +0 -0
  81. {bustapi-0.14.0 → bustapi-0.14.1}/docs/user-guide/authentication.md +0 -0
  82. {bustapi-0.14.0 → bustapi-0.14.1}/docs/user-guide/caching.md +0 -0
  83. {bustapi-0.14.0 → bustapi-0.14.1}/docs/user-guide/cli.md +0 -0
  84. {bustapi-0.14.0 → bustapi-0.14.1}/docs/user-guide/database.md +0 -0
  85. {bustapi-0.14.0 → bustapi-0.14.1}/docs/user-guide/documentation.md +0 -0
  86. {bustapi-0.14.0 → bustapi-0.14.1}/docs/user-guide/error_handling.md +0 -0
  87. {bustapi-0.14.0 → bustapi-0.14.1}/docs/user-guide/jwt.md +0 -0
  88. {bustapi-0.14.0 → bustapi-0.14.1}/docs/user-guide/logging.md +0 -0
  89. {bustapi-0.14.0 → bustapi-0.14.1}/docs/user-guide/multiprocessing.md +0 -0
  90. {bustapi-0.14.0 → bustapi-0.14.1}/docs/user-guide/request_data.md +0 -0
  91. {bustapi-0.14.0 → bustapi-0.14.1}/docs/user-guide/responses.md +0 -0
  92. {bustapi-0.14.0 → bustapi-0.14.1}/docs/user-guide/routing.md +0 -0
  93. {bustapi-0.14.0 → bustapi-0.14.1}/docs/user-guide/sessions.md +0 -0
  94. {bustapi-0.14.0 → bustapi-0.14.1}/docs/user-guide/static_files.md +0 -0
  95. {bustapi-0.14.0 → bustapi-0.14.1}/docs/user-guide/templates.md +0 -0
  96. {bustapi-0.14.0 → bustapi-0.14.1}/docs/user-guide/turbo-routes.md +0 -0
  97. {bustapi-0.14.0 → bustapi-0.14.1}/docs/user-guide/video-streaming.md +0 -0
  98. {bustapi-0.14.0 → bustapi-0.14.1}/docs/websockets.md +0 -0
  99. {bustapi-0.14.0 → bustapi-0.14.1}/examples/advanced/08_auto_docs.py +0 -0
  100. {bustapi-0.14.0 → bustapi-0.14.1}/examples/advanced/12_test_modes.py +0 -0
  101. {bustapi-0.14.0 → bustapi-0.14.1}/examples/advanced/13_error_handling.py +0 -0
  102. {bustapi-0.14.0 → bustapi-0.14.1}/examples/advanced/14_middleware.py +0 -0
  103. {bustapi-0.14.0 → bustapi-0.14.1}/examples/advanced/16_middleware_session.py +0 -0
  104. {bustapi-0.14.0 → bustapi-0.14.1}/examples/advanced/20_file_uploads.py +0 -0
  105. {bustapi-0.14.0 → bustapi-0.14.1}/examples/advanced/24_body_and_depends.py +0 -0
  106. {bustapi-0.14.0 → bustapi-0.14.1}/examples/advanced/27_video_stream.py +0 -0
  107. {bustapi-0.14.0 → bustapi-0.14.1}/examples/advanced/28_websocket.py +0 -0
  108. {bustapi-0.14.0 → bustapi-0.14.1}/examples/advanced/29_turbo_websocket.py +0 -0
  109. {bustapi-0.14.0 → bustapi-0.14.1}/examples/basics/01_hello_world.py +0 -0
  110. {bustapi-0.14.0 → bustapi-0.14.1}/examples/basics/02_parameters.py +0 -0
  111. {bustapi-0.14.0 → bustapi-0.14.1}/examples/basics/03_async.py +0 -0
  112. {bustapi-0.14.0 → bustapi-0.14.1}/examples/basics/04_request_data.py +0 -0
  113. {bustapi-0.14.0 → bustapi-0.14.1}/examples/basics/19_all_types.py +0 -0
  114. {bustapi-0.14.0 → bustapi-0.14.1}/examples/database/07_database_raw.py +0 -0
  115. {bustapi-0.14.0 → bustapi-0.14.1}/examples/database/10_database_sqlmodel.py +0 -0
  116. {bustapi-0.14.0 → bustapi-0.14.1}/examples/routing/06_blueprints.py +0 -0
  117. {bustapi-0.14.0 → bustapi-0.14.1}/examples/routing/09_complex_routing.py +0 -0
  118. {bustapi-0.14.0 → bustapi-0.14.1}/examples/routing/21_path_validation.py +0 -0
  119. {bustapi-0.14.0 → bustapi-0.14.1}/examples/routing/22_path_docs.py +0 -0
  120. {bustapi-0.14.0 → bustapi-0.14.1}/examples/routing/23_query_validation.py +0 -0
  121. {bustapi-0.14.0 → bustapi-0.14.1}/examples/routing/blueprint_with_jwt.py +0 -0
  122. {bustapi-0.14.0 → bustapi-0.14.1}/examples/security/10_rate_limit_demo.py +0 -0
  123. {bustapi-0.14.0 → bustapi-0.14.1}/examples/security/11_security_demo.py +0 -0
  124. {bustapi-0.14.0 → bustapi-0.14.1}/examples/security/17_jwt_auth.py +0 -0
  125. {bustapi-0.14.0 → bustapi-0.14.1}/examples/security/17_safe_features.py +0 -0
  126. {bustapi-0.14.0 → bustapi-0.14.1}/examples/security/18_jwt_cookies.py +0 -0
  127. {bustapi-0.14.0 → bustapi-0.14.1}/examples/security/18_safe_advanced.py +0 -0
  128. {bustapi-0.14.0 → bustapi-0.14.1}/examples/security/18_session_login.py +0 -0
  129. {bustapi-0.14.0 → bustapi-0.14.1}/examples/templates/05_templates.py +0 -0
  130. {bustapi-0.14.0 → bustapi-0.14.1}/examples/templates/26_complex_template.py +0 -0
  131. {bustapi-0.14.0 → bustapi-0.14.1}/examples/templates/templates/index.html +0 -0
  132. {bustapi-0.14.0 → bustapi-0.14.1}/examples/turbo/cache_test.py +0 -0
  133. {bustapi-0.14.0 → bustapi-0.14.1}/examples/turbo/fair_benchmark.py +0 -0
  134. {bustapi-0.14.0 → bustapi-0.14.1}/examples/turbo/typed_turbo_example.py +0 -0
  135. {bustapi-0.14.0 → bustapi-0.14.1}/examples/ws/app.py +0 -0
  136. {bustapi-0.14.0 → bustapi-0.14.1}/examples/ws/templates/index.html +0 -0
  137. {bustapi-0.14.0 → bustapi-0.14.1}/examples/ws/websockets_demo.py +0 -0
  138. {bustapi-0.14.0 → bustapi-0.14.1}/examples/ws/ws_limit.py +0 -0
  139. {bustapi-0.14.0 → bustapi-0.14.1}/mkdocs.yml +0 -0
  140. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/app.py +0 -0
  141. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/auth/__init__.py +0 -0
  142. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/auth/csrf.py +0 -0
  143. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/auth/decorators.py +0 -0
  144. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/auth/password.py +0 -0
  145. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/auth/tokens.py +0 -0
  146. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/auth/user.py +0 -0
  147. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/cli/__init__.py +0 -0
  148. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/cli/main.py +0 -0
  149. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/context.py +0 -0
  150. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/core/__init__.py +0 -0
  151. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/core/asgi.py +0 -0
  152. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/core/exceptions.py +0 -0
  153. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/core/helpers.py +0 -0
  154. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/core/logging.py +0 -0
  155. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/dependencies.py +0 -0
  156. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/dispatch.py +0 -0
  157. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/documentation/__init__.py +0 -0
  158. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/documentation/generator.py +0 -0
  159. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/extraction.py +0 -0
  160. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/fastapi_compat.py +0 -0
  161. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/hooks.py +0 -0
  162. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/http/__init__.py +0 -0
  163. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/http/request.py +0 -0
  164. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/http/response.py +0 -0
  165. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/jwt.py +0 -0
  166. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/logging.py +0 -0
  167. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/middleware.py +0 -0
  168. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/multiprocess.py +0 -0
  169. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/params.py +0 -0
  170. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/py.typed +0 -0
  171. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/responses.py +0 -0
  172. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/routing/__init__.py +0 -0
  173. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/routing/blueprints.py +0 -0
  174. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/routing/decorators.py +0 -0
  175. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/safe/__init__.py +0 -0
  176. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/safe/concurrency.py +0 -0
  177. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/safe/types.py +0 -0
  178. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/security/__init__.py +0 -0
  179. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/security/extension.py +0 -0
  180. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/security/rate_limit.py +0 -0
  181. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/server/__init__.py +0 -0
  182. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/server/runner.py +0 -0
  183. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/server/wsgi.py +0 -0
  184. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/templating/__init__.py +0 -0
  185. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/templating/engine.py +0 -0
  186. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/templating/mixin.py +0 -0
  187. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/testing/__init__.py +0 -0
  188. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/testing/client.py +0 -0
  189. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/utils.py +0 -0
  190. {bustapi-0.14.0 → bustapi-0.14.1}/python/bustapi/websocket.py +0 -0
  191. {bustapi-0.14.0 → bustapi-0.14.1}/run_all_examples.py +0 -0
  192. {bustapi-0.14.0 → bustapi-0.14.1}/scratch/test_abort.py +0 -0
  193. {bustapi-0.14.0 → bustapi-0.14.1}/scratch/test_headers.py +0 -0
  194. {bustapi-0.14.0 → bustapi-0.14.1}/src/bindings/app.rs +0 -0
  195. {bustapi-0.14.0 → bustapi-0.14.1}/src/bindings/converters.rs +0 -0
  196. {bustapi-0.14.0 → bustapi-0.14.1}/src/bindings/handlers.rs +0 -0
  197. {bustapi-0.14.0 → bustapi-0.14.1}/src/bindings/mod.rs +0 -0
  198. {bustapi-0.14.0 → bustapi-0.14.1}/src/bindings/request.rs +0 -0
  199. {bustapi-0.14.0 → bustapi-0.14.1}/src/bindings/typed_turbo.rs +0 -0
  200. {bustapi-0.14.0 → bustapi-0.14.1}/src/bindings/websocket.rs +0 -0
  201. {bustapi-0.14.0 → bustapi-0.14.1}/src/crypto.rs +0 -0
  202. {bustapi-0.14.0 → bustapi-0.14.1}/src/jwt.rs +0 -0
  203. {bustapi-0.14.0 → bustapi-0.14.1}/src/lib.rs +0 -0
  204. {bustapi-0.14.0 → bustapi-0.14.1}/src/logger.rs +0 -0
  205. {bustapi-0.14.0 → bustapi-0.14.1}/src/rate_limiter.rs +0 -0
  206. {bustapi-0.14.0 → bustapi-0.14.1}/src/request/methods.rs +0 -0
  207. {bustapi-0.14.0 → bustapi-0.14.1}/src/request/mod.rs +0 -0
  208. {bustapi-0.14.0 → bustapi-0.14.1}/src/request/tests.rs +0 -0
  209. {bustapi-0.14.0 → bustapi-0.14.1}/src/response/builders.rs +0 -0
  210. {bustapi-0.14.0 → bustapi-0.14.1}/src/response/methods.rs +0 -0
  211. {bustapi-0.14.0 → bustapi-0.14.1}/src/response/mod.rs +0 -0
  212. {bustapi-0.14.0 → bustapi-0.14.1}/src/router/handlers.rs +0 -0
  213. {bustapi-0.14.0 → bustapi-0.14.1}/src/router/matching.rs +0 -0
  214. {bustapi-0.14.0 → bustapi-0.14.1}/src/router/middleware.rs +0 -0
  215. {bustapi-0.14.0 → bustapi-0.14.1}/src/router/mod.rs +0 -0
  216. {bustapi-0.14.0 → bustapi-0.14.1}/src/router/tests.rs +0 -0
  217. {bustapi-0.14.0 → bustapi-0.14.1}/src/server/handlers.rs +0 -0
  218. {bustapi-0.14.0 → bustapi-0.14.1}/src/server/mod.rs +0 -0
  219. {bustapi-0.14.0 → bustapi-0.14.1}/src/server/startup.rs +0 -0
  220. {bustapi-0.14.0 → bustapi-0.14.1}/src/server/stream.rs +0 -0
  221. {bustapi-0.14.0 → bustapi-0.14.1}/src/static_files.rs +0 -0
  222. {bustapi-0.14.0 → bustapi-0.14.1}/src/templating.rs +0 -0
  223. {bustapi-0.14.0 → bustapi-0.14.1}/src/watcher.rs +0 -0
  224. {bustapi-0.14.0 → bustapi-0.14.1}/src/websocket/config.rs +0 -0
  225. {bustapi-0.14.0 → bustapi-0.14.1}/src/websocket/mod.rs +0 -0
  226. {bustapi-0.14.0 → bustapi-0.14.1}/src/websocket/session.rs +0 -0
  227. {bustapi-0.14.0 → bustapi-0.14.1}/src/websocket/turbo.rs +0 -0
  228. {bustapi-0.14.0 → bustapi-0.14.1}/static/style.css +0 -0
  229. {bustapi-0.14.0 → bustapi-0.14.1}/templates/base.html +0 -0
  230. {bustapi-0.14.0 → bustapi-0.14.1}/templates/complex.html +0 -0
  231. {bustapi-0.14.0 → bustapi-0.14.1}/tests/docs_test_all.py +0 -0
  232. {bustapi-0.14.0 → bustapi-0.14.1}/tests/docs_test_api_reference.py +0 -0
  233. {bustapi-0.14.0 → bustapi-0.14.1}/tests/docs_test_installation.py +0 -0
  234. {bustapi-0.14.0 → bustapi-0.14.1}/tests/docs_test_quickstart.py +0 -0
  235. {bustapi-0.14.0 → bustapi-0.14.1}/tests/docs_test_simple.py +0 -0
  236. {bustapi-0.14.0 → bustapi-0.14.1}/tests/test_050_features.py +0 -0
  237. {bustapi-0.14.0 → bustapi-0.14.1}/tests/test_async_hooks.py +0 -0
  238. {bustapi-0.14.0 → bustapi-0.14.1}/tests/test_auth.py +0 -0
  239. {bustapi-0.14.0 → bustapi-0.14.1}/tests/test_discussion_21.py +0 -0
  240. {bustapi-0.14.0 → bustapi-0.14.1}/tests/test_discussion_22.py +0 -0
  241. {bustapi-0.14.0 → bustapi-0.14.1}/tests/test_discussion_28.py +0 -0
  242. {bustapi-0.14.0 → bustapi-0.14.1}/tests/test_examples.py +0 -0
  243. {bustapi-0.14.0 → bustapi-0.14.1}/tests/test_hot_reload.py +0 -0
  244. {bustapi-0.14.0 → bustapi-0.14.1}/tests/test_issue_18.py +0 -0
  245. {bustapi-0.14.0 → bustapi-0.14.1}/tests/test_issue_23.py +0 -0
  246. {bustapi-0.14.0 → bustapi-0.14.1}/tests/test_issue_24.py +0 -0
  247. {bustapi-0.14.0 → bustapi-0.14.1}/tests/test_issue_29.py +0 -0
  248. {bustapi-0.14.0 → bustapi-0.14.1}/tests/test_jwt.py +0 -0
  249. {bustapi-0.14.0 → bustapi-0.14.1}/tests/test_jwt_cookies.py +0 -0
  250. {bustapi-0.14.0 → bustapi-0.14.1}/tests/test_login_manager.py +0 -0
  251. {bustapi-0.14.0 → bustapi-0.14.1}/tests/test_middleware.py +0 -0
  252. {bustapi-0.14.0 → bustapi-0.14.1}/tests/test_multiprocess_stability.py +0 -0
  253. {bustapi-0.14.0 → bustapi-0.14.1}/tests/test_new_examples.py +0 -0
  254. {bustapi-0.14.0 → bustapi-0.14.1}/tests/test_orm_conflict.py +0 -0
  255. {bustapi-0.14.0 → bustapi-0.14.1}/tests/test_path_standalone.py +0 -0
  256. {bustapi-0.14.0 → bustapi-0.14.1}/tests/test_path_validation.py +0 -0
  257. {bustapi-0.14.0 → bustapi-0.14.1}/tests/test_rate_limit_rust.py +0 -0
  258. {bustapi-0.14.0 → bustapi-0.14.1}/tests/test_safe.py +0 -0
  259. {bustapi-0.14.0 → bustapi-0.14.1}/tests/test_security_unit.py +0 -0
  260. {bustapi-0.14.0 → bustapi-0.14.1}/tests/test_sessions.py +0 -0
  261. {bustapi-0.14.0 → bustapi-0.14.1}/tests/test_zero_copy.py +0 -0
  262. {bustapi-0.14.0 → bustapi-0.14.1}/tests/verify_router.py +0 -0
@@ -164,4 +164,5 @@ ignore/*.md
164
164
  ignore/
165
165
  issues/
166
166
 
167
- *.db
167
+ *.db
168
+ scratch/
@@ -2,6 +2,12 @@
2
2
 
3
3
  All notable changes to this project will be documented here.
4
4
 
5
+ ## [0.14.1] - 2026-06-17
6
+
7
+ ### Fixed
8
+ - **Auth Login**: Resolved `RuntimeWarning: coroutine 'load_user' was never awaited` when using an asynchronous `user_loader` callback with `login_user(user_id)`. The loader's return value is now correctly run/awaited synchronously.
9
+ - **Session Expiration**: Replaced deprecated `datetime.utcnow()` with timezone-aware `datetime.now(timezone.utc)` to avoid future Python compatibility deprecation warnings.
10
+
5
11
  ## [0.14.0] - 2026-06-17
6
12
 
7
13
  ### Added
@@ -432,7 +432,7 @@ checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
432
432
 
433
433
  [[package]]
434
434
  name = "bustapi_core"
435
- version = "0.14.0"
435
+ version = "0.14.1"
436
436
  dependencies = [
437
437
  "actix-files",
438
438
  "actix-http",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "bustapi_core"
3
- version = "0.14.0"
3
+ version = "0.14.1"
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.14.0
3
+ Version: 0.14.1
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -2,6 +2,12 @@
2
2
 
3
3
  All notable changes to this project will be documented here.
4
4
 
5
+ ## [0.14.1] - 2026-06-17
6
+
7
+ ### Fixed
8
+ - **Auth Login**: Resolved `RuntimeWarning: coroutine 'load_user' was never awaited` when using an asynchronous `user_loader` callback with `login_user(user_id)`. The loader's return value is now correctly run/awaited synchronously.
9
+ - **Session Expiration**: Replaced deprecated `datetime.utcnow()` with timezone-aware `datetime.now(timezone.utc)` to avoid future Python compatibility deprecation warnings.
10
+
5
11
  ## [0.14.0] - 2026-06-17
6
12
 
7
13
  ### Added
@@ -4,7 +4,7 @@ build-backend = "maturin"
4
4
 
5
5
  [project]
6
6
  name = "bustapi"
7
- version = "0.14.0"
7
+ version = "0.14.1"
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.14.0"
25
+ __version__ = "0.14.1"
26
26
  __author__ = "BustAPI" # with GrandpaEJ
27
27
  __email__ = ""
28
28
 
@@ -162,7 +162,11 @@ def login_user(user, remember: bool = False, fresh: bool = True) -> bool:
162
162
 
163
163
  try:
164
164
  res = login_manager._user_loader_callback(user_id)
165
- if not inspect.isawaitable(res):
165
+ if inspect.isawaitable(res):
166
+ from ..utils import async_to_sync
167
+
168
+ loaded_user = async_to_sync(res)
169
+ else:
166
170
  loaded_user = res
167
171
  except Exception:
168
172
  pass
@@ -128,7 +128,9 @@ class SecureCookieSessionInterface(SessionInterface):
128
128
  expires = None
129
129
  max_age = None
130
130
  if session.permanent and app.permanent_session_lifetime:
131
- expires = datetime.utcnow() + app.permanent_session_lifetime
131
+ from datetime import timezone
132
+
133
+ expires = datetime.now(timezone.utc) + app.permanent_session_lifetime
132
134
  max_age = int(app.permanent_session_lifetime.total_seconds())
133
135
 
134
136
  response.set_cookie(
@@ -78,5 +78,33 @@ def test_sync_user_loader_still_works():
78
78
  assert response.json == {"id": 1, "name": "Sync User"}
79
79
 
80
80
 
81
+ def test_login_user_with_async_user_loader():
82
+ app = BustAPI()
83
+ app.secret_key = "test-secret"
84
+ login_manager = LoginManager(app)
85
+
86
+ async def get_user_from_db(user_id):
87
+ await asyncio.sleep(0.001)
88
+ if user_id == "42":
89
+ return User(42, "Direct Async User")
90
+ return None
91
+
92
+ @login_manager.user_loader
93
+ async def load_user(user_id):
94
+ return await get_user_from_db(user_id)
95
+
96
+ @app.route("/login-raw")
97
+ def login_raw():
98
+ # Call login_user with raw ID
99
+ login_user("42")
100
+ # Check if the resolved user is loaded immediately
101
+ return {"id": current_user.id, "name": current_user.name}
102
+
103
+ client = BustTestClient(app)
104
+ response = client.get("/login-raw")
105
+ assert response.status_code == 200
106
+ assert response.json == {"id": 42, "name": "Direct Async User"}
107
+
108
+
81
109
  if __name__ == "__main__":
82
110
  pytest.main([__file__])
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