fastapi-startkit 0.59.0__tar.gz → 0.60.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 (342) hide show
  1. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/PKG-INFO +1 -1
  2. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/pyproject.toml +1 -1
  3. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/fastapi/commands/serve_command.py +20 -1
  4. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/fastapi/config/fastapi.py +2 -0
  5. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/config/logging.py +1 -0
  6. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/handler.py +6 -2
  7. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/managers/LoggingManager.py +4 -3
  8. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/providers/log_provider.py +1 -1
  9. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/config/config.py +4 -0
  10. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/connections/factory.py +1 -1
  11. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/models/builder.py +58 -0
  12. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/query/grammars/BaseGrammar.py +1 -1
  13. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/relationships/BelongsToMany.py +2 -2
  14. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/README.md +0 -0
  15. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/.DS_Store +0 -0
  16. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/__init__.py +0 -0
  17. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/ai/__init__.py +0 -0
  18. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/ai/agent.py +0 -0
  19. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/ai/ai.py +0 -0
  20. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/ai/audio.py +0 -0
  21. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/ai/audio_factory.py +0 -0
  22. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/ai/config/ai.py +0 -0
  23. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/ai/config/config.py +0 -0
  24. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/ai/decorators.py +0 -0
  25. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/ai/document.py +0 -0
  26. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/ai/image.py +0 -0
  27. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/ai/image_factory.py +0 -0
  28. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/ai/judge.py +0 -0
  29. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/ai/lab.py +0 -0
  30. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/ai/pipeline.py +0 -0
  31. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/ai/providers/__init__.py +0 -0
  32. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/ai/providers/ai_provider.py +0 -0
  33. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/ai/recording.py +0 -0
  34. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/ai/runner.py +0 -0
  35. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/ai/state.py +0 -0
  36. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/ai/testing.py +0 -0
  37. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/ai/tinker.py +0 -0
  38. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/ai/types.py +0 -0
  39. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/application.py +0 -0
  40. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/broadcasting/__init__.py +0 -0
  41. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/broadcasting/auth.py +0 -0
  42. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/broadcasting/channels.py +0 -0
  43. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/broadcasting/config.py +0 -0
  44. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/broadcasting/drivers/__init__.py +0 -0
  45. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/broadcasting/drivers/log_driver.py +0 -0
  46. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/broadcasting/drivers/reverb_driver.py +0 -0
  47. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/broadcasting/event.py +0 -0
  48. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/broadcasting/helpers.py +0 -0
  49. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/broadcasting/manager.py +0 -0
  50. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/broadcasting/provider.py +0 -0
  51. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/broadcasting/reverb/__init__.py +0 -0
  52. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/broadcasting/reverb/channel_manager.py +0 -0
  53. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/broadcasting/reverb/connection.py +0 -0
  54. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/broadcasting/reverb/server.py +0 -0
  55. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/broadcasting/stubs/__init__.py +0 -0
  56. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/broadcasting/stubs/channels.py +0 -0
  57. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/carbon/__init__.py +0 -0
  58. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/carbon/carbon.py +0 -0
  59. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/config/__init__.py +0 -0
  60. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/config/app.py +0 -0
  61. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/configuration/Configuration.py +0 -0
  62. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/configuration/__init__.py +0 -0
  63. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/configuration/config.py +0 -0
  64. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/configuration/helpers.py +0 -0
  65. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/configuration/providers/ConfigurationProvider.py +0 -0
  66. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/configuration/providers/__init__.py +0 -0
  67. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/console/__init__.py +0 -0
  68. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/console/application.py +0 -0
  69. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/console/can_override_config.py +0 -0
  70. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/console/can_override_default_options.py +0 -0
  71. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/console/command.py +0 -0
  72. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/console/publish_command.py +0 -0
  73. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/container/__init__.py +0 -0
  74. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/container/container.py +0 -0
  75. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/environment/__init__.py +0 -0
  76. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/environment/environment.py +0 -0
  77. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/events/__init__.py +0 -0
  78. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/events/dispatcher.py +0 -0
  79. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/events/fake.py +0 -0
  80. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/events/helpers.py +0 -0
  81. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/events/listener.py +0 -0
  82. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/events/provider.py +0 -0
  83. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/exceptions/__init__.py +0 -0
  84. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/exceptions/exceptions.py +0 -0
  85. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/exceptions/handler.py +0 -0
  86. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/AI.py +0 -0
  87. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/AI.pyi +0 -0
  88. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Cache.py +0 -0
  89. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Config.py +0 -0
  90. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Config.pyi +0 -0
  91. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Dump.py +0 -0
  92. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Dump.pyi +0 -0
  93. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Event.py +0 -0
  94. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Event.pyi +0 -0
  95. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Facade.py +0 -0
  96. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Gate.py +0 -0
  97. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Gate.pyi +0 -0
  98. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Hash.py +0 -0
  99. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Hash.pyi +0 -0
  100. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Loader.py +0 -0
  101. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Loader.pyi +0 -0
  102. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Mail.py +0 -0
  103. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Mail.pyi +0 -0
  104. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Notification.py +0 -0
  105. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Notification.pyi +0 -0
  106. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Queue.py +0 -0
  107. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Queue.pyi +0 -0
  108. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/RateLimiter.py +0 -0
  109. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/RateLimiter.pyi +0 -0
  110. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Request.py +0 -0
  111. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Request.pyi +0 -0
  112. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Response.py +0 -0
  113. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Response.pyi +0 -0
  114. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Session.py +0 -0
  115. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Session.pyi +0 -0
  116. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Url.py +0 -0
  117. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Url.pyi +0 -0
  118. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/View.py +0 -0
  119. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/View.pyi +0 -0
  120. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Vite.py +0 -0
  121. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/Vite.pyi +0 -0
  122. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/facades/__init__.py +0 -0
  123. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/fastapi/__init__.py +0 -0
  124. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/fastapi/commands/__init__.py +0 -0
  125. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/fastapi/config/__init__.py +0 -0
  126. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/fastapi/events.py +0 -0
  127. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/fastapi/exceptions.py +0 -0
  128. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/fastapi/middleware.py +0 -0
  129. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/fastapi/providers/fastapi_provider.py +0 -0
  130. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/fastapi/requests/model.py +0 -0
  131. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/fastapi/routers/router.py +0 -0
  132. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/fastapi/testing/__init__.py +0 -0
  133. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/fastapi/testing/assertable_json.py +0 -0
  134. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/fastapi/testing/test_case.py +0 -0
  135. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/fastapi/testing/test_response.py +0 -0
  136. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/foundation/app_provider.py +0 -0
  137. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/inertia/__init__.py +0 -0
  138. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/inertia/constant.py +0 -0
  139. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/inertia/context.py +0 -0
  140. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/inertia/inertia.py +0 -0
  141. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/inertia/middleware.py +0 -0
  142. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/inertia/props/props.py +0 -0
  143. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/inertia/provider.py +0 -0
  144. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/jsonapi/__init__.py +0 -0
  145. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/jsonapi/response.py +0 -0
  146. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/loader/Loader.py +0 -0
  147. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/loader/__init__.py +0 -0
  148. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/ChannelFactory.py +0 -0
  149. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/__init__.py +0 -0
  150. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/channels/BaseChannel.py +0 -0
  151. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/channels/DailyChannel.py +0 -0
  152. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/channels/MultiBaseChannel.py +0 -0
  153. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/channels/SingleChannel.py +0 -0
  154. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/channels/SlackChannel.py +0 -0
  155. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/channels/StackChannel.py +0 -0
  156. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/channels/SyslogChannel.py +0 -0
  157. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/channels/TerminalChannel.py +0 -0
  158. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/channels/__init__.py +0 -0
  159. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/config/__init__.py +0 -0
  160. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/config/channels.py +0 -0
  161. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/drivers/BaseDriver.py +0 -0
  162. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/drivers/LogSingleDriver.py +0 -0
  163. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/drivers/LogSlackDriver.py +0 -0
  164. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/drivers/LogSyslogDriver.py +0 -0
  165. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/drivers/LogTerminalDriver.py +0 -0
  166. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/drivers/__init__.py +0 -0
  167. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/factory.py +0 -0
  168. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/file.py +0 -0
  169. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/listeners.py +0 -0
  170. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/logger.py +0 -0
  171. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/managers/__init__.py +0 -0
  172. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/logging/providers/__init__.py +0 -0
  173. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/__init__.py +0 -0
  174. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/collection/Collection.py +0 -0
  175. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/collection/__init__.py +0 -0
  176. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/commands/DBMigrateCommand.py +0 -0
  177. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/commands/DBSeedCommand.py +0 -0
  178. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/commands/MakeMigrationCommand.py +0 -0
  179. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/commands/MakeModelCommand.py +0 -0
  180. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/commands/MakeObserverCommand.py +0 -0
  181. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/commands/MakeSeedCommand.py +0 -0
  182. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/commands/MigrateFreshCommand.py +0 -0
  183. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/commands/MigrateRefreshCommand.py +0 -0
  184. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/commands/MigrateResetCommand.py +0 -0
  185. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/commands/MigrateRollbackCommand.py +0 -0
  186. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/commands/MigrateStatusCommand.py +0 -0
  187. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/commands/ShellCommand.py +0 -0
  188. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/commands/__init__.py +0 -0
  189. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/commands/stubs/create_migration.stub +0 -0
  190. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/commands/stubs/create_seed.stub +0 -0
  191. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/commands/stubs/model.stub +0 -0
  192. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/commands/stubs/observer.stub +0 -0
  193. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/commands/stubs/table_migration.stub +0 -0
  194. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/config/__init__.py +0 -0
  195. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/config/database.py +0 -0
  196. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/connections/connection.py +0 -0
  197. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/connections/manager.py +0 -0
  198. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/connections/mysql_connection.py +0 -0
  199. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/connections/postgres_connection.py +0 -0
  200. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/connections/sqlite_connection.py +0 -0
  201. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/exceptions.py +0 -0
  202. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/expressions/__init__.py +0 -0
  203. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/expressions/expressions.py +0 -0
  204. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/facades/DB.py +0 -0
  205. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/facades/Schema.py +0 -0
  206. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/facades/__init__.py +0 -0
  207. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/factory/__init__.py +0 -0
  208. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/factory/factory.py +0 -0
  209. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/helpers/__init__.py +0 -0
  210. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/helpers/misc.py +0 -0
  211. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/migrations/Migration.py +0 -0
  212. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/migrations/Migrator.py +0 -0
  213. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/migrations/__init__.py +0 -0
  214. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/models/MigrationModel.py +0 -0
  215. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/models/__init__.py +0 -0
  216. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/models/attribute.py +0 -0
  217. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/models/caster.py +0 -0
  218. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/models/fields.py +0 -0
  219. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/models/model.py +0 -0
  220. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/models/observer.py +0 -0
  221. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/models/pivot.py +0 -0
  222. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/models/registry.py +0 -0
  223. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/models/relationship.py +0 -0
  224. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/observers/ObservesEvents.py +0 -0
  225. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/observers/__init__.py +0 -0
  226. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/pagination/BasePaginator.py +0 -0
  227. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/pagination/LengthAwarePaginator.py +0 -0
  228. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/pagination/SimplePaginator.py +0 -0
  229. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/pagination/__init__.py +0 -0
  230. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/providers/DatabaseProvider.py +0 -0
  231. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/providers/__init__.py +0 -0
  232. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/query/EagerLoadMixin.py +0 -0
  233. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/query/EagerRelation.py +0 -0
  234. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/query/__init__.py +0 -0
  235. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/query/grammars/MSSQLGrammar.py +0 -0
  236. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/query/grammars/MySQLGrammar.py +0 -0
  237. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/query/grammars/PostgresGrammar.py +0 -0
  238. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/query/grammars/SQLiteGrammar.py +0 -0
  239. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/query/grammars/__init__.py +0 -0
  240. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/query/processors/MSSQLPostProcessor.py +0 -0
  241. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/query/processors/MySQLPostProcessor.py +0 -0
  242. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/query/processors/PostgresPostProcessor.py +0 -0
  243. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/query/processors/SQLitePostProcessor.py +0 -0
  244. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/query/processors/__init__.py +0 -0
  245. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/query/support.py +0 -0
  246. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/relationships/BaseRelationship.py +0 -0
  247. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/relationships/BelongsTo.py +0 -0
  248. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/relationships/HasMany.py +0 -0
  249. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/relationships/HasManyThrough.py +0 -0
  250. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/relationships/HasOne.py +0 -0
  251. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/relationships/HasOneThrough.py +0 -0
  252. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/relationships/MorphMany.py +0 -0
  253. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/relationships/MorphOne.py +0 -0
  254. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/relationships/MorphTo.py +0 -0
  255. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/relationships/MorphToMany.py +0 -0
  256. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/relationships/__init__.py +0 -0
  257. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/schema/Blueprint.py +0 -0
  258. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/schema/Column.py +0 -0
  259. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/schema/ColumnDiff.py +0 -0
  260. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/schema/Constraint.py +0 -0
  261. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/schema/ForeignKeyConstraint.py +0 -0
  262. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/schema/Index.py +0 -0
  263. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/schema/Table.py +0 -0
  264. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/schema/TableDiff.py +0 -0
  265. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/schema/__init__.py +0 -0
  266. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/schema/platforms/MSSQLPlatform.py +0 -0
  267. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/schema/platforms/MySQLPlatform.py +0 -0
  268. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/schema/platforms/Platform.py +0 -0
  269. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/schema/platforms/PostgresPlatform.py +0 -0
  270. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/schema/platforms/SQLitePlatform.py +0 -0
  271. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/schema/platforms/__init__.py +0 -0
  272. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/schema/schema.py +0 -0
  273. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/seeders/Seeder.py +0 -0
  274. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/seeders/__init__.py +0 -0
  275. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/stubs/create-migration.html +0 -0
  276. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/stubs/table-migration.html +0 -0
  277. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/testing/__init__.py +0 -0
  278. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/masoniteorm/testing/transaction.py +0 -0
  279. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/mcp/__init__.py +0 -0
  280. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/mcp/argument.py +0 -0
  281. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/mcp/prompt.py +0 -0
  282. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/mcp/protocol.py +0 -0
  283. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/mcp/providers/__init__.py +0 -0
  284. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/mcp/providers/mcp_provider.py +0 -0
  285. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/mcp/request.py +0 -0
  286. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/mcp/resource.py +0 -0
  287. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/mcp/response.py +0 -0
  288. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/mcp/server.py +0 -0
  289. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/mcp/tool.py +0 -0
  290. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/process/__init__.py +0 -0
  291. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/process/exception.py +0 -0
  292. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/process/fake.py +0 -0
  293. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/process/process.py +0 -0
  294. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/process/result.py +0 -0
  295. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/py.typed +0 -0
  296. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/skills/__init__.py +0 -0
  297. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/skills/adapters/__init__.py +0 -0
  298. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/skills/adapters/base.py +0 -0
  299. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/skills/adapters/claude.py +0 -0
  300. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/skills/adapters/gemini.py +0 -0
  301. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/skills/commands/__init__.py +0 -0
  302. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/skills/commands/skills.py +0 -0
  303. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/skills/parser.py +0 -0
  304. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/skills/provider.py +0 -0
  305. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/skills/registry.py +0 -0
  306. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/skills/stubs/.ai/fastapi-startkit/database/SKILL.md +0 -0
  307. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/skills/stubs/.ai/fastapi-startkit/fastapi/SKILL.md +0 -0
  308. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/skills/stubs/.ai/fastapi-startkit/inertia/SKILL.md +0 -0
  309. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/storage/__init__.py +0 -0
  310. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/storage/config/__init__.py +0 -0
  311. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/storage/config/storage.py +0 -0
  312. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/storage/data/mime.types +0 -0
  313. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/storage/drivers/__init__.py +0 -0
  314. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/storage/drivers/fake.py +0 -0
  315. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/storage/drivers/local.py +0 -0
  316. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/storage/drivers/s3.py +0 -0
  317. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/storage/file.py +0 -0
  318. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/storage/filestream.py +0 -0
  319. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/storage/helper.py +0 -0
  320. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/storage/providers/provider.py +0 -0
  321. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/storage/storage.py +0 -0
  322. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/support/__init__.py +0 -0
  323. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/support/collection.py +0 -0
  324. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/support/dataclass.py +0 -0
  325. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/support/providers/__init__.py +0 -0
  326. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/support/providers/provider.py +0 -0
  327. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/support/string.py +0 -0
  328. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/support/structures.py +0 -0
  329. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/support/uri.py +0 -0
  330. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/testing/__init__.py +0 -0
  331. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/testing/test_case.py +0 -0
  332. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/vite/__init__.py +0 -0
  333. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/vite/config/vite.py +0 -0
  334. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/vite/exceptions.py +0 -0
  335. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/vite/providers/provider.py +0 -0
  336. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/vite/stubs/package.json +0 -0
  337. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/vite/stubs/resources/css/app.css +0 -0
  338. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/vite/stubs/resources/js/app.ts +0 -0
  339. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/vite/stubs/resources/templates/index.html +0 -0
  340. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/vite/stubs/tsconfig.json +0 -0
  341. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.0}/src/fastapi_startkit/vite/stubs/vite.config.ts +0 -0
  342. {fastapi_startkit-0.59.0 → fastapi_startkit-0.60.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.59.0
3
+ Version: 0.60.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.59.0"
3
+ version = "0.60.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 = [
@@ -11,6 +11,9 @@ from fastapi_startkit.support import Uri, Uriable
11
11
  if TYPE_CHECKING:
12
12
  from fastapi_startkit.application import Application
13
13
 
14
+ # Values accepted by uvicorn's `ws` setting.
15
+ WS_BACKENDS = ("auto", "none", "websockets", "websockets-sansio", "wsproto")
16
+
14
17
 
15
18
  class ServeCommand(Command):
16
19
  name = "serve"
@@ -45,6 +48,13 @@ class ServeCommand(Command):
45
48
  default=None,
46
49
  description="The application to serve (overrides fastapi config)",
47
50
  ),
51
+ option(
52
+ "ws",
53
+ None,
54
+ flag=False,
55
+ default=None,
56
+ description=f"The uvicorn WebSocket backend: {', '.join(WS_BACKENDS)} (overrides fastapi config)",
57
+ ),
48
58
  ]
49
59
 
50
60
  def config_value(self, key: str) -> Any:
@@ -72,11 +82,20 @@ class ServeCommand(Command):
72
82
 
73
83
  return uri.with_port(port) if port else uri
74
84
 
85
+ def resolve_ws(self) -> str:
86
+ """CLI flag > fastapi config > FastAPIConfig default ('auto')."""
87
+ return str(self.option("ws") or self.config_value("ws"))
88
+
75
89
  def handle(self) -> int:
76
90
  import uvicorn
77
91
 
78
92
  from fastapi_startkit.container import Container
79
93
 
94
+ ws = self.resolve_ws()
95
+ if ws not in WS_BACKENDS:
96
+ self.line_error(f"Invalid --ws backend '{ws}'. Allowed values: {', '.join(WS_BACKENDS)}.", style="error")
97
+ return 1
98
+
80
99
  url = self.resolve_url()
81
100
  reload = self.resolve_option("reload")
82
101
  app = self.resolve_option("app")
@@ -85,7 +104,7 @@ class ServeCommand(Command):
85
104
  "host": url.host(),
86
105
  "port": url.port(),
87
106
  "reload": reload,
88
- "ws": "websockets-sansio",
107
+ "ws": ws,
89
108
  }
90
109
 
91
110
  if self.is_app_exist(app):
@@ -8,6 +8,8 @@ class FastAPIConfig:
8
8
  app_url: str = dataclasses.field(default_factory=lambda: env("APP_URL", "http://127.0.0.1:8000"))
9
9
  app: str = "bootstrap.application:app"
10
10
  reload: bool = dataclasses.field(default_factory=lambda: env("APP_RELOAD", True))
11
+ # 'auto' keeps the optional `websockets` package from being required at startup.
12
+ ws: str = dataclasses.field(default_factory=lambda: env("APP_WS", "auto"))
11
13
  reload_dirs: list | None = None
12
14
  reload_excludes: list = dataclasses.field(
13
15
  default_factory=lambda: [
@@ -7,6 +7,7 @@ from fastapi_startkit.logging.config import StackChannel, DailyChannel, Terminal
7
7
  @dataclasses.dataclass
8
8
  class LoggingConfig:
9
9
  default: str = dataclasses.field(default_factory=lambda: env("LOG_CHANNEL", "stack"))
10
+ level: str = dataclasses.field(default_factory=lambda: env("LOG_LEVEL", "info"))
10
11
 
11
12
  channels: dict = dataclasses.field(
12
13
  default_factory=lambda: {
@@ -1,5 +1,8 @@
1
1
  import logging
2
2
 
3
+ # Framework-only severities have no stdlib equivalent; map them to the nearest one.
4
+ _STDLIB_LEVELS = {"notice": "INFO", "alert": "CRITICAL", "emergency": "CRITICAL"}
5
+
3
6
 
4
7
  class LoggingHandler(logging.Handler):
5
8
  def emit(self, record: logging.LogRecord) -> None:
@@ -8,8 +11,9 @@ class LoggingHandler(logging.Handler):
8
11
  Logger.log(record.levelname, self.format(record))
9
12
 
10
13
  @staticmethod
11
- def install():
14
+ def install(level: str | None = None):
12
15
  root_logger = logging.getLogger()
13
16
  if not any(isinstance(h, LoggingHandler) for h in root_logger.handlers):
14
17
  root_logger.addHandler(LoggingHandler())
15
- root_logger.setLevel(logging.DEBUG)
18
+ if level:
19
+ root_logger.setLevel(_STDLIB_LEVELS.get(level.lower(), level.upper()))
@@ -7,10 +7,11 @@ class LoggingManager:
7
7
  self,
8
8
  channel_factory: type[ChannelFactory] = ChannelFactory,
9
9
  driver_factory: type[DriverFactory] = DriverFactory,
10
+ level: str | None = None,
10
11
  ):
11
12
  self.channel_factory = channel_factory
12
13
  self.driver_factory = driver_factory
13
- self.configure_python_logging()
14
+ self.configure_python_logging(level)
14
15
 
15
16
  def channel(self, channel: str):
16
17
  channel_class = self.channel_factory.make(channel)
@@ -19,7 +20,7 @@ class LoggingManager:
19
20
  return channel_class()
20
21
 
21
22
  @classmethod
22
- def configure_python_logging(cls):
23
+ def configure_python_logging(cls, level: str | None = None):
23
24
  from ..handler import LoggingHandler
24
25
 
25
- LoggingHandler.install()
26
+ LoggingHandler.install(level)
@@ -17,7 +17,7 @@ class LogProvider(Provider):
17
17
 
18
18
  self.app.bind("LogChannelFactory", ChannelFactory)
19
19
  self.app.bind("LogDriverFactory", DriverFactory)
20
- self.app.bind("LoggingManager", LoggingManager(ChannelFactory, DriverFactory))
20
+ self.app.bind("LoggingManager", LoggingManager(ChannelFactory, DriverFactory, config.get("level")))
21
21
 
22
22
  def boot(self):
23
23
  self.publishes({Path(__file__).resolve().parent.parent.joinpath("config/logging.py"): "config/logging.py"})
@@ -1,5 +1,6 @@
1
1
  from typing import Optional, Dict, Any
2
2
  from pydantic.dataclasses import dataclass
3
+ from pydantic.fields import Field
3
4
  from fastapi_startkit.environment.environment import env
4
5
 
5
6
 
@@ -8,6 +9,7 @@ class SQLiteConfig:
8
9
  driver: str = "sqlite"
9
10
  url: Optional[str] = env("DB_URL", None, cast=False)
10
11
  database: str = env("DB_DATABASE", "database.sqlite")
12
+ echo: bool = Field(default_factory=lambda: env("DB_ECHO", False))
11
13
  options: Optional[Dict[str, Any]] = None
12
14
 
13
15
 
@@ -23,6 +25,7 @@ class MySQLConfig:
23
25
  unix_socket: str = env("DB_SOCKET", "", cast=False)
24
26
  charset: str = env("DB_CHARSET", "utf8mb4")
25
27
  collation: str = env("DB_COLLATION", "utf8mb4_unicode_ci")
28
+ echo: bool = Field(default_factory=lambda: env("DB_ECHO", False))
26
29
  options: Optional[Dict[str, Any]] = None
27
30
 
28
31
 
@@ -37,4 +40,5 @@ class PostgresConfig:
37
40
  password: str = env("DB_PASSWORD", "", cast=False)
38
41
  charset: str = env("DB_CHARSET", "utf8")
39
42
  sslmode: str = env("DB_SSLMODE", "prefer")
43
+ echo: bool = Field(default_factory=lambda: env("DB_ECHO", False))
40
44
  options: Optional[Dict[str, Any]] = None
@@ -64,7 +64,7 @@ class ConnectionFactory:
64
64
  @classmethod
65
65
  def create_engine(cls, cfg: dict) -> AsyncEngine:
66
66
  url = cls.build_url(cfg)
67
- kwargs: dict[str, Any] = {"echo": True}
67
+ kwargs: dict[str, Any] = {"echo": bool(cfg.get("echo", False))}
68
68
  from fastapi_startkit.application import app
69
69
 
70
70
  if cast("Application", app()).is_testing():
@@ -29,6 +29,11 @@ TModel = TypeVar("TModel", bound="Model")
29
29
  # returns it, which the parent renders as a parenthesised subgroup.
30
30
  type WhereGroup[M: "Model"] = Callable[["QueryBuilder[M]"], "QueryBuilder[M]"]
31
31
 
32
+ # select_sub()/add_select() subquery source: a builder, or a callable that
33
+ # receives a fresh builder and returns the subquery.
34
+ type Subquery = "QueryBuilder[Any] | Callable[[QueryBuilder[Any]], QueryBuilder[Any]]"
35
+ type SelectEntry = "str | dict[str, str | Subquery]"
36
+
32
37
 
33
38
  class QueryBuilder(EagerLoadMixin, SupportMixin, Generic[TModel]):
34
39
  operators = [
@@ -129,6 +134,59 @@ class QueryBuilder(EagerLoadMixin, SupportMixin, Generic[TModel]):
129
134
  self._columns += (SelectExpression(column),)
130
135
  return self
131
136
 
137
+ def select_sub(self, subquery: "Subquery", alias: str) -> "Self":
138
+ """Add ``(subquery) AS alias`` to the selection.
139
+
140
+ ``subquery`` is a builder, or a callable that receives a fresh table-less
141
+ builder and returns one.
142
+ """
143
+ if not isinstance(subquery, QueryBuilder) and callable(subquery):
144
+ subquery = subquery(QueryBuilder(self.connection, self.grammar, self.processor))
145
+ if not isinstance(subquery, QueryBuilder):
146
+ raise TypeError("select_sub() expects a QueryBuilder subquery or a callable returning one.")
147
+ self._columns.append(SubGroupExpression(subquery, alias))
148
+ return self
149
+
150
+ def add_select(self, *columns: "SelectEntry | list[SelectEntry]") -> "Self":
151
+ """Append columns to the current selection without replacing it.
152
+
153
+ Plain string columns are appended once. A ``{alias: subquery}`` entry
154
+ adds a correlated column via :meth:`select_sub`, first selecting
155
+ ``{table}.*`` when nothing is selected yet so the base columns survive.
156
+ A string value under a string key is still a plain column.
157
+ """
158
+ entries: list[SelectEntry] = []
159
+ for column in columns:
160
+ if isinstance(column, list):
161
+ entries.extend(column)
162
+ else:
163
+ entries.append(column)
164
+
165
+ for entry in entries:
166
+ pairs: Iterable[tuple[str | None, str | Subquery]] = (
167
+ entry.items() if isinstance(entry, dict) else [(None, entry)]
168
+ )
169
+ for alias, value in pairs:
170
+ if isinstance(value, str):
171
+ if not self._is_selected(value):
172
+ self._columns.append(SelectExpression(value))
173
+ continue
174
+ if alias is None:
175
+ raise TypeError(
176
+ "add_select() received a subquery without a string alias; "
177
+ "pass {alias: subquery} or use select_sub(subquery, alias)."
178
+ )
179
+ if not self._columns:
180
+ self.select(f"{self._table}.*")
181
+ self.select_sub(value, alias)
182
+ return self
183
+
184
+ def _is_selected(self, column: str) -> bool:
185
+ return any(
186
+ isinstance(existing, SelectExpression) and existing.alias is None and existing.column == column
187
+ for existing in self._columns
188
+ )
189
+
132
190
  def limit(self, limit: int) -> "Self":
133
191
  self._limit = limit
134
192
  return self
@@ -898,7 +898,7 @@ class BaseGrammar:
898
898
  self.add_binding(*column.builder._bindings)
899
899
  else:
900
900
  builder_sql = column.builder.to_sql()
901
- sql += f"({builder_sql}) AS {column.alias}, "
901
+ sql += f"({builder_sql}) " + self.subquery_alias_string().format(alias=column.alias) + ", "
902
902
  continue
903
903
 
904
904
  sql += self._table_column_string(column, alias=alias, separator=separator)
@@ -456,8 +456,7 @@ class BelongsToMany(BaseRelationship):
456
456
  if not builder._columns:
457
457
  builder = builder.select("*")
458
458
 
459
- return_query = builder.add_select(
460
- f"{query.get_table_name()}_count",
459
+ return_query = builder.select_sub(
461
460
  lambda q: (
462
461
  q.count("*")
463
462
  .where_column(
@@ -473,6 +472,7 @@ class BelongsToMany(BaseRelationship):
473
472
  ),
474
473
  )
475
474
  ),
475
+ f"{query.get_table_name()}_count",
476
476
  )
477
477
 
478
478
  return return_query