fastapi-startkit 0.26.0__tar.gz → 0.28.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 (353) hide show
  1. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/PKG-INFO +1 -1
  2. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/pyproject.toml +6 -1
  3. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/application.py +3 -9
  4. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/collection/collection.py +1 -3
  5. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/config/app.py +1 -3
  6. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/configuration/Configuration.py +2 -6
  7. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/console/__init__.py +1 -4
  8. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/console/publish_command.py +1 -3
  9. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/container/container.py +15 -42
  10. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/exceptions/__init__.py +0 -1
  11. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/exceptions/exceptions.py +0 -10
  12. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/exceptions/handler.py +1 -6
  13. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/exceptions.backup/ExceptionHandler.py +3 -9
  14. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/exceptions.backup/handlers/DumpExceptionHandler.py +1 -3
  15. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/exceptions.backup/handlers/HttpExceptionHandler.py +1 -3
  16. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/exceptions.backup/handlers/ModelNotFoundHandler.py +1 -3
  17. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Hash.pyi +1 -3
  18. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Loader.pyi +2 -6
  19. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/RateLimiter.pyi +1 -3
  20. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/fastapi/commands/serve_command.py +2 -6
  21. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/fastapi/exceptions.py +2 -8
  22. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/fastapi/providers/fastapi_provider.py +1 -3
  23. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/fastapi/routers/router.py +8 -24
  24. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/fastapi/testing/__init__.py +1 -3
  25. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/fastapi/testing/test_case.py +1 -1
  26. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/helpers/app.py +3 -0
  27. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/helpers/dataclass.py +1 -4
  28. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/inertia/context.py +1 -3
  29. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/inertia/inertia.py +3 -9
  30. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/inertia/middleware.py +2 -6
  31. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/inertia/provider.py +0 -1
  32. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/loader/Loader.py +1 -3
  33. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/channels/DailyChannel.py +3 -3
  34. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/channels/SingleChannel.py +3 -3
  35. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/channels/SlackChannel.py +3 -3
  36. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/channels/SyslogChannel.py +3 -3
  37. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/channels/TerminalChannel.py +3 -4
  38. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/config/logging.py +1 -3
  39. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/drivers/LogSingleDriver.py +9 -43
  40. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/drivers/LogSlackDriver.py +1 -3
  41. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/drivers/LogSyslogDriver.py +1 -5
  42. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/listeners.py +1 -3
  43. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/providers/log_provider.py +1 -7
  44. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/__init__.py +2 -0
  45. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/commands/DBMigrateCommand.py +4 -6
  46. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/commands/DBSeedCommand.py +1 -3
  47. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/commands/MakeMigrationCommand.py +3 -9
  48. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/commands/MakeModelCommand.py +3 -9
  49. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/commands/MakeModelDocstringCommand.py +1 -3
  50. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/commands/MakeObserverCommand.py +2 -8
  51. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/commands/MigrateFreshCommand.py +3 -3
  52. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/commands/MigrateRefreshCommand.py +3 -3
  53. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/commands/MigrateResetCommand.py +4 -4
  54. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/commands/MigrateRollbackCommand.py +4 -4
  55. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/commands/MigrateStatusCommand.py +4 -4
  56. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/commands/ShellCommand.py +3 -10
  57. fastapi_startkit-0.28.0/src/fastapi_startkit/masoniteorm/exceptions.py +12 -0
  58. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/expressions/expressions.py +3 -10
  59. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/migrations/Migrator.py +23 -57
  60. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/models/attribute.py +3 -14
  61. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/models/builder.py +26 -20
  62. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/models/caster.py +4 -17
  63. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/models/model.py +10 -6
  64. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/models/observer.py +1 -3
  65. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/models/registry.py +1 -3
  66. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/providers/DatabaseProvider.py +1 -7
  67. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/query/EagerLoadMixin.py +1 -3
  68. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/query/grammars/BaseGrammar.py +23 -73
  69. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/query/grammars/MySQLGrammar.py +5 -7
  70. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/query/grammars/PostgresGrammar.py +7 -11
  71. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/query/grammars/SQLiteGrammar.py +1 -3
  72. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/query/support.py +1 -4
  73. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/relationships/BaseRelationship.py +12 -36
  74. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/relationships/BelongsTo.py +2 -7
  75. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/relationships/BelongsToMany.py +11 -40
  76. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/relationships/HasMany.py +3 -9
  77. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/relationships/HasManyThrough.py +8 -12
  78. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/relationships/HasOne.py +3 -10
  79. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/relationships/HasOneThrough.py +2 -6
  80. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/relationships/MorphMany.py +4 -12
  81. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/relationships/MorphOne.py +4 -12
  82. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/relationships/MorphTo.py +3 -10
  83. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/relationships/MorphToMany.py +2 -6
  84. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/schema/Blueprint.py +27 -85
  85. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/schema/Table.py +1 -3
  86. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/schema/platforms/MSSQLPlatform.py +23 -51
  87. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/schema/platforms/MySQLPlatform.py +31 -75
  88. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/schema/platforms/Platform.py +4 -6
  89. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/schema/platforms/PostgresPlatform.py +31 -71
  90. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/schema/platforms/SQLitePlatform.py +19 -49
  91. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/schema/schema.py +2 -6
  92. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/seeds/Seeder.py +2 -6
  93. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/testing/__init__.py +2 -2
  94. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/config.py +3 -9
  95. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/factories/Factory.py +1 -3
  96. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/schema/Schema.py +7 -21
  97. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/scopes/SoftDeleteScope.py +1 -3
  98. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/scopes/UUIDPrimaryKeyScope.py +2 -8
  99. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/testing/BaseTestCaseSelectGrammar.py +75 -243
  100. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/eagers/test_eager.py +5 -15
  101. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/integrations/test_model.py +2 -6
  102. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/models/test_models.py +13 -45
  103. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/builder/test_mssql_query_builder.py +11 -36
  104. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_delete_grammar.py +2 -10
  105. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_insert_grammar.py +1 -3
  106. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_select_grammar.py +14 -29
  107. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_update_grammar.py +2 -9
  108. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/schema/test_mssql_schema_builder.py +2 -6
  109. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/schema/test_mssql_schema_builder_alter.py +3 -9
  110. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_mysql_builder_transaction.py +1 -3
  111. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_query_builder.py +57 -174
  112. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_query_builder_scopes.py +2 -8
  113. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_delete_grammar.py +5 -19
  114. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_insert_grammar.py +6 -18
  115. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_qmark.py +12 -38
  116. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_select_grammar.py +11 -20
  117. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_update_grammar.py +8 -25
  118. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/model/test_accessors_and_mutators.py +1 -3
  119. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/model/test_model.py +13 -39
  120. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_belongs_to_many.py +5 -15
  121. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_has_many_through.py +2 -6
  122. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_has_one_through.py +2 -6
  123. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_relationships.py +6 -22
  124. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/schema/test_mysql_schema_builder.py +8 -26
  125. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/schema/test_mysql_schema_builder_alter.py +5 -15
  126. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/scopes/test_can_use_global_scopes.py +1 -3
  127. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/scopes/test_soft_delete.py +1 -3
  128. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/builder/test_postgres_query_builder.py +49 -150
  129. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_delete_grammar.py +4 -16
  130. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_insert_grammar.py +5 -15
  131. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_select_grammar.py +11 -22
  132. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_update_grammar.py +9 -28
  133. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/schema/test_postgres_schema_builder.py +6 -18
  134. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/schema/test_postgres_schema_builder_alter.py +4 -12
  135. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/providers/Provider.py +1 -6
  136. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/storage/config/__init__.py +1 -0
  137. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/storage/drivers/__init__.py +1 -1
  138. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/storage/drivers/fake.py +2 -6
  139. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/storage/drivers/local.py +2 -4
  140. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/storage/drivers/s3.py +15 -42
  141. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/storage/providers/provider.py +2 -10
  142. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/storage/storage.py +1 -0
  143. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/testing/__init__.py +1 -3
  144. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/testing/test_case.py +4 -5
  145. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/utils/collections.py +1 -3
  146. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/utils/str.py +2 -6
  147. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/utils/structures.py +1 -6
  148. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/vite/providers/provider.py +2 -6
  149. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/vite/vite.py +10 -26
  150. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/.DS_Store +0 -0
  151. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/__init__.py +0 -0
  152. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/carbon/__init__.py +0 -0
  153. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/carbon/carbon.py +0 -0
  154. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/collection/__init__.py +0 -0
  155. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/config/__init__.py +0 -0
  156. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/configuration/__init__.py +0 -0
  157. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/configuration/config.py +0 -0
  158. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/configuration/helpers.py +0 -0
  159. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/configuration/providers/ConfigurationProvider.py +0 -0
  160. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/configuration/providers/__init__.py +0 -0
  161. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/console/application.py +0 -0
  162. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/console/can_override_config.py +0 -0
  163. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/console/can_override_default_options.py +0 -0
  164. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/console/command.py +0 -0
  165. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/container/__init__.py +0 -0
  166. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/environment/__init__.py +0 -0
  167. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/environment/environment.py +0 -0
  168. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/exceptions.backup/DD.py +0 -0
  169. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/exceptions.backup/__init__.py +0 -0
  170. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/exceptions.backup/exceptionite/__init__.py +0 -0
  171. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/exceptions.backup/exceptionite/blocks.py +0 -0
  172. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/exceptions.backup/exceptionite/controllers.py +0 -0
  173. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/exceptions.backup/exceptionite/solutions.py +0 -0
  174. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/exceptions.backup/exceptionite/tabs.py +0 -0
  175. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Auth.py +0 -0
  176. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Auth.pyi +0 -0
  177. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Broadcast.py +0 -0
  178. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Cache.py +0 -0
  179. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Config.py +0 -0
  180. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Config.pyi +0 -0
  181. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Dump.py +0 -0
  182. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Dump.pyi +0 -0
  183. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Facade.py +0 -0
  184. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Gate.py +0 -0
  185. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Gate.pyi +0 -0
  186. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Hash.py +0 -0
  187. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Inertia.py +0 -0
  188. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Loader.py +0 -0
  189. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Mail.py +0 -0
  190. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Mail.pyi +0 -0
  191. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Notification.py +0 -0
  192. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Notification.pyi +0 -0
  193. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Queue.py +0 -0
  194. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Queue.pyi +0 -0
  195. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/RateLimiter.py +0 -0
  196. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Request.py +0 -0
  197. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Request.pyi +0 -0
  198. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Response.py +0 -0
  199. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Response.pyi +0 -0
  200. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Session.py +0 -0
  201. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Session.pyi +0 -0
  202. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Url.py +0 -0
  203. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Url.pyi +0 -0
  204. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/View.py +0 -0
  205. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/View.pyi +0 -0
  206. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Vite.py +0 -0
  207. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/Vite.pyi +0 -0
  208. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/facades/__init__.py +0 -0
  209. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/fastapi/__init__.py +0 -0
  210. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/fastapi/commands/__init__.py +0 -0
  211. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/fastapi/config/__init__.py +0 -0
  212. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/fastapi/config/fastapi.py +0 -0
  213. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/fastapi/requests/model.py +0 -0
  214. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/helpers/string.py +0 -0
  215. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/inertia/__init__.py +0 -0
  216. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/inertia/constant.py +0 -0
  217. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/inertia/props/props.py +0 -0
  218. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/loader/__init__.py +0 -0
  219. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/ChannelFactory.py +0 -0
  220. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/__init__.py +0 -0
  221. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/channels/BaseChannel.py +0 -0
  222. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/channels/MultiBaseChannel.py +0 -0
  223. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/channels/StackChannel.py +0 -0
  224. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/channels/__init__.py +0 -0
  225. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/config/__init__.py +0 -0
  226. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/config/channels.py +0 -0
  227. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/drivers/BaseDriver.py +0 -0
  228. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/drivers/LogTerminalDriver.py +0 -0
  229. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/drivers/__init__.py +0 -0
  230. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/factory.py +0 -0
  231. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/handler.py +0 -0
  232. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/logger.py +0 -0
  233. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/managers/LoggingManager.py +0 -0
  234. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/managers/__init__.py +0 -0
  235. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/logging/providers/__init__.py +0 -0
  236. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/collection/Collection.py +0 -0
  237. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/collection/__init__.py +0 -0
  238. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/commands/MakeSeedCommand.py +0 -0
  239. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/commands/__init__.py +0 -0
  240. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/commands/stubs/create_migration.stub +0 -0
  241. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/commands/stubs/create_seed.stub +0 -0
  242. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/commands/stubs/model.stub +0 -0
  243. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/commands/stubs/observer.stub +0 -0
  244. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/commands/stubs/table_migration.stub +0 -0
  245. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/config/__init__.py +0 -0
  246. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/config/config.py +0 -0
  247. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/config/database.py +0 -0
  248. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/connections/connection.py +0 -0
  249. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/connections/factory.py +1 -1
  250. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/connections/manager.py +0 -0
  251. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/connections/mysql_connection.py +0 -0
  252. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/connections/postgres_connection.py +0 -0
  253. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/connections/sqlite_connection.py +0 -0
  254. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/expressions/__init__.py +0 -0
  255. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/facades/DB.py +0 -0
  256. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/facades/Schema.py +0 -0
  257. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/facades/__init__.py +0 -0
  258. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/factory/__init__.py +0 -0
  259. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/factory/factory.py +0 -0
  260. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/helpers/__init__.py +0 -0
  261. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/helpers/misc.py +0 -0
  262. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/migrations/Migration.py +0 -0
  263. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/migrations/__init__.py +0 -0
  264. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/models/MigrationModel.py +0 -0
  265. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/models/__init__.py +0 -0
  266. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/models/fields.py +0 -0
  267. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/models/pivot.py +0 -0
  268. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/models/relationship.py +0 -0
  269. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/observers/ObservesEvents.py +0 -0
  270. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/observers/__init__.py +0 -0
  271. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/pagination/BasePaginator.py +0 -0
  272. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/pagination/LengthAwarePaginator.py +0 -0
  273. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/pagination/SimplePaginator.py +0 -0
  274. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/pagination/__init__.py +0 -0
  275. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/providers/__init__.py +0 -0
  276. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/query/EagerRelation.py +0 -0
  277. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/query/__init__.py +0 -0
  278. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/query/grammars/MSSQLGrammar.py +0 -0
  279. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/query/grammars/__init__.py +0 -0
  280. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/query/processors/MSSQLPostProcessor.py +0 -0
  281. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/query/processors/MySQLPostProcessor.py +0 -0
  282. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/query/processors/PostgresPostProcessor.py +0 -0
  283. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/query/processors/SQLitePostProcessor.py +0 -0
  284. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/query/processors/__init__.py +0 -0
  285. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/relationships/__init__.py +0 -0
  286. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/schema/Column.py +0 -0
  287. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/schema/ColumnDiff.py +0 -0
  288. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/schema/Constraint.py +0 -0
  289. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/schema/ForeignKeyConstraint.py +0 -0
  290. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/schema/Index.py +0 -0
  291. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/schema/TableDiff.py +0 -0
  292. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/schema/__init__.py +0 -0
  293. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/schema/platforms/__init__.py +0 -0
  294. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/seeds/__init__.py +0 -0
  295. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/stubs/create-migration.html +0 -0
  296. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/stubs/table-migration.html +0 -0
  297. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm/testing/transaction.py +0 -0
  298. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/.pytest_cache/.gitignore +0 -0
  299. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/.pytest_cache/CACHEDIR.TAG +0 -0
  300. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/.pytest_cache/README.md +0 -0
  301. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/.pytest_cache/v/cache/lastfailed +0 -0
  302. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/.pytest_cache/v/cache/nodeids +0 -0
  303. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/__init__.py +0 -0
  304. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/config/database.py +0 -0
  305. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/exceptions.py +0 -0
  306. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/factories/__init__.py +0 -0
  307. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/scopes/BaseScope.py +0 -0
  308. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/scopes/SoftDeletesMixin.py +0 -0
  309. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/scopes/UUIDPrimaryKeyMixin.py +0 -0
  310. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/scopes/__init__.py +0 -0
  311. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/scopes/scope.py +0 -0
  312. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/testing/Database.py +0 -0
  313. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/testing/TestCase.py +0 -0
  314. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/testing/__init__.py +0 -0
  315. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/User.py +0 -0
  316. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/connections/test_base_connections.py +0 -0
  317. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/factories/test_factories.py +0 -0
  318. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/integrations/config/__init__.py +0 -0
  319. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/integrations/config/database.py +0 -0
  320. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/integrations/databases/migrations/2026_01_01_000000_create_users_table.py +0 -0
  321. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/integrations/model.py +0 -0
  322. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/builder/test_mssql_query_builder_relationships.py +0 -0
  323. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_qmark.py +0 -0
  324. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_transactions.py +0 -0
  325. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/connections/test_mysql_connection_selects.py +0 -0
  326. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/scopes/test_can_use_scopes.py +0 -0
  327. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/builder/test_postgres_transaction.py +0 -0
  328. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/relationships/test_postgres_relationships.py +0 -0
  329. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/scopes/test_default_global_scopes.py +0 -0
  330. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/seeds/test_seeds.py +0 -0
  331. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/masoniteorm.backup/tests/utils.py +0 -0
  332. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/providers/__init__.py +0 -0
  333. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/providers/app_provider.py +0 -0
  334. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/storage/__init__.py +0 -0
  335. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/storage/config/storage.py +0 -0
  336. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/storage/file.py +0 -0
  337. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/storage/filestream.py +0 -0
  338. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/utils/__init__.py +0 -0
  339. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/utils/console.py +0 -0
  340. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/utils/data/mime.types +0 -0
  341. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/utils/filesystem.py +0 -0
  342. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/utils/http.py +0 -0
  343. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/utils/location.py +0 -0
  344. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/utils/time.py +0 -0
  345. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/vite/__init__.py +0 -0
  346. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/vite/config/vite.py +0 -0
  347. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/vite/exceptions.py +0 -0
  348. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/vite/stubs/package.json +0 -0
  349. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/vite/stubs/resources/css/app.css +0 -0
  350. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/vite/stubs/resources/js/app.ts +0 -0
  351. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/vite/stubs/templates/index.html +0 -0
  352. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/vite/stubs/tsconfig.json +0 -0
  353. {fastapi_startkit-0.26.0 → fastapi_startkit-0.28.0}/src/fastapi_startkit/vite/stubs/vite.config.ts +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: fastapi-startkit
3
- Version: 0.26.0
3
+ Version: 0.28.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.26.0"
3
+ version = "0.28.0"
4
4
  description = "Fastapi Starter kit components"
5
5
  authors = [
6
6
  {name = "Bedram Tamang", email = "tmgbedu@gmail.com"}
@@ -55,6 +55,11 @@ dev = [
55
55
  "ruff>=0.9.0",
56
56
  "twine>=6.2.0",
57
57
  "itsdangerous>=2.2.0",
58
+ "asyncpg>=0.29.0",
59
+ "aiosqlite>=0.22.1",
60
+ "aiomysql>=0.2.0",
61
+ "sqlalchemy[asyncio]>=2.0.38",
62
+ "fastapi[standard]>=0.124.4",
58
63
  ]
59
64
 
60
65
 
@@ -74,9 +74,7 @@ class Application(Container, Generic[TConfig]):
74
74
  return self
75
75
 
76
76
  def configure_exception_handler(self):
77
- self.exception_manager: ExceptionHandler = self._exception_handler_class(
78
- application=self
79
- )
77
+ self.exception_manager: ExceptionHandler = self._exception_handler_class(application=self)
80
78
  self.exception_manager.register()
81
79
  self.exception_manager.install()
82
80
  self.bind("exception_manager", self.exception_manager)
@@ -163,9 +161,7 @@ class Application(Container, Generic[TConfig]):
163
161
  return self
164
162
 
165
163
  # Add custom exception handlers
166
- def add_exception_handler(
167
- self, exc_class_or_status_code: Any, handler: Callable[..., Any]
168
- ):
164
+ def add_exception_handler(self, exc_class_or_status_code: Any, handler: Callable[..., Any]):
169
165
  self._fastapi.add_exception_handler(exc_class_or_status_code, handler)
170
166
  return self
171
167
 
@@ -175,9 +171,7 @@ class Application(Container, Generic[TConfig]):
175
171
  try:
176
172
  from fastapi import FastAPI
177
173
  except ImportError:
178
- raise RuntimeError(
179
- "FastAPI is not installed. Install it with: pip install fastapi"
180
- )
174
+ raise RuntimeError("FastAPI is not installed. Install it with: pip install fastapi")
181
175
  self._fastapi = FastAPI()
182
176
  # Making the type hint work
183
177
  assert self._fastapi is not None
@@ -276,9 +276,7 @@ class Collection:
276
276
 
277
277
  if k == value:
278
278
  if key:
279
- attributes[self._data_get(item, key)] = self._data_get(
280
- item, value
281
- )
279
+ attributes[self._data_get(item, key)] = self._data_get(item, value)
282
280
  else:
283
281
  attributes.append(v)
284
282
 
@@ -5,9 +5,7 @@ from fastapi_startkit.environment.environment import env
5
5
 
6
6
  @dataclass
7
7
  class AppConfig:
8
- name: str = field(
9
- default_factory=lambda: os.getenv("APP_NAME", "FastAPI starter kit")
10
- )
8
+ name: str = field(default_factory=lambda: os.getenv("APP_NAME", "FastAPI starter kit"))
11
9
  env: str = field(default_factory=lambda: os.getenv("APP_ENV", "development"))
12
10
  debug: bool = field(default_factory=lambda: env("APP_DEBUG", "true"))
13
11
  timezone: str = field(default_factory=lambda: os.getenv("APP_TIMEZONE", "UTC"))
@@ -26,9 +26,7 @@ class Configuration:
26
26
  def load(self):
27
27
  """At boot load configuration from all files and store them in here."""
28
28
  config_root = self.application.make("config.location")
29
- for module_name, module in (
30
- Loader().get_modules(config_root, raise_exception=True).items()
31
- ):
29
+ for module_name, module in Loader().get_modules(config_root, raise_exception=True).items():
32
30
  params = Loader().get_parameters(module)
33
31
  for name, value in params.items():
34
32
  self._config[f"{module_name}.{name.lower()}"] = value
@@ -42,9 +40,7 @@ class Configuration:
42
40
  (such as 'application').
43
41
  """
44
42
  if path in self.reserved_keys:
45
- raise InvalidConfigurationSetup(
46
- f"{path} is a reserved configuration key name. Please use an other key."
47
- )
43
+ raise InvalidConfigurationSetup(f"{path} is a reserved configuration key name. Please use an other key.")
48
44
  if isinstance(external_config, str):
49
45
  # config is a path and should be loaded
50
46
  params = Loader().get_parameters(external_config)
@@ -1,7 +1,4 @@
1
1
  from .application import ConsoleApplication
2
2
  from .command import Command
3
3
 
4
- __all__ = [
5
- "ConsoleApplication",
6
- "Command"
7
- ]
4
+ __all__ = ["ConsoleApplication", "Command"]
@@ -37,9 +37,7 @@ class PublishCommand(Command):
37
37
  if provider_arg:
38
38
  target = Str.slugify(provider_arg)
39
39
  resources = {
40
- name: files
41
- for name, files in application.published_resources.items()
42
- if Str.slugify(name) == target
40
+ name: files for name, files in application.published_resources.items() if Str.slugify(name) == target
43
41
  }
44
42
  if not resources:
45
43
  self.line(f"<error>No provider found matching '{provider_arg}'.</error>")
@@ -54,14 +54,10 @@ class Container:
54
54
  """
55
55
  if inspect.ismodule(class_obj):
56
56
  raise StrictContainerException(
57
- "Cannot bind module '{}' with key '{}' into the container".format(
58
- class_obj, name
59
- )
57
+ "Cannot bind module '{}' with key '{}' into the container".format(class_obj, name)
60
58
  )
61
59
  if self.strict and name in self.objects:
62
- raise StrictContainerException(
63
- "You cannot override a key inside a strict container"
64
- )
60
+ raise StrictContainerException("You cannot override a key inside a strict container")
65
61
 
66
62
  if self.override or name not in self.objects:
67
63
  self.fire_hook("bind", name, class_obj)
@@ -145,9 +141,7 @@ class Container:
145
141
  obj = self.resolve(name, *arguments)
146
142
  return obj
147
143
 
148
- raise MissingContainerBindingNotFound(
149
- "{0} key was not found in the container".format(name)
150
- )
144
+ raise MissingContainerBindingNotFound("{0} key was not found in the container".format(name))
151
145
 
152
146
  def has(self, name):
153
147
  """Check if a key exists in the container.
@@ -200,14 +194,9 @@ class Container:
200
194
  self.remember
201
195
  and not passing_arguments
202
196
  and inspect.ismethod(obj)
203
- and "{}.{}.{}".format(
204
- obj.__module__, obj.__self__.__class__.__name__, obj.__name__
205
- )
206
- in self._remembered
197
+ and "{}.{}.{}".format(obj.__module__, obj.__self__.__class__.__name__, obj.__name__) in self._remembered
207
198
  ):
208
- location = "{}.{}.{}".format(
209
- obj.__module__, obj.__self__.__class__.__name__, obj.__name__
210
- )
199
+ location = "{}.{}.{}".format(obj.__module__, obj.__self__.__class__.__name__, obj.__name__)
211
200
  objects = self._remembered[location]
212
201
  try:
213
202
  return obj(*objects)
@@ -271,9 +260,7 @@ class Container:
271
260
  if not inspect.ismethod(obj):
272
261
  self._remembered[obj] = objects
273
262
  else:
274
- signature = "{}.{}.{}".format(
275
- obj.__module__, obj.__self__.__class__.__name__, obj.__name__
276
- )
263
+ signature = "{}.{}.{}".format(obj.__module__, obj.__self__.__class__.__name__, obj.__name__)
277
264
  self._remembered[signature] = objects
278
265
  return obj(*objects)
279
266
 
@@ -305,20 +292,15 @@ class Container:
305
292
  providers.update({key: value})
306
293
  elif "*" in search:
307
294
  split_search = search.split("*")
308
- if key.startswith(split_search[0]) and key.endswith(
309
- split_search[1]
310
- ):
295
+ if key.startswith(split_search[0]) and key.endswith(split_search[1]):
311
296
  providers.update({key: value})
312
297
  else:
313
- raise AttributeError(
314
- "There is no '*' in your collection search"
315
- )
298
+ raise AttributeError("There is no '*' in your collection search")
316
299
  else:
317
300
  for provider_key, provider_class in self.objects.items():
318
- if (
319
- inspect.isclass(provider_class)
320
- and issubclass(provider_class, search)
321
- ) or isinstance(provider_class, search):
301
+ if (inspect.isclass(provider_class) and issubclass(provider_class, search)) or isinstance(
302
+ provider_class, search
303
+ ):
322
304
  providers.update({provider_key: provider_class})
323
305
 
324
306
  return providers
@@ -344,10 +326,7 @@ class Container:
344
326
  return obj
345
327
 
346
328
  for _, provider_class in self.objects.items():
347
- if (
348
- parameter.annotation == provider_class
349
- or parameter.annotation == provider_class.__class__
350
- ):
329
+ if parameter.annotation == provider_class or parameter.annotation == provider_class.__class__:
351
330
  obj = provider_class
352
331
  self.fire_hook("resolve", parameter, obj)
353
332
 
@@ -362,9 +341,7 @@ class Container:
362
341
  return obj
363
342
 
364
343
  raise ContainerError(
365
- "The dependency with the {0} annotation could not be resolved by the container".format(
366
- parameter
367
- )
344
+ "The dependency with the {0} annotation could not be resolved by the container".format(parameter)
368
345
  )
369
346
 
370
347
  def get_parameters(self, obj):
@@ -392,9 +369,7 @@ class Container:
392
369
  return keyword.default
393
370
 
394
371
  raise ContainerError(
395
- "The parameter dependency with the key of {0} could not be found in the container".format(
396
- parameter
397
- )
372
+ "The parameter dependency with the key of {0} could not be found in the container".format(parameter)
398
373
  )
399
374
 
400
375
  def on_bind(self, key, obj):
@@ -503,9 +478,7 @@ class Container:
503
478
  return return_obj
504
479
 
505
480
  raise MissingContainerBindingNotFound(
506
- "The dependency with the {0} annotation could not be resolved by the container".format(
507
- obj
508
- )
481
+ "The dependency with the {0} annotation could not be resolved by the container".format(obj)
509
482
  )
510
483
 
511
484
  def __contains__(self, obj):
@@ -30,6 +30,5 @@ from .exceptions import (
30
30
  ValidationException,
31
31
  AmbiguousError,
32
32
  MethodNotAllowedException,
33
- ModelNotFoundException,
34
33
  ThrottleRequestsException,
35
34
  )
@@ -144,16 +144,6 @@ class NotificationException(Exception):
144
144
  pass
145
145
 
146
146
 
147
- class ModelNotFoundException(Exception):
148
- is_http_exception = True
149
-
150
- def get_response(self):
151
- return "Model Not Found"
152
-
153
- def get_status(self):
154
- return 404
155
-
156
-
157
147
  class AuthorizationException(Exception):
158
148
  is_http_exception = True
159
149
 
@@ -3,7 +3,6 @@ import atexit
3
3
  from typing import Any, Callable, Dict, List, Optional, Type
4
4
 
5
5
 
6
-
7
6
  class ExceptionHandler:
8
7
  def __init__(self, application=None):
9
8
  self.app = application
@@ -74,11 +73,7 @@ class ExceptionHandler:
74
73
 
75
74
  context = f"{type(exception).__name__}: {exception}"
76
75
  if self.app and self.app.is_debug():
77
- context += "\n" + "".join(
78
- traceback.format_exception(
79
- type(exception), exception, exception.__traceback__
80
- )
81
- )
76
+ context += "\n" + "".join(traceback.format_exception(type(exception), exception, exception.__traceback__))
82
77
  return context
83
78
 
84
79
  async def handle(self, exception: Exception, context: Optional[Dict] = None) -> Any:
@@ -31,9 +31,7 @@ class ExceptionHandler:
31
31
  response = self.application.make("response")
32
32
  request = self.application.make("request")
33
33
 
34
- self.application.make("event").fire(
35
- f"masonite.exception.{exception.__class__.__name__}", exception
36
- )
34
+ self.application.make("event").fire(f"masonite.exception.{exception.__class__.__name__}", exception)
37
35
 
38
36
  # add headers to response if any
39
37
  if hasattr(exception, "get_headers"):
@@ -47,17 +45,13 @@ class ExceptionHandler:
47
45
  response.with_headers(headers)
48
46
 
49
47
  if self.application.has(f"{exception.__class__.__name__}Handler"):
50
- return self.application.make(
51
- f"{exception.__class__.__name__}Handler"
52
- ).handle(exception)
48
+ return self.application.make(f"{exception.__class__.__name__}Handler").handle(exception)
53
49
 
54
50
  # handle exception in production
55
51
  if not self.application.is_debug():
56
52
  # for HTTP error codes (500, 404, 403...) a specific page should be displayed
57
53
  # if a renderable exception is raised let it be displayed
58
- if hasattr(exception, "is_http_exception") or hasattr(
59
- exception, "get_response"
60
- ):
54
+ if hasattr(exception, "is_http_exception") or hasattr(exception, "get_response"):
61
55
  return self.application.make("HttpExceptionHandler").handle(exception)
62
56
 
63
57
  # else fallback to an unknown exception that should be displayed as a 500 error
@@ -37,9 +37,7 @@ class DumpExceptionHandler:
37
37
  def __init__(self, application):
38
38
  self.application = application
39
39
 
40
- self.assets_path = os.path.join(
41
- get_module_dir(__file__), "../../templates/assets"
42
- )
40
+ self.assets_path = os.path.join(get_module_dir(__file__), "../../templates/assets")
43
41
  self.styles = []
44
42
  self.scripts = []
45
43
 
@@ -18,9 +18,7 @@ class HttpExceptionHandler:
18
18
  # Renders HTTP exception as HTML with predefined error page if exists
19
19
  if self.application.make("view").exists(view_name):
20
20
  return response.view(
21
- self.application.make("view").render(
22
- f"errors/{status_code}", {"message": exception.get_response()}
23
- ),
21
+ self.application.make("view").render(f"errors/{status_code}", {"message": exception.get_response()}),
24
22
  status_code,
25
23
  )
26
24
  else:
@@ -6,8 +6,6 @@ class ModelNotFoundHandler:
6
6
  self.application = application
7
7
 
8
8
  def handle(self, exception):
9
- masonite_exception = ModelNotFoundException(
10
- "No record found with the given primary key"
11
- )
9
+ masonite_exception = ModelNotFoundException("No record found with the given primary key")
12
10
  self.application.make("response").status(404)
13
11
  self.application.make("exception_handler").handle(masonite_exception)
@@ -20,9 +20,7 @@ class Hash:
20
20
  ) -> bool:
21
21
  """Verify that a given string matches its hashed version (based on configured hashing protocol)."""
22
22
  ...
23
- def needs_rehash(
24
- hashed_string: str, options: dict = {}, driver: str = None
25
- ) -> bool:
23
+ def needs_rehash(hashed_string: str, options: dict = {}, driver: str = None) -> bool:
26
24
  """Verify that a given hash needs to be hashed again because parameters for generating
27
25
  the hash have changed."""
28
26
  ...
@@ -10,12 +10,8 @@ class Loader:
10
10
  class_name: str,
11
11
  raise_exception: bool = False,
12
12
  ) -> "None|Any": ...
13
- def find_all(
14
- class_instance: Any, paths: list, raise_exception: bool = False
15
- ) -> dict: ...
16
- def get_object(
17
- path_or_module: "str|Any", object_name: str, raise_exception: bool = False
18
- ) -> Any:
13
+ def find_all(class_instance: Any, paths: list, raise_exception: bool = False) -> dict: ...
14
+ def get_object(path_or_module: "str|Any", object_name: str, raise_exception: bool = False) -> Any:
19
15
  """Load the given object from a Python module located at path and returns a default value if
20
16
  not found. If no object name is provided, returns the loaded module."""
21
17
  ...
@@ -15,9 +15,7 @@ class RateLimiter:
15
15
  def get_limiter(self, name: str) -> "Limiter":
16
16
  """Get rate limiter registered with the given name."""
17
17
  ...
18
- def attempt(
19
- key: str, callback: Callable, max_attempts: int, delay: int = 60
20
- ) -> Any:
18
+ def attempt(key: str, callback: Callable, max_attempts: int, delay: int = 60) -> Any:
21
19
  """Try to execute the given callback if not limited by the 'key' rate limiter."""
22
20
  ...
23
21
  def too_many_attempts(self, key: str, max_attempts: int) -> bool:
@@ -75,9 +75,7 @@ class ServeCommand(Command):
75
75
  if cfg_reload_excludes is not None:
76
76
  kwargs["reload_excludes"] = cfg_reload_excludes
77
77
 
78
- self.line(
79
- f"<info>Starting Uvicorn server on {host}:{port} [{app}]...</info>"
80
- )
78
+ self.line(f"<info>Starting Uvicorn server on {host}:{port} [{app}]...</info>")
81
79
 
82
80
  else:
83
81
  self.line(f"<info>Starting Uvicorn server on {host}:{port}...</info>")
@@ -101,8 +99,6 @@ class ServeCommand(Command):
101
99
  except (ImportError, ValueError):
102
100
  pass
103
101
 
104
- self.line(
105
- "<fg=yellow>Unable to detect the application, run the command with --app={app}</>"
106
- )
102
+ self.line("<fg=yellow>Unable to detect the application, run the command with --app={app}</>")
107
103
 
108
104
  return False
@@ -17,10 +17,7 @@ class HTTPExceptionHandler:
17
17
  "exception": f"{type(exc).__module__}.{type(exc).__qualname__}",
18
18
  "file": frames[-1].filename if frames else None,
19
19
  "line": frames[-1].lineno if frames else None,
20
- "trace": [
21
- {"file": f.filename, "line": f.lineno, "function": f.name}
22
- for f in frames
23
- ],
20
+ "trace": [{"file": f.filename, "line": f.lineno, "function": f.name} for f in frames],
24
21
  }
25
22
  else:
26
23
  content = {"message": "Server Error"}
@@ -44,10 +41,7 @@ class ValidationExceptionHandler:
44
41
  accept = request.headers.get("accept", "")
45
42
  content_type = request.headers.get("content-type", "")
46
43
 
47
- wants_json = (
48
- "application/json" in accept
49
- or content_type.startswith("application/json")
50
- )
44
+ wants_json = "application/json" in accept or content_type.startswith("application/json")
51
45
 
52
46
  errors = {}
53
47
  for err in exc.errors():
@@ -27,9 +27,7 @@ class FastAPIProvider(Provider):
27
27
  self.commands([ServeCommand])
28
28
  self._register_exception_handlers()
29
29
 
30
- source = os.path.abspath(
31
- os.path.join(os.path.dirname(__file__), "../config/fastapi.py")
32
- )
30
+ source = os.path.abspath(os.path.join(os.path.dirname(__file__), "../config/fastapi.py"))
33
31
  self.publishes({source: "config/fastapi.py"})
34
32
 
35
33
  def _register_exception_handlers(self):
@@ -78,39 +78,25 @@ class Router:
78
78
  **kwargs,
79
79
  )
80
80
 
81
- def get(
82
- self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions]
83
- ) -> None:
81
+ def get(self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions]) -> None:
84
82
  self._add_route(path, endpoint, ["GET"], **kwargs)
85
83
 
86
- def post(
87
- self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions]
88
- ) -> None:
84
+ def post(self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions]) -> None:
89
85
  self._add_route(path, endpoint, ["POST"], **kwargs)
90
86
 
91
- def put(
92
- self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions]
93
- ) -> None:
87
+ def put(self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions]) -> None:
94
88
  self._add_route(path, endpoint, ["PUT"], **kwargs)
95
89
 
96
- def patch(
97
- self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions]
98
- ) -> None:
90
+ def patch(self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions]) -> None:
99
91
  self._add_route(path, endpoint, ["PATCH"], **kwargs)
100
92
 
101
- def delete(
102
- self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions]
103
- ) -> None:
93
+ def delete(self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions]) -> None:
104
94
  self._add_route(path, endpoint, ["DELETE"], **kwargs)
105
95
 
106
- def head(
107
- self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions]
108
- ) -> None:
96
+ def head(self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions]) -> None:
109
97
  self._add_route(path, endpoint, ["HEAD"], **kwargs)
110
98
 
111
- def options(
112
- self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions]
113
- ) -> None:
99
+ def options(self, path: str, endpoint: Callable[..., Any], **kwargs: Unpack[RouteOptions]) -> None:
114
100
  self._add_route(path, endpoint, ["OPTIONS"], **kwargs)
115
101
 
116
102
  def resource(
@@ -154,9 +140,7 @@ class Router:
154
140
  )
155
141
 
156
142
  if include("store") and hasattr(controller, "store"):
157
- self.post(
158
- f"/{name}", fn("store"), name=route_name("store", f"{name}.store")
159
- )
143
+ self.post(f"/{name}", fn("store"), name=route_name("store", f"{name}.store"))
160
144
 
161
145
  if include("show") and hasattr(controller, "show"):
162
146
  self.get(
@@ -1,5 +1,3 @@
1
1
  from fastapi_startkit.fastapi.testing.test_case import HttpTestCase
2
2
 
3
- __all__= [
4
- 'HttpTestCase'
5
- ]
3
+ __all__ = ["HttpTestCase"]
@@ -28,4 +28,4 @@ class HttpTestCase(TestCase, ABC):
28
28
  return await self.client.put(url, **kwargs)
29
29
 
30
30
  async def delete(self, url, **kwargs):
31
- return await self.client.delete(url, **kwargs)
31
+ return await self.client.delete(url, **kwargs)
@@ -1,9 +1,12 @@
1
1
  def storage_path(path: str = "") -> str:
2
2
  """Get the path to the storage directory."""
3
3
  from fastapi_startkit.application import app
4
+
4
5
  return app().storage_path(path)
5
6
 
7
+
6
8
  def public_path(path: str = "") -> str:
7
9
  """Get the path to the public directory."""
8
10
  from fastapi_startkit.application import app
11
+
9
12
  return app().public_path(path)
@@ -9,10 +9,7 @@ class Dataclass:
9
9
  if hasattr(obj, "model_dump") and callable(obj.model_dump):
10
10
  return obj.model_dump()
11
11
  if dataclasses.is_dataclass(obj):
12
- return {
13
- f.name: Dataclass.to_dict(getattr(obj, f.name))
14
- for f in dataclasses.fields(obj)
15
- }
12
+ return {f.name: Dataclass.to_dict(getattr(obj, f.name)) for f in dataclasses.fields(obj)}
16
13
  if isinstance(obj, dict):
17
14
  return {k: Dataclass.to_dict(v) for k, v in obj.items()}
18
15
  if isinstance(obj, (list, tuple)):
@@ -5,6 +5,4 @@ from fastapi import Request
5
5
 
6
6
  # Set by InertiaMiddleware before calling the next handler so InertiaResponse
7
7
  # can access the current request without it being passed explicitly.
8
- current_request: ContextVar[Optional[Request]] = ContextVar(
9
- "inertia_request", default=None
10
- )
8
+ current_request: ContextVar[Optional[Request]] = ContextVar("inertia_request", default=None)
@@ -63,9 +63,7 @@ class InertiaResponse(Response):
63
63
  self.root_view = root_view
64
64
  self.version = version
65
65
 
66
- def with_(
67
- self, key: Union[str, Dict[str, Any]], value: Any = None
68
- ) -> "InertiaResponse":
66
+ def with_(self, key: Union[str, Dict[str, Any]], value: Any = None) -> "InertiaResponse":
69
67
  if isinstance(key, dict):
70
68
  self.props = {**self.props, **key}
71
69
  else:
@@ -125,9 +123,7 @@ class InertiaResponse(Response):
125
123
  from fastapi_startkit.application import app as container
126
124
 
127
125
  if not container().has("templates"):
128
- raise RuntimeError(
129
- "Inertia requires 'templates' to be bound in the container for initial rendering."
130
- )
126
+ raise RuntimeError("Inertia requires 'templates' to be bound in the container for initial rendering.")
131
127
 
132
128
  return (
133
129
  container()
@@ -187,7 +183,5 @@ class Inertia:
187
183
  return OptionalProp(callback)
188
184
 
189
185
  @staticmethod
190
- def render(
191
- component: str, props: Optional[Dict[str, Any]] = None
192
- ) -> InertiaResponse:
186
+ def render(component: str, props: Optional[Dict[str, Any]] = None) -> InertiaResponse:
193
187
  return Inertia.instance().render(component, props or {})
@@ -33,9 +33,7 @@ class InertiaMiddleware(BaseHTTPMiddleware):
33
33
  """Return the root template name for the first page visit."""
34
34
  return cls._root_view
35
35
 
36
- async def dispatch(
37
- self, request: Request, call_next: RequestResponseEndpoint
38
- ) -> Response:
36
+ async def dispatch(self, request: Request, call_next: RequestResponseEndpoint) -> Response:
39
37
  Inertia.version(lambda: self.version(request))
40
38
  Inertia.share(self.share(request))
41
39
  Inertia.set_root_view(self.root_view(request))
@@ -56,9 +54,7 @@ class InertiaMiddleware(BaseHTTPMiddleware):
56
54
  return response
57
55
 
58
56
  # Version conflict — ask client to do a full page reload
59
- if request.method == "GET" and request.headers.get(
60
- Header.INERTIA_VERSION, ""
61
- ) != (Inertia.get_version() or ""):
57
+ if request.method == "GET" and request.headers.get(Header.INERTIA_VERSION, "") != (Inertia.get_version() or ""):
62
58
  return self.on_version_change(request, response)
63
59
 
64
60
  # 302 → 303 for PUT/PATCH/DELETE so browser issues a GET
@@ -25,4 +25,3 @@ class InertiaProvider(Provider):
25
25
 
26
26
  templates.env.globals["inertia"] = inertia_helper
27
27
  templates.env.globals["Inertia"] = self.app.make("inertia")
28
-