fastapi-startkit 0.42.0__tar.gz → 0.44.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 (390) hide show
  1. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/PKG-INFO +1 -1
  2. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/pyproject.toml +1 -1
  3. fastapi_startkit-0.44.0/src/fastapi_startkit/environment/__init__.py +1 -0
  4. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/environment/environment.py +18 -0
  5. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/fastapi/commands/serve_command.py +32 -18
  6. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/fastapi/config/fastapi.py +1 -8
  7. fastapi_startkit-0.44.0/src/fastapi_startkit/support/__init__.py +5 -0
  8. fastapi_startkit-0.44.0/src/fastapi_startkit/support/uri.py +220 -0
  9. fastapi_startkit-0.42.0/src/fastapi_startkit/environment/__init__.py +0 -1
  10. fastapi_startkit-0.42.0/src/fastapi_startkit/support/__init__.py +0 -4
  11. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/.DS_Store +0 -0
  12. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/__init__.py +0 -0
  13. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/ai/__init__.py +0 -0
  14. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/ai/agent.py +0 -0
  15. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/ai/audio.py +0 -0
  16. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/ai/audio_factory.py +0 -0
  17. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/ai/config.py +0 -0
  18. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/ai/decorators.py +0 -0
  19. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/ai/document.py +0 -0
  20. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/ai/image.py +0 -0
  21. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/ai/image_factory.py +0 -0
  22. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/ai/providers/__init__.py +0 -0
  23. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/ai/providers/ai_provider.py +0 -0
  24. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/ai/response.py +0 -0
  25. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/application.py +0 -0
  26. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/broadcasting/__init__.py +0 -0
  27. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/broadcasting/auth.py +0 -0
  28. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/broadcasting/channels.py +0 -0
  29. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/broadcasting/config.py +0 -0
  30. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/broadcasting/drivers/__init__.py +0 -0
  31. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/broadcasting/drivers/log_driver.py +0 -0
  32. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/broadcasting/drivers/reverb_driver.py +0 -0
  33. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/broadcasting/event.py +0 -0
  34. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/broadcasting/helpers.py +0 -0
  35. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/broadcasting/manager.py +0 -0
  36. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/broadcasting/provider.py +0 -0
  37. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/broadcasting/reverb/__init__.py +0 -0
  38. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/broadcasting/reverb/channel_manager.py +0 -0
  39. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/broadcasting/reverb/connection.py +0 -0
  40. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/broadcasting/reverb/server.py +0 -0
  41. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/broadcasting/stubs/__init__.py +0 -0
  42. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/broadcasting/stubs/channels.py +0 -0
  43. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/carbon/__init__.py +0 -0
  44. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/carbon/carbon.py +0 -0
  45. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/config/__init__.py +0 -0
  46. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/config/app.py +0 -0
  47. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/configuration/Configuration.py +0 -0
  48. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/configuration/__init__.py +0 -0
  49. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/configuration/config.py +0 -0
  50. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/configuration/helpers.py +0 -0
  51. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/configuration/providers/ConfigurationProvider.py +0 -0
  52. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/configuration/providers/__init__.py +0 -0
  53. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/console/__init__.py +0 -0
  54. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/console/application.py +0 -0
  55. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/console/can_override_config.py +0 -0
  56. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/console/can_override_default_options.py +0 -0
  57. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/console/command.py +0 -0
  58. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/console/publish_command.py +0 -0
  59. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/container/__init__.py +0 -0
  60. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/container/container.py +0 -0
  61. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/exceptions/__init__.py +0 -0
  62. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/exceptions/exceptions.py +0 -0
  63. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/exceptions/handler.py +0 -0
  64. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/AI.py +0 -0
  65. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/AI.pyi +0 -0
  66. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Cache.py +0 -0
  67. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Config.py +0 -0
  68. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Config.pyi +0 -0
  69. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Dump.py +0 -0
  70. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Dump.pyi +0 -0
  71. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Facade.py +0 -0
  72. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Gate.py +0 -0
  73. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Gate.pyi +0 -0
  74. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Hash.py +0 -0
  75. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Hash.pyi +0 -0
  76. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Loader.py +0 -0
  77. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Loader.pyi +0 -0
  78. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Mail.py +0 -0
  79. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Mail.pyi +0 -0
  80. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Notification.py +0 -0
  81. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Notification.pyi +0 -0
  82. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Queue.py +0 -0
  83. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Queue.pyi +0 -0
  84. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/RateLimiter.py +0 -0
  85. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/RateLimiter.pyi +0 -0
  86. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Request.py +0 -0
  87. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Request.pyi +0 -0
  88. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Response.py +0 -0
  89. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Response.pyi +0 -0
  90. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Session.py +0 -0
  91. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Session.pyi +0 -0
  92. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Url.py +0 -0
  93. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Url.pyi +0 -0
  94. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/View.py +0 -0
  95. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/View.pyi +0 -0
  96. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Vite.py +0 -0
  97. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/Vite.pyi +0 -0
  98. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/facades/__init__.py +0 -0
  99. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/fastapi/__init__.py +0 -0
  100. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/fastapi/commands/__init__.py +0 -0
  101. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/fastapi/config/__init__.py +0 -0
  102. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/fastapi/exceptions.py +0 -0
  103. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/fastapi/providers/fastapi_provider.py +0 -0
  104. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/fastapi/requests/model.py +0 -0
  105. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/fastapi/routers/router.py +0 -0
  106. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/fastapi/testing/__init__.py +0 -0
  107. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/fastapi/testing/test_case.py +0 -0
  108. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/helpers/app.py +0 -0
  109. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/helpers/dataclass.py +0 -0
  110. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/inertia/__init__.py +0 -0
  111. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/inertia/constant.py +0 -0
  112. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/inertia/context.py +0 -0
  113. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/inertia/inertia.py +0 -0
  114. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/inertia/middleware.py +0 -0
  115. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/inertia/props/props.py +0 -0
  116. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/inertia/provider.py +0 -0
  117. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/jsonapi/__init__.py +0 -0
  118. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/jsonapi/response.py +0 -0
  119. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/loader/Loader.py +0 -0
  120. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/loader/__init__.py +0 -0
  121. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/ChannelFactory.py +0 -0
  122. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/__init__.py +0 -0
  123. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/channels/BaseChannel.py +0 -0
  124. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/channels/DailyChannel.py +0 -0
  125. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/channels/MultiBaseChannel.py +0 -0
  126. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/channels/SingleChannel.py +0 -0
  127. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/channels/SlackChannel.py +0 -0
  128. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/channels/StackChannel.py +0 -0
  129. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/channels/SyslogChannel.py +0 -0
  130. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/channels/TerminalChannel.py +0 -0
  131. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/channels/__init__.py +0 -0
  132. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/config/__init__.py +0 -0
  133. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/config/channels.py +0 -0
  134. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/config/logging.py +0 -0
  135. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/drivers/BaseDriver.py +0 -0
  136. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/drivers/LogSingleDriver.py +0 -0
  137. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/drivers/LogSlackDriver.py +0 -0
  138. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/drivers/LogSyslogDriver.py +0 -0
  139. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/drivers/LogTerminalDriver.py +0 -0
  140. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/drivers/__init__.py +0 -0
  141. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/factory.py +0 -0
  142. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/file.py +0 -0
  143. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/handler.py +0 -0
  144. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/listeners.py +0 -0
  145. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/logger.py +0 -0
  146. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/managers/LoggingManager.py +0 -0
  147. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/managers/__init__.py +0 -0
  148. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/providers/__init__.py +0 -0
  149. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/logging/providers/log_provider.py +0 -0
  150. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/__init__.py +0 -0
  151. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/collection/Collection.py +0 -0
  152. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/collection/__init__.py +0 -0
  153. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/commands/DBMigrateCommand.py +0 -0
  154. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/commands/DBSeedCommand.py +0 -0
  155. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/commands/MakeMigrationCommand.py +0 -0
  156. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/commands/MakeModelCommand.py +0 -0
  157. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/commands/MakeModelDocstringCommand.py +0 -0
  158. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/commands/MakeObserverCommand.py +0 -0
  159. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/commands/MakeSeedCommand.py +0 -0
  160. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/commands/MigrateFreshCommand.py +0 -0
  161. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/commands/MigrateRefreshCommand.py +0 -0
  162. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/commands/MigrateResetCommand.py +0 -0
  163. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/commands/MigrateRollbackCommand.py +0 -0
  164. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/commands/MigrateStatusCommand.py +0 -0
  165. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/commands/ShellCommand.py +0 -0
  166. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/commands/__init__.py +0 -0
  167. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/commands/stubs/create_migration.stub +0 -0
  168. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/commands/stubs/create_seed.stub +0 -0
  169. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/commands/stubs/model.stub +0 -0
  170. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/commands/stubs/observer.stub +0 -0
  171. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/commands/stubs/table_migration.stub +0 -0
  172. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/config/__init__.py +0 -0
  173. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/config/config.py +0 -0
  174. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/config/database.py +0 -0
  175. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/connections/connection.py +0 -0
  176. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/connections/factory.py +0 -0
  177. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/connections/manager.py +0 -0
  178. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/connections/mysql_connection.py +0 -0
  179. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/connections/postgres_connection.py +0 -0
  180. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/connections/sqlite_connection.py +0 -0
  181. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/exceptions.py +0 -0
  182. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/expressions/__init__.py +0 -0
  183. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/expressions/expressions.py +0 -0
  184. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/facades/DB.py +0 -0
  185. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/facades/Schema.py +0 -0
  186. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/facades/__init__.py +0 -0
  187. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/factory/__init__.py +0 -0
  188. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/factory/factory.py +0 -0
  189. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/helpers/__init__.py +0 -0
  190. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/helpers/misc.py +0 -0
  191. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/migrations/Migration.py +0 -0
  192. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/migrations/Migrator.py +0 -0
  193. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/migrations/__init__.py +0 -0
  194. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/models/MigrationModel.py +0 -0
  195. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/models/__init__.py +0 -0
  196. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/models/attribute.py +0 -0
  197. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/models/builder.py +0 -0
  198. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/models/caster.py +0 -0
  199. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/models/fields.py +0 -0
  200. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/models/model.py +0 -0
  201. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/models/observer.py +0 -0
  202. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/models/pivot.py +0 -0
  203. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/models/registry.py +0 -0
  204. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/models/relationship.py +0 -0
  205. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/observers/ObservesEvents.py +0 -0
  206. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/observers/__init__.py +0 -0
  207. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/pagination/BasePaginator.py +0 -0
  208. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/pagination/LengthAwarePaginator.py +0 -0
  209. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/pagination/SimplePaginator.py +0 -0
  210. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/pagination/__init__.py +0 -0
  211. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/providers/DatabaseProvider.py +0 -0
  212. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/providers/__init__.py +0 -0
  213. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/query/EagerLoadMixin.py +0 -0
  214. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/query/EagerRelation.py +0 -0
  215. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/query/__init__.py +0 -0
  216. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/query/grammars/BaseGrammar.py +0 -0
  217. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/query/grammars/MSSQLGrammar.py +0 -0
  218. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/query/grammars/MySQLGrammar.py +0 -0
  219. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/query/grammars/PostgresGrammar.py +0 -0
  220. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/query/grammars/SQLiteGrammar.py +0 -0
  221. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/query/grammars/__init__.py +0 -0
  222. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/query/processors/MSSQLPostProcessor.py +0 -0
  223. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/query/processors/MySQLPostProcessor.py +0 -0
  224. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/query/processors/PostgresPostProcessor.py +0 -0
  225. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/query/processors/SQLitePostProcessor.py +0 -0
  226. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/query/processors/__init__.py +0 -0
  227. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/query/support.py +0 -0
  228. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/relationships/BaseRelationship.py +0 -0
  229. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/relationships/BelongsTo.py +0 -0
  230. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/relationships/BelongsToMany.py +0 -0
  231. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/relationships/HasMany.py +0 -0
  232. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/relationships/HasManyThrough.py +0 -0
  233. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/relationships/HasOne.py +0 -0
  234. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/relationships/HasOneThrough.py +0 -0
  235. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/relationships/MorphMany.py +0 -0
  236. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/relationships/MorphOne.py +0 -0
  237. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/relationships/MorphTo.py +0 -0
  238. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/relationships/MorphToMany.py +0 -0
  239. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/relationships/__init__.py +0 -0
  240. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/schema/Blueprint.py +0 -0
  241. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/schema/Column.py +0 -0
  242. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/schema/ColumnDiff.py +0 -0
  243. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/schema/Constraint.py +0 -0
  244. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/schema/ForeignKeyConstraint.py +0 -0
  245. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/schema/Index.py +0 -0
  246. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/schema/Table.py +0 -0
  247. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/schema/TableDiff.py +0 -0
  248. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/schema/__init__.py +0 -0
  249. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/schema/platforms/MSSQLPlatform.py +0 -0
  250. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/schema/platforms/MySQLPlatform.py +0 -0
  251. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/schema/platforms/Platform.py +0 -0
  252. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/schema/platforms/PostgresPlatform.py +0 -0
  253. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/schema/platforms/SQLitePlatform.py +0 -0
  254. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/schema/platforms/__init__.py +0 -0
  255. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/schema/schema.py +0 -0
  256. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/seeds/Seeder.py +0 -0
  257. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/seeds/__init__.py +0 -0
  258. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/stubs/create-migration.html +0 -0
  259. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/stubs/table-migration.html +0 -0
  260. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/testing/__init__.py +0 -0
  261. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm/testing/transaction.py +0 -0
  262. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/.pytest_cache/.gitignore +0 -0
  263. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/.pytest_cache/CACHEDIR.TAG +0 -0
  264. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/.pytest_cache/README.md +0 -0
  265. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/.pytest_cache/v/cache/lastfailed +0 -0
  266. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/.pytest_cache/v/cache/nodeids +0 -0
  267. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/__init__.py +0 -0
  268. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/config/database.py +0 -0
  269. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/config.py +0 -0
  270. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/exceptions.py +0 -0
  271. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/factories/Factory.py +0 -0
  272. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/factories/__init__.py +0 -0
  273. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/schema/Schema.py +0 -0
  274. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/scopes/BaseScope.py +0 -0
  275. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/scopes/SoftDeleteScope.py +0 -0
  276. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/scopes/SoftDeletesMixin.py +0 -0
  277. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/scopes/UUIDPrimaryKeyMixin.py +0 -0
  278. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/scopes/UUIDPrimaryKeyScope.py +0 -0
  279. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/scopes/__init__.py +0 -0
  280. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/scopes/scope.py +0 -0
  281. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/testing/BaseTestCaseSelectGrammar.py +0 -0
  282. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/testing/Database.py +0 -0
  283. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/testing/TestCase.py +0 -0
  284. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/testing/__init__.py +0 -0
  285. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/User.py +0 -0
  286. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/connections/test_base_connections.py +0 -0
  287. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/eagers/test_eager.py +0 -0
  288. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/models/test_models.py +0 -0
  289. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/builder/test_mssql_query_builder.py +0 -0
  290. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/builder/test_mssql_query_builder_relationships.py +0 -0
  291. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_delete_grammar.py +0 -0
  292. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_insert_grammar.py +0 -0
  293. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_qmark.py +0 -0
  294. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_select_grammar.py +0 -0
  295. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_update_grammar.py +0 -0
  296. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/schema/test_mssql_schema_builder.py +0 -0
  297. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/schema/test_mssql_schema_builder_alter.py +0 -0
  298. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_mysql_builder_transaction.py +0 -0
  299. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_query_builder.py +0 -0
  300. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_query_builder_scopes.py +0 -0
  301. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_transactions.py +0 -0
  302. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/connections/test_mysql_connection_selects.py +0 -0
  303. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_delete_grammar.py +0 -0
  304. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_insert_grammar.py +0 -0
  305. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_qmark.py +0 -0
  306. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_select_grammar.py +0 -0
  307. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_update_grammar.py +0 -0
  308. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/model/test_accessors_and_mutators.py +0 -0
  309. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/model/test_model.py +0 -0
  310. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_belongs_to_many.py +0 -0
  311. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_has_many_through.py +0 -0
  312. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_has_one_through.py +0 -0
  313. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_relationships.py +0 -0
  314. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/schema/test_mysql_schema_builder.py +0 -0
  315. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/schema/test_mysql_schema_builder_alter.py +0 -0
  316. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/scopes/test_can_use_global_scopes.py +0 -0
  317. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/scopes/test_can_use_scopes.py +0 -0
  318. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/scopes/test_soft_delete.py +0 -0
  319. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/builder/test_postgres_query_builder.py +0 -0
  320. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/builder/test_postgres_transaction.py +0 -0
  321. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_delete_grammar.py +0 -0
  322. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_insert_grammar.py +0 -0
  323. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_select_grammar.py +0 -0
  324. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_update_grammar.py +0 -0
  325. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/relationships/test_postgres_relationships.py +0 -0
  326. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/schema/test_postgres_schema_builder.py +0 -0
  327. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/schema/test_postgres_schema_builder_alter.py +0 -0
  328. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/scopes/test_default_global_scopes.py +0 -0
  329. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/seeds/test_seeds.py +0 -0
  330. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/masoniteorm.backup/tests/utils.py +0 -0
  331. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/mcp/__init__.py +0 -0
  332. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/mcp/argument.py +0 -0
  333. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/mcp/prompt.py +0 -0
  334. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/mcp/protocol.py +0 -0
  335. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/mcp/providers/__init__.py +0 -0
  336. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/mcp/providers/mcp_provider.py +0 -0
  337. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/mcp/request.py +0 -0
  338. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/mcp/resource.py +0 -0
  339. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/mcp/response.py +0 -0
  340. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/mcp/server.py +0 -0
  341. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/mcp/tool.py +0 -0
  342. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/process/__init__.py +0 -0
  343. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/process/exception.py +0 -0
  344. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/process/fake.py +0 -0
  345. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/process/process.py +0 -0
  346. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/process/result.py +0 -0
  347. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/providers/Provider.py +0 -0
  348. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/providers/__init__.py +0 -0
  349. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/providers/app_provider.py +0 -0
  350. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/skills/__init__.py +0 -0
  351. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/skills/adapters/__init__.py +0 -0
  352. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/skills/adapters/base.py +0 -0
  353. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/skills/adapters/claude.py +0 -0
  354. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/skills/adapters/gemini.py +0 -0
  355. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/skills/commands/__init__.py +0 -0
  356. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/skills/commands/skills.py +0 -0
  357. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/skills/parser.py +0 -0
  358. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/skills/provider.py +0 -0
  359. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/skills/registry.py +0 -0
  360. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/skills/stubs/.ai/fastapi-startkit/database/SKILL.md +0 -0
  361. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/skills/stubs/.ai/fastapi-startkit/fastapi/SKILL.md +0 -0
  362. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/storage/__init__.py +0 -0
  363. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/storage/config/__init__.py +0 -0
  364. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/storage/config/storage.py +0 -0
  365. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/storage/data/mime.types +0 -0
  366. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/storage/drivers/__init__.py +0 -0
  367. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/storage/drivers/fake.py +0 -0
  368. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/storage/drivers/local.py +0 -0
  369. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/storage/drivers/s3.py +0 -0
  370. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/storage/file.py +0 -0
  371. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/storage/filestream.py +0 -0
  372. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/storage/helper.py +0 -0
  373. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/storage/providers/provider.py +0 -0
  374. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/storage/storage.py +0 -0
  375. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/support/collection.py +0 -0
  376. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/support/string.py +0 -0
  377. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/testing/__init__.py +0 -0
  378. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/testing/test_case.py +0 -0
  379. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/utils/structures.py +0 -0
  380. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/vite/__init__.py +0 -0
  381. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/vite/config/vite.py +0 -0
  382. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/vite/exceptions.py +0 -0
  383. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/vite/providers/provider.py +0 -0
  384. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/vite/stubs/package.json +0 -0
  385. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/vite/stubs/resources/css/app.css +0 -0
  386. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/vite/stubs/resources/js/app.ts +0 -0
  387. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/vite/stubs/templates/index.html +0 -0
  388. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/vite/stubs/tsconfig.json +0 -0
  389. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.0}/src/fastapi_startkit/vite/stubs/vite.config.ts +0 -0
  390. {fastapi_startkit-0.42.0 → fastapi_startkit-0.44.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.42.0
3
+ Version: 0.44.0
4
4
  Summary: Fastapi Starter kit components
5
5
  Author: Bedram Tamang
6
6
  Author-email: Bedram Tamang <tmgbedu@gmail.com>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fastapi-startkit"
3
- version = "0.42.0"
3
+ version = "0.44.0"
4
4
  description = "Fastapi Starter kit components"
5
5
  authors = [
6
6
  {name = "Bedram Tamang", email = "tmgbedu@gmail.com"}
@@ -0,0 +1 @@
1
+ from .environment import env, value
@@ -87,3 +87,21 @@ def env(value, default="", cast=True):
87
87
  return True
88
88
  else:
89
89
  return env_var
90
+
91
+
92
+ def value(env_var, default=""):
93
+ if env_var == "":
94
+ env_var = default
95
+
96
+ if isinstance(env_var, bool):
97
+ return env_var
98
+ elif env_var is None:
99
+ return None
100
+ elif isinstance(env_var, int) or (isinstance(env_var, str) and env_var.isnumeric()):
101
+ return int(env_var)
102
+ elif env_var in ("false", "False"):
103
+ return False
104
+ elif env_var in ("true", "True"):
105
+ return True
106
+ else:
107
+ return env_var
@@ -1,6 +1,10 @@
1
- from fastapi_startkit.console.command import Command
2
1
  from cleo.helpers import option
3
2
 
3
+ from fastapi_startkit import Config
4
+ from fastapi_startkit.console.command import Command
5
+ from fastapi_startkit.environment import value as cast_value
6
+ from fastapi_startkit.support import Uri, Uriable
7
+
4
8
 
5
9
  class ServeCommand(Command):
6
10
  name = "serve"
@@ -37,48 +41,58 @@ class ServeCommand(Command):
37
41
  ),
38
42
  ]
39
43
 
44
+ def resolve_option(self, key: str, default: str | int | None = None):
45
+ value = self.option(key) or Config.get(f"fastapi.{key}", default)
46
+
47
+ return cast_value(value)
48
+
49
+ def resolve_url(self) -> Uriable:
50
+ host = self.option("host") or Config.get("fastapi.app_url", "http://127.0.0.1:8000")
51
+ port = self.option("port")
52
+
53
+ if host and not host.startswith("http"):
54
+ host = f"http://{host}"
55
+
56
+ uri = Uri.of(host)
57
+
58
+ return uri.with_port(port) if port else uri
59
+
40
60
  def handle(self):
41
61
  import uvicorn
62
+
42
63
  from fastapi_startkit import Config
43
64
  from fastapi_startkit.container import Container
44
65
 
45
66
  # Resolve server settings: CLI flag > fastapi config > uvicorn default (None)
46
- cfg_host = Config.get("fastapi.host", "127.0.0.1")
47
- cfg_port = Config.get("fastapi.port", 8000)
48
- cfg_reload = Config.get("fastapi.reload", True)
49
67
  cfg_reload_dirs = Config.get("fastapi.reload_dirs") or None
50
68
  cfg_reload_excludes = Config.get("fastapi.reload_excludes") or None
51
69
 
52
- host = self.option("host") or cfg_host
53
- port = int(self.option("port") or cfg_port)
54
- reload = cfg_reload if self.option("reload") is None else self.option("reload")
55
- app = self.option("app")
56
-
57
- exist = self.is_app_exist()
70
+ url = self.resolve_url()
71
+ reload = self.resolve_option("reload", True)
58
72
 
59
73
  kwargs = {
60
- "host": host,
61
- "port": port,
74
+ "host": url.host(),
75
+ "port": url.port(),
62
76
  "reload": reload,
63
77
  "ws": "websockets-sansio",
64
78
  }
65
79
 
66
- if exist:
80
+ if self.is_app_exist():
67
81
  kwargs.update(
68
82
  {
69
- "app": app,
83
+ "app": self.option("app"),
70
84
  "factory": True,
71
85
  }
72
86
  )
73
- if cfg_reload_dirs is not None:
87
+ if cfg_reload_dirs is not None and reload:
74
88
  kwargs["reload_dirs"] = cfg_reload_dirs
75
- if cfg_reload_excludes is not None:
89
+ if cfg_reload_excludes is not None and reload:
76
90
  kwargs["reload_excludes"] = cfg_reload_excludes
77
91
 
78
- self.line(f"<info>Starting Uvicorn server on {host}:{port} [{app}]...</info>")
92
+ self.line(f"<info>Starting Uvicorn server on {url.host()}:{url.port()} [{self.option('app')}]...</info>")
79
93
 
80
94
  else:
81
- self.line(f"<info>Starting Uvicorn server on {host}:{port}...</info>")
95
+ self.line(f"<info>Starting Uvicorn server on {url.host()}:{url.port()}...</info>")
82
96
  kwargs.update({"app": Container.instance().fastapi, "reload": False})
83
97
 
84
98
  try:
@@ -5,14 +5,7 @@ from fastapi_startkit.environment import env
5
5
 
6
6
  @dataclasses.dataclass
7
7
  class FastAPIConfig:
8
- """Server configuration for the uvicorn/FastAPI serve command.
9
-
10
- All fields can be overridden via environment variables or by publishing a
11
- ``config/fastapi.py`` file in the application root.
12
- """
13
-
14
- host: str = dataclasses.field(default_factory=lambda: env("APP_HOST", "127.0.0.1"))
15
- port: int = dataclasses.field(default_factory=lambda: env("APP_PORT", 8000))
8
+ app_url: str = dataclasses.field(default_factory=lambda: env("APP_URL", "http://127.0.0.1:8000"))
16
9
  reload: bool = dataclasses.field(default_factory=lambda: env("APP_RELOAD", True))
17
10
  reload_dirs: list | None = None
18
11
  reload_excludes: list = dataclasses.field(
@@ -0,0 +1,5 @@
1
+ from .collection import Collection, collect
2
+ from .string import Str, Stringable
3
+ from .uri import Uri, Uriable
4
+
5
+ __all__ = ["Collection", "collect", "Str", "Stringable", "Uri", "Uriable"]
@@ -0,0 +1,220 @@
1
+ """Fluent URI parser and builder — fastapi_startkit.support.uri.
2
+
3
+ Usage::
4
+
5
+ from fastapi_startkit.support.uri import Uri
6
+
7
+ url = (
8
+ Uri.of("https://example.com/api/users?page=1&sort=asc")
9
+ .with_path("/api/posts")
10
+ .add_query("page", 2)
11
+ .remove_query("sort")
12
+ .with_fragment("results")
13
+ .get()
14
+ )
15
+ # "https://example.com/api/posts?page=2#results"
16
+ """
17
+
18
+ from __future__ import annotations
19
+
20
+ from typing import Any
21
+ from urllib.parse import ParseResult, parse_qs, urlencode, urlparse, urlunparse
22
+
23
+
24
+ class Uriable:
25
+ """Fluent URI builder returned by :meth:`Uri.of`.
26
+
27
+ Every mutating method returns a *new* ``Uriable`` so the original is
28
+ not modified (value-object semantics).
29
+ """
30
+
31
+ def __init__(
32
+ self,
33
+ parsed: ParseResult,
34
+ query: dict[str, list[str]] | None = None,
35
+ ) -> None:
36
+ self._parsed = parsed
37
+ # Maintain query params as ``dict[str, list[str]]`` — same format as
38
+ # ``urllib.parse.parse_qs``. We keep this separately so round-tripping
39
+ # through urlencode/parse_qs stays consistent.
40
+ self._query: dict[str, list[str]] = (
41
+ query if query is not None else parse_qs(parsed.query, keep_blank_values=True)
42
+ )
43
+
44
+ # ------------------------------------------------------------------
45
+ # Internal helpers
46
+ # ------------------------------------------------------------------
47
+
48
+ def _build_netloc(self, hostname: str | None = None, port: int | None = ...) -> str: # type: ignore[assignment]
49
+ """Reconstruct the ``netloc`` component preserving auth information."""
50
+ hostname = hostname if hostname is not None else (self._parsed.hostname or "")
51
+ port = self._parsed.port if port is ... else port
52
+
53
+ netloc = hostname
54
+ if port:
55
+ netloc = f"{netloc}:{port}"
56
+
57
+ username = self._parsed.username
58
+ password = self._parsed.password
59
+ if username:
60
+ auth = f"{username}:{password}@" if password else f"{username}@"
61
+ netloc = auth + netloc
62
+
63
+ return netloc
64
+
65
+ def _rebuild(self, **overrides: Any) -> Uriable:
66
+ """Return a new ``Uriable`` with selective component overrides."""
67
+ new_query: dict[str, list[str]] = overrides.pop("query", self._query)
68
+
69
+ new_parsed = ParseResult(
70
+ scheme=overrides.get("scheme", self._parsed.scheme),
71
+ netloc=overrides.get("netloc", self._parsed.netloc),
72
+ path=overrides.get("path", self._parsed.path),
73
+ params=overrides.get("params", self._parsed.params),
74
+ query=urlencode(new_query, doseq=True),
75
+ fragment=overrides.get("fragment", self._parsed.fragment),
76
+ )
77
+ return Uriable(new_parsed, new_query)
78
+
79
+ # ------------------------------------------------------------------
80
+ # Read accessors
81
+ # ------------------------------------------------------------------
82
+
83
+ def scheme(self) -> str:
84
+ """Return the URI scheme (e.g. ``'https'``)."""
85
+ return self._parsed.scheme
86
+
87
+ def host(self) -> str:
88
+ """Return the hostname without port (e.g. ``'example.com'``)."""
89
+ return self._parsed.hostname or ""
90
+
91
+ def port(self) -> int | None:
92
+ """Return the port number, or ``None`` if not explicitly set."""
93
+ return self._parsed.port
94
+
95
+ def path(self) -> str:
96
+ """Return the path component (e.g. ``'/api/users'``)."""
97
+ return self._parsed.path
98
+
99
+ def query(self) -> dict[str, list[str]]:
100
+ """Return all query parameters as ``{key: [value, ...]}``."""
101
+ return dict(self._query)
102
+
103
+ def query_param(self, key: str, default: Any = None) -> str | None:
104
+ """Return the *first* value for ``key``, or *default* if absent."""
105
+ values = self._query.get(key)
106
+ return values[0] if values else default
107
+
108
+ def fragment(self) -> str:
109
+ """Return the fragment (hash) component, without the leading ``#``."""
110
+ return self._parsed.fragment
111
+
112
+ def get(self) -> str:
113
+ """Return the fully assembled URI string."""
114
+ return urlunparse(self._parsed)
115
+
116
+ # ------------------------------------------------------------------
117
+ # Fluent mutators — each returns a new Uriable
118
+ # ------------------------------------------------------------------
119
+
120
+ def with_scheme(self, scheme: str) -> Uriable:
121
+ """Replace the scheme (e.g. ``'http'`` → ``'https'``)."""
122
+ return self._rebuild(scheme=scheme)
123
+
124
+ def with_host(self, host: str) -> Uriable:
125
+ """Replace the hostname, preserving port and authentication info."""
126
+ netloc = self._build_netloc(hostname=host)
127
+ return self._rebuild(netloc=netloc)
128
+
129
+ def with_port(self, port: int | None) -> Uriable:
130
+ """Set (or clear) the port, preserving hostname and auth."""
131
+ netloc = self._build_netloc(port=port)
132
+ return self._rebuild(netloc=netloc)
133
+
134
+ def with_path(self, path: str) -> Uriable:
135
+ """Replace the entire path component."""
136
+ return self._rebuild(path=path)
137
+
138
+ def append_path(self, segment: str) -> Uriable:
139
+ """Append *segment* to the current path, handling trailing slashes."""
140
+ base = self._parsed.path.rstrip("/")
141
+ segment = segment.lstrip("/")
142
+ return self._rebuild(path=f"{base}/{segment}")
143
+
144
+ def with_query(self, params: dict[str, Any]) -> Uriable:
145
+ """Replace *all* query parameters with the supplied mapping."""
146
+ new_query: dict[str, list[str]] = {}
147
+ for key, value in params.items():
148
+ if isinstance(value, (list, tuple)):
149
+ new_query[key] = [str(v) for v in value]
150
+ else:
151
+ new_query[key] = [str(value)]
152
+ return self._rebuild(query=new_query)
153
+
154
+ def add_query(self, key: str, value: Any) -> Uriable:
155
+ """Add or replace a single query parameter."""
156
+ new_query = dict(self._query)
157
+ new_query[key] = [str(value)]
158
+ return self._rebuild(query=new_query)
159
+
160
+ def remove_query(self, key: str) -> Uriable:
161
+ """Remove a query parameter (no-op if absent)."""
162
+ new_query = {k: v for k, v in self._query.items() if k != key}
163
+ return self._rebuild(query=new_query)
164
+
165
+ def with_fragment(self, fragment: str) -> Uriable:
166
+ """Set the fragment (hash), without the leading ``#``."""
167
+ return self._rebuild(fragment=fragment)
168
+
169
+ def without_fragment(self) -> Uriable:
170
+ """Remove the fragment component."""
171
+ return self._rebuild(fragment="")
172
+
173
+ def without_query(self) -> Uriable:
174
+ """Remove all query parameters."""
175
+ return self._rebuild(query={})
176
+
177
+ # ------------------------------------------------------------------
178
+ # Dunder helpers
179
+ # ------------------------------------------------------------------
180
+
181
+ def __str__(self) -> str:
182
+ return self.get()
183
+
184
+ def __repr__(self) -> str:
185
+ return f"Uriable({self.get()!r})"
186
+
187
+ def __eq__(self, other: object) -> bool:
188
+ if isinstance(other, Uriable):
189
+ return self.get() == other.get()
190
+ if isinstance(other, str):
191
+ return self.get() == other
192
+ return NotImplemented
193
+
194
+
195
+ class Uri:
196
+ """Static factory and utility for fluent URI manipulation.
197
+
198
+ Example::
199
+
200
+ from fastapi_startkit.support.uri import Uri
201
+
202
+ uri = Uri.of("https://api.example.com/v1/users?active=true")
203
+ new_uri = (
204
+ uri.append_path("search")
205
+ .add_query("q", "alice")
206
+ .with_scheme("http")
207
+ .get()
208
+ )
209
+ # "http://api.example.com/v1/users/search?active=true&q=alice"
210
+ """
211
+
212
+ @classmethod
213
+ def of(cls, url: str) -> Uriable:
214
+ """Parse *url* and return a fluent :class:`Uriable` builder."""
215
+ return Uriable(urlparse(url))
216
+
217
+ @classmethod
218
+ def parse(cls, url: str) -> Uriable:
219
+ """Alias for :meth:`of`."""
220
+ return cls.of(url)
@@ -1 +0,0 @@
1
- from .environment import env
@@ -1,4 +0,0 @@
1
- from .collection import Collection, collect
2
- from .string import Str, Stringable
3
-
4
- __all__ = ["Collection", "collect", "Str", "Stringable"]