fastapi-startkit 0.53.0__tar.gz → 0.55.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (344) hide show
  1. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/PKG-INFO +1 -1
  2. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/pyproject.toml +1 -1
  3. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/commands/serve_command.py +34 -23
  4. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/config/fastapi.py +1 -0
  5. fastapi_startkit-0.55.0/src/fastapi_startkit/masoniteorm/connections/connection.py +212 -0
  6. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/connections/postgres_connection.py +0 -3
  7. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/Blueprint.py +3 -2
  8. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/testing/transaction.py +4 -2
  9. fastapi_startkit-0.53.0/src/fastapi_startkit/masoniteorm/connections/connection.py +0 -151
  10. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/README.md +0 -0
  11. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/.DS_Store +0 -0
  12. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/__init__.py +0 -0
  13. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/__init__.py +0 -0
  14. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/agent.py +0 -0
  15. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/ai.py +0 -0
  16. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/audio.py +0 -0
  17. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/audio_factory.py +0 -0
  18. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/config/ai.py +0 -0
  19. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/config/config.py +0 -0
  20. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/decorators.py +0 -0
  21. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/document.py +0 -0
  22. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/image.py +0 -0
  23. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/image_factory.py +0 -0
  24. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/judge.py +0 -0
  25. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/lab.py +0 -0
  26. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/pipeline.py +0 -0
  27. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/providers/__init__.py +0 -0
  28. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/providers/ai_provider.py +0 -0
  29. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/recording.py +0 -0
  30. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/runner.py +0 -0
  31. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/state.py +0 -0
  32. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/testing.py +0 -0
  33. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/tinker.py +0 -0
  34. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/types.py +0 -0
  35. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/application.py +0 -0
  36. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/__init__.py +0 -0
  37. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/auth.py +0 -0
  38. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/channels.py +0 -0
  39. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/config.py +0 -0
  40. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/drivers/__init__.py +0 -0
  41. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/drivers/log_driver.py +0 -0
  42. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/drivers/reverb_driver.py +0 -0
  43. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/event.py +0 -0
  44. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/helpers.py +0 -0
  45. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/manager.py +0 -0
  46. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/provider.py +0 -0
  47. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/reverb/__init__.py +0 -0
  48. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/reverb/channel_manager.py +0 -0
  49. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/reverb/connection.py +0 -0
  50. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/reverb/server.py +0 -0
  51. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/stubs/__init__.py +0 -0
  52. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/stubs/channels.py +0 -0
  53. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/carbon/__init__.py +0 -0
  54. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/carbon/carbon.py +0 -0
  55. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/config/__init__.py +0 -0
  56. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/config/app.py +0 -0
  57. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/configuration/Configuration.py +0 -0
  58. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/configuration/__init__.py +0 -0
  59. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/configuration/config.py +0 -0
  60. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/configuration/helpers.py +0 -0
  61. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/configuration/providers/ConfigurationProvider.py +0 -0
  62. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/configuration/providers/__init__.py +0 -0
  63. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/console/__init__.py +0 -0
  64. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/console/application.py +0 -0
  65. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/console/can_override_config.py +0 -0
  66. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/console/can_override_default_options.py +0 -0
  67. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/console/command.py +0 -0
  68. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/console/publish_command.py +0 -0
  69. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/container/__init__.py +0 -0
  70. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/container/container.py +0 -0
  71. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/environment/__init__.py +0 -0
  72. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/environment/environment.py +0 -0
  73. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/events/__init__.py +0 -0
  74. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/events/dispatcher.py +0 -0
  75. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/events/fake.py +0 -0
  76. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/events/helpers.py +0 -0
  77. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/events/listener.py +0 -0
  78. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/events/provider.py +0 -0
  79. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/exceptions/__init__.py +0 -0
  80. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/exceptions/exceptions.py +0 -0
  81. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/exceptions/handler.py +0 -0
  82. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/AI.py +0 -0
  83. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/AI.pyi +0 -0
  84. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Cache.py +0 -0
  85. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Config.py +0 -0
  86. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Config.pyi +0 -0
  87. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Dump.py +0 -0
  88. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Dump.pyi +0 -0
  89. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Event.py +0 -0
  90. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Event.pyi +0 -0
  91. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Facade.py +0 -0
  92. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Gate.py +0 -0
  93. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Gate.pyi +0 -0
  94. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Hash.py +0 -0
  95. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Hash.pyi +0 -0
  96. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Loader.py +0 -0
  97. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Loader.pyi +0 -0
  98. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Mail.py +0 -0
  99. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Mail.pyi +0 -0
  100. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Notification.py +0 -0
  101. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Notification.pyi +0 -0
  102. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Queue.py +0 -0
  103. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Queue.pyi +0 -0
  104. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/RateLimiter.py +0 -0
  105. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/RateLimiter.pyi +0 -0
  106. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Request.py +0 -0
  107. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Request.pyi +0 -0
  108. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Response.py +0 -0
  109. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Response.pyi +0 -0
  110. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Session.py +0 -0
  111. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Session.pyi +0 -0
  112. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Url.py +0 -0
  113. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Url.pyi +0 -0
  114. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/View.py +0 -0
  115. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/View.pyi +0 -0
  116. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Vite.py +0 -0
  117. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Vite.pyi +0 -0
  118. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/__init__.py +0 -0
  119. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/__init__.py +0 -0
  120. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/commands/__init__.py +0 -0
  121. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/config/__init__.py +0 -0
  122. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/events.py +0 -0
  123. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/exceptions.py +0 -0
  124. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/middleware.py +0 -0
  125. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/providers/fastapi_provider.py +0 -0
  126. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/requests/model.py +0 -0
  127. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/routers/router.py +0 -0
  128. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/testing/__init__.py +0 -0
  129. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/testing/assertable_json.py +0 -0
  130. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/testing/test_case.py +0 -0
  131. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/testing/test_response.py +0 -0
  132. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/foundation/app_provider.py +0 -0
  133. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/inertia/__init__.py +0 -0
  134. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/inertia/constant.py +0 -0
  135. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/inertia/context.py +0 -0
  136. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/inertia/inertia.py +0 -0
  137. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/inertia/middleware.py +0 -0
  138. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/inertia/props/props.py +0 -0
  139. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/inertia/provider.py +0 -0
  140. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/jsonapi/__init__.py +0 -0
  141. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/jsonapi/response.py +0 -0
  142. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/loader/Loader.py +0 -0
  143. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/loader/__init__.py +0 -0
  144. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/ChannelFactory.py +0 -0
  145. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/__init__.py +0 -0
  146. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/channels/BaseChannel.py +0 -0
  147. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/channels/DailyChannel.py +0 -0
  148. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/channels/MultiBaseChannel.py +0 -0
  149. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/channels/SingleChannel.py +0 -0
  150. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/channels/SlackChannel.py +0 -0
  151. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/channels/StackChannel.py +0 -0
  152. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/channels/SyslogChannel.py +0 -0
  153. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/channels/TerminalChannel.py +0 -0
  154. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/channels/__init__.py +0 -0
  155. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/config/__init__.py +0 -0
  156. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/config/channels.py +0 -0
  157. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/config/logging.py +0 -0
  158. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/drivers/BaseDriver.py +0 -0
  159. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/drivers/LogSingleDriver.py +0 -0
  160. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/drivers/LogSlackDriver.py +0 -0
  161. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/drivers/LogSyslogDriver.py +0 -0
  162. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/drivers/LogTerminalDriver.py +0 -0
  163. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/drivers/__init__.py +0 -0
  164. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/factory.py +0 -0
  165. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/file.py +0 -0
  166. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/handler.py +0 -0
  167. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/listeners.py +0 -0
  168. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/logger.py +0 -0
  169. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/managers/LoggingManager.py +0 -0
  170. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/managers/__init__.py +0 -0
  171. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/providers/__init__.py +0 -0
  172. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/providers/log_provider.py +0 -0
  173. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/__init__.py +0 -0
  174. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/collection/Collection.py +0 -0
  175. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/collection/__init__.py +0 -0
  176. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/DBMigrateCommand.py +0 -0
  177. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/DBSeedCommand.py +0 -0
  178. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/MakeMigrationCommand.py +0 -0
  179. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/MakeModelCommand.py +0 -0
  180. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/MakeModelDocstringCommand.py +0 -0
  181. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/MakeObserverCommand.py +0 -0
  182. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/MakeSeedCommand.py +0 -0
  183. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/MigrateFreshCommand.py +0 -0
  184. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/MigrateRefreshCommand.py +0 -0
  185. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/MigrateResetCommand.py +0 -0
  186. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/MigrateRollbackCommand.py +0 -0
  187. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/MigrateStatusCommand.py +0 -0
  188. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/ShellCommand.py +0 -0
  189. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/__init__.py +0 -0
  190. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/stubs/create_migration.stub +0 -0
  191. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/stubs/create_seed.stub +0 -0
  192. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/stubs/model.stub +0 -0
  193. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/stubs/observer.stub +0 -0
  194. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/stubs/table_migration.stub +0 -0
  195. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/config/__init__.py +0 -0
  196. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/config/config.py +0 -0
  197. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/config/database.py +0 -0
  198. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/connections/factory.py +0 -0
  199. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/connections/manager.py +0 -0
  200. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/connections/mysql_connection.py +0 -0
  201. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/connections/sqlite_connection.py +0 -0
  202. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/exceptions.py +0 -0
  203. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/expressions/__init__.py +0 -0
  204. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/expressions/expressions.py +0 -0
  205. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/facades/DB.py +0 -0
  206. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/facades/Schema.py +0 -0
  207. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/facades/__init__.py +0 -0
  208. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/factory/__init__.py +0 -0
  209. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/factory/factory.py +0 -0
  210. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/helpers/__init__.py +0 -0
  211. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/helpers/misc.py +0 -0
  212. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/migrations/Migration.py +0 -0
  213. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/migrations/Migrator.py +0 -0
  214. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/migrations/__init__.py +0 -0
  215. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/models/MigrationModel.py +0 -0
  216. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/models/__init__.py +0 -0
  217. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/models/attribute.py +0 -0
  218. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/models/builder.py +0 -0
  219. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/models/caster.py +0 -0
  220. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/models/fields.py +0 -0
  221. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/models/model.py +0 -0
  222. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/models/observer.py +0 -0
  223. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/models/pivot.py +0 -0
  224. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/models/registry.py +0 -0
  225. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/models/relationship.py +0 -0
  226. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/observers/ObservesEvents.py +0 -0
  227. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/observers/__init__.py +0 -0
  228. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/pagination/BasePaginator.py +0 -0
  229. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/pagination/LengthAwarePaginator.py +0 -0
  230. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/pagination/SimplePaginator.py +0 -0
  231. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/pagination/__init__.py +0 -0
  232. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/providers/DatabaseProvider.py +0 -0
  233. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/providers/__init__.py +0 -0
  234. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/EagerLoadMixin.py +0 -0
  235. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/EagerRelation.py +0 -0
  236. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/__init__.py +0 -0
  237. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/grammars/BaseGrammar.py +0 -0
  238. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/grammars/MSSQLGrammar.py +0 -0
  239. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/grammars/MySQLGrammar.py +0 -0
  240. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/grammars/PostgresGrammar.py +0 -0
  241. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/grammars/SQLiteGrammar.py +0 -0
  242. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/grammars/__init__.py +0 -0
  243. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/processors/MSSQLPostProcessor.py +0 -0
  244. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/processors/MySQLPostProcessor.py +0 -0
  245. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/processors/PostgresPostProcessor.py +0 -0
  246. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/processors/SQLitePostProcessor.py +0 -0
  247. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/processors/__init__.py +0 -0
  248. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/support.py +0 -0
  249. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/relationships/BaseRelationship.py +0 -0
  250. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/relationships/BelongsTo.py +0 -0
  251. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/relationships/BelongsToMany.py +0 -0
  252. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/relationships/HasMany.py +0 -0
  253. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/relationships/HasManyThrough.py +0 -0
  254. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/relationships/HasOne.py +0 -0
  255. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/relationships/HasOneThrough.py +0 -0
  256. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/relationships/MorphMany.py +0 -0
  257. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/relationships/MorphOne.py +0 -0
  258. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/relationships/MorphTo.py +0 -0
  259. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/relationships/MorphToMany.py +0 -0
  260. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/relationships/__init__.py +0 -0
  261. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/Column.py +0 -0
  262. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/ColumnDiff.py +0 -0
  263. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/Constraint.py +0 -0
  264. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/ForeignKeyConstraint.py +0 -0
  265. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/Index.py +0 -0
  266. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/Table.py +0 -0
  267. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/TableDiff.py +0 -0
  268. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/__init__.py +0 -0
  269. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/platforms/MSSQLPlatform.py +0 -0
  270. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/platforms/MySQLPlatform.py +0 -0
  271. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/platforms/Platform.py +0 -0
  272. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/platforms/PostgresPlatform.py +0 -0
  273. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/platforms/SQLitePlatform.py +0 -0
  274. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/platforms/__init__.py +0 -0
  275. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/schema.py +0 -0
  276. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/seeders/Seeder.py +0 -0
  277. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/seeders/__init__.py +0 -0
  278. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/stubs/create-migration.html +0 -0
  279. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/stubs/table-migration.html +0 -0
  280. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/testing/__init__.py +0 -0
  281. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/mcp/__init__.py +0 -0
  282. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/mcp/argument.py +0 -0
  283. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/mcp/prompt.py +0 -0
  284. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/mcp/protocol.py +0 -0
  285. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/mcp/providers/__init__.py +0 -0
  286. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/mcp/providers/mcp_provider.py +0 -0
  287. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/mcp/request.py +0 -0
  288. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/mcp/resource.py +0 -0
  289. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/mcp/response.py +0 -0
  290. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/mcp/server.py +0 -0
  291. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/mcp/tool.py +0 -0
  292. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/process/__init__.py +0 -0
  293. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/process/exception.py +0 -0
  294. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/process/fake.py +0 -0
  295. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/process/process.py +0 -0
  296. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/process/result.py +0 -0
  297. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/py.typed +0 -0
  298. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/skills/__init__.py +0 -0
  299. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/skills/adapters/__init__.py +0 -0
  300. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/skills/adapters/base.py +0 -0
  301. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/skills/adapters/claude.py +0 -0
  302. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/skills/adapters/gemini.py +0 -0
  303. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/skills/commands/__init__.py +0 -0
  304. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/skills/commands/skills.py +0 -0
  305. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/skills/parser.py +0 -0
  306. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/skills/provider.py +0 -0
  307. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/skills/registry.py +0 -0
  308. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/skills/stubs/.ai/fastapi-startkit/database/SKILL.md +0 -0
  309. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/skills/stubs/.ai/fastapi-startkit/fastapi/SKILL.md +0 -0
  310. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/skills/stubs/.ai/fastapi-startkit/inertia/SKILL.md +0 -0
  311. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/storage/__init__.py +0 -0
  312. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/storage/config/__init__.py +0 -0
  313. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/storage/config/storage.py +0 -0
  314. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/storage/data/mime.types +0 -0
  315. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/storage/drivers/__init__.py +0 -0
  316. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/storage/drivers/fake.py +0 -0
  317. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/storage/drivers/local.py +0 -0
  318. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/storage/drivers/s3.py +0 -0
  319. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/storage/file.py +0 -0
  320. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/storage/filestream.py +0 -0
  321. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/storage/helper.py +0 -0
  322. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/storage/providers/provider.py +0 -0
  323. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/storage/storage.py +0 -0
  324. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/support/__init__.py +0 -0
  325. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/support/collection.py +0 -0
  326. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/support/dataclass.py +0 -0
  327. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/support/providers/__init__.py +0 -0
  328. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/support/providers/provider.py +0 -0
  329. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/support/string.py +0 -0
  330. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/support/structures.py +0 -0
  331. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/support/uri.py +0 -0
  332. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/testing/__init__.py +0 -0
  333. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/testing/test_case.py +0 -0
  334. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/vite/__init__.py +0 -0
  335. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/vite/config/vite.py +0 -0
  336. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/vite/exceptions.py +0 -0
  337. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/vite/providers/provider.py +0 -0
  338. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/vite/stubs/package.json +0 -0
  339. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/vite/stubs/resources/css/app.css +0 -0
  340. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/vite/stubs/resources/js/app.ts +0 -0
  341. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/vite/stubs/resources/templates/index.html +0 -0
  342. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/vite/stubs/tsconfig.json +0 -0
  343. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/vite/stubs/vite.config.ts +0 -0
  344. {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/vite/vite.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: fastapi-startkit
3
- Version: 0.53.0
3
+ Version: 0.55.0
4
4
  Summary: A modular, provider-driven framework for building async Python web applications with FastAPI — bundling a service container, configuration system, an async-first ORM, facades, and a Cleo-powered console.
5
5
  Keywords: fastapi,framework,async,web,asgi,orm,sqlalchemy,pydantic,ioc-container,dependency-injection,service-provider,cli,console,configuration,microservices,starter-kit,boilerplate
6
6
  Author: Bedram Tamang
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fastapi-startkit"
3
- version = "0.53.0"
3
+ version = "0.55.0"
4
4
  description = "A modular, provider-driven framework for building async Python web applications with FastAPI — bundling a service container, configuration system, an async-first ORM, facades, and a Cleo-powered console."
5
5
  readme = "README.md"
6
6
  keywords = [
@@ -1,8 +1,11 @@
1
+ from typing import Any
2
+
1
3
  from cleo.helpers import option
2
4
 
3
5
  from fastapi_startkit import Config
4
6
  from fastapi_startkit.console.command import Command
5
7
  from fastapi_startkit.environment import value as cast_value
8
+ from fastapi_startkit.fastapi.config import FastAPIConfig
6
9
  from fastapi_startkit.support import Uri, Uriable
7
10
 
8
11
 
@@ -36,18 +39,27 @@ class ServeCommand(Command):
36
39
  "app",
37
40
  "a",
38
41
  flag=False,
39
- default="bootstrap.application:app",
40
- description="The application to serve",
42
+ default=None,
43
+ description="The application to serve (overrides fastapi config)",
41
44
  ),
42
45
  ]
43
46
 
44
- def resolve_option(self, key: str, default: str | int | None = None):
45
- value = self.option(key) or Config.get(f"fastapi.{key}", default)
47
+ def config_value(self, key: str) -> Any:
48
+ """Resolve `fastapi.<key>`, falling back to the FastAPIConfig default."""
49
+ # Instantiated per call so env-backed fields are read at command time.
50
+ default = getattr(FastAPIConfig(), key, None)
51
+ # Configuration.get() only substitutes its default on a missing key, so a
52
+ # key that is present but None would otherwise leak through.
53
+ value = Config.get(f"fastapi.{key}", default)
46
54
 
47
- return cast_value(value)
55
+ return default if value is None else value
56
+
57
+ def resolve_option(self, key: str) -> Any:
58
+ """CLI flag > fastapi config > FastAPIConfig default."""
59
+ return cast_value(self.option(key) or self.config_value(key))
48
60
 
49
61
  def resolve_url(self) -> Uriable:
50
- host = self.option("host") or Config.get("fastapi.app_url", "http://127.0.0.1:8000")
62
+ host = self.option("host") or self.config_value("app_url")
51
63
  port = self.option("port")
52
64
 
53
65
  if host and not host.startswith("http"):
@@ -60,15 +72,11 @@ class ServeCommand(Command):
60
72
  def handle(self):
61
73
  import uvicorn
62
74
 
63
- from fastapi_startkit import Config
64
75
  from fastapi_startkit.container import Container
65
76
 
66
- # Resolve server settings: CLI flag > fastapi config > uvicorn default (None)
67
- cfg_reload_dirs = Config.get("fastapi.reload_dirs") or None
68
- cfg_reload_excludes = Config.get("fastapi.reload_excludes") or None
69
-
70
77
  url = self.resolve_url()
71
- reload = self.resolve_option("reload", True)
78
+ reload = self.resolve_option("reload")
79
+ app = self.resolve_option("app")
72
80
 
73
81
  kwargs = {
74
82
  "host": url.host(),
@@ -77,19 +85,24 @@ class ServeCommand(Command):
77
85
  "ws": "websockets-sansio",
78
86
  }
79
87
 
80
- if self.is_app_exist():
88
+ if self.is_app_exist(app):
81
89
  kwargs.update(
82
90
  {
83
- "app": self.option("app"),
91
+ "app": app,
84
92
  "factory": True,
85
93
  }
86
94
  )
87
- if cfg_reload_dirs is not None and reload:
88
- kwargs["reload_dirs"] = cfg_reload_dirs
89
- if cfg_reload_excludes is not None and reload:
90
- kwargs["reload_excludes"] = cfg_reload_excludes
91
95
 
92
- self.line(f"<info>Starting Uvicorn server on {url.host()}:{url.port()} [{self.option('app')}]...</info>")
96
+ if reload:
97
+ reload_dirs = self.config_value("reload_dirs")
98
+ reload_excludes = self.config_value("reload_excludes")
99
+
100
+ if reload_dirs:
101
+ kwargs["reload_dirs"] = reload_dirs
102
+ if reload_excludes:
103
+ kwargs["reload_excludes"] = reload_excludes
104
+
105
+ self.line(f"<info>Starting Uvicorn server on {url.host()}:{url.port()} [{app}]...</info>")
93
106
 
94
107
  else:
95
108
  self.line(f"<info>Starting Uvicorn server on {url.host()}:{url.port()}...</info>")
@@ -100,11 +113,9 @@ class ServeCommand(Command):
100
113
  except KeyboardInterrupt:
101
114
  self.line("<comment>Server stopped manually.</comment>")
102
115
 
103
- def is_app_exist(self) -> "bool":
116
+ def is_app_exist(self, app: str) -> "bool":
104
117
  import importlib.util
105
118
 
106
- app = self.option("app")
107
-
108
119
  module_name = app.split(":")[0]
109
120
  try:
110
121
  spec = importlib.util.find_spec(module_name)
@@ -113,6 +124,6 @@ class ServeCommand(Command):
113
124
  except (ImportError, ValueError):
114
125
  pass
115
126
 
116
- self.line("<fg=yellow>Unable to detect the application, run the command with --app={app}</>")
127
+ self.line(f"<fg=yellow>Unable to detect the application '{app}', run the command with --app=your_module:app</>")
117
128
 
118
129
  return False
@@ -6,6 +6,7 @@ from fastapi_startkit.environment import env
6
6
  @dataclasses.dataclass
7
7
  class FastAPIConfig:
8
8
  app_url: str = dataclasses.field(default_factory=lambda: env("APP_URL", "http://127.0.0.1:8000"))
9
+ app: str = "bootstrap.application:app"
9
10
  reload: bool = dataclasses.field(default_factory=lambda: env("APP_RELOAD", True))
10
11
  reload_dirs: list | None = None
11
12
  reload_excludes: list = dataclasses.field(
@@ -0,0 +1,212 @@
1
+ from __future__ import annotations
2
+
3
+ from contextvars import ContextVar, Token
4
+ from types import TracebackType
5
+ from typing import TYPE_CHECKING
6
+
7
+ from sqlalchemy import text
8
+ from sqlalchemy.ext.asyncio import AsyncConnection, AsyncEngine, AsyncTransaction
9
+
10
+ from fastapi_startkit.masoniteorm.models.builder import QueryBuilder
11
+
12
+ if TYPE_CHECKING:
13
+ from typing import Self
14
+
15
+
16
+ class Transaction:
17
+ def __init__(self, owner: Connection):
18
+ self.owner = owner
19
+ self.connection: AsyncConnection | None = None
20
+ self.transaction: AsyncTransaction | None = None
21
+ self._token: Token[AsyncConnection | None] | None = None
22
+ self._owns_connection = False
23
+
24
+ async def __aenter__(self) -> Self:
25
+ connection = self.owner.connection
26
+ if connection is None:
27
+ connection = await self.owner.engine.connect()
28
+ self._owns_connection = True
29
+ self.connection = connection
30
+ self._token = self.owner._connection_context.set(connection)
31
+
32
+ try:
33
+ if connection.in_transaction():
34
+ self.transaction = await connection.begin_nested()
35
+ else:
36
+ self.transaction = await connection.begin()
37
+ except BaseException:
38
+ self.owner._connection_context.reset(self._token)
39
+ if self._owns_connection:
40
+ await connection.close()
41
+ raise
42
+ return self
43
+
44
+ async def __aexit__(
45
+ self,
46
+ exc_type: type[BaseException] | None,
47
+ exc_value: BaseException | None,
48
+ traceback: TracebackType | None,
49
+ ) -> None:
50
+ assert self.connection is not None
51
+ assert self.transaction is not None
52
+ assert self._token is not None
53
+ try:
54
+ await self.transaction.__aexit__(exc_type, exc_value, traceback)
55
+ finally:
56
+ self.owner._connection_context.reset(self._token)
57
+ if self._owns_connection:
58
+ await self.connection.close()
59
+
60
+ async def commit(self) -> None:
61
+ assert self.transaction is not None
62
+ await self.transaction.commit()
63
+
64
+ async def rollback(self) -> None:
65
+ assert self.transaction is not None
66
+ await self.transaction.rollback()
67
+
68
+
69
+ class Connection:
70
+ def __init__(self, engine: AsyncEngine, config: dict):
71
+ self.config = config
72
+ self.engine: AsyncEngine = engine
73
+ self._connection_context: ContextVar[AsyncConnection | None] = ContextVar(
74
+ f"masoniteorm_connection_{id(self)}", default=None
75
+ )
76
+
77
+ @property
78
+ def connection(self) -> AsyncConnection | None:
79
+ return self._connection_context.get()
80
+
81
+ @property
82
+ def transactions(self) -> list[AsyncTransaction]:
83
+ connection = self.connection
84
+ if connection is None:
85
+ return []
86
+ nested = connection.get_nested_transaction()
87
+ root = connection.get_transaction()
88
+ return [transaction for transaction in (root, nested) if transaction is not None]
89
+
90
+ def transaction(self) -> Transaction:
91
+ return Transaction(self)
92
+
93
+ def query(self) -> QueryBuilder:
94
+ return QueryBuilder(
95
+ connection=self,
96
+ grammar=self.get_query_grammar(),
97
+ processor=self.get_post_processor(),
98
+ )
99
+
100
+ async def get_connection(self) -> AsyncConnection:
101
+ return self.connection or await self.engine.connect()
102
+
103
+ def get_query_grammar(cls):
104
+ pass
105
+
106
+ def get_post_processor(self):
107
+ pass
108
+
109
+ async def begin_transaction(self) -> None:
110
+ connection = self.connection
111
+ if connection is None:
112
+ connection = await self.engine.connect()
113
+ self._connection_context.set(connection)
114
+ if connection.in_transaction():
115
+ await connection.begin_nested()
116
+ else:
117
+ await connection.begin()
118
+
119
+ async def commit_transaction(self) -> None:
120
+ connection = self.connection
121
+ if connection is None or not connection.in_transaction():
122
+ raise RuntimeError("No active transaction to commit")
123
+ nested = connection.get_nested_transaction()
124
+ if nested is not None:
125
+ await nested.commit()
126
+ else:
127
+ transaction = connection.get_transaction()
128
+ assert transaction is not None
129
+ await transaction.commit()
130
+ await self._release_connection(connection)
131
+
132
+ async def rollback(self) -> None:
133
+ connection = self.connection
134
+ if connection is None or not connection.in_transaction():
135
+ raise RuntimeError("No active transaction to rollback")
136
+ nested = connection.get_nested_transaction()
137
+ if nested is not None:
138
+ await nested.rollback()
139
+ else:
140
+ transaction = connection.get_transaction()
141
+ assert transaction is not None
142
+ await transaction.rollback()
143
+ await self._release_connection(connection)
144
+
145
+ async def _release_connection(self, connection: AsyncConnection) -> None:
146
+ await connection.close()
147
+ if self.connection is connection:
148
+ self._connection_context.set(None)
149
+
150
+ async def close(self) -> None:
151
+ connection = self.connection
152
+ if connection is not None:
153
+ await connection.close()
154
+ self._connection_context.set(None)
155
+
156
+ async def reconnect(self) -> None:
157
+ await self.close()
158
+
159
+ @staticmethod
160
+ def sql_alchemy_bindings(query: str, bindings: list | None = None):
161
+ params = {}
162
+ if bindings:
163
+ for i, val in enumerate(bindings):
164
+ name = f"p{i}"
165
+ params[name] = val
166
+ query = query.replace("?", f":{name}", 1)
167
+ return (query, params)
168
+
169
+ async def run(self, query: str, bindings: list | None = None):
170
+ query, params = self.sql_alchemy_bindings(query, bindings)
171
+ return await self._execute(query, params)
172
+
173
+ async def execute(self, query: str, bindings: list | None = None):
174
+ query, params = self.sql_alchemy_bindings(query, bindings)
175
+ return await self._execute(query, params)
176
+
177
+ async def _execute(self, query: str, bindings: dict):
178
+ connection = self.connection
179
+ if connection is not None:
180
+ return await connection.execute(text(query), bindings or {})
181
+ async with self.engine.begin() as operation_connection:
182
+ return await operation_connection.execute(text(query), bindings or {})
183
+
184
+ async def insert(self, query: str, bindings: list | None = None) -> int | None:
185
+ result = await self.execute(query, bindings)
186
+ return getattr(result, "lastrowid", None)
187
+
188
+ async def insert_get_id(self, query: str, bindings: list | None = None) -> int | None:
189
+ result = await self.execute(query, bindings)
190
+ return getattr(result, "lastrowid", None)
191
+
192
+ async def update(self, query: str, bindings: list | None = None) -> int:
193
+ result = await self.execute(query, bindings)
194
+ return result.rowcount # type: ignore[return-value]
195
+
196
+ async def delete(self, query: str, bindings: list | None = None) -> int:
197
+ result = await self.execute(query, bindings)
198
+ return result.rowcount # type: ignore[return-value]
199
+
200
+ async def select(self, query: str, bindings: list | None = None) -> list[dict]:
201
+ result = await self.run(query, bindings)
202
+ return result.mappings().all()
203
+
204
+ async def select_one(self, query: str, bindings: list | None = None) -> dict | None:
205
+ result = await self.run(query, bindings)
206
+ row = result.fetchone()
207
+ return dict(zip(result.keys(), row)) if row else None
208
+
209
+ async def statement(self, query: str, bindings: list | None = None) -> bool:
210
+ query, params = self.sql_alchemy_bindings(query, bindings)
211
+ await self._execute(query, params)
212
+ return True
@@ -10,9 +10,6 @@ class PostgresConnection(Connection):
10
10
  async def insert_get_id(self, query: str, bindings: list | None = None) -> int | None:
11
11
  result = await self.run(query, bindings)
12
12
  row = result.fetchone()
13
- if not self.transactions:
14
- conn = await self.get_connection()
15
- await conn.commit()
16
13
  return row[0] if row is not None else None
17
14
 
18
15
  @classmethod
@@ -736,8 +736,9 @@ class Blueprint:
736
736
 
737
737
  sql = await self.to_sql()
738
738
  if isinstance(sql, list):
739
- for q in sql:
740
- await self.connection.statement(q, ())
739
+ async with self.connection.transaction():
740
+ for q in sql:
741
+ await self.connection.statement(q, ())
741
742
  return
742
743
  return await self.connection.statement(sql, ())
743
744
 
@@ -3,10 +3,12 @@ class DatabaseTransaction:
3
3
  from fastapi_startkit.masoniteorm.models import Model
4
4
 
5
5
  self.connection = Model.db_manager.connection(None)
6
- await self.connection.begin_transaction()
6
+ self.transaction = self.connection.transaction()
7
+ await self.transaction.__aenter__()
7
8
 
8
9
  async def asyncStopTestRun(self):
9
- await self.connection.rollback()
10
+ await self.transaction.rollback()
11
+ await self.transaction.__aexit__(None, None, None)
10
12
 
11
13
 
12
14
  class RefreshDatabase(DatabaseTransaction):
@@ -1,151 +0,0 @@
1
- from typing import List
2
-
3
- from sqlalchemy import text
4
- from sqlalchemy.ext.asyncio import AsyncConnection, AsyncEngine, AsyncTransaction
5
-
6
- from fastapi_startkit.masoniteorm.models.builder import QueryBuilder
7
-
8
-
9
- class Connection:
10
- def __init__(self, engine: AsyncEngine, config: dict):
11
- self.config = config
12
- self.engine: AsyncEngine = engine
13
- self.connection: AsyncConnection | None = None
14
- self.transactions: List[AsyncTransaction] = []
15
-
16
- def query(self) -> "QueryBuilder":
17
- return QueryBuilder(
18
- connection=self,
19
- grammar=self.get_query_grammar(),
20
- processor=self.get_post_processor(),
21
- )
22
-
23
- async def get_connection(self) -> AsyncConnection:
24
- if self.connection is None:
25
- self.connection = await self.engine.connect()
26
-
27
- assert self.connection is not None
28
- return self.connection
29
-
30
- def get_query_grammar(cls):
31
- pass
32
-
33
- def get_post_processor(self):
34
- pass
35
-
36
- async def begin_transaction(self) -> None:
37
- connection = await self.get_connection()
38
-
39
- if not self.transactions:
40
- transaction = await connection.begin()
41
- else:
42
- transaction = await connection.begin_nested()
43
-
44
- self.transactions.append(transaction)
45
-
46
- async def commit_transaction(self) -> None:
47
- if not self.transactions:
48
- raise RuntimeError("No active transaction to commit")
49
-
50
- transaction = self.transactions.pop()
51
- await transaction.commit()
52
-
53
- await self._maybe_cleanup()
54
-
55
- async def rollback(self) -> None:
56
- if not self.transactions:
57
- raise RuntimeError("No active transaction to rollback")
58
-
59
- transaction = self.transactions.pop()
60
- await transaction.rollback()
61
-
62
- await self._maybe_cleanup()
63
-
64
- async def close(self) -> None:
65
- if self.connection is not None:
66
- await self.connection.close()
67
- self.connection = None
68
- self.transactions = []
69
-
70
- async def reconnect(self) -> None:
71
- await self.close()
72
-
73
- @staticmethod
74
- def sql_alchemy_bindings(query: str, bindings: list | None = None):
75
- params = {}
76
- if bindings:
77
- for i, val in enumerate(bindings):
78
- name = f"p{i}"
79
- params[name] = val
80
- query = query.replace("?", f":{name}", 1)
81
- return (query, params)
82
-
83
- async def run(self, query: str, bindings: list | None = None):
84
- query, bindings = self.sql_alchemy_bindings(query, bindings)
85
-
86
- conn = await self.get_connection()
87
- result = await conn.execute(text(query), bindings or {})
88
-
89
- if not self.transactions:
90
- await conn.commit()
91
-
92
- return result
93
-
94
- async def execute(self, query: str, bindings: list | None = None):
95
- query, bindings = self.sql_alchemy_bindings(query, bindings)
96
-
97
- conn = await self.get_connection()
98
- result = await conn.execute(text(query), bindings or {})
99
-
100
- if not self.transactions:
101
- await conn.commit()
102
-
103
- return result
104
-
105
- async def insert(self, query: str, bindings: list | None = None) -> int | None:
106
- result = await self.execute(query, bindings)
107
-
108
- return getattr(result, "lastrowid", None)
109
-
110
- async def insert_get_id(self, query: str, bindings: list | None = None) -> int | None:
111
- result = await self.execute(query, bindings)
112
- return getattr(result, "lastrowid", None)
113
-
114
- async def update(self, query: str, bindings: list | None = None) -> int:
115
- result = await self.execute(query, bindings)
116
-
117
- return result.rowcount # type: ignore[return-value]
118
-
119
- async def delete(self, query: str, bindings: list | None = None) -> int:
120
- result = await self.execute(query, bindings)
121
- return result.rowcount # type: ignore[return-value]
122
-
123
- async def select(self, query: str, bindings: list | None = None) -> list[dict]:
124
- result = await self.run(query, bindings)
125
-
126
- return result.mappings().all()
127
-
128
- async def select_one(self, query: str, bindings: list | None = None) -> dict | None:
129
- result = await self.run(query, bindings)
130
- row = result.fetchone()
131
- result_dict = dict(zip(result.keys(), row)) if row else None
132
- if not self.transactions and self.connection is not None:
133
- await self.connection.commit()
134
- return result_dict
135
-
136
- async def statement(self, query: str, bindings: list | None = None) -> bool:
137
- query, bindings = self.sql_alchemy_bindings(query, bindings)
138
-
139
- conn = await self.get_connection()
140
- await conn.execute(text(query), bindings or {})
141
-
142
- # Only commit if NOT inside a transaction
143
- if not self.transactions:
144
- await conn.commit()
145
-
146
- return True
147
-
148
- async def _maybe_cleanup(self):
149
- if not self.transactions and self.connection:
150
- await self.connection.close()
151
- self.connection = None