fastapi-startkit 0.13.6__tar.gz → 0.14.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.
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/PKG-INFO +1 -1
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/pyproject.toml +12 -1
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/.DS_Store +0 -0
- fastapi_startkit-0.14.0/src/fastapi_startkit/__init__.py +4 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/application.py +51 -17
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/collection/collection.py +4 -13
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/commands/publish_command.py +11 -3
- fastapi_startkit-0.14.0/src/fastapi_startkit/config/app.py +13 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/configuration/Configuration.py +7 -6
- fastapi_startkit-0.14.0/src/fastapi_startkit/configuration/config.py +25 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/console.py +1 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/container/container.py +8 -4
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/environment/environment.py +38 -33
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/exceptions/handler.py +13 -4
- fastapi_startkit-0.14.0/src/fastapi_startkit/facades/Config.py +3 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Config.pyi +0 -1
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Facade.py +1 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Vite.py +1 -1
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Vite.pyi +1 -2
- fastapi_startkit-0.14.0/src/fastapi_startkit/fastapi/__init__.py +4 -0
- fastapi_startkit-0.14.0/src/fastapi_startkit/fastapi/commands/serve_command.py +98 -0
- fastapi_startkit-0.14.0/src/fastapi_startkit/fastapi/exceptions.py +28 -0
- fastapi_startkit-0.14.0/src/fastapi_startkit/fastapi/providers/fastapi_provider.py +30 -0
- fastapi_startkit-0.14.0/src/fastapi_startkit/fastapi/routers/router.py +193 -0
- fastapi_startkit-0.14.0/src/fastapi_startkit/fastapi/testing/__init__.py +5 -0
- fastapi_startkit-0.14.0/src/fastapi_startkit/fastapi/testing/test_case.py +31 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/helpers/dataclass.py +4 -1
- fastapi_startkit-0.14.0/src/fastapi_startkit/helpers/string.py +51 -0
- fastapi_startkit-0.14.0/src/fastapi_startkit/inertia/constant.py +7 -0
- fastapi_startkit-0.14.0/src/fastapi_startkit/inertia/context.py +10 -0
- fastapi_startkit-0.14.0/src/fastapi_startkit/inertia/inertia.py +193 -0
- fastapi_startkit-0.14.0/src/fastapi_startkit/inertia/middleware.py +106 -0
- fastapi_startkit-0.14.0/src/fastapi_startkit/inertia/props/props.py +6 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/inertia/provider.py +4 -1
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/loader/Loader.py +2 -5
- fastapi_startkit-0.14.0/src/fastapi_startkit/logging/ChannelFactory.py +27 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/logging/__init__.py +1 -4
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/logging/channels/BaseChannel.py +11 -9
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/logging/channels/DailyChannel.py +7 -4
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/logging/channels/MultiBaseChannel.py +10 -11
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/logging/channels/SingleChannel.py +5 -5
- fastapi_startkit-0.14.0/src/fastapi_startkit/logging/channels/SlackChannel.py +20 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/logging/channels/StackChannel.py +6 -4
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/logging/channels/SyslogChannel.py +6 -6
- fastapi_startkit-0.14.0/src/fastapi_startkit/logging/channels/TerminalChannel.py +13 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/logging/channels/__init__.py +1 -1
- fastapi_startkit-0.14.0/src/fastapi_startkit/logging/config/__init__.py +9 -0
- fastapi_startkit-0.14.0/src/fastapi_startkit/logging/config/channels.py +45 -0
- fastapi_startkit-0.14.0/src/fastapi_startkit/logging/config/logging.py +24 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/logging/drivers/BaseDriver.py +10 -10
- fastapi_startkit-0.14.0/src/fastapi_startkit/logging/drivers/LogSingleDriver.py +100 -0
- fastapi_startkit-0.14.0/src/fastapi_startkit/logging/drivers/LogSlackDriver.py +77 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/logging/drivers/LogSyslogDriver.py +11 -7
- fastapi_startkit-0.14.0/src/fastapi_startkit/logging/drivers/LogTerminalDriver.py +39 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/logging/drivers/__init__.py +1 -1
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/logging/factory.py +7 -6
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/logging/handler.py +1 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/logging/listeners.py +5 -7
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/logging/logger.py +3 -2
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/logging/managers/LoggingManager.py +1 -0
- fastapi_startkit-0.14.0/src/fastapi_startkit/logging/managers/__init__.py +1 -0
- fastapi_startkit-0.14.0/src/fastapi_startkit/logging/providers/log_provider.py +37 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/__init__.py +1 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/commands/DBMigrateCommand.py +7 -1
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/commands/DBSeedCommand.py +11 -2
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/commands/MakeMigrationCommand.py +13 -8
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/commands/MakeModelCommand.py +24 -16
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/commands/MakeModelDocstringCommand.py +11 -2
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/commands/MakeObserverCommand.py +8 -4
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/commands/MakeSeedCommand.py +3 -9
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/commands/MigrateFreshCommand.py +9 -2
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/commands/MigrateRefreshCommand.py +7 -1
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/commands/MigrateResetCommand.py +7 -1
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/commands/MigrateRollbackCommand.py +8 -4
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/commands/MigrateStatusCommand.py +6 -1
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/commands/ShellCommand.py +5 -13
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/commands/stubs/create_migration.stub +5 -5
- fastapi_startkit-0.14.0/src/fastapi_startkit/masoniteorm/commands/stubs/table_migration.stub +19 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/config/config.py +2 -1
- fastapi_startkit-0.14.0/src/fastapi_startkit/masoniteorm/config/database.py +24 -0
- fastapi_startkit-0.14.0/src/fastapi_startkit/masoniteorm/connections/connection.py +140 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/connections/factory.py +24 -13
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/connections/manager.py +12 -2
- fastapi_startkit-0.14.0/src/fastapi_startkit/masoniteorm/connections/mysql_connection.py +20 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/connections/postgres_connection.py +4 -3
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/connections/sqlite_connection.py +1 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/expressions/expressions.py +2 -6
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/facades/DB.py +3 -2
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/facades/Schema.py +3 -2
- fastapi_startkit-0.14.0/src/fastapi_startkit/masoniteorm/factory/__init__.py +1 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/factory/factory.py +3 -4
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/helpers/misc.py +1 -3
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/migrations/Migration.py +20 -34
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/models/MigrationModel.py +1 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/models/attribute.py +6 -5
- fastapi_startkit-0.14.0/src/fastapi_startkit/masoniteorm/models/builder.py +388 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/models/caster.py +25 -12
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/models/fields.py +8 -2
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/models/model.py +33 -9
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/models/registry.py +3 -1
- fastapi_startkit-0.14.0/src/fastapi_startkit/masoniteorm/models/relationship.py +23 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/pagination/LengthAwarePaginator.py +1 -3
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/pagination/SimplePaginator.py +7 -6
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/providers/DatabaseProvider.py +27 -20
- fastapi_startkit-0.14.0/src/fastapi_startkit/masoniteorm/providers/__init__.py +1 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/query/EagerLoadMixin.py +3 -1
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/query/EagerRelation.py +1 -3
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/query/grammars/BaseGrammar.py +16 -49
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/query/grammars/PostgresGrammar.py +3 -1
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/query/grammars/SQLiteGrammar.py +3 -1
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/query/processors/MSSQLPostProcessor.py +1 -3
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/query/processors/MySQLPostProcessor.py +1 -3
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/query/processors/SQLitePostProcessor.py +1 -3
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/relationships/BaseRelationship.py +7 -3
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/relationships/BelongsTo.py +0 -1
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/relationships/BelongsToMany.py +23 -27
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/relationships/HasMany.py +27 -1
- fastapi_startkit-0.14.0/src/fastapi_startkit/masoniteorm/relationships/HasManyThrough.py +213 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/relationships/HasOne.py +3 -2
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/relationships/HasOneThrough.py +78 -102
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/relationships/MorphMany.py +6 -21
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/relationships/MorphTo.py +17 -45
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/relationships/MorphToMany.py +1 -1
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/schema/Blueprint.py +21 -63
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/schema/Table.py +1 -3
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/schema/TableDiff.py +1 -3
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/schema/platforms/MSSQLPlatform.py +8 -17
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/schema/platforms/MySQLPlatform.py +15 -33
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/schema/platforms/Platform.py +2 -7
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/schema/platforms/PostgresPlatform.py +16 -29
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/schema/platforms/SQLitePlatform.py +17 -38
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/schema/schema.py +31 -3
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/seeds/Seeder.py +4 -4
- fastapi_startkit-0.14.0/src/fastapi_startkit/masoniteorm/testing/__init__.py +6 -0
- fastapi_startkit-0.14.0/src/fastapi_startkit/masoniteorm/testing/transaction.py +25 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/config/database.py +5 -5
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/config.py +2 -7
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/schema/Schema.py +13 -25
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/scopes/SoftDeleteScope.py +3 -9
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/testing/BaseTestCaseSelectGrammar.py +20 -68
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/testing/Database.py +5 -7
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/testing/TestCase.py +1 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/User.py +1 -1
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/eagers/test_eager.py +3 -9
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/factories/test_factories.py +1 -3
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/integrations/databases/migrations/2026_01_01_000000_create_users_table.py +1 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/integrations/model.py +6 -4
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/integrations/test_model.py +16 -4
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/models/test_models.py +3 -9
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/builder/test_mssql_query_builder.py +4 -12
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/builder/test_mssql_query_builder_relationships.py +1 -3
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_query_builder.py +7 -13
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_query_builder_scopes.py +1 -3
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_select_grammar.py +11 -17
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/model/test_accessors_and_mutators.py +1 -3
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/model/test_model.py +2 -5
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_belongs_to_many.py +2 -6
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_relationships.py +2 -6
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/schema/test_mysql_schema_builder.py +4 -4
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/schema/test_mysql_schema_builder_alter.py +7 -15
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/scopes/test_can_use_scopes.py +1 -3
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/builder/test_postgres_query_builder.py +3 -9
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_select_grammar.py +14 -18
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/schema/test_postgres_schema_builder.py +2 -1
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/schema/test_postgres_schema_builder_alter.py +1 -1
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/providers/Provider.py +6 -7
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/providers/app_provider.py +1 -3
- fastapi_startkit-0.14.0/src/fastapi_startkit/testing/__init__.py +5 -0
- fastapi_startkit-0.14.0/src/fastapi_startkit/testing/test_case.py +33 -0
- fastapi_startkit-0.14.0/src/fastapi_startkit/utils/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/utils/http.py +0 -1
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/utils/location.py +1 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/utils/structures.py +6 -6
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/utils/time.py +1 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/vite/config/vite.py +0 -4
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/vite/exceptions.py +1 -1
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/vite/providers/provider.py +21 -7
- fastapi_startkit-0.14.0/src/fastapi_startkit/vite/stubs/package.json +16 -0
- fastapi_startkit-0.14.0/src/fastapi_startkit/vite/stubs/resources/css/app.css +1 -0
- fastapi_startkit-0.14.0/src/fastapi_startkit/vite/stubs/resources/js/app.ts +23 -0
- fastapi_startkit-0.14.0/src/fastapi_startkit/vite/stubs/templates/index.html +59 -0
- fastapi_startkit-0.14.0/src/fastapi_startkit/vite/stubs/tsconfig.json +115 -0
- fastapi_startkit-0.14.0/src/fastapi_startkit/vite/stubs/vite.config.ts +13 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/vite/vite.py +60 -49
- fastapi_startkit-0.13.6/src/fastapi_startkit/__init__.py +0 -3
- fastapi_startkit-0.13.6/src/fastapi_startkit/config/app.py +0 -10
- fastapi_startkit-0.13.6/src/fastapi_startkit/config/facades/__init__.py +0 -1
- fastapi_startkit-0.13.6/src/fastapi_startkit/config/facades/config.py +0 -11
- fastapi_startkit-0.13.6/src/fastapi_startkit/facades/Config.py +0 -5
- fastapi_startkit-0.13.6/src/fastapi_startkit/fastapi/commands/serve_command.py +0 -36
- fastapi_startkit-0.13.6/src/fastapi_startkit/fastapi/providers/__init__.py +0 -1
- fastapi_startkit-0.13.6/src/fastapi_startkit/fastapi/providers/fastapi_provider.py +0 -38
- fastapi_startkit-0.13.6/src/fastapi_startkit/helpers/string.py +0 -31
- fastapi_startkit-0.13.6/src/fastapi_startkit/inertia/inertia.py +0 -74
- fastapi_startkit-0.13.6/src/fastapi_startkit/inertia/middleware.py +0 -45
- fastapi_startkit-0.13.6/src/fastapi_startkit/logging/ChannelFactory.py +0 -20
- fastapi_startkit-0.13.6/src/fastapi_startkit/logging/channels/SlackChannel.py +0 -19
- fastapi_startkit-0.13.6/src/fastapi_startkit/logging/channels/TerminalChannel.py +0 -14
- fastapi_startkit-0.13.6/src/fastapi_startkit/logging/config/__init__.py +0 -2
- fastapi_startkit-0.13.6/src/fastapi_startkit/logging/config/channels.py +0 -43
- fastapi_startkit-0.13.6/src/fastapi_startkit/logging/config/logging.py +0 -23
- fastapi_startkit-0.13.6/src/fastapi_startkit/logging/drivers/LogSingleDriver.py +0 -84
- fastapi_startkit-0.13.6/src/fastapi_startkit/logging/drivers/LogSlackDriver.py +0 -94
- fastapi_startkit-0.13.6/src/fastapi_startkit/logging/drivers/LogTerminalDriver.py +0 -60
- fastapi_startkit-0.13.6/src/fastapi_startkit/logging/managers/__init__.py +0 -1
- fastapi_startkit-0.13.6/src/fastapi_startkit/logging/providers/log_provider.py +0 -34
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm/commands/stubs/table_migration.stub +0 -19
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm/config/database.py +0 -24
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm/connections/connection.py +0 -103
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm/models/builder.py +0 -210
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm/models/relationship.py +0 -11
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm/providers/__init__.py +0 -1
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm/relationships/HasManyThrough.py +0 -260
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm/tests/fixtures/db.py +0 -13
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm/tests/fixtures/factory.py +0 -13
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm/tests/fixtures/migration.py +0 -61
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm/tests/fixtures/model.py +0 -47
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm/tests/fixtures/seeder.py +0 -8
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm/tests/models/test_model.py +0 -157
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm/tests/models/test_model_attributes.py +0 -186
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm/tests/sqlite/models/test_sqlite_model.py +0 -110
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm/tests/sqlite/relationships/test_sqlite_relationships.py +0 -51
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm/tests/sqlite/test_case.py +0 -20
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm.backup/tests/collection/test_collection.py +0 -741
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm.backup/tests/commands/test_shell.py +0 -89
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm.backup/tests/config/test_db_url.py +0 -128
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm.backup/tests/sqlite/builder/test_sqlite_builder_insert.py +0 -39
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm.backup/tests/sqlite/builder/test_sqlite_builder_pagination.py +0 -63
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm.backup/tests/sqlite/builder/test_sqlite_query_builder.py +0 -1065
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm.backup/tests/sqlite/builder/test_sqlite_query_builder_eager_loading.py +0 -97
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm.backup/tests/sqlite/builder/test_sqlite_query_builder_relationships.py +0 -134
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm.backup/tests/sqlite/builder/test_sqlite_transaction.py +0 -49
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm.backup/tests/sqlite/grammar/test_sqlite_delete_grammar.py +0 -75
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm.backup/tests/sqlite/grammar/test_sqlite_insert_grammar.py +0 -103
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm.backup/tests/sqlite/grammar/test_sqlite_select_grammar.py +0 -482
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm.backup/tests/sqlite/grammar/test_sqlite_update_grammar.py +0 -113
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm.backup/tests/sqlite/models/test_attach_detach.py +0 -131
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm.backup/tests/sqlite/models/test_observers.py +0 -115
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm.backup/tests/sqlite/relationships/test_sqlite_has_many_through_relationship.py +0 -166
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm.backup/tests/sqlite/relationships/test_sqlite_has_one_through_relationship.py +0 -150
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm.backup/tests/sqlite/relationships/test_sqlite_polymorphic.py +0 -99
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm.backup/tests/sqlite/schema/test_sqlite_schema_builder.py +0 -370
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm.backup/tests/sqlite/schema/test_sqlite_schema_builder_alter.py +0 -244
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm.backup/tests/sqlite/schema/test_table.py +0 -109
- fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm.backup/tests/sqlite/schema/test_table_diff.py +0 -166
- fastapi_startkit-0.13.6/src/fastapi_startkit/tests/configurations/test_config_merge.py +0 -54
- fastapi_startkit-0.13.6/src/fastapi_startkit/tests/test_case.py +0 -15
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/carbon/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/carbon/carbon.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/collection/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/commands/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/config/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/configuration/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/configuration/helpers.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/configuration/providers/ConfigurationProvider.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/configuration/providers/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/container/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/environment/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/exceptions/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/exceptions/exceptions.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/exceptions.backup/DD.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/exceptions.backup/ExceptionHandler.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/exceptions.backup/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/exceptions.backup/exceptionite/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/exceptions.backup/exceptionite/blocks.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/exceptions.backup/exceptionite/controllers.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/exceptions.backup/exceptionite/solutions.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/exceptions.backup/exceptionite/tabs.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/exceptions.backup/handlers/DumpExceptionHandler.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/exceptions.backup/handlers/HttpExceptionHandler.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/exceptions.backup/handlers/ModelNotFoundHandler.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Auth.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Auth.pyi +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Broadcast.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Cache.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Dump.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Dump.pyi +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Gate.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Gate.pyi +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Hash.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Hash.pyi +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Inertia.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Loader.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Loader.pyi +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Mail.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Mail.pyi +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Notification.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Notification.pyi +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Queue.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Queue.pyi +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/RateLimiter.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/RateLimiter.pyi +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Request.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Request.pyi +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Response.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Response.pyi +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Session.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Session.pyi +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Storage.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Storage.pyi +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Url.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/Url.pyi +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/View.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/View.pyi +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/facades/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/fastapi/commands/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/inertia/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/loader/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/logging/providers/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/collection/Collection.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/collection/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/commands/CanOverrideConfig.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/commands/CanOverrideOptionsDefault.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/commands/Command.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/commands/Entry.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/commands/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/commands/stubs/create_seed.stub +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/commands/stubs/model.stub +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/commands/stubs/observer.stub +0 -0
- {fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm/helpers → fastapi_startkit-0.14.0/src/fastapi_startkit/masoniteorm/config}/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/expressions/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/facades/__init__.py +0 -0
- {fastapi_startkit-0.13.6/src/fastapi_startkit/masoniteorm/query → fastapi_startkit-0.14.0/src/fastapi_startkit/masoniteorm/helpers}/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/migrations/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/models/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/models/observer.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/models/pivot.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/observers/ObservesEvents.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/observers/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/pagination/BasePaginator.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/pagination/__init__.py +0 -0
- {fastapi_startkit-0.13.6/src/fastapi_startkit/utils → fastapi_startkit-0.14.0/src/fastapi_startkit/masoniteorm/query}/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/query/grammars/MSSQLGrammar.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/query/grammars/MySQLGrammar.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/query/grammars/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/query/processors/PostgresPostProcessor.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/query/processors/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/query/support.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/relationships/MorphOne.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/relationships/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/schema/Column.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/schema/ColumnDiff.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/schema/Constraint.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/schema/ForeignKeyConstraint.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/schema/Index.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/schema/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/schema/platforms/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/seeds/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/stubs/create-migration.html +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm/stubs/table-migration.html +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/.pytest_cache/.gitignore +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/.pytest_cache/CACHEDIR.TAG +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/.pytest_cache/README.md +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/.pytest_cache/v/cache/lastfailed +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/.pytest_cache/v/cache/nodeids +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/exceptions.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/factories/Factory.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/factories/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/scopes/BaseScope.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/scopes/SoftDeletesMixin.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/scopes/UUIDPrimaryKeyMixin.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/scopes/UUIDPrimaryKeyScope.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/scopes/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/scopes/scope.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/testing/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/connections/test_base_connections.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/integrations/config/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/integrations/config/database.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_delete_grammar.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_insert_grammar.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_qmark.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_select_grammar.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_update_grammar.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/schema/test_mssql_schema_builder.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/schema/test_mssql_schema_builder_alter.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_mysql_builder_transaction.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_transactions.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/connections/test_mysql_connection_selects.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_delete_grammar.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_insert_grammar.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_qmark.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_update_grammar.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_has_many_through.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_has_one_through.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/scopes/test_can_use_global_scopes.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/scopes/test_soft_delete.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/builder/test_postgres_transaction.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_delete_grammar.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_insert_grammar.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_update_grammar.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/relationships/test_postgres_relationships.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/scopes/test_default_global_scopes.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/seeds/test_seeds.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/masoniteorm.backup/tests/utils.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/providers/__init__.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/utils/collections.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/utils/console.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/utils/data/mime.types +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/utils/filesystem.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/utils/str.py +0 -0
- {fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/vite/__init__.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "fastapi-startkit"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.14.0"
|
|
4
4
|
description = "Fastapi Starter kit components"
|
|
5
5
|
authors = [
|
|
6
6
|
{name = "Bedram Tamang", email = "tmgbedu@gmail.com"}
|
|
@@ -46,10 +46,21 @@ dev = [
|
|
|
46
46
|
"dumpdie>=1.5.0",
|
|
47
47
|
"pytest>=9.0.3",
|
|
48
48
|
"pytest-asyncio>=1.3.0",
|
|
49
|
+
"ruff>=0.9.0",
|
|
49
50
|
"twine>=6.2.0",
|
|
50
51
|
]
|
|
51
52
|
|
|
52
53
|
|
|
54
|
+
[tool.ruff]
|
|
55
|
+
line-length = 120
|
|
56
|
+
|
|
57
|
+
[tool.ruff.lint]
|
|
58
|
+
select = ["F401"]
|
|
59
|
+
fixable = ["F401"]
|
|
60
|
+
|
|
61
|
+
[tool.ruff.lint.per-file-ignores]
|
|
62
|
+
"__init__.py" = ["F401"]
|
|
63
|
+
|
|
53
64
|
[tool.pytest.ini_options]
|
|
54
65
|
asyncio_mode = "auto"
|
|
55
66
|
|
|
Binary file
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import os
|
|
2
|
+
from fastapi_startkit.providers.app_provider import AppProvider
|
|
2
3
|
from pathlib import Path
|
|
3
4
|
from typing import TYPE_CHECKING, Optional
|
|
4
5
|
from typing import Type, Callable, Any, List, TypeVar, Generic
|
|
5
6
|
|
|
6
|
-
from fastapi_startkit.providers.app_provider import AppProvider
|
|
7
7
|
from .config import AppConfig
|
|
8
8
|
from .configuration.providers import ConfigurationProvider
|
|
9
9
|
from .container import Container
|
|
10
|
-
from .environment.environment import
|
|
10
|
+
from .environment.environment import Environment
|
|
11
11
|
|
|
12
12
|
if TYPE_CHECKING:
|
|
13
13
|
from fastapi import FastAPI, APIRouter
|
|
@@ -16,11 +16,12 @@ if TYPE_CHECKING:
|
|
|
16
16
|
from fastapi_startkit.exceptions import ExceptionHandler
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
def app() ->
|
|
19
|
+
def app() -> "Container":
|
|
20
20
|
return Container.instance()
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
TConfig = TypeVar(
|
|
23
|
+
TConfig = TypeVar("TConfig", bound=AppConfig)
|
|
24
|
+
|
|
24
25
|
|
|
25
26
|
class Application(Container, Generic[TConfig]):
|
|
26
27
|
DEFAULT_PROVIDERS = [
|
|
@@ -28,10 +29,17 @@ class Application(Container, Generic[TConfig]):
|
|
|
28
29
|
AppProvider,
|
|
29
30
|
]
|
|
30
31
|
|
|
31
|
-
def __init__(
|
|
32
|
+
def __init__(
|
|
33
|
+
self,
|
|
34
|
+
base_path: str | Path = None,
|
|
35
|
+
env=None,
|
|
36
|
+
providers=None,
|
|
37
|
+
config: Type[TConfig] | None = None,
|
|
38
|
+
exception_handler: Type[ExceptionHandler] | None = None,
|
|
39
|
+
):
|
|
32
40
|
super().__init__()
|
|
33
41
|
|
|
34
|
-
self.base_path:
|
|
42
|
+
self.base_path: Path = Path(base_path) if base_path else Path(os.getcwd())
|
|
35
43
|
self.env = env
|
|
36
44
|
self.providers = self.DEFAULT_PROVIDERS + (providers or [])
|
|
37
45
|
self.published_resources = {}
|
|
@@ -47,7 +55,7 @@ class Application(Container, Generic[TConfig]):
|
|
|
47
55
|
self.configure_exception_handler()
|
|
48
56
|
|
|
49
57
|
# Boot application
|
|
50
|
-
self.
|
|
58
|
+
self.resolve_environment()
|
|
51
59
|
self.configure_config()
|
|
52
60
|
self.configure_paths()
|
|
53
61
|
self.register_providers()
|
|
@@ -55,8 +63,20 @@ class Application(Container, Generic[TConfig]):
|
|
|
55
63
|
self._fastapi: Optional["FastAPI"] = None
|
|
56
64
|
self.load_providers()
|
|
57
65
|
|
|
66
|
+
def set_environment(self, env: str):
|
|
67
|
+
self.env = env
|
|
68
|
+
return self
|
|
69
|
+
|
|
70
|
+
def load_environment(self):
|
|
71
|
+
"""Reload environment variables for the current self.env."""
|
|
72
|
+
Environment.load_base(base_path=self.base_path)
|
|
73
|
+
Environment.load(self.env, base_path=self.base_path)
|
|
74
|
+
return self
|
|
75
|
+
|
|
58
76
|
def configure_exception_handler(self):
|
|
59
|
-
self.exception_manager: ExceptionHandler = self._exception_handler_class(
|
|
77
|
+
self.exception_manager: ExceptionHandler = self._exception_handler_class(
|
|
78
|
+
application=self
|
|
79
|
+
)
|
|
60
80
|
self.exception_manager.register()
|
|
61
81
|
self.exception_manager.install()
|
|
62
82
|
self.bind("exception_manager", self.exception_manager)
|
|
@@ -67,6 +87,9 @@ class Application(Container, Generic[TConfig]):
|
|
|
67
87
|
config = {}
|
|
68
88
|
if isinstance(provider_data, tuple):
|
|
69
89
|
provider_class, config = provider_data
|
|
90
|
+
|
|
91
|
+
if callable(config):
|
|
92
|
+
config = config()
|
|
70
93
|
else:
|
|
71
94
|
provider_class = provider_data
|
|
72
95
|
|
|
@@ -87,7 +110,7 @@ class Application(Container, Generic[TConfig]):
|
|
|
87
110
|
return self
|
|
88
111
|
|
|
89
112
|
def use_base_path(self, path: str):
|
|
90
|
-
return
|
|
113
|
+
return self.base_path / path
|
|
91
114
|
|
|
92
115
|
def get(self, path: str, **kwargs) -> Callable:
|
|
93
116
|
return self.fastapi.get(path, **kwargs)
|
|
@@ -119,7 +142,7 @@ class Application(Container, Generic[TConfig]):
|
|
|
119
142
|
return self
|
|
120
143
|
|
|
121
144
|
# Add middleware
|
|
122
|
-
def add_middleware(self, middleware_class: Type[
|
|
145
|
+
def add_middleware(self, middleware_class: Type["BaseHTTPMiddleware"], **options):
|
|
123
146
|
self._fastapi.add_middleware(middleware_class, **options)
|
|
124
147
|
return self
|
|
125
148
|
|
|
@@ -134,7 +157,9 @@ class Application(Container, Generic[TConfig]):
|
|
|
134
157
|
return self
|
|
135
158
|
|
|
136
159
|
# Add custom exception handlers
|
|
137
|
-
def add_exception_handler(
|
|
160
|
+
def add_exception_handler(
|
|
161
|
+
self, exc_class_or_status_code: Any, handler: Callable[..., Any]
|
|
162
|
+
):
|
|
138
163
|
self._fastapi.add_exception_handler(exc_class_or_status_code, handler)
|
|
139
164
|
return self
|
|
140
165
|
|
|
@@ -155,11 +180,20 @@ class Application(Container, Generic[TConfig]):
|
|
|
155
180
|
def __call__(self, *args, **kwargs):
|
|
156
181
|
return self.fastapi
|
|
157
182
|
|
|
158
|
-
def
|
|
159
|
-
|
|
183
|
+
def resolve_environment(self):
|
|
184
|
+
self.env = Environment.resolve_environment(base_path=self.base_path, env=self.env)
|
|
185
|
+
Environment.load_base(base_path=self.base_path)
|
|
186
|
+
Environment.load(self.env, base_path=self.base_path)
|
|
160
187
|
|
|
161
188
|
def is_debug(self) -> bool:
|
|
162
|
-
return
|
|
189
|
+
return (
|
|
190
|
+
hasattr(self, "_config_instance")
|
|
191
|
+
and self._config_instance is not None
|
|
192
|
+
and getattr(self._config_instance, "debug", False)
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
def is_testing(self) -> bool:
|
|
196
|
+
return self.env == "testing"
|
|
163
197
|
|
|
164
198
|
def configure_config(self):
|
|
165
199
|
if self._config is not None:
|
|
@@ -172,15 +206,15 @@ class Application(Container, Generic[TConfig]):
|
|
|
172
206
|
return self._config_instance
|
|
173
207
|
|
|
174
208
|
def configure_paths(self):
|
|
175
|
-
self.bind(
|
|
209
|
+
self.bind("config.location", self.base_path / "config")
|
|
176
210
|
|
|
177
211
|
def use_config_path(self, path: str = None):
|
|
178
|
-
self.bind(
|
|
212
|
+
self.bind("config.location", path)
|
|
179
213
|
|
|
180
214
|
return self
|
|
181
215
|
|
|
182
216
|
def use_storage_path(self, path: str = None):
|
|
183
|
-
self.bind(
|
|
217
|
+
self.bind("storage.location", path)
|
|
184
218
|
|
|
185
219
|
return self
|
|
186
220
|
|
{fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/collection/collection.py
RENAMED
|
@@ -310,9 +310,7 @@ class Collection:
|
|
|
310
310
|
if collection_count == 0:
|
|
311
311
|
return None
|
|
312
312
|
elif count and count > collection_count:
|
|
313
|
-
raise ValueError(
|
|
314
|
-
"count argument must be inferior to collection length."
|
|
315
|
-
)
|
|
313
|
+
raise ValueError("count argument must be inferior to collection length.")
|
|
316
314
|
elif count:
|
|
317
315
|
self._items = random.sample(self._items, k=count)
|
|
318
316
|
return self
|
|
@@ -373,10 +371,7 @@ class Collection:
|
|
|
373
371
|
return getattr(item, key, None)
|
|
374
372
|
|
|
375
373
|
def sort(self, key=None, reverse=False):
|
|
376
|
-
self._items.sort(
|
|
377
|
-
key=lambda item: self.val(item, key),
|
|
378
|
-
reverse=reverse
|
|
379
|
-
)
|
|
374
|
+
self._items.sort(key=lambda item: self.val(item, key), reverse=reverse)
|
|
380
375
|
return self
|
|
381
376
|
|
|
382
377
|
def sum(self, key=None):
|
|
@@ -443,9 +438,7 @@ class Collection:
|
|
|
443
438
|
if isinstance(item, dict):
|
|
444
439
|
comparison = item.get(key)
|
|
445
440
|
else:
|
|
446
|
-
comparison = (
|
|
447
|
-
getattr(item, key) if hasattr(item, key) else False
|
|
448
|
-
)
|
|
441
|
+
comparison = getattr(item, key) if hasattr(item, key) else False
|
|
449
442
|
if self._make_comparison(comparison, value, op):
|
|
450
443
|
attributes.append(item)
|
|
451
444
|
return self.__class__(attributes)
|
|
@@ -499,9 +492,7 @@ class Collection:
|
|
|
499
492
|
def zip(self, items):
|
|
500
493
|
items = self.__get_items(items)
|
|
501
494
|
if not isinstance(items, list):
|
|
502
|
-
raise ValueError(
|
|
503
|
-
"The 'items' parameter must be a list or a Collection"
|
|
504
|
-
)
|
|
495
|
+
raise ValueError("The 'items' parameter must be a list or a Collection")
|
|
505
496
|
|
|
506
497
|
_items = []
|
|
507
498
|
for x, y in zip(self, items):
|
{fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/commands/publish_command.py
RENAMED
|
@@ -15,13 +15,18 @@ class PublishCommand(Command):
|
|
|
15
15
|
description = "Publish provider config files into the project."
|
|
16
16
|
|
|
17
17
|
options = [
|
|
18
|
-
option(
|
|
18
|
+
option(
|
|
19
|
+
"provider",
|
|
20
|
+
"p",
|
|
21
|
+
description="Provider name to publish (e.g. LogProvider, log_provider).",
|
|
22
|
+
flag=False,
|
|
23
|
+
),
|
|
19
24
|
]
|
|
20
25
|
|
|
21
26
|
def handle(self):
|
|
22
27
|
from fastapi_startkit.application import app
|
|
23
28
|
|
|
24
|
-
application:
|
|
29
|
+
application: "Application" = app()
|
|
25
30
|
|
|
26
31
|
if not application.published_resources:
|
|
27
32
|
self.line("<comment>Nothing to publish.</comment>")
|
|
@@ -47,7 +52,10 @@ class PublishCommand(Command):
|
|
|
47
52
|
dest_path = application.use_base_path(destination)
|
|
48
53
|
|
|
49
54
|
if os.path.exists(dest_path):
|
|
50
|
-
overwrite = self.confirm(
|
|
55
|
+
overwrite = self.confirm(
|
|
56
|
+
f" <comment>{destination}</comment> already exists. Overwrite?",
|
|
57
|
+
default=False,
|
|
58
|
+
)
|
|
51
59
|
if not overwrite:
|
|
52
60
|
self.line(f" [{provider_key}] Skipped <comment>{destination}</comment>")
|
|
53
61
|
continue
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from dataclasses import field, dataclass
|
|
3
|
+
from fastapi_startkit.environment.environment import env
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
@dataclass
|
|
7
|
+
class AppConfig:
|
|
8
|
+
name: str = field(
|
|
9
|
+
default_factory=lambda: os.getenv("APP_NAME", "FastAPI starter kit")
|
|
10
|
+
)
|
|
11
|
+
env: str = field(default_factory=lambda: os.getenv("APP_ENV", "development"))
|
|
12
|
+
debug: bool = field(default_factory=lambda: env("APP_DEBUG", "true"))
|
|
13
|
+
timezone: str = field(default_factory=lambda: os.getenv("APP_TIMEZONE", "UTC"))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from fastapi_startkit.loader import Loader
|
|
2
2
|
from ..utils.structures import data
|
|
3
|
-
from ..exceptions import
|
|
3
|
+
from ..exceptions import InvalidConfigurationSetup
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
class Configuration:
|
|
@@ -26,14 +26,13 @@ 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
|
-
config_root, raise_exception=True
|
|
31
|
-
)
|
|
29
|
+
for module_name, module in (
|
|
30
|
+
Loader().get_modules(config_root, raise_exception=True).items()
|
|
31
|
+
):
|
|
32
32
|
params = Loader().get_parameters(module)
|
|
33
33
|
for name, value in params.items():
|
|
34
34
|
self._config[f"{module_name}.{name.lower()}"] = value
|
|
35
35
|
|
|
36
|
-
|
|
37
36
|
def merge_with(self, path, external_config):
|
|
38
37
|
"""Merge external config at key with project config at same key. It's especially
|
|
39
38
|
useful in Masonite packages in order to merge the configuration default package with
|
|
@@ -56,7 +55,9 @@ class Configuration:
|
|
|
56
55
|
self.set(path, merged_config)
|
|
57
56
|
|
|
58
57
|
def set(self, path, value):
|
|
59
|
-
|
|
58
|
+
from fastapi_startkit.helpers.dataclass import Dataclass
|
|
59
|
+
|
|
60
|
+
self._config[path] = Dataclass.to_dict(value)
|
|
60
61
|
|
|
61
62
|
def has(self, path):
|
|
62
63
|
return path in self._config
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from typing import Any
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class Config:
|
|
5
|
+
@staticmethod
|
|
6
|
+
def instance():
|
|
7
|
+
from fastapi_startkit.application import app
|
|
8
|
+
|
|
9
|
+
return app().make("config")
|
|
10
|
+
|
|
11
|
+
@staticmethod
|
|
12
|
+
def get(path: str, default: Any = None) -> Any:
|
|
13
|
+
return Config.instance().get(path, default)
|
|
14
|
+
|
|
15
|
+
@staticmethod
|
|
16
|
+
def set(path: str, value: Any) -> None:
|
|
17
|
+
Config.instance().set(path, value)
|
|
18
|
+
|
|
19
|
+
@staticmethod
|
|
20
|
+
def has(path: str) -> bool:
|
|
21
|
+
return Config.instance().has(path)
|
|
22
|
+
|
|
23
|
+
@staticmethod
|
|
24
|
+
def all() -> dict:
|
|
25
|
+
return Config.instance().all()
|
{fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/container/container.py
RENAMED
|
@@ -27,9 +27,8 @@ class Container:
|
|
|
27
27
|
raise RuntimeError("Container not initialized")
|
|
28
28
|
return cls._instance
|
|
29
29
|
|
|
30
|
-
|
|
31
30
|
def __init__(self):
|
|
32
|
-
if not hasattr(self,
|
|
31
|
+
if not hasattr(self, "objects"):
|
|
33
32
|
self.objects = {}
|
|
34
33
|
self.strict = False
|
|
35
34
|
self.override = True
|
|
@@ -216,7 +215,13 @@ class Container:
|
|
|
216
215
|
raise ContainerError(str(e))
|
|
217
216
|
else:
|
|
218
217
|
for _, value in self.get_parameters(obj):
|
|
219
|
-
if type(value.annotation) in (
|
|
218
|
+
if type(value.annotation) in (
|
|
219
|
+
str,
|
|
220
|
+
int,
|
|
221
|
+
dict,
|
|
222
|
+
list,
|
|
223
|
+
tuple,
|
|
224
|
+
) or value.annotation in (str, int, dict, list, tuple):
|
|
220
225
|
# Ignore any times a user is simply type hinting a parameter like (parameter:str or parameter:"str").
|
|
221
226
|
# In this case we don't want to resolve anything but we do want
|
|
222
227
|
# to insert any passing arguments we passed in
|
|
@@ -449,7 +454,6 @@ class Container:
|
|
|
449
454
|
and obj in self._hooks[action]
|
|
450
455
|
or obj.__class__ in self._hooks[action]
|
|
451
456
|
):
|
|
452
|
-
|
|
453
457
|
for _, hook_list in self._hooks[action].items():
|
|
454
458
|
for hook_obj in hook_list:
|
|
455
459
|
hook_obj(obj, self)
|
{fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/environment/environment.py
RENAMED
|
@@ -3,30 +3,51 @@
|
|
|
3
3
|
import os
|
|
4
4
|
import sys
|
|
5
5
|
from dotenv import load_dotenv
|
|
6
|
-
from pathlib import Path
|
|
7
6
|
|
|
8
7
|
|
|
9
|
-
class
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
class Environment:
|
|
9
|
+
@staticmethod
|
|
10
|
+
def resolve_environment(base_path=None, env: str | None = None):
|
|
11
|
+
Environment.resolve_environment_from_argument()
|
|
13
12
|
|
|
14
|
-
if
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
if "PYTEST_CURRENT_TEST" in os.environ:
|
|
14
|
+
return "testing"
|
|
15
|
+
|
|
16
|
+
# Explicit env parameter takes priority over os.environ APP_ENV
|
|
17
|
+
if env:
|
|
18
|
+
return env
|
|
19
|
+
|
|
20
|
+
if os.environ.get("APP_ENV"):
|
|
21
|
+
return os.environ["APP_ENV"]
|
|
22
|
+
|
|
23
|
+
path = base_path / ".env"
|
|
24
|
+
if not path.exists():
|
|
25
|
+
raise ValueError("Unable to determine environment.")
|
|
26
|
+
|
|
27
|
+
load_dotenv(path, override=True)
|
|
17
28
|
|
|
18
|
-
|
|
29
|
+
env = os.environ.get("APP_ENV")
|
|
30
|
+
if not env:
|
|
31
|
+
raise ValueError("APP_ENV not set after loading .env")
|
|
19
32
|
|
|
20
|
-
|
|
21
|
-
if resolved:
|
|
22
|
-
specific = self.base_path / f".env.{resolved}"
|
|
23
|
-
if specific.exists():
|
|
24
|
-
load_dotenv(specific, override=override)
|
|
25
|
-
return
|
|
33
|
+
return env
|
|
26
34
|
|
|
27
|
-
|
|
35
|
+
@staticmethod
|
|
36
|
+
def load_base(base_path=None):
|
|
37
|
+
"""Load the base .env file, resetting vars to their default values."""
|
|
38
|
+
path = base_path / ".env"
|
|
39
|
+
if path.exists():
|
|
40
|
+
load_dotenv(path, override=True)
|
|
41
|
+
|
|
42
|
+
@staticmethod
|
|
43
|
+
def load(env: str, override=True, only=None, base_path=None):
|
|
44
|
+
path = base_path / f".env.{env}"
|
|
45
|
+
if not path.exists():
|
|
46
|
+
return
|
|
47
|
+
load_dotenv(path, override=override)
|
|
28
48
|
|
|
29
|
-
|
|
49
|
+
@staticmethod
|
|
50
|
+
def resolve_environment_from_argument():
|
|
30
51
|
"""Parse --env=<value> or --env <value> from sys.argv, set APP_ENV,
|
|
31
52
|
and remove the tokens so downstream CLI parsers (e.g. cleo) never see them."""
|
|
32
53
|
args = sys.argv[1:]
|
|
@@ -41,22 +62,6 @@ class LoadEnvironment:
|
|
|
41
62
|
sys.argv.pop(i + 1) # then the flag
|
|
42
63
|
break
|
|
43
64
|
|
|
44
|
-
def _resolve_environment(self, fallback):
|
|
45
|
-
if "PYTEST_CURRENT_TEST" in os.environ:
|
|
46
|
-
return "testing"
|
|
47
|
-
|
|
48
|
-
if os.environ.get("APP_ENV"):
|
|
49
|
-
return os.environ["APP_ENV"]
|
|
50
|
-
|
|
51
|
-
if fallback:
|
|
52
|
-
return fallback
|
|
53
|
-
|
|
54
|
-
return None
|
|
55
|
-
|
|
56
|
-
def _load(self, filename, override=False):
|
|
57
|
-
path = self.base_path / filename
|
|
58
|
-
load_dotenv(path, override=override)
|
|
59
|
-
|
|
60
65
|
|
|
61
66
|
def env(value, default="", cast=True):
|
|
62
67
|
"""Helper to retrieve the value of an environment variable or returns
|
{fastapi_startkit-0.13.6 → fastapi_startkit-0.14.0}/src/fastapi_startkit/exceptions/handler.py
RENAMED
|
@@ -2,7 +2,6 @@ import sys
|
|
|
2
2
|
import atexit
|
|
3
3
|
from typing import Any, Callable, Dict, List, Optional, Type
|
|
4
4
|
|
|
5
|
-
from dumpdie import dd
|
|
6
5
|
|
|
7
6
|
|
|
8
7
|
class ExceptionHandler:
|
|
@@ -62,14 +61,24 @@ class ExceptionHandler:
|
|
|
62
61
|
self.report_exception(exception)
|
|
63
62
|
|
|
64
63
|
def report_exception(self, exception: Exception):
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
context = self._build_context(exception)
|
|
65
|
+
if self.app and self.app.has("logger"):
|
|
66
|
+
from fastapi_startkit.logging.logger import Logger
|
|
67
|
+
|
|
68
|
+
Logger.error(context)
|
|
69
|
+
else:
|
|
70
|
+
print(context, file=sys.stderr)
|
|
67
71
|
|
|
68
72
|
def _build_context(self, exception: Exception) -> str:
|
|
69
73
|
import traceback
|
|
74
|
+
|
|
70
75
|
context = f"{type(exception).__name__}: {exception}"
|
|
71
76
|
if self.app and self.app.is_debug():
|
|
72
|
-
context += "\n" + "".join(
|
|
77
|
+
context += "\n" + "".join(
|
|
78
|
+
traceback.format_exception(
|
|
79
|
+
type(exception), exception, exception.__traceback__
|
|
80
|
+
)
|
|
81
|
+
)
|
|
73
82
|
return context
|
|
74
83
|
|
|
75
84
|
async def handle(self, exception: Exception, context: Optional[Dict] = None) -> Any:
|