fastapi-startkit 0.54.0__tar.gz → 0.56.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.54.0 → fastapi_startkit-0.56.0}/PKG-INFO +1 -1
  2. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/pyproject.toml +1 -1
  3. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/config/app.py +1 -1
  4. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/environment/environment.py +62 -17
  5. fastapi_startkit-0.56.0/src/fastapi_startkit/masoniteorm/connections/connection.py +212 -0
  6. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/connections/postgres_connection.py +0 -3
  7. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/Blueprint.py +3 -2
  8. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/testing/transaction.py +4 -2
  9. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/storage/config/storage.py +6 -6
  10. fastapi_startkit-0.54.0/src/fastapi_startkit/masoniteorm/connections/connection.py +0 -151
  11. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/README.md +0 -0
  12. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/.DS_Store +0 -0
  13. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/__init__.py +0 -0
  14. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/__init__.py +0 -0
  15. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/agent.py +0 -0
  16. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/ai.py +0 -0
  17. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/audio.py +0 -0
  18. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/audio_factory.py +0 -0
  19. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/config/ai.py +0 -0
  20. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/config/config.py +0 -0
  21. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/decorators.py +0 -0
  22. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/document.py +0 -0
  23. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/image.py +0 -0
  24. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/image_factory.py +0 -0
  25. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/judge.py +0 -0
  26. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/lab.py +0 -0
  27. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/pipeline.py +0 -0
  28. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/providers/__init__.py +0 -0
  29. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/providers/ai_provider.py +0 -0
  30. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/recording.py +0 -0
  31. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/runner.py +0 -0
  32. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/state.py +0 -0
  33. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/testing.py +0 -0
  34. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/tinker.py +0 -0
  35. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/types.py +0 -0
  36. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/application.py +0 -0
  37. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/__init__.py +0 -0
  38. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/auth.py +0 -0
  39. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/channels.py +0 -0
  40. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/config.py +0 -0
  41. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/drivers/__init__.py +0 -0
  42. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/drivers/log_driver.py +0 -0
  43. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/drivers/reverb_driver.py +0 -0
  44. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/event.py +0 -0
  45. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/helpers.py +0 -0
  46. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/manager.py +0 -0
  47. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/provider.py +0 -0
  48. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/reverb/__init__.py +0 -0
  49. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/reverb/channel_manager.py +0 -0
  50. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/reverb/connection.py +0 -0
  51. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/reverb/server.py +0 -0
  52. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/stubs/__init__.py +0 -0
  53. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/stubs/channels.py +0 -0
  54. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/carbon/__init__.py +0 -0
  55. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/carbon/carbon.py +0 -0
  56. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/config/__init__.py +0 -0
  57. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/configuration/Configuration.py +0 -0
  58. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/configuration/__init__.py +0 -0
  59. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/configuration/config.py +0 -0
  60. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/configuration/helpers.py +0 -0
  61. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/configuration/providers/ConfigurationProvider.py +0 -0
  62. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/configuration/providers/__init__.py +0 -0
  63. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/console/__init__.py +0 -0
  64. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/console/application.py +0 -0
  65. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/console/can_override_config.py +0 -0
  66. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/console/can_override_default_options.py +0 -0
  67. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/console/command.py +0 -0
  68. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/console/publish_command.py +0 -0
  69. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/container/__init__.py +0 -0
  70. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/container/container.py +0 -0
  71. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/environment/__init__.py +0 -0
  72. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/events/__init__.py +0 -0
  73. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/events/dispatcher.py +0 -0
  74. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/events/fake.py +0 -0
  75. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/events/helpers.py +0 -0
  76. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/events/listener.py +0 -0
  77. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/events/provider.py +0 -0
  78. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/exceptions/__init__.py +0 -0
  79. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/exceptions/exceptions.py +0 -0
  80. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/exceptions/handler.py +0 -0
  81. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/AI.py +0 -0
  82. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/AI.pyi +0 -0
  83. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Cache.py +0 -0
  84. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Config.py +0 -0
  85. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Config.pyi +0 -0
  86. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Dump.py +0 -0
  87. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Dump.pyi +0 -0
  88. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Event.py +0 -0
  89. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Event.pyi +0 -0
  90. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Facade.py +0 -0
  91. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Gate.py +0 -0
  92. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Gate.pyi +0 -0
  93. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Hash.py +0 -0
  94. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Hash.pyi +0 -0
  95. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Loader.py +0 -0
  96. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Loader.pyi +0 -0
  97. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Mail.py +0 -0
  98. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Mail.pyi +0 -0
  99. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Notification.py +0 -0
  100. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Notification.pyi +0 -0
  101. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Queue.py +0 -0
  102. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Queue.pyi +0 -0
  103. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/RateLimiter.py +0 -0
  104. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/RateLimiter.pyi +0 -0
  105. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Request.py +0 -0
  106. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Request.pyi +0 -0
  107. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Response.py +0 -0
  108. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Response.pyi +0 -0
  109. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Session.py +0 -0
  110. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Session.pyi +0 -0
  111. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Url.py +0 -0
  112. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Url.pyi +0 -0
  113. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/View.py +0 -0
  114. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/View.pyi +0 -0
  115. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Vite.py +0 -0
  116. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Vite.pyi +0 -0
  117. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/__init__.py +0 -0
  118. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/__init__.py +0 -0
  119. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/commands/__init__.py +0 -0
  120. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/commands/serve_command.py +0 -0
  121. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/config/__init__.py +0 -0
  122. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/config/fastapi.py +0 -0
  123. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/events.py +0 -0
  124. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/exceptions.py +0 -0
  125. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/middleware.py +0 -0
  126. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/providers/fastapi_provider.py +0 -0
  127. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/requests/model.py +0 -0
  128. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/routers/router.py +0 -0
  129. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/testing/__init__.py +0 -0
  130. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/testing/assertable_json.py +0 -0
  131. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/testing/test_case.py +0 -0
  132. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/testing/test_response.py +0 -0
  133. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/foundation/app_provider.py +0 -0
  134. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/inertia/__init__.py +0 -0
  135. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/inertia/constant.py +0 -0
  136. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/inertia/context.py +0 -0
  137. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/inertia/inertia.py +0 -0
  138. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/inertia/middleware.py +0 -0
  139. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/inertia/props/props.py +0 -0
  140. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/inertia/provider.py +0 -0
  141. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/jsonapi/__init__.py +0 -0
  142. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/jsonapi/response.py +0 -0
  143. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/loader/Loader.py +0 -0
  144. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/loader/__init__.py +0 -0
  145. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/ChannelFactory.py +0 -0
  146. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/__init__.py +0 -0
  147. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/channels/BaseChannel.py +0 -0
  148. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/channels/DailyChannel.py +0 -0
  149. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/channels/MultiBaseChannel.py +0 -0
  150. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/channels/SingleChannel.py +0 -0
  151. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/channels/SlackChannel.py +0 -0
  152. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/channels/StackChannel.py +0 -0
  153. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/channels/SyslogChannel.py +0 -0
  154. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/channels/TerminalChannel.py +0 -0
  155. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/channels/__init__.py +0 -0
  156. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/config/__init__.py +0 -0
  157. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/config/channels.py +0 -0
  158. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/config/logging.py +0 -0
  159. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/drivers/BaseDriver.py +0 -0
  160. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/drivers/LogSingleDriver.py +0 -0
  161. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/drivers/LogSlackDriver.py +0 -0
  162. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/drivers/LogSyslogDriver.py +0 -0
  163. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/drivers/LogTerminalDriver.py +0 -0
  164. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/drivers/__init__.py +0 -0
  165. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/factory.py +0 -0
  166. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/file.py +0 -0
  167. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/handler.py +0 -0
  168. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/listeners.py +0 -0
  169. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/logger.py +0 -0
  170. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/managers/LoggingManager.py +0 -0
  171. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/managers/__init__.py +0 -0
  172. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/providers/__init__.py +0 -0
  173. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/providers/log_provider.py +0 -0
  174. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/__init__.py +0 -0
  175. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/collection/Collection.py +0 -0
  176. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/collection/__init__.py +0 -0
  177. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/DBMigrateCommand.py +0 -0
  178. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/DBSeedCommand.py +0 -0
  179. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/MakeMigrationCommand.py +0 -0
  180. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/MakeModelCommand.py +0 -0
  181. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/MakeModelDocstringCommand.py +0 -0
  182. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/MakeObserverCommand.py +0 -0
  183. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/MakeSeedCommand.py +0 -0
  184. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/MigrateFreshCommand.py +0 -0
  185. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/MigrateRefreshCommand.py +0 -0
  186. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/MigrateResetCommand.py +0 -0
  187. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/MigrateRollbackCommand.py +0 -0
  188. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/MigrateStatusCommand.py +0 -0
  189. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/ShellCommand.py +0 -0
  190. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/__init__.py +0 -0
  191. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/stubs/create_migration.stub +0 -0
  192. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/stubs/create_seed.stub +0 -0
  193. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/stubs/model.stub +0 -0
  194. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/stubs/observer.stub +0 -0
  195. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/stubs/table_migration.stub +0 -0
  196. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/config/__init__.py +0 -0
  197. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/config/config.py +0 -0
  198. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/config/database.py +0 -0
  199. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/connections/factory.py +0 -0
  200. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/connections/manager.py +0 -0
  201. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/connections/mysql_connection.py +0 -0
  202. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/connections/sqlite_connection.py +0 -0
  203. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/exceptions.py +0 -0
  204. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/expressions/__init__.py +0 -0
  205. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/expressions/expressions.py +0 -0
  206. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/facades/DB.py +0 -0
  207. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/facades/Schema.py +0 -0
  208. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/facades/__init__.py +0 -0
  209. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/factory/__init__.py +0 -0
  210. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/factory/factory.py +0 -0
  211. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/helpers/__init__.py +0 -0
  212. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/helpers/misc.py +0 -0
  213. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/migrations/Migration.py +0 -0
  214. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/migrations/Migrator.py +0 -0
  215. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/migrations/__init__.py +0 -0
  216. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/models/MigrationModel.py +0 -0
  217. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/models/__init__.py +0 -0
  218. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/models/attribute.py +0 -0
  219. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/models/builder.py +0 -0
  220. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/models/caster.py +0 -0
  221. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/models/fields.py +0 -0
  222. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/models/model.py +0 -0
  223. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/models/observer.py +0 -0
  224. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/models/pivot.py +0 -0
  225. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/models/registry.py +0 -0
  226. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/models/relationship.py +0 -0
  227. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/observers/ObservesEvents.py +0 -0
  228. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/observers/__init__.py +0 -0
  229. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/pagination/BasePaginator.py +0 -0
  230. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/pagination/LengthAwarePaginator.py +0 -0
  231. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/pagination/SimplePaginator.py +0 -0
  232. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/pagination/__init__.py +0 -0
  233. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/providers/DatabaseProvider.py +0 -0
  234. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/providers/__init__.py +0 -0
  235. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/EagerLoadMixin.py +0 -0
  236. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/EagerRelation.py +0 -0
  237. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/__init__.py +0 -0
  238. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/grammars/BaseGrammar.py +0 -0
  239. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/grammars/MSSQLGrammar.py +0 -0
  240. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/grammars/MySQLGrammar.py +0 -0
  241. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/grammars/PostgresGrammar.py +0 -0
  242. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/grammars/SQLiteGrammar.py +0 -0
  243. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/grammars/__init__.py +0 -0
  244. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/processors/MSSQLPostProcessor.py +0 -0
  245. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/processors/MySQLPostProcessor.py +0 -0
  246. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/processors/PostgresPostProcessor.py +0 -0
  247. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/processors/SQLitePostProcessor.py +0 -0
  248. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/processors/__init__.py +0 -0
  249. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/support.py +0 -0
  250. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/relationships/BaseRelationship.py +0 -0
  251. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/relationships/BelongsTo.py +0 -0
  252. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/relationships/BelongsToMany.py +0 -0
  253. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/relationships/HasMany.py +0 -0
  254. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/relationships/HasManyThrough.py +0 -0
  255. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/relationships/HasOne.py +0 -0
  256. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/relationships/HasOneThrough.py +0 -0
  257. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/relationships/MorphMany.py +0 -0
  258. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/relationships/MorphOne.py +0 -0
  259. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/relationships/MorphTo.py +0 -0
  260. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/relationships/MorphToMany.py +0 -0
  261. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/relationships/__init__.py +0 -0
  262. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/Column.py +0 -0
  263. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/ColumnDiff.py +0 -0
  264. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/Constraint.py +0 -0
  265. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/ForeignKeyConstraint.py +0 -0
  266. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/Index.py +0 -0
  267. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/Table.py +0 -0
  268. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/TableDiff.py +0 -0
  269. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/__init__.py +0 -0
  270. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/platforms/MSSQLPlatform.py +0 -0
  271. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/platforms/MySQLPlatform.py +0 -0
  272. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/platforms/Platform.py +0 -0
  273. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/platforms/PostgresPlatform.py +0 -0
  274. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/platforms/SQLitePlatform.py +0 -0
  275. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/platforms/__init__.py +0 -0
  276. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/schema.py +0 -0
  277. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/seeders/Seeder.py +0 -0
  278. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/seeders/__init__.py +0 -0
  279. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/stubs/create-migration.html +0 -0
  280. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/stubs/table-migration.html +0 -0
  281. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/testing/__init__.py +0 -0
  282. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/mcp/__init__.py +0 -0
  283. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/mcp/argument.py +0 -0
  284. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/mcp/prompt.py +0 -0
  285. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/mcp/protocol.py +0 -0
  286. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/mcp/providers/__init__.py +0 -0
  287. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/mcp/providers/mcp_provider.py +0 -0
  288. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/mcp/request.py +0 -0
  289. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/mcp/resource.py +0 -0
  290. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/mcp/response.py +0 -0
  291. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/mcp/server.py +0 -0
  292. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/mcp/tool.py +0 -0
  293. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/process/__init__.py +0 -0
  294. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/process/exception.py +0 -0
  295. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/process/fake.py +0 -0
  296. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/process/process.py +0 -0
  297. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/process/result.py +0 -0
  298. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/py.typed +0 -0
  299. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/skills/__init__.py +0 -0
  300. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/skills/adapters/__init__.py +0 -0
  301. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/skills/adapters/base.py +0 -0
  302. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/skills/adapters/claude.py +0 -0
  303. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/skills/adapters/gemini.py +0 -0
  304. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/skills/commands/__init__.py +0 -0
  305. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/skills/commands/skills.py +0 -0
  306. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/skills/parser.py +0 -0
  307. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/skills/provider.py +0 -0
  308. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/skills/registry.py +0 -0
  309. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/skills/stubs/.ai/fastapi-startkit/database/SKILL.md +0 -0
  310. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/skills/stubs/.ai/fastapi-startkit/fastapi/SKILL.md +0 -0
  311. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/skills/stubs/.ai/fastapi-startkit/inertia/SKILL.md +0 -0
  312. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/storage/__init__.py +0 -0
  313. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/storage/config/__init__.py +0 -0
  314. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/storage/data/mime.types +0 -0
  315. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/storage/drivers/__init__.py +0 -0
  316. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/storage/drivers/fake.py +0 -0
  317. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/storage/drivers/local.py +0 -0
  318. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/storage/drivers/s3.py +0 -0
  319. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/storage/file.py +0 -0
  320. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/storage/filestream.py +0 -0
  321. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/storage/helper.py +0 -0
  322. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/storage/providers/provider.py +0 -0
  323. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/storage/storage.py +0 -0
  324. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/support/__init__.py +0 -0
  325. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/support/collection.py +0 -0
  326. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/support/dataclass.py +0 -0
  327. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/support/providers/__init__.py +0 -0
  328. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/support/providers/provider.py +0 -0
  329. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/support/string.py +0 -0
  330. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/support/structures.py +0 -0
  331. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/support/uri.py +0 -0
  332. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/testing/__init__.py +0 -0
  333. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/testing/test_case.py +0 -0
  334. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/vite/__init__.py +0 -0
  335. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/vite/config/vite.py +0 -0
  336. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/vite/exceptions.py +0 -0
  337. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/vite/providers/provider.py +0 -0
  338. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/vite/stubs/package.json +0 -0
  339. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/vite/stubs/resources/css/app.css +0 -0
  340. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/vite/stubs/resources/js/app.ts +0 -0
  341. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/vite/stubs/resources/templates/index.html +0 -0
  342. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/vite/stubs/tsconfig.json +0 -0
  343. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/vite/stubs/vite.config.ts +0 -0
  344. {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.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.54.0
3
+ Version: 0.56.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.54.0"
3
+ version = "0.56.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 = [
@@ -7,5 +7,5 @@ from fastapi_startkit.environment.environment import env
7
7
  class AppConfig:
8
8
  name: str = field(default_factory=lambda: os.getenv("APP_NAME", "FastAPI starter kit"))
9
9
  env: str = field(default_factory=lambda: os.getenv("APP_ENV", "development"))
10
- debug: bool = field(default_factory=lambda: env("APP_DEBUG", "true"))
10
+ debug: bool = field(default_factory=lambda: env("APP_DEBUG", True))
11
11
  timezone: str = field(default_factory=lambda: os.getenv("APP_TIMEZONE", "UTC"))
@@ -2,9 +2,15 @@
2
2
 
3
3
  import os
4
4
  import sys
5
+ from typing import Any, Literal, TypeVar, overload
6
+
5
7
  from dotenv import load_dotenv
6
8
 
7
9
 
10
+ T = TypeVar("T")
11
+ EnvValue = str | int | bool
12
+
13
+
8
14
  class Environment:
9
15
  @staticmethod
10
16
  def resolve_environment(base_path=None, env: str | None = None):
@@ -63,11 +69,45 @@ class Environment:
63
69
  break
64
70
 
65
71
 
66
- def env(value, default="", cast=True):
67
- """Helper to retrieve the value of an environment variable or returns
68
- a default value. In addition, if type can be inferred then the value can be casted to the
69
- inferred type."""
70
- env_var = os.getenv(value, default)
72
+ @overload
73
+ def env(val: str, default: T, cast: Literal[False]) -> str | T: ...
74
+
75
+
76
+ @overload
77
+ def env(val: str, default: Literal[""], cast: Literal[True] = True) -> EnvValue: ...
78
+
79
+
80
+ @overload
81
+ def env(val: str, default: None, cast: Literal[True] = True) -> EnvValue | None: ...
82
+
83
+
84
+ @overload
85
+ def env(val: str, default: T, cast: Literal[True] = True) -> T: ...
86
+
87
+
88
+ @overload
89
+ def env(val: str, default: None, cast: bool) -> EnvValue | None: ...
90
+
91
+
92
+ @overload
93
+ def env(val: str, default: T, cast: bool) -> EnvValue | T: ...
94
+
95
+
96
+ @overload
97
+ def env(val: str) -> EnvValue: ...
98
+
99
+
100
+ @overload
101
+ def env(val: str, *, cast: Literal[False]) -> str: ...
102
+
103
+
104
+ @overload
105
+ def env(val: str, *, cast: bool) -> EnvValue: ...
106
+
107
+
108
+ def env(val: str, default: Any = "", cast: bool = True) -> Any:
109
+ """Return an environment value, casting it to the supplied default's type when possible."""
110
+ env_var = os.getenv(val, default)
71
111
 
72
112
  if not cast:
73
113
  return env_var
@@ -75,18 +115,23 @@ def env(value, default="", cast=True):
75
115
  if env_var == "":
76
116
  env_var = default
77
117
 
78
- if isinstance(env_var, bool):
79
- return env_var
80
- elif env_var is None:
81
- return None
82
- elif isinstance(env_var, int) or env_var.isnumeric():
83
- return int(env_var)
84
- elif env_var in ("false", "False"):
85
- return False
86
- elif env_var in ("true", "True"):
87
- return True
88
- else:
89
- return env_var
118
+ if default in ("", None):
119
+ return value(env_var)
120
+
121
+ default_type = type(default)
122
+ if default_type is bool:
123
+ if isinstance(env_var, bool):
124
+ return env_var
125
+ if env_var in ("true", "True"):
126
+ return True
127
+ if env_var in ("false", "False"):
128
+ return False
129
+ raise ValueError(f"Cannot cast environment variable {val!r} to bool")
130
+
131
+ try:
132
+ return default_type(env_var)
133
+ except (TypeError, ValueError) as error:
134
+ raise ValueError(f"Cannot cast environment variable {val!r} to {default_type.__name__}") from error
90
135
 
91
136
 
92
137
  def value(env_var, default=""):
@@ -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):
@@ -19,12 +19,12 @@ class StorageConfig:
19
19
  url=env("FILESYSTEM_PUBLIC_DISK_URL", "/storage"),
20
20
  ),
21
21
  "s3": S3Config(
22
- key=env("AWS_ACCESS_KEY_ID"),
23
- secret=env("AWS_SECRET_ACCESS_KEY"),
24
- region=env("AWS_DEFAULT_REGION"),
25
- bucket=env("AWS_BUCKET"),
26
- url=env("AWS_URL"),
27
- endpoint=env("AWS_ENDPOINT"),
22
+ key=env("AWS_ACCESS_KEY_ID", "", cast=False),
23
+ secret=env("AWS_SECRET_ACCESS_KEY", "", cast=False),
24
+ region=env("AWS_DEFAULT_REGION", "", cast=False),
25
+ bucket=env("AWS_BUCKET", "", cast=False),
26
+ url=env("AWS_URL", "", cast=False),
27
+ endpoint=env("AWS_ENDPOINT", "", cast=False),
28
28
  ),
29
29
  }
30
30
  )
@@ -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