fastapi-startkit 0.54.0__tar.gz → 0.56.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.54.0 → fastapi_startkit-0.56.0}/PKG-INFO +1 -1
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/pyproject.toml +1 -1
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/config/app.py +1 -1
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/environment/environment.py +62 -17
- fastapi_startkit-0.56.0/src/fastapi_startkit/masoniteorm/connections/connection.py +212 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/connections/postgres_connection.py +0 -3
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/Blueprint.py +3 -2
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/testing/transaction.py +4 -2
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/storage/config/storage.py +6 -6
- fastapi_startkit-0.54.0/src/fastapi_startkit/masoniteorm/connections/connection.py +0 -151
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/README.md +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/.DS_Store +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/agent.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/ai.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/audio.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/audio_factory.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/config/ai.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/config/config.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/decorators.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/document.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/image.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/image_factory.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/judge.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/lab.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/pipeline.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/providers/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/providers/ai_provider.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/recording.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/runner.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/state.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/testing.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/tinker.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/types.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/application.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/auth.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/channels.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/config.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/drivers/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/drivers/log_driver.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/drivers/reverb_driver.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/event.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/helpers.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/manager.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/provider.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/reverb/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/reverb/channel_manager.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/reverb/connection.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/reverb/server.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/stubs/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/stubs/channels.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/carbon/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/carbon/carbon.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/config/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/configuration/Configuration.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/configuration/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/configuration/config.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/configuration/helpers.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/configuration/providers/ConfigurationProvider.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/configuration/providers/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/console/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/console/application.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/console/can_override_config.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/console/can_override_default_options.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/console/command.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/console/publish_command.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/container/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/container/container.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/environment/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/events/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/events/dispatcher.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/events/fake.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/events/helpers.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/events/listener.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/events/provider.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/exceptions/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/exceptions/exceptions.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/exceptions/handler.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/AI.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/AI.pyi +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Cache.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Config.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Config.pyi +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Dump.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Dump.pyi +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Event.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Event.pyi +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Facade.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Gate.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Gate.pyi +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Hash.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Hash.pyi +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Loader.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Loader.pyi +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Mail.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Mail.pyi +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Notification.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Notification.pyi +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Queue.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Queue.pyi +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/RateLimiter.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/RateLimiter.pyi +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Request.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Request.pyi +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Response.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Response.pyi +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Session.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Session.pyi +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Url.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Url.pyi +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/View.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/View.pyi +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Vite.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/Vite.pyi +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/facades/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/commands/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/commands/serve_command.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/config/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/config/fastapi.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/events.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/exceptions.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/middleware.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/providers/fastapi_provider.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/requests/model.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/routers/router.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/testing/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/testing/assertable_json.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/testing/test_case.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/fastapi/testing/test_response.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/foundation/app_provider.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/inertia/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/inertia/constant.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/inertia/context.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/inertia/inertia.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/inertia/middleware.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/inertia/props/props.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/inertia/provider.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/jsonapi/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/jsonapi/response.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/loader/Loader.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/loader/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/ChannelFactory.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/channels/BaseChannel.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/channels/DailyChannel.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/channels/MultiBaseChannel.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/channels/SingleChannel.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/channels/SlackChannel.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/channels/StackChannel.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/channels/SyslogChannel.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/channels/TerminalChannel.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/channels/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/config/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/config/channels.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/config/logging.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/drivers/BaseDriver.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/drivers/LogSingleDriver.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/drivers/LogSlackDriver.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/drivers/LogSyslogDriver.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/drivers/LogTerminalDriver.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/drivers/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/factory.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/file.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/handler.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/listeners.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/logger.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/managers/LoggingManager.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/managers/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/providers/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/logging/providers/log_provider.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/collection/Collection.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/collection/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/DBMigrateCommand.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/DBSeedCommand.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/MakeMigrationCommand.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/MakeModelCommand.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/MakeModelDocstringCommand.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/MakeObserverCommand.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/MakeSeedCommand.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/MigrateFreshCommand.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/MigrateRefreshCommand.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/MigrateResetCommand.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/MigrateRollbackCommand.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/MigrateStatusCommand.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/ShellCommand.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/stubs/create_migration.stub +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/stubs/create_seed.stub +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/stubs/model.stub +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/stubs/observer.stub +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/commands/stubs/table_migration.stub +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/config/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/config/config.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/config/database.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/connections/factory.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/connections/manager.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/connections/mysql_connection.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/connections/sqlite_connection.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/exceptions.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/expressions/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/expressions/expressions.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/facades/DB.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/facades/Schema.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/facades/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/factory/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/factory/factory.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/helpers/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/helpers/misc.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/migrations/Migration.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/migrations/Migrator.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/migrations/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/models/MigrationModel.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/models/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/models/attribute.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/models/builder.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/models/caster.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/models/fields.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/models/model.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/models/observer.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/models/pivot.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/models/registry.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/models/relationship.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/observers/ObservesEvents.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/observers/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/pagination/BasePaginator.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/pagination/LengthAwarePaginator.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/pagination/SimplePaginator.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/pagination/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/providers/DatabaseProvider.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/providers/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/EagerLoadMixin.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/EagerRelation.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/grammars/BaseGrammar.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/grammars/MSSQLGrammar.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/grammars/MySQLGrammar.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/grammars/PostgresGrammar.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/grammars/SQLiteGrammar.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/grammars/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/processors/MSSQLPostProcessor.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/processors/MySQLPostProcessor.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/processors/PostgresPostProcessor.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/processors/SQLitePostProcessor.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/processors/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/query/support.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/relationships/BaseRelationship.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/relationships/BelongsTo.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/relationships/BelongsToMany.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/relationships/HasMany.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/relationships/HasManyThrough.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/relationships/HasOne.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/relationships/HasOneThrough.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/relationships/MorphMany.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/relationships/MorphOne.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/relationships/MorphTo.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/relationships/MorphToMany.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/relationships/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/Column.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/ColumnDiff.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/Constraint.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/ForeignKeyConstraint.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/Index.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/Table.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/TableDiff.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/platforms/MSSQLPlatform.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/platforms/MySQLPlatform.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/platforms/Platform.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/platforms/PostgresPlatform.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/platforms/SQLitePlatform.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/platforms/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/schema/schema.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/seeders/Seeder.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/seeders/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/stubs/create-migration.html +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/stubs/table-migration.html +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/masoniteorm/testing/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/mcp/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/mcp/argument.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/mcp/prompt.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/mcp/protocol.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/mcp/providers/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/mcp/providers/mcp_provider.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/mcp/request.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/mcp/resource.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/mcp/response.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/mcp/server.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/mcp/tool.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/process/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/process/exception.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/process/fake.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/process/process.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/process/result.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/py.typed +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/skills/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/skills/adapters/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/skills/adapters/base.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/skills/adapters/claude.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/skills/adapters/gemini.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/skills/commands/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/skills/commands/skills.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/skills/parser.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/skills/provider.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/skills/registry.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/skills/stubs/.ai/fastapi-startkit/database/SKILL.md +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/skills/stubs/.ai/fastapi-startkit/fastapi/SKILL.md +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/skills/stubs/.ai/fastapi-startkit/inertia/SKILL.md +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/storage/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/storage/config/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/storage/data/mime.types +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/storage/drivers/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/storage/drivers/fake.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/storage/drivers/local.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/storage/drivers/s3.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/storage/file.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/storage/filestream.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/storage/helper.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/storage/providers/provider.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/storage/storage.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/support/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/support/collection.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/support/dataclass.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/support/providers/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/support/providers/provider.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/support/string.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/support/structures.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/support/uri.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/testing/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/testing/test_case.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/vite/__init__.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/vite/config/vite.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/vite/exceptions.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/vite/providers/provider.py +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/vite/stubs/package.json +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/vite/stubs/resources/css/app.css +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/vite/stubs/resources/js/app.ts +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/vite/stubs/resources/templates/index.html +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/vite/stubs/tsconfig.json +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/vite/stubs/vite.config.ts +0 -0
- {fastapi_startkit-0.54.0 → fastapi_startkit-0.56.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.56.0
|
|
4
4
|
Summary: A modular, provider-driven framework for building async Python web applications with FastAPI — bundling a service container, configuration system, an async-first ORM, facades, and a Cleo-powered console.
|
|
5
5
|
Keywords: fastapi,framework,async,web,asgi,orm,sqlalchemy,pydantic,ioc-container,dependency-injection,service-provider,cli,console,configuration,microservices,starter-kit,boilerplate
|
|
6
6
|
Author: Bedram Tamang
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "fastapi-startkit"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.56.0"
|
|
4
4
|
description = "A modular, provider-driven framework for building async Python web applications with FastAPI — bundling a service container, configuration system, an async-first ORM, facades, and a Cleo-powered console."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
keywords = [
|
|
@@ -7,5 +7,5 @@ from fastapi_startkit.environment.environment import env
|
|
|
7
7
|
class AppConfig:
|
|
8
8
|
name: str = field(default_factory=lambda: os.getenv("APP_NAME", "FastAPI starter kit"))
|
|
9
9
|
env: str = field(default_factory=lambda: os.getenv("APP_ENV", "development"))
|
|
10
|
-
debug: bool = field(default_factory=lambda: env("APP_DEBUG",
|
|
10
|
+
debug: bool = field(default_factory=lambda: env("APP_DEBUG", True))
|
|
11
11
|
timezone: str = field(default_factory=lambda: os.getenv("APP_TIMEZONE", "UTC"))
|
{fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/environment/environment.py
RENAMED
|
@@ -2,9 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
import os
|
|
4
4
|
import sys
|
|
5
|
+
from typing import Any, Literal, TypeVar, overload
|
|
6
|
+
|
|
5
7
|
from dotenv import load_dotenv
|
|
6
8
|
|
|
7
9
|
|
|
10
|
+
T = TypeVar("T")
|
|
11
|
+
EnvValue = str | int | bool
|
|
12
|
+
|
|
13
|
+
|
|
8
14
|
class Environment:
|
|
9
15
|
@staticmethod
|
|
10
16
|
def resolve_environment(base_path=None, env: str | None = None):
|
|
@@ -63,11 +69,45 @@ class Environment:
|
|
|
63
69
|
break
|
|
64
70
|
|
|
65
71
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
72
|
+
@overload
|
|
73
|
+
def env(val: str, default: T, cast: Literal[False]) -> str | T: ...
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
@overload
|
|
77
|
+
def env(val: str, default: Literal[""], cast: Literal[True] = True) -> EnvValue: ...
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
@overload
|
|
81
|
+
def env(val: str, default: None, cast: Literal[True] = True) -> EnvValue | None: ...
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
@overload
|
|
85
|
+
def env(val: str, default: T, cast: Literal[True] = True) -> T: ...
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
@overload
|
|
89
|
+
def env(val: str, default: None, cast: bool) -> EnvValue | None: ...
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
@overload
|
|
93
|
+
def env(val: str, default: T, cast: bool) -> EnvValue | T: ...
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
@overload
|
|
97
|
+
def env(val: str) -> EnvValue: ...
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
@overload
|
|
101
|
+
def env(val: str, *, cast: Literal[False]) -> str: ...
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
@overload
|
|
105
|
+
def env(val: str, *, cast: bool) -> EnvValue: ...
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def env(val: str, default: Any = "", cast: bool = True) -> Any:
|
|
109
|
+
"""Return an environment value, casting it to the supplied default's type when possible."""
|
|
110
|
+
env_var = os.getenv(val, default)
|
|
71
111
|
|
|
72
112
|
if not cast:
|
|
73
113
|
return env_var
|
|
@@ -75,18 +115,23 @@ def env(value, default="", cast=True):
|
|
|
75
115
|
if env_var == "":
|
|
76
116
|
env_var = default
|
|
77
117
|
|
|
78
|
-
if
|
|
79
|
-
return env_var
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
118
|
+
if default in ("", None):
|
|
119
|
+
return value(env_var)
|
|
120
|
+
|
|
121
|
+
default_type = type(default)
|
|
122
|
+
if default_type is bool:
|
|
123
|
+
if isinstance(env_var, bool):
|
|
124
|
+
return env_var
|
|
125
|
+
if env_var in ("true", "True"):
|
|
126
|
+
return True
|
|
127
|
+
if env_var in ("false", "False"):
|
|
128
|
+
return False
|
|
129
|
+
raise ValueError(f"Cannot cast environment variable {val!r} to bool")
|
|
130
|
+
|
|
131
|
+
try:
|
|
132
|
+
return default_type(env_var)
|
|
133
|
+
except (TypeError, ValueError) as error:
|
|
134
|
+
raise ValueError(f"Cannot cast environment variable {val!r} to {default_type.__name__}") from error
|
|
90
135
|
|
|
91
136
|
|
|
92
137
|
def value(env_var, default=""):
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from contextvars import ContextVar, Token
|
|
4
|
+
from types import TracebackType
|
|
5
|
+
from typing import TYPE_CHECKING
|
|
6
|
+
|
|
7
|
+
from sqlalchemy import text
|
|
8
|
+
from sqlalchemy.ext.asyncio import AsyncConnection, AsyncEngine, AsyncTransaction
|
|
9
|
+
|
|
10
|
+
from fastapi_startkit.masoniteorm.models.builder import QueryBuilder
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from typing import Self
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class Transaction:
|
|
17
|
+
def __init__(self, owner: Connection):
|
|
18
|
+
self.owner = owner
|
|
19
|
+
self.connection: AsyncConnection | None = None
|
|
20
|
+
self.transaction: AsyncTransaction | None = None
|
|
21
|
+
self._token: Token[AsyncConnection | None] | None = None
|
|
22
|
+
self._owns_connection = False
|
|
23
|
+
|
|
24
|
+
async def __aenter__(self) -> Self:
|
|
25
|
+
connection = self.owner.connection
|
|
26
|
+
if connection is None:
|
|
27
|
+
connection = await self.owner.engine.connect()
|
|
28
|
+
self._owns_connection = True
|
|
29
|
+
self.connection = connection
|
|
30
|
+
self._token = self.owner._connection_context.set(connection)
|
|
31
|
+
|
|
32
|
+
try:
|
|
33
|
+
if connection.in_transaction():
|
|
34
|
+
self.transaction = await connection.begin_nested()
|
|
35
|
+
else:
|
|
36
|
+
self.transaction = await connection.begin()
|
|
37
|
+
except BaseException:
|
|
38
|
+
self.owner._connection_context.reset(self._token)
|
|
39
|
+
if self._owns_connection:
|
|
40
|
+
await connection.close()
|
|
41
|
+
raise
|
|
42
|
+
return self
|
|
43
|
+
|
|
44
|
+
async def __aexit__(
|
|
45
|
+
self,
|
|
46
|
+
exc_type: type[BaseException] | None,
|
|
47
|
+
exc_value: BaseException | None,
|
|
48
|
+
traceback: TracebackType | None,
|
|
49
|
+
) -> None:
|
|
50
|
+
assert self.connection is not None
|
|
51
|
+
assert self.transaction is not None
|
|
52
|
+
assert self._token is not None
|
|
53
|
+
try:
|
|
54
|
+
await self.transaction.__aexit__(exc_type, exc_value, traceback)
|
|
55
|
+
finally:
|
|
56
|
+
self.owner._connection_context.reset(self._token)
|
|
57
|
+
if self._owns_connection:
|
|
58
|
+
await self.connection.close()
|
|
59
|
+
|
|
60
|
+
async def commit(self) -> None:
|
|
61
|
+
assert self.transaction is not None
|
|
62
|
+
await self.transaction.commit()
|
|
63
|
+
|
|
64
|
+
async def rollback(self) -> None:
|
|
65
|
+
assert self.transaction is not None
|
|
66
|
+
await self.transaction.rollback()
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class Connection:
|
|
70
|
+
def __init__(self, engine: AsyncEngine, config: dict):
|
|
71
|
+
self.config = config
|
|
72
|
+
self.engine: AsyncEngine = engine
|
|
73
|
+
self._connection_context: ContextVar[AsyncConnection | None] = ContextVar(
|
|
74
|
+
f"masoniteorm_connection_{id(self)}", default=None
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
@property
|
|
78
|
+
def connection(self) -> AsyncConnection | None:
|
|
79
|
+
return self._connection_context.get()
|
|
80
|
+
|
|
81
|
+
@property
|
|
82
|
+
def transactions(self) -> list[AsyncTransaction]:
|
|
83
|
+
connection = self.connection
|
|
84
|
+
if connection is None:
|
|
85
|
+
return []
|
|
86
|
+
nested = connection.get_nested_transaction()
|
|
87
|
+
root = connection.get_transaction()
|
|
88
|
+
return [transaction for transaction in (root, nested) if transaction is not None]
|
|
89
|
+
|
|
90
|
+
def transaction(self) -> Transaction:
|
|
91
|
+
return Transaction(self)
|
|
92
|
+
|
|
93
|
+
def query(self) -> QueryBuilder:
|
|
94
|
+
return QueryBuilder(
|
|
95
|
+
connection=self,
|
|
96
|
+
grammar=self.get_query_grammar(),
|
|
97
|
+
processor=self.get_post_processor(),
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
async def get_connection(self) -> AsyncConnection:
|
|
101
|
+
return self.connection or await self.engine.connect()
|
|
102
|
+
|
|
103
|
+
def get_query_grammar(cls):
|
|
104
|
+
pass
|
|
105
|
+
|
|
106
|
+
def get_post_processor(self):
|
|
107
|
+
pass
|
|
108
|
+
|
|
109
|
+
async def begin_transaction(self) -> None:
|
|
110
|
+
connection = self.connection
|
|
111
|
+
if connection is None:
|
|
112
|
+
connection = await self.engine.connect()
|
|
113
|
+
self._connection_context.set(connection)
|
|
114
|
+
if connection.in_transaction():
|
|
115
|
+
await connection.begin_nested()
|
|
116
|
+
else:
|
|
117
|
+
await connection.begin()
|
|
118
|
+
|
|
119
|
+
async def commit_transaction(self) -> None:
|
|
120
|
+
connection = self.connection
|
|
121
|
+
if connection is None or not connection.in_transaction():
|
|
122
|
+
raise RuntimeError("No active transaction to commit")
|
|
123
|
+
nested = connection.get_nested_transaction()
|
|
124
|
+
if nested is not None:
|
|
125
|
+
await nested.commit()
|
|
126
|
+
else:
|
|
127
|
+
transaction = connection.get_transaction()
|
|
128
|
+
assert transaction is not None
|
|
129
|
+
await transaction.commit()
|
|
130
|
+
await self._release_connection(connection)
|
|
131
|
+
|
|
132
|
+
async def rollback(self) -> None:
|
|
133
|
+
connection = self.connection
|
|
134
|
+
if connection is None or not connection.in_transaction():
|
|
135
|
+
raise RuntimeError("No active transaction to rollback")
|
|
136
|
+
nested = connection.get_nested_transaction()
|
|
137
|
+
if nested is not None:
|
|
138
|
+
await nested.rollback()
|
|
139
|
+
else:
|
|
140
|
+
transaction = connection.get_transaction()
|
|
141
|
+
assert transaction is not None
|
|
142
|
+
await transaction.rollback()
|
|
143
|
+
await self._release_connection(connection)
|
|
144
|
+
|
|
145
|
+
async def _release_connection(self, connection: AsyncConnection) -> None:
|
|
146
|
+
await connection.close()
|
|
147
|
+
if self.connection is connection:
|
|
148
|
+
self._connection_context.set(None)
|
|
149
|
+
|
|
150
|
+
async def close(self) -> None:
|
|
151
|
+
connection = self.connection
|
|
152
|
+
if connection is not None:
|
|
153
|
+
await connection.close()
|
|
154
|
+
self._connection_context.set(None)
|
|
155
|
+
|
|
156
|
+
async def reconnect(self) -> None:
|
|
157
|
+
await self.close()
|
|
158
|
+
|
|
159
|
+
@staticmethod
|
|
160
|
+
def sql_alchemy_bindings(query: str, bindings: list | None = None):
|
|
161
|
+
params = {}
|
|
162
|
+
if bindings:
|
|
163
|
+
for i, val in enumerate(bindings):
|
|
164
|
+
name = f"p{i}"
|
|
165
|
+
params[name] = val
|
|
166
|
+
query = query.replace("?", f":{name}", 1)
|
|
167
|
+
return (query, params)
|
|
168
|
+
|
|
169
|
+
async def run(self, query: str, bindings: list | None = None):
|
|
170
|
+
query, params = self.sql_alchemy_bindings(query, bindings)
|
|
171
|
+
return await self._execute(query, params)
|
|
172
|
+
|
|
173
|
+
async def execute(self, query: str, bindings: list | None = None):
|
|
174
|
+
query, params = self.sql_alchemy_bindings(query, bindings)
|
|
175
|
+
return await self._execute(query, params)
|
|
176
|
+
|
|
177
|
+
async def _execute(self, query: str, bindings: dict):
|
|
178
|
+
connection = self.connection
|
|
179
|
+
if connection is not None:
|
|
180
|
+
return await connection.execute(text(query), bindings or {})
|
|
181
|
+
async with self.engine.begin() as operation_connection:
|
|
182
|
+
return await operation_connection.execute(text(query), bindings or {})
|
|
183
|
+
|
|
184
|
+
async def insert(self, query: str, bindings: list | None = None) -> int | None:
|
|
185
|
+
result = await self.execute(query, bindings)
|
|
186
|
+
return getattr(result, "lastrowid", None)
|
|
187
|
+
|
|
188
|
+
async def insert_get_id(self, query: str, bindings: list | None = None) -> int | None:
|
|
189
|
+
result = await self.execute(query, bindings)
|
|
190
|
+
return getattr(result, "lastrowid", None)
|
|
191
|
+
|
|
192
|
+
async def update(self, query: str, bindings: list | None = None) -> int:
|
|
193
|
+
result = await self.execute(query, bindings)
|
|
194
|
+
return result.rowcount # type: ignore[return-value]
|
|
195
|
+
|
|
196
|
+
async def delete(self, query: str, bindings: list | None = None) -> int:
|
|
197
|
+
result = await self.execute(query, bindings)
|
|
198
|
+
return result.rowcount # type: ignore[return-value]
|
|
199
|
+
|
|
200
|
+
async def select(self, query: str, bindings: list | None = None) -> list[dict]:
|
|
201
|
+
result = await self.run(query, bindings)
|
|
202
|
+
return result.mappings().all()
|
|
203
|
+
|
|
204
|
+
async def select_one(self, query: str, bindings: list | None = None) -> dict | None:
|
|
205
|
+
result = await self.run(query, bindings)
|
|
206
|
+
row = result.fetchone()
|
|
207
|
+
return dict(zip(result.keys(), row)) if row else None
|
|
208
|
+
|
|
209
|
+
async def statement(self, query: str, bindings: list | None = None) -> bool:
|
|
210
|
+
query, params = self.sql_alchemy_bindings(query, bindings)
|
|
211
|
+
await self._execute(query, params)
|
|
212
|
+
return True
|
|
@@ -10,9 +10,6 @@ class PostgresConnection(Connection):
|
|
|
10
10
|
async def insert_get_id(self, query: str, bindings: list | None = None) -> int | None:
|
|
11
11
|
result = await self.run(query, bindings)
|
|
12
12
|
row = result.fetchone()
|
|
13
|
-
if not self.transactions:
|
|
14
|
-
conn = await self.get_connection()
|
|
15
|
-
await conn.commit()
|
|
16
13
|
return row[0] if row is not None else None
|
|
17
14
|
|
|
18
15
|
@classmethod
|
|
@@ -736,8 +736,9 @@ class Blueprint:
|
|
|
736
736
|
|
|
737
737
|
sql = await self.to_sql()
|
|
738
738
|
if isinstance(sql, list):
|
|
739
|
-
|
|
740
|
-
|
|
739
|
+
async with self.connection.transaction():
|
|
740
|
+
for q in sql:
|
|
741
|
+
await self.connection.statement(q, ())
|
|
741
742
|
return
|
|
742
743
|
return await self.connection.statement(sql, ())
|
|
743
744
|
|
|
@@ -3,10 +3,12 @@ class DatabaseTransaction:
|
|
|
3
3
|
from fastapi_startkit.masoniteorm.models import Model
|
|
4
4
|
|
|
5
5
|
self.connection = Model.db_manager.connection(None)
|
|
6
|
-
|
|
6
|
+
self.transaction = self.connection.transaction()
|
|
7
|
+
await self.transaction.__aenter__()
|
|
7
8
|
|
|
8
9
|
async def asyncStopTestRun(self):
|
|
9
|
-
await self.
|
|
10
|
+
await self.transaction.rollback()
|
|
11
|
+
await self.transaction.__aexit__(None, None, None)
|
|
10
12
|
|
|
11
13
|
|
|
12
14
|
class RefreshDatabase(DatabaseTransaction):
|
{fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/storage/config/storage.py
RENAMED
|
@@ -19,12 +19,12 @@ class StorageConfig:
|
|
|
19
19
|
url=env("FILESYSTEM_PUBLIC_DISK_URL", "/storage"),
|
|
20
20
|
),
|
|
21
21
|
"s3": S3Config(
|
|
22
|
-
key=env("AWS_ACCESS_KEY_ID"),
|
|
23
|
-
secret=env("AWS_SECRET_ACCESS_KEY"),
|
|
24
|
-
region=env("AWS_DEFAULT_REGION"),
|
|
25
|
-
bucket=env("AWS_BUCKET"),
|
|
26
|
-
url=env("AWS_URL"),
|
|
27
|
-
endpoint=env("AWS_ENDPOINT"),
|
|
22
|
+
key=env("AWS_ACCESS_KEY_ID", "", cast=False),
|
|
23
|
+
secret=env("AWS_SECRET_ACCESS_KEY", "", cast=False),
|
|
24
|
+
region=env("AWS_DEFAULT_REGION", "", cast=False),
|
|
25
|
+
bucket=env("AWS_BUCKET", "", cast=False),
|
|
26
|
+
url=env("AWS_URL", "", cast=False),
|
|
27
|
+
endpoint=env("AWS_ENDPOINT", "", cast=False),
|
|
28
28
|
),
|
|
29
29
|
}
|
|
30
30
|
)
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
from typing import List
|
|
2
|
-
|
|
3
|
-
from sqlalchemy import text
|
|
4
|
-
from sqlalchemy.ext.asyncio import AsyncConnection, AsyncEngine, AsyncTransaction
|
|
5
|
-
|
|
6
|
-
from fastapi_startkit.masoniteorm.models.builder import QueryBuilder
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class Connection:
|
|
10
|
-
def __init__(self, engine: AsyncEngine, config: dict):
|
|
11
|
-
self.config = config
|
|
12
|
-
self.engine: AsyncEngine = engine
|
|
13
|
-
self.connection: AsyncConnection | None = None
|
|
14
|
-
self.transactions: List[AsyncTransaction] = []
|
|
15
|
-
|
|
16
|
-
def query(self) -> "QueryBuilder":
|
|
17
|
-
return QueryBuilder(
|
|
18
|
-
connection=self,
|
|
19
|
-
grammar=self.get_query_grammar(),
|
|
20
|
-
processor=self.get_post_processor(),
|
|
21
|
-
)
|
|
22
|
-
|
|
23
|
-
async def get_connection(self) -> AsyncConnection:
|
|
24
|
-
if self.connection is None:
|
|
25
|
-
self.connection = await self.engine.connect()
|
|
26
|
-
|
|
27
|
-
assert self.connection is not None
|
|
28
|
-
return self.connection
|
|
29
|
-
|
|
30
|
-
def get_query_grammar(cls):
|
|
31
|
-
pass
|
|
32
|
-
|
|
33
|
-
def get_post_processor(self):
|
|
34
|
-
pass
|
|
35
|
-
|
|
36
|
-
async def begin_transaction(self) -> None:
|
|
37
|
-
connection = await self.get_connection()
|
|
38
|
-
|
|
39
|
-
if not self.transactions:
|
|
40
|
-
transaction = await connection.begin()
|
|
41
|
-
else:
|
|
42
|
-
transaction = await connection.begin_nested()
|
|
43
|
-
|
|
44
|
-
self.transactions.append(transaction)
|
|
45
|
-
|
|
46
|
-
async def commit_transaction(self) -> None:
|
|
47
|
-
if not self.transactions:
|
|
48
|
-
raise RuntimeError("No active transaction to commit")
|
|
49
|
-
|
|
50
|
-
transaction = self.transactions.pop()
|
|
51
|
-
await transaction.commit()
|
|
52
|
-
|
|
53
|
-
await self._maybe_cleanup()
|
|
54
|
-
|
|
55
|
-
async def rollback(self) -> None:
|
|
56
|
-
if not self.transactions:
|
|
57
|
-
raise RuntimeError("No active transaction to rollback")
|
|
58
|
-
|
|
59
|
-
transaction = self.transactions.pop()
|
|
60
|
-
await transaction.rollback()
|
|
61
|
-
|
|
62
|
-
await self._maybe_cleanup()
|
|
63
|
-
|
|
64
|
-
async def close(self) -> None:
|
|
65
|
-
if self.connection is not None:
|
|
66
|
-
await self.connection.close()
|
|
67
|
-
self.connection = None
|
|
68
|
-
self.transactions = []
|
|
69
|
-
|
|
70
|
-
async def reconnect(self) -> None:
|
|
71
|
-
await self.close()
|
|
72
|
-
|
|
73
|
-
@staticmethod
|
|
74
|
-
def sql_alchemy_bindings(query: str, bindings: list | None = None):
|
|
75
|
-
params = {}
|
|
76
|
-
if bindings:
|
|
77
|
-
for i, val in enumerate(bindings):
|
|
78
|
-
name = f"p{i}"
|
|
79
|
-
params[name] = val
|
|
80
|
-
query = query.replace("?", f":{name}", 1)
|
|
81
|
-
return (query, params)
|
|
82
|
-
|
|
83
|
-
async def run(self, query: str, bindings: list | None = None):
|
|
84
|
-
query, bindings = self.sql_alchemy_bindings(query, bindings)
|
|
85
|
-
|
|
86
|
-
conn = await self.get_connection()
|
|
87
|
-
result = await conn.execute(text(query), bindings or {})
|
|
88
|
-
|
|
89
|
-
if not self.transactions:
|
|
90
|
-
await conn.commit()
|
|
91
|
-
|
|
92
|
-
return result
|
|
93
|
-
|
|
94
|
-
async def execute(self, query: str, bindings: list | None = None):
|
|
95
|
-
query, bindings = self.sql_alchemy_bindings(query, bindings)
|
|
96
|
-
|
|
97
|
-
conn = await self.get_connection()
|
|
98
|
-
result = await conn.execute(text(query), bindings or {})
|
|
99
|
-
|
|
100
|
-
if not self.transactions:
|
|
101
|
-
await conn.commit()
|
|
102
|
-
|
|
103
|
-
return result
|
|
104
|
-
|
|
105
|
-
async def insert(self, query: str, bindings: list | None = None) -> int | None:
|
|
106
|
-
result = await self.execute(query, bindings)
|
|
107
|
-
|
|
108
|
-
return getattr(result, "lastrowid", None)
|
|
109
|
-
|
|
110
|
-
async def insert_get_id(self, query: str, bindings: list | None = None) -> int | None:
|
|
111
|
-
result = await self.execute(query, bindings)
|
|
112
|
-
return getattr(result, "lastrowid", None)
|
|
113
|
-
|
|
114
|
-
async def update(self, query: str, bindings: list | None = None) -> int:
|
|
115
|
-
result = await self.execute(query, bindings)
|
|
116
|
-
|
|
117
|
-
return result.rowcount # type: ignore[return-value]
|
|
118
|
-
|
|
119
|
-
async def delete(self, query: str, bindings: list | None = None) -> int:
|
|
120
|
-
result = await self.execute(query, bindings)
|
|
121
|
-
return result.rowcount # type: ignore[return-value]
|
|
122
|
-
|
|
123
|
-
async def select(self, query: str, bindings: list | None = None) -> list[dict]:
|
|
124
|
-
result = await self.run(query, bindings)
|
|
125
|
-
|
|
126
|
-
return result.mappings().all()
|
|
127
|
-
|
|
128
|
-
async def select_one(self, query: str, bindings: list | None = None) -> dict | None:
|
|
129
|
-
result = await self.run(query, bindings)
|
|
130
|
-
row = result.fetchone()
|
|
131
|
-
result_dict = dict(zip(result.keys(), row)) if row else None
|
|
132
|
-
if not self.transactions and self.connection is not None:
|
|
133
|
-
await self.connection.commit()
|
|
134
|
-
return result_dict
|
|
135
|
-
|
|
136
|
-
async def statement(self, query: str, bindings: list | None = None) -> bool:
|
|
137
|
-
query, bindings = self.sql_alchemy_bindings(query, bindings)
|
|
138
|
-
|
|
139
|
-
conn = await self.get_connection()
|
|
140
|
-
await conn.execute(text(query), bindings or {})
|
|
141
|
-
|
|
142
|
-
# Only commit if NOT inside a transaction
|
|
143
|
-
if not self.transactions:
|
|
144
|
-
await conn.commit()
|
|
145
|
-
|
|
146
|
-
return True
|
|
147
|
-
|
|
148
|
-
async def _maybe_cleanup(self):
|
|
149
|
-
if not self.transactions and self.connection:
|
|
150
|
-
await self.connection.close()
|
|
151
|
-
self.connection = None
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/audio_factory.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/config/config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/image_factory.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/providers/__init__.py
RENAMED
|
File without changes
|
{fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/ai/providers/ai_provider.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/__init__.py
RENAMED
|
File without changes
|
{fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/auth.py
RENAMED
|
File without changes
|
{fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/channels.py
RENAMED
|
File without changes
|
{fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/event.py
RENAMED
|
File without changes
|
{fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/helpers.py
RENAMED
|
File without changes
|
{fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/manager.py
RENAMED
|
File without changes
|
{fastapi_startkit-0.54.0 → fastapi_startkit-0.56.0}/src/fastapi_startkit/broadcasting/provider.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|