fastapi-startkit 0.20.0__tar.gz → 0.22.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.20.0 → fastapi_startkit-0.22.0}/PKG-INFO +4 -1
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/pyproject.toml +6 -1
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/.DS_Store +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/__init__.py +1 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/application.py +6 -0
- fastapi_startkit-0.22.0/src/fastapi_startkit/console/__init__.py +7 -0
- fastapi_startkit-0.20.0/src/fastapi_startkit/console.py → fastapi_startkit-0.22.0/src/fastapi_startkit/console/application.py +11 -4
- fastapi_startkit-0.22.0/src/fastapi_startkit/console/command.py +14 -0
- {fastapi_startkit-0.20.0/src/fastapi_startkit/commands → fastapi_startkit-0.22.0/src/fastapi_startkit/console}/publish_command.py +1 -1
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/exceptions/__init__.py +1 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/exceptions/exceptions.py +6 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/__init__.py +0 -1
- fastapi_startkit-0.22.0/src/fastapi_startkit/fastapi/__init__.py +5 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/fastapi/commands/serve_command.py +1 -1
- fastapi_startkit-0.22.0/src/fastapi_startkit/fastapi/exceptions.py +70 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/fastapi/providers/fastapi_provider.py +10 -1
- fastapi_startkit-0.22.0/src/fastapi_startkit/fastapi/requests/model.py +34 -0
- fastapi_startkit-0.22.0/src/fastapi_startkit/helpers/app.py +9 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/inertia/middleware.py +1 -1
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/inertia/provider.py +2 -14
- fastapi_startkit-0.22.0/src/fastapi_startkit/masoniteorm/__init__.py +8 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/commands/DBMigrateCommand.py +32 -22
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/commands/DBSeedCommand.py +1 -1
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/commands/MakeMigrationCommand.py +1 -1
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/commands/MakeModelCommand.py +1 -1
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/commands/MakeModelDocstringCommand.py +1 -1
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/commands/MakeObserverCommand.py +1 -1
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/commands/MakeSeedCommand.py +1 -1
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/commands/MigrateFreshCommand.py +14 -4
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/commands/MigrateRefreshCommand.py +15 -14
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/commands/MigrateResetCommand.py +15 -14
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/commands/MigrateRollbackCommand.py +17 -20
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/commands/MigrateStatusCommand.py +18 -15
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/commands/ShellCommand.py +1 -1
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/commands/stubs/create_migration.stub +1 -1
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/config/database.py +1 -1
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/connections/connection.py +18 -7
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/connections/manager.py +2 -2
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/connections/postgres_connection.py +8 -17
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/facades/DB.py +15 -3
- fastapi_startkit-0.22.0/src/fastapi_startkit/masoniteorm/migrations/Migration.py +11 -0
- fastapi_startkit-0.20.0/src/fastapi_startkit/masoniteorm/migrations/Migration.py → fastapi_startkit-0.22.0/src/fastapi_startkit/masoniteorm/migrations/Migrator.py +35 -27
- fastapi_startkit-0.22.0/src/fastapi_startkit/masoniteorm/migrations/__init__.py +4 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/models/MigrationModel.py +1 -1
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/models/builder.py +46 -23
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/models/model.py +19 -5
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/providers/DatabaseProvider.py +3 -3
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/query/grammars/BaseGrammar.py +35 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/query/grammars/PostgresGrammar.py +16 -8
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/testing/transaction.py +5 -2
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/providers/app_provider.py +1 -1
- fastapi_startkit-0.22.0/src/fastapi_startkit/storage/__init__.py +3 -0
- fastapi_startkit-0.22.0/src/fastapi_startkit/storage/config/__init__.py +33 -0
- fastapi_startkit-0.22.0/src/fastapi_startkit/storage/config/storage.py +30 -0
- fastapi_startkit-0.22.0/src/fastapi_startkit/storage/drivers/__init__.py +3 -0
- fastapi_startkit-0.22.0/src/fastapi_startkit/storage/drivers/fake.py +69 -0
- fastapi_startkit-0.22.0/src/fastapi_startkit/storage/drivers/local.py +133 -0
- fastapi_startkit-0.22.0/src/fastapi_startkit/storage/drivers/s3.py +203 -0
- fastapi_startkit-0.22.0/src/fastapi_startkit/storage/file.py +30 -0
- fastapi_startkit-0.22.0/src/fastapi_startkit/storage/filestream.py +18 -0
- fastapi_startkit-0.22.0/src/fastapi_startkit/storage/providers/provider.py +59 -0
- fastapi_startkit-0.22.0/src/fastapi_startkit/storage/storage.py +185 -0
- fastapi_startkit-0.20.0/src/fastapi_startkit/commands/__init__.py +0 -1
- fastapi_startkit-0.20.0/src/fastapi_startkit/facades/Storage.py +0 -5
- fastapi_startkit-0.20.0/src/fastapi_startkit/facades/Storage.pyi +0 -12
- fastapi_startkit-0.20.0/src/fastapi_startkit/fastapi/__init__.py +0 -4
- fastapi_startkit-0.20.0/src/fastapi_startkit/fastapi/exceptions.py +0 -28
- fastapi_startkit-0.20.0/src/fastapi_startkit/masoniteorm/__init__.py +0 -3
- fastapi_startkit-0.20.0/src/fastapi_startkit/masoniteorm/commands/Command.py +0 -6
- fastapi_startkit-0.20.0/src/fastapi_startkit/masoniteorm/commands/Entry.py +0 -43
- fastapi_startkit-0.20.0/src/fastapi_startkit/masoniteorm/migrations/__init__.py +0 -1
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/carbon/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/carbon/carbon.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/collection/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/collection/collection.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/config/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/config/app.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/configuration/Configuration.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/configuration/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/configuration/config.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/configuration/helpers.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/configuration/providers/ConfigurationProvider.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/configuration/providers/__init__.py +0 -0
- /fastapi_startkit-0.20.0/src/fastapi_startkit/masoniteorm/commands/CanOverrideConfig.py → /fastapi_startkit-0.22.0/src/fastapi_startkit/console/can_override_config.py +0 -0
- /fastapi_startkit-0.20.0/src/fastapi_startkit/masoniteorm/commands/CanOverrideOptionsDefault.py → /fastapi_startkit-0.22.0/src/fastapi_startkit/console/can_override_default_options.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/container/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/container/container.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/environment/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/environment/environment.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/exceptions/handler.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/exceptions.backup/DD.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/exceptions.backup/ExceptionHandler.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/exceptions.backup/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/exceptions.backup/exceptionite/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/exceptions.backup/exceptionite/blocks.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/exceptions.backup/exceptionite/controllers.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/exceptions.backup/exceptionite/solutions.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/exceptions.backup/exceptionite/tabs.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/exceptions.backup/handlers/DumpExceptionHandler.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/exceptions.backup/handlers/HttpExceptionHandler.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/exceptions.backup/handlers/ModelNotFoundHandler.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Auth.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Auth.pyi +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Broadcast.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Cache.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Config.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Config.pyi +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Dump.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Dump.pyi +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Facade.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Gate.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Gate.pyi +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Hash.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Hash.pyi +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Inertia.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Loader.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Loader.pyi +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Mail.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Mail.pyi +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Notification.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Notification.pyi +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Queue.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Queue.pyi +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/RateLimiter.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/RateLimiter.pyi +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Request.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Request.pyi +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Response.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Response.pyi +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Session.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Session.pyi +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Url.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Url.pyi +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/View.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/View.pyi +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Vite.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/facades/Vite.pyi +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/fastapi/commands/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/fastapi/routers/router.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/fastapi/testing/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/fastapi/testing/test_case.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/helpers/dataclass.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/helpers/string.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/inertia/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/inertia/constant.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/inertia/context.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/inertia/inertia.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/inertia/props/props.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/loader/Loader.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/loader/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/ChannelFactory.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/channels/BaseChannel.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/channels/DailyChannel.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/channels/MultiBaseChannel.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/channels/SingleChannel.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/channels/SlackChannel.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/channels/StackChannel.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/channels/SyslogChannel.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/channels/TerminalChannel.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/channels/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/config/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/config/channels.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/config/logging.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/drivers/BaseDriver.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/drivers/LogSingleDriver.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/drivers/LogSlackDriver.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/drivers/LogSyslogDriver.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/drivers/LogTerminalDriver.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/drivers/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/factory.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/handler.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/listeners.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/logger.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/managers/LoggingManager.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/managers/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/providers/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/logging/providers/log_provider.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/collection/Collection.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/collection/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/commands/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/commands/stubs/create_seed.stub +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/commands/stubs/model.stub +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/commands/stubs/observer.stub +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/commands/stubs/table_migration.stub +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/config/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/config/config.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/connections/factory.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/connections/mysql_connection.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/connections/sqlite_connection.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/expressions/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/expressions/expressions.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/facades/Schema.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/facades/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/factory/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/factory/factory.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/helpers/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/helpers/misc.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/models/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/models/attribute.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/models/caster.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/models/fields.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/models/observer.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/models/pivot.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/models/registry.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/models/relationship.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/observers/ObservesEvents.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/observers/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/pagination/BasePaginator.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/pagination/LengthAwarePaginator.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/pagination/SimplePaginator.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/pagination/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/providers/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/query/EagerLoadMixin.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/query/EagerRelation.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/query/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/query/grammars/MSSQLGrammar.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/query/grammars/MySQLGrammar.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/query/grammars/SQLiteGrammar.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/query/grammars/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/query/processors/MSSQLPostProcessor.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/query/processors/MySQLPostProcessor.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/query/processors/PostgresPostProcessor.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/query/processors/SQLitePostProcessor.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/query/processors/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/query/support.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/relationships/BaseRelationship.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/relationships/BelongsTo.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/relationships/BelongsToMany.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/relationships/HasMany.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/relationships/HasManyThrough.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/relationships/HasOne.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/relationships/HasOneThrough.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/relationships/MorphMany.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/relationships/MorphOne.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/relationships/MorphTo.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/relationships/MorphToMany.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/relationships/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/schema/Blueprint.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/schema/Column.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/schema/ColumnDiff.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/schema/Constraint.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/schema/ForeignKeyConstraint.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/schema/Index.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/schema/Table.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/schema/TableDiff.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/schema/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/schema/platforms/MSSQLPlatform.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/schema/platforms/MySQLPlatform.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/schema/platforms/Platform.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/schema/platforms/PostgresPlatform.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/schema/platforms/SQLitePlatform.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/schema/platforms/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/schema/schema.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/seeds/Seeder.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/seeds/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/stubs/create-migration.html +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/stubs/table-migration.html +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm/testing/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/.pytest_cache/.gitignore +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/.pytest_cache/CACHEDIR.TAG +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/.pytest_cache/README.md +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/.pytest_cache/v/cache/lastfailed +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/.pytest_cache/v/cache/nodeids +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/config/database.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/config.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/exceptions.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/factories/Factory.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/factories/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/schema/Schema.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/scopes/BaseScope.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/scopes/SoftDeleteScope.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/scopes/SoftDeletesMixin.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/scopes/UUIDPrimaryKeyMixin.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/scopes/UUIDPrimaryKeyScope.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/scopes/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/scopes/scope.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/testing/BaseTestCaseSelectGrammar.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/testing/Database.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/testing/TestCase.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/testing/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/User.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/connections/test_base_connections.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/eagers/test_eager.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/factories/test_factories.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/integrations/config/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/integrations/config/database.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/integrations/databases/migrations/2026_01_01_000000_create_users_table.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/integrations/model.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/integrations/test_model.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/models/test_models.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/builder/test_mssql_query_builder.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/builder/test_mssql_query_builder_relationships.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_delete_grammar.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_insert_grammar.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_qmark.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_select_grammar.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/grammar/test_mssql_update_grammar.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/schema/test_mssql_schema_builder.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mssql/schema/test_mssql_schema_builder_alter.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_mysql_builder_transaction.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_query_builder.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_query_builder_scopes.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/builder/test_transactions.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/connections/test_mysql_connection_selects.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_delete_grammar.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_insert_grammar.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_qmark.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_select_grammar.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/grammar/test_mysql_update_grammar.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/model/test_accessors_and_mutators.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/model/test_model.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_belongs_to_many.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_has_many_through.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_has_one_through.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/relationships/test_relationships.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/schema/test_mysql_schema_builder.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/schema/test_mysql_schema_builder_alter.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/scopes/test_can_use_global_scopes.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/scopes/test_can_use_scopes.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/mysql/scopes/test_soft_delete.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/builder/test_postgres_query_builder.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/builder/test_postgres_transaction.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_delete_grammar.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_insert_grammar.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_select_grammar.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/grammar/test_update_grammar.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/relationships/test_postgres_relationships.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/schema/test_postgres_schema_builder.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/postgres/schema/test_postgres_schema_builder_alter.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/scopes/test_default_global_scopes.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/seeds/test_seeds.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/masoniteorm.backup/tests/utils.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/providers/Provider.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/providers/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/testing/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/testing/test_case.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/utils/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/utils/collections.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/utils/console.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/utils/data/mime.types +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/utils/filesystem.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/utils/http.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/utils/location.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/utils/str.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/utils/structures.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/utils/time.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/vite/__init__.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/vite/config/vite.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/vite/exceptions.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/vite/providers/provider.py +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/vite/stubs/package.json +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/vite/stubs/resources/css/app.css +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/vite/stubs/resources/js/app.ts +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/vite/stubs/templates/index.html +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/vite/stubs/tsconfig.json +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/vite/stubs/vite.config.ts +0 -0
- {fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/vite/vite.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: fastapi-startkit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.22.0
|
|
4
4
|
Summary: Fastapi Starter kit components
|
|
5
5
|
Author: Bedram Tamang
|
|
6
6
|
Author-email: Bedram Tamang <tmgbedu@gmail.com>
|
|
@@ -15,6 +15,8 @@ Requires-Dist: faker>=40.13.0 ; extra == 'database'
|
|
|
15
15
|
Requires-Dist: sqlalchemy[asyncio]>=2.0.38 ; extra == 'database'
|
|
16
16
|
Requires-Dist: fastapi[standard]>=0.124.4,<0.125.0 ; extra == 'fastapi'
|
|
17
17
|
Requires-Dist: itsdangerous>=2.2.0 ; extra == 'fastapi'
|
|
18
|
+
Requires-Dist: jinja2>=3.1 ; extra == 'inertia'
|
|
19
|
+
Requires-Dist: markupsafe>=2.0 ; extra == 'inertia'
|
|
18
20
|
Requires-Dist: aiomysql>=0.2.0 ; extra == 'mysql'
|
|
19
21
|
Requires-Dist: asyncpg>=0.29.0 ; extra == 'postgres'
|
|
20
22
|
Requires-Dist: aiosqlite>=0.22.1 ; extra == 'sqlite'
|
|
@@ -22,6 +24,7 @@ Requires-Dist: jinja2>=3.1 ; extra == 'vite'
|
|
|
22
24
|
Requires-Python: >=3.12, <4.0
|
|
23
25
|
Provides-Extra: database
|
|
24
26
|
Provides-Extra: fastapi
|
|
27
|
+
Provides-Extra: inertia
|
|
25
28
|
Provides-Extra: mysql
|
|
26
29
|
Provides-Extra: postgres
|
|
27
30
|
Provides-Extra: sqlite
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "fastapi-startkit"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.22.0"
|
|
4
4
|
description = "Fastapi Starter kit components"
|
|
5
5
|
authors = [
|
|
6
6
|
{name = "Bedram Tamang", email = "tmgbedu@gmail.com"}
|
|
@@ -42,6 +42,11 @@ vite=[
|
|
|
42
42
|
"jinja2>=3.1",
|
|
43
43
|
]
|
|
44
44
|
|
|
45
|
+
inertia = [
|
|
46
|
+
"jinja2>=3.1",
|
|
47
|
+
"markupsafe>=2.0",
|
|
48
|
+
]
|
|
49
|
+
|
|
45
50
|
[dependency-groups]
|
|
46
51
|
dev = [
|
|
47
52
|
"dumpdie>=1.5.0",
|
|
Binary file
|
|
@@ -112,6 +112,12 @@ class Application(Container, Generic[TConfig]):
|
|
|
112
112
|
def use_base_path(self, path: str):
|
|
113
113
|
return self.base_path / path
|
|
114
114
|
|
|
115
|
+
def storage_path(self, path: str = "") -> str:
|
|
116
|
+
return str(self.base_path / "storage" / path)
|
|
117
|
+
|
|
118
|
+
def public_path(self, path: str = "") -> str:
|
|
119
|
+
return str(self.base_path / "public" / path)
|
|
120
|
+
|
|
115
121
|
def get(self, path: str, **kwargs) -> Callable:
|
|
116
122
|
return self.fastapi.get(path, **kwargs)
|
|
117
123
|
|
|
@@ -1,19 +1,26 @@
|
|
|
1
|
+
from typing import TYPE_CHECKING
|
|
2
|
+
|
|
1
3
|
from cleo.application import Application as BaseApplication
|
|
2
4
|
from cleo.io.io import IO
|
|
3
|
-
|
|
5
|
+
|
|
6
|
+
if TYPE_CHECKING:
|
|
7
|
+
from fastapi_startkit.application import Application
|
|
4
8
|
|
|
5
9
|
|
|
6
10
|
class ConsoleApplication(BaseApplication):
|
|
7
|
-
def __init__(self, app: Application):
|
|
11
|
+
def __init__(self, app: "Application"):
|
|
8
12
|
super().__init__()
|
|
9
13
|
self.app = app
|
|
10
14
|
|
|
11
15
|
# Register commands from Application
|
|
12
16
|
for command in self.app.commands:
|
|
13
17
|
if isinstance(command, type):
|
|
14
|
-
|
|
18
|
+
instance = command()
|
|
15
19
|
else:
|
|
16
|
-
|
|
20
|
+
instance = command
|
|
21
|
+
|
|
22
|
+
instance.set_container(self.app)
|
|
23
|
+
self.add(instance)
|
|
17
24
|
|
|
18
25
|
def render_error(self, error: Exception, io: IO) -> None:
|
|
19
26
|
self.app.exception_manager.report(error)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from typing import TYPE_CHECKING
|
|
2
|
+
|
|
3
|
+
from .can_override_config import CanOverrideConfig
|
|
4
|
+
from .can_override_default_options import CanOverrideOptionsDefault
|
|
5
|
+
|
|
6
|
+
if TYPE_CHECKING:
|
|
7
|
+
from fastapi_startkit import Application
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Command(CanOverrideOptionsDefault, CanOverrideConfig):
|
|
11
|
+
container: "Application"
|
|
12
|
+
|
|
13
|
+
def set_container(self, container: "Application") -> None:
|
|
14
|
+
self.container = container
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
class HTTPExceptionHandler:
|
|
2
|
+
"""
|
|
3
|
+
The base exception handler for FastAPI applications.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
async def render(self, request, exc):
|
|
7
|
+
import traceback
|
|
8
|
+
from fastapi.responses import JSONResponse
|
|
9
|
+
from fastapi_startkit.container import Container
|
|
10
|
+
|
|
11
|
+
app = Container.instance()
|
|
12
|
+
if app.is_debug():
|
|
13
|
+
tb = exc.__traceback__
|
|
14
|
+
frames = traceback.extract_tb(tb)
|
|
15
|
+
content = {
|
|
16
|
+
"message": str(exc),
|
|
17
|
+
"exception": f"{type(exc).__module__}.{type(exc).__qualname__}",
|
|
18
|
+
"file": frames[-1].filename if frames else None,
|
|
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
|
+
],
|
|
24
|
+
}
|
|
25
|
+
else:
|
|
26
|
+
content = {"message": "Server Error"}
|
|
27
|
+
|
|
28
|
+
return JSONResponse(status_code=500, content=content)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class ValidationExceptionHandler:
|
|
32
|
+
"""
|
|
33
|
+
Handles RequestValidationError with content negotiation.
|
|
34
|
+
|
|
35
|
+
JSON requests (API clients) receive a 422 Unprocessable Entity response.
|
|
36
|
+
Non-JSON requests (browser/Inertia) have errors flashed to the session
|
|
37
|
+
and are redirected back to the referring page.
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
def report(self, exc) -> None:
|
|
41
|
+
pass
|
|
42
|
+
|
|
43
|
+
async def render(self, request, exc):
|
|
44
|
+
accept = request.headers.get("accept", "")
|
|
45
|
+
content_type = request.headers.get("content-type", "")
|
|
46
|
+
|
|
47
|
+
wants_json = (
|
|
48
|
+
"application/json" in accept
|
|
49
|
+
or content_type.startswith("application/json")
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
errors = {}
|
|
53
|
+
for err in exc.errors():
|
|
54
|
+
field = ".".join(str(x) for x in err["loc"][1:])
|
|
55
|
+
errors.setdefault(field, []).append(err["msg"])
|
|
56
|
+
|
|
57
|
+
if wants_json:
|
|
58
|
+
from fastapi.responses import JSONResponse
|
|
59
|
+
|
|
60
|
+
return JSONResponse(status_code=422, content={"errors": errors})
|
|
61
|
+
|
|
62
|
+
if "session" in request.scope:
|
|
63
|
+
request.session["errors"] = errors
|
|
64
|
+
|
|
65
|
+
from starlette.responses import RedirectResponse
|
|
66
|
+
|
|
67
|
+
return RedirectResponse(
|
|
68
|
+
url=request.headers.get("referer", "/"),
|
|
69
|
+
status_code=303,
|
|
70
|
+
)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from fastapi_startkit.fastapi.exceptions import HTTPExceptionHandler
|
|
1
|
+
from fastapi_startkit.fastapi.exceptions import HTTPExceptionHandler, ValidationExceptionHandler
|
|
2
2
|
from fastapi import FastAPI
|
|
3
3
|
|
|
4
4
|
from fastapi_startkit.fastapi.commands import ServeCommand
|
|
@@ -21,10 +21,19 @@ class FastAPIProvider(Provider):
|
|
|
21
21
|
|
|
22
22
|
def _register_exception_handlers(self):
|
|
23
23
|
"""Wire exception_manager as a catch-all handler for all exceptions."""
|
|
24
|
+
from fastapi import HTTPException
|
|
25
|
+
from fastapi.exceptions import RequestValidationError
|
|
26
|
+
|
|
24
27
|
exception_manager = self.app.exception_manager
|
|
25
28
|
exception_manager.register_handler(Exception, HTTPExceptionHandler())
|
|
29
|
+
exception_manager.register_handler(HTTPException, HTTPExceptionHandler())
|
|
30
|
+
exception_manager.register_handler(RequestValidationError, ValidationExceptionHandler())
|
|
26
31
|
|
|
27
32
|
async def handler(request, exc):
|
|
28
33
|
return await exception_manager.handle(exc, {"request": request})
|
|
29
34
|
|
|
35
|
+
# FastAPI registers its own handlers for these two types internally,
|
|
36
|
+
# so they must be overridden explicitly
|
|
37
|
+
self.app.fastapi.add_exception_handler(HTTPException, handler)
|
|
38
|
+
self.app.fastapi.add_exception_handler(RequestValidationError, handler)
|
|
30
39
|
self.app.fastapi.add_exception_handler(Exception, handler)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import inspect
|
|
2
|
+
|
|
3
|
+
from fastapi import Form
|
|
4
|
+
from fastapi.params import Query as QueryParam
|
|
5
|
+
from pydantic import BaseModel
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class RequestModel(BaseModel):
|
|
9
|
+
@classmethod
|
|
10
|
+
def __pydantic_init_subclass__(cls, **kwargs):
|
|
11
|
+
super().__pydantic_init_subclass__(**kwargs)
|
|
12
|
+
|
|
13
|
+
params = []
|
|
14
|
+
for name, field in cls.model_fields.items():
|
|
15
|
+
if isinstance(field, QueryParam):
|
|
16
|
+
default = field
|
|
17
|
+
elif field.is_required():
|
|
18
|
+
default = Form(...)
|
|
19
|
+
else:
|
|
20
|
+
default = Form(default=field.default)
|
|
21
|
+
|
|
22
|
+
params.append(
|
|
23
|
+
inspect.Parameter(
|
|
24
|
+
name,
|
|
25
|
+
inspect.Parameter.POSITIONAL_OR_KEYWORD,
|
|
26
|
+
default=default,
|
|
27
|
+
annotation=field.annotation,
|
|
28
|
+
)
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
cls.__signature__ = inspect.Signature(params)
|
|
32
|
+
|
|
33
|
+
def validated(self) -> dict:
|
|
34
|
+
return {k: v for k, v in self.model_dump().items() if v}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
def storage_path(path: str = "") -> str:
|
|
2
|
+
"""Get the path to the storage directory."""
|
|
3
|
+
from fastapi_startkit.application import app
|
|
4
|
+
return app().storage_path(path)
|
|
5
|
+
|
|
6
|
+
def public_path(path: str = "") -> str:
|
|
7
|
+
"""Get the path to the public directory."""
|
|
8
|
+
from fastapi_startkit.application import app
|
|
9
|
+
return app().public_path(path)
|
{fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/inertia/middleware.py
RENAMED
|
@@ -94,7 +94,7 @@ class InertiaMiddleware(BaseHTTPMiddleware):
|
|
|
94
94
|
def resolve_validation_errors(request: Request) -> dict:
|
|
95
95
|
if "session" not in request.scope:
|
|
96
96
|
return {}
|
|
97
|
-
return request.session.
|
|
97
|
+
return request.session.pop("errors", {})
|
|
98
98
|
|
|
99
99
|
@staticmethod
|
|
100
100
|
def reflash(request: Request) -> None:
|
{fastapi_startkit-0.20.0 → fastapi_startkit-0.22.0}/src/fastapi_startkit/inertia/provider.py
RENAMED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import json
|
|
2
|
+
from markupsafe import Markup
|
|
2
3
|
from fastapi_startkit.providers import Provider
|
|
3
4
|
from .inertia import Inertia
|
|
4
5
|
from .middleware import InertiaMiddleware
|
|
@@ -8,33 +9,20 @@ class InertiaProvider(Provider):
|
|
|
8
9
|
provider_key = "inertia"
|
|
9
10
|
|
|
10
11
|
def register(self) -> None:
|
|
11
|
-
"""Bind the Inertia class to the container."""
|
|
12
12
|
self.app.bind("inertia", Inertia)
|
|
13
13
|
|
|
14
14
|
def boot(self) -> None:
|
|
15
|
-
"""Configure template globals and middleware."""
|
|
16
|
-
# 1. Register Middleware
|
|
17
|
-
# We add it to the FastAPI instance via the application helper
|
|
18
15
|
self.app.add_middleware(InertiaMiddleware)
|
|
19
16
|
|
|
20
|
-
# 2. Register Template Globals
|
|
21
17
|
if self.app.has("templates"):
|
|
22
18
|
templates = self.app.make("templates")
|
|
23
19
|
|
|
24
|
-
try:
|
|
25
|
-
from markupsafe import Markup
|
|
26
|
-
except ImportError:
|
|
27
|
-
Markup = str
|
|
28
|
-
|
|
29
20
|
def inertia_helper(page):
|
|
30
|
-
"""Jinja2 helper to render the root div for Inertia."""
|
|
31
21
|
encoded_page = json.dumps(page)
|
|
32
|
-
# Ensure single quotes are used for the attribute to avoid conflict with JSON double quotes
|
|
33
22
|
return Markup(
|
|
34
23
|
f'<script data-page="app" type="application/json">{encoded_page}</script><div id="app"></div>'
|
|
35
24
|
)
|
|
36
25
|
|
|
37
26
|
templates.env.globals["inertia"] = inertia_helper
|
|
38
|
-
|
|
39
|
-
# Also share the inertia instance itself if needed
|
|
40
27
|
templates.env.globals["Inertia"] = self.app.make("inertia")
|
|
28
|
+
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
from .config.config import MySQLConfig, PostgresConfig, SQLiteConfig
|
|
2
|
+
from .facades import DB
|
|
3
|
+
from .migrations.Migration import Migration
|
|
4
|
+
from .migrations.Migrator import Migrator
|
|
5
|
+
from .models import Model
|
|
6
|
+
from .providers import DatabaseProvider
|
|
7
|
+
|
|
8
|
+
__all__ = ["DatabaseProvider", "PostgresConfig", "MySQLConfig", "SQLiteConfig", "Model", "DB", "Migration", "Migrator"]
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import os
|
|
2
|
-
|
|
2
|
+
|
|
3
3
|
from cleo.helpers import option
|
|
4
4
|
|
|
5
|
+
from fastapi_startkit.console import Command
|
|
6
|
+
from fastapi_startkit.masoniteorm.migrations.Migrator import Migrator
|
|
7
|
+
|
|
5
8
|
|
|
6
9
|
class DBMigrateCommand(Command):
|
|
7
10
|
name = "db:migrate"
|
|
@@ -28,12 +31,6 @@ class DBMigrateCommand(Command):
|
|
|
28
31
|
flag=True,
|
|
29
32
|
description="Force migrations without prompt in production",
|
|
30
33
|
),
|
|
31
|
-
option(
|
|
32
|
-
"show",
|
|
33
|
-
"s",
|
|
34
|
-
flag=True,
|
|
35
|
-
description="Shows the output of SQL for migrations that would be running",
|
|
36
|
-
),
|
|
37
34
|
option(
|
|
38
35
|
"directory",
|
|
39
36
|
"d",
|
|
@@ -49,29 +46,42 @@ class DBMigrateCommand(Command):
|
|
|
49
46
|
return asyncio.run(self.handle_async())
|
|
50
47
|
|
|
51
48
|
async def handle_async(self):
|
|
52
|
-
|
|
49
|
+
self.confirm_to_proceed()
|
|
53
50
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
while answer not in ["y", "n"]:
|
|
58
|
-
answer = input(
|
|
59
|
-
"Do you want to run migrations in PRODUCTION ? (y/n)\n"
|
|
60
|
-
).lower()
|
|
61
|
-
if answer != "y":
|
|
62
|
-
self.info("Migrations cancelled")
|
|
63
|
-
exit(0)
|
|
64
|
-
migration = Migration(
|
|
51
|
+
directory = self.resolve_migration_path()
|
|
52
|
+
|
|
53
|
+
migration = Migrator(
|
|
65
54
|
command_class=self,
|
|
66
55
|
connection=self.option("connection"),
|
|
67
|
-
migration_directory=
|
|
56
|
+
migration_directory=directory,
|
|
68
57
|
)
|
|
58
|
+
|
|
69
59
|
await migration.create_table_if_not_exists()
|
|
70
60
|
if not await migration.get_unran_migrations():
|
|
71
61
|
self.info("Nothing To Migrate!")
|
|
72
62
|
return
|
|
73
63
|
|
|
74
64
|
migration_name = self.option("migration")
|
|
75
|
-
show_output = self.option("show")
|
|
76
65
|
|
|
77
|
-
await migration.migrate(migration=migration_name
|
|
66
|
+
await migration.migrate(migration=migration_name)
|
|
67
|
+
|
|
68
|
+
def resolve_migration_path(self) -> str:
|
|
69
|
+
path = self.option('directory')
|
|
70
|
+
|
|
71
|
+
config = self.container.make('config').get('database.migrations')
|
|
72
|
+
default_directory = config.get('directory')
|
|
73
|
+
|
|
74
|
+
migration_directory = path or default_directory
|
|
75
|
+
return self.container.use_base_path(migration_directory)
|
|
76
|
+
|
|
77
|
+
def confirm_to_proceed(self) -> None:
|
|
78
|
+
# prompt user for confirmation in production
|
|
79
|
+
if os.getenv("APP_ENV") == "production" and not self.option("force"):
|
|
80
|
+
answer = ""
|
|
81
|
+
while answer not in ["y", "n"]:
|
|
82
|
+
answer = input(
|
|
83
|
+
"Do you want to run migrations in PRODUCTION ? (y/n)\n"
|
|
84
|
+
).lower()
|
|
85
|
+
if answer != "y":
|
|
86
|
+
self.info("Migrations cancelled")
|
|
87
|
+
exit(0)
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from cleo.helpers import option
|
|
2
|
-
from .
|
|
2
|
+
from fastapi_startkit.console import Command
|
|
3
|
+
from fastapi_startkit.masoniteorm.migrations.Migrator import Migrator
|
|
3
4
|
|
|
4
5
|
|
|
5
6
|
class MigrateFreshCommand(Command):
|
|
@@ -49,12 +50,12 @@ class MigrateFreshCommand(Command):
|
|
|
49
50
|
return asyncio.run(self.handle_async())
|
|
50
51
|
|
|
51
52
|
async def handle_async(self):
|
|
52
|
-
|
|
53
|
+
directory = self.resolve_migration_path()
|
|
53
54
|
|
|
54
|
-
migration =
|
|
55
|
+
migration = Migrator(
|
|
55
56
|
command_class=self,
|
|
56
57
|
connection=self.option("connection"),
|
|
57
|
-
migration_directory=
|
|
58
|
+
migration_directory=directory,
|
|
58
59
|
)
|
|
59
60
|
|
|
60
61
|
await migration.fresh(ignore_fk=not self.option("no-fk"))
|
|
@@ -69,3 +70,12 @@ class MigrateFreshCommand(Command):
|
|
|
69
70
|
"seed:run",
|
|
70
71
|
f"{self.option('seed')} --directory {self.option('seed-directory')} --connection {self.option('connection')}",
|
|
71
72
|
)
|
|
73
|
+
|
|
74
|
+
def resolve_migration_path(self) -> str:
|
|
75
|
+
path = self.option('directory')
|
|
76
|
+
|
|
77
|
+
config = self.container.make('config').get('database.migrations')
|
|
78
|
+
default_directory = config.get('directory')
|
|
79
|
+
|
|
80
|
+
migration_directory = path or default_directory
|
|
81
|
+
return self.container.use_base_path(migration_directory)
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
from cleo.helpers import option
|
|
2
|
-
from .
|
|
2
|
+
from fastapi_startkit.console import Command
|
|
3
|
+
from fastapi_startkit.masoniteorm.migrations.Migrator import Migrator
|
|
3
4
|
|
|
4
5
|
|
|
5
6
|
class MigrateRefreshCommand(Command):
|
|
6
|
-
name = "migrate:refresh"
|
|
7
|
+
name = "db:migrate:refresh"
|
|
7
8
|
description = "Refresh migrations."
|
|
8
9
|
|
|
9
10
|
options = [
|
|
@@ -21,13 +22,6 @@ class MigrateRefreshCommand(Command):
|
|
|
21
22
|
default="default",
|
|
22
23
|
description="The connection you want to run migrations on",
|
|
23
24
|
),
|
|
24
|
-
option(
|
|
25
|
-
"schema",
|
|
26
|
-
None,
|
|
27
|
-
flag=False,
|
|
28
|
-
default=None,
|
|
29
|
-
description="Sets the schema to be migrated",
|
|
30
|
-
),
|
|
31
25
|
option(
|
|
32
26
|
"directory",
|
|
33
27
|
"d",
|
|
@@ -57,14 +51,12 @@ class MigrateRefreshCommand(Command):
|
|
|
57
51
|
return asyncio.run(self.handle_async())
|
|
58
52
|
|
|
59
53
|
async def handle_async(self):
|
|
60
|
-
|
|
54
|
+
directory = self.resolve_migration_path()
|
|
61
55
|
|
|
62
|
-
migration =
|
|
56
|
+
migration = Migrator(
|
|
63
57
|
command_class=self,
|
|
64
58
|
connection=self.option("connection"),
|
|
65
|
-
migration_directory=
|
|
66
|
-
config_path=self.option("config"),
|
|
67
|
-
schema=self.option("schema"),
|
|
59
|
+
migration_directory=directory,
|
|
68
60
|
)
|
|
69
61
|
|
|
70
62
|
await migration.refresh(self.option("migration"))
|
|
@@ -79,3 +71,12 @@ class MigrateRefreshCommand(Command):
|
|
|
79
71
|
"seed:run",
|
|
80
72
|
f"{self.option('seed')} --directory {self.option('seed-directory')} --connection {self.option('connection')}",
|
|
81
73
|
)
|
|
74
|
+
|
|
75
|
+
def resolve_migration_path(self) -> str:
|
|
76
|
+
path = self.option('directory')
|
|
77
|
+
|
|
78
|
+
config = self.container.make('config').get('database.migrations')
|
|
79
|
+
default_directory = config.get('directory')
|
|
80
|
+
|
|
81
|
+
migration_directory = path or default_directory
|
|
82
|
+
return self.container.use_base_path(migration_directory)
|