fastapi-startkit 0.53.0__tar.gz → 0.55.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.53.0 → fastapi_startkit-0.55.0}/PKG-INFO +1 -1
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/pyproject.toml +1 -1
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/commands/serve_command.py +34 -23
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/config/fastapi.py +1 -0
- fastapi_startkit-0.55.0/src/fastapi_startkit/masoniteorm/connections/connection.py +212 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/connections/postgres_connection.py +0 -3
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/Blueprint.py +3 -2
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/testing/transaction.py +4 -2
- fastapi_startkit-0.53.0/src/fastapi_startkit/masoniteorm/connections/connection.py +0 -151
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/README.md +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/.DS_Store +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/agent.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/ai.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/audio.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/audio_factory.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/config/ai.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/config/config.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/decorators.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/document.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/image.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/image_factory.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/judge.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/lab.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/pipeline.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/providers/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/providers/ai_provider.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/recording.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/runner.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/state.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/testing.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/tinker.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/types.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/application.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/auth.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/channels.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/config.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/drivers/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/drivers/log_driver.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/drivers/reverb_driver.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/event.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/helpers.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/manager.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/provider.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/reverb/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/reverb/channel_manager.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/reverb/connection.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/reverb/server.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/stubs/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/stubs/channels.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/carbon/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/carbon/carbon.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/config/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/config/app.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/configuration/Configuration.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/configuration/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/configuration/config.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/configuration/helpers.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/configuration/providers/ConfigurationProvider.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/configuration/providers/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/console/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/console/application.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/console/can_override_config.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/console/can_override_default_options.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/console/command.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/console/publish_command.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/container/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/container/container.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/environment/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/environment/environment.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/events/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/events/dispatcher.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/events/fake.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/events/helpers.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/events/listener.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/events/provider.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/exceptions/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/exceptions/exceptions.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/exceptions/handler.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/AI.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/AI.pyi +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Cache.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Config.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Config.pyi +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Dump.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Dump.pyi +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Event.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Event.pyi +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Facade.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Gate.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Gate.pyi +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Hash.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Hash.pyi +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Loader.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Loader.pyi +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Mail.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Mail.pyi +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Notification.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Notification.pyi +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Queue.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Queue.pyi +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/RateLimiter.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/RateLimiter.pyi +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Request.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Request.pyi +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Response.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Response.pyi +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Session.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Session.pyi +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Url.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Url.pyi +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/View.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/View.pyi +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Vite.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/Vite.pyi +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/facades/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/commands/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/config/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/events.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/exceptions.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/middleware.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/providers/fastapi_provider.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/requests/model.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/routers/router.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/testing/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/testing/assertable_json.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/testing/test_case.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/testing/test_response.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/foundation/app_provider.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/inertia/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/inertia/constant.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/inertia/context.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/inertia/inertia.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/inertia/middleware.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/inertia/props/props.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/inertia/provider.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/jsonapi/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/jsonapi/response.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/loader/Loader.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/loader/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/ChannelFactory.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/channels/BaseChannel.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/channels/DailyChannel.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/channels/MultiBaseChannel.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/channels/SingleChannel.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/channels/SlackChannel.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/channels/StackChannel.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/channels/SyslogChannel.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/channels/TerminalChannel.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/channels/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/config/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/config/channels.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/config/logging.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/drivers/BaseDriver.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/drivers/LogSingleDriver.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/drivers/LogSlackDriver.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/drivers/LogSyslogDriver.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/drivers/LogTerminalDriver.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/drivers/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/factory.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/file.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/handler.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/listeners.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/logger.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/managers/LoggingManager.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/managers/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/providers/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/logging/providers/log_provider.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/collection/Collection.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/collection/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/DBMigrateCommand.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/DBSeedCommand.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/MakeMigrationCommand.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/MakeModelCommand.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/MakeModelDocstringCommand.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/MakeObserverCommand.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/MakeSeedCommand.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/MigrateFreshCommand.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/MigrateRefreshCommand.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/MigrateResetCommand.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/MigrateRollbackCommand.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/MigrateStatusCommand.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/ShellCommand.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/stubs/create_migration.stub +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/stubs/create_seed.stub +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/stubs/model.stub +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/stubs/observer.stub +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/commands/stubs/table_migration.stub +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/config/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/config/config.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/config/database.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/connections/factory.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/connections/manager.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/connections/mysql_connection.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/connections/sqlite_connection.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/exceptions.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/expressions/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/expressions/expressions.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/facades/DB.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/facades/Schema.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/facades/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/factory/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/factory/factory.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/helpers/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/helpers/misc.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/migrations/Migration.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/migrations/Migrator.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/migrations/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/models/MigrationModel.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/models/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/models/attribute.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/models/builder.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/models/caster.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/models/fields.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/models/model.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/models/observer.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/models/pivot.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/models/registry.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/models/relationship.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/observers/ObservesEvents.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/observers/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/pagination/BasePaginator.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/pagination/LengthAwarePaginator.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/pagination/SimplePaginator.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/pagination/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/providers/DatabaseProvider.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/providers/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/EagerLoadMixin.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/EagerRelation.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/grammars/BaseGrammar.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/grammars/MSSQLGrammar.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/grammars/MySQLGrammar.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/grammars/PostgresGrammar.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/grammars/SQLiteGrammar.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/grammars/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/processors/MSSQLPostProcessor.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/processors/MySQLPostProcessor.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/processors/PostgresPostProcessor.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/processors/SQLitePostProcessor.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/processors/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/query/support.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/relationships/BaseRelationship.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/relationships/BelongsTo.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/relationships/BelongsToMany.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/relationships/HasMany.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/relationships/HasManyThrough.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/relationships/HasOne.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/relationships/HasOneThrough.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/relationships/MorphMany.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/relationships/MorphOne.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/relationships/MorphTo.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/relationships/MorphToMany.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/relationships/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/Column.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/ColumnDiff.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/Constraint.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/ForeignKeyConstraint.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/Index.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/Table.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/TableDiff.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/platforms/MSSQLPlatform.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/platforms/MySQLPlatform.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/platforms/Platform.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/platforms/PostgresPlatform.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/platforms/SQLitePlatform.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/platforms/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/schema/schema.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/seeders/Seeder.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/seeders/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/stubs/create-migration.html +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/stubs/table-migration.html +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/masoniteorm/testing/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/mcp/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/mcp/argument.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/mcp/prompt.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/mcp/protocol.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/mcp/providers/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/mcp/providers/mcp_provider.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/mcp/request.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/mcp/resource.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/mcp/response.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/mcp/server.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/mcp/tool.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/process/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/process/exception.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/process/fake.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/process/process.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/process/result.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/py.typed +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/skills/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/skills/adapters/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/skills/adapters/base.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/skills/adapters/claude.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/skills/adapters/gemini.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/skills/commands/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/skills/commands/skills.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/skills/parser.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/skills/provider.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/skills/registry.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/skills/stubs/.ai/fastapi-startkit/database/SKILL.md +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/skills/stubs/.ai/fastapi-startkit/fastapi/SKILL.md +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/skills/stubs/.ai/fastapi-startkit/inertia/SKILL.md +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/storage/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/storage/config/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/storage/config/storage.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/storage/data/mime.types +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/storage/drivers/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/storage/drivers/fake.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/storage/drivers/local.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/storage/drivers/s3.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/storage/file.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/storage/filestream.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/storage/helper.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/storage/providers/provider.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/storage/storage.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/support/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/support/collection.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/support/dataclass.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/support/providers/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/support/providers/provider.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/support/string.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/support/structures.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/support/uri.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/testing/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/testing/test_case.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/vite/__init__.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/vite/config/vite.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/vite/exceptions.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/vite/providers/provider.py +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/vite/stubs/package.json +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/vite/stubs/resources/css/app.css +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/vite/stubs/resources/js/app.ts +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/vite/stubs/resources/templates/index.html +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/vite/stubs/tsconfig.json +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/vite/stubs/vite.config.ts +0 -0
- {fastapi_startkit-0.53.0 → fastapi_startkit-0.55.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.55.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.55.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 = [
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
from typing import Any
|
|
2
|
+
|
|
1
3
|
from cleo.helpers import option
|
|
2
4
|
|
|
3
5
|
from fastapi_startkit import Config
|
|
4
6
|
from fastapi_startkit.console.command import Command
|
|
5
7
|
from fastapi_startkit.environment import value as cast_value
|
|
8
|
+
from fastapi_startkit.fastapi.config import FastAPIConfig
|
|
6
9
|
from fastapi_startkit.support import Uri, Uriable
|
|
7
10
|
|
|
8
11
|
|
|
@@ -36,18 +39,27 @@ class ServeCommand(Command):
|
|
|
36
39
|
"app",
|
|
37
40
|
"a",
|
|
38
41
|
flag=False,
|
|
39
|
-
default=
|
|
40
|
-
description="The application to serve",
|
|
42
|
+
default=None,
|
|
43
|
+
description="The application to serve (overrides fastapi config)",
|
|
41
44
|
),
|
|
42
45
|
]
|
|
43
46
|
|
|
44
|
-
def
|
|
45
|
-
|
|
47
|
+
def config_value(self, key: str) -> Any:
|
|
48
|
+
"""Resolve `fastapi.<key>`, falling back to the FastAPIConfig default."""
|
|
49
|
+
# Instantiated per call so env-backed fields are read at command time.
|
|
50
|
+
default = getattr(FastAPIConfig(), key, None)
|
|
51
|
+
# Configuration.get() only substitutes its default on a missing key, so a
|
|
52
|
+
# key that is present but None would otherwise leak through.
|
|
53
|
+
value = Config.get(f"fastapi.{key}", default)
|
|
46
54
|
|
|
47
|
-
return
|
|
55
|
+
return default if value is None else value
|
|
56
|
+
|
|
57
|
+
def resolve_option(self, key: str) -> Any:
|
|
58
|
+
"""CLI flag > fastapi config > FastAPIConfig default."""
|
|
59
|
+
return cast_value(self.option(key) or self.config_value(key))
|
|
48
60
|
|
|
49
61
|
def resolve_url(self) -> Uriable:
|
|
50
|
-
host = self.option("host") or
|
|
62
|
+
host = self.option("host") or self.config_value("app_url")
|
|
51
63
|
port = self.option("port")
|
|
52
64
|
|
|
53
65
|
if host and not host.startswith("http"):
|
|
@@ -60,15 +72,11 @@ class ServeCommand(Command):
|
|
|
60
72
|
def handle(self):
|
|
61
73
|
import uvicorn
|
|
62
74
|
|
|
63
|
-
from fastapi_startkit import Config
|
|
64
75
|
from fastapi_startkit.container import Container
|
|
65
76
|
|
|
66
|
-
# Resolve server settings: CLI flag > fastapi config > uvicorn default (None)
|
|
67
|
-
cfg_reload_dirs = Config.get("fastapi.reload_dirs") or None
|
|
68
|
-
cfg_reload_excludes = Config.get("fastapi.reload_excludes") or None
|
|
69
|
-
|
|
70
77
|
url = self.resolve_url()
|
|
71
|
-
reload = self.resolve_option("reload"
|
|
78
|
+
reload = self.resolve_option("reload")
|
|
79
|
+
app = self.resolve_option("app")
|
|
72
80
|
|
|
73
81
|
kwargs = {
|
|
74
82
|
"host": url.host(),
|
|
@@ -77,19 +85,24 @@ class ServeCommand(Command):
|
|
|
77
85
|
"ws": "websockets-sansio",
|
|
78
86
|
}
|
|
79
87
|
|
|
80
|
-
if self.is_app_exist():
|
|
88
|
+
if self.is_app_exist(app):
|
|
81
89
|
kwargs.update(
|
|
82
90
|
{
|
|
83
|
-
"app":
|
|
91
|
+
"app": app,
|
|
84
92
|
"factory": True,
|
|
85
93
|
}
|
|
86
94
|
)
|
|
87
|
-
if cfg_reload_dirs is not None and reload:
|
|
88
|
-
kwargs["reload_dirs"] = cfg_reload_dirs
|
|
89
|
-
if cfg_reload_excludes is not None and reload:
|
|
90
|
-
kwargs["reload_excludes"] = cfg_reload_excludes
|
|
91
95
|
|
|
92
|
-
|
|
96
|
+
if reload:
|
|
97
|
+
reload_dirs = self.config_value("reload_dirs")
|
|
98
|
+
reload_excludes = self.config_value("reload_excludes")
|
|
99
|
+
|
|
100
|
+
if reload_dirs:
|
|
101
|
+
kwargs["reload_dirs"] = reload_dirs
|
|
102
|
+
if reload_excludes:
|
|
103
|
+
kwargs["reload_excludes"] = reload_excludes
|
|
104
|
+
|
|
105
|
+
self.line(f"<info>Starting Uvicorn server on {url.host()}:{url.port()} [{app}]...</info>")
|
|
93
106
|
|
|
94
107
|
else:
|
|
95
108
|
self.line(f"<info>Starting Uvicorn server on {url.host()}:{url.port()}...</info>")
|
|
@@ -100,11 +113,9 @@ class ServeCommand(Command):
|
|
|
100
113
|
except KeyboardInterrupt:
|
|
101
114
|
self.line("<comment>Server stopped manually.</comment>")
|
|
102
115
|
|
|
103
|
-
def is_app_exist(self) -> "bool":
|
|
116
|
+
def is_app_exist(self, app: str) -> "bool":
|
|
104
117
|
import importlib.util
|
|
105
118
|
|
|
106
|
-
app = self.option("app")
|
|
107
|
-
|
|
108
119
|
module_name = app.split(":")[0]
|
|
109
120
|
try:
|
|
110
121
|
spec = importlib.util.find_spec(module_name)
|
|
@@ -113,6 +124,6 @@ class ServeCommand(Command):
|
|
|
113
124
|
except (ImportError, ValueError):
|
|
114
125
|
pass
|
|
115
126
|
|
|
116
|
-
self.line("<fg=yellow>Unable to detect the application, run the command with --app=
|
|
127
|
+
self.line(f"<fg=yellow>Unable to detect the application '{app}', run the command with --app=your_module:app</>")
|
|
117
128
|
|
|
118
129
|
return False
|
{fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/fastapi/config/fastapi.py
RENAMED
|
@@ -6,6 +6,7 @@ from fastapi_startkit.environment import env
|
|
|
6
6
|
@dataclasses.dataclass
|
|
7
7
|
class FastAPIConfig:
|
|
8
8
|
app_url: str = dataclasses.field(default_factory=lambda: env("APP_URL", "http://127.0.0.1:8000"))
|
|
9
|
+
app: str = "bootstrap.application:app"
|
|
9
10
|
reload: bool = dataclasses.field(default_factory=lambda: env("APP_RELOAD", True))
|
|
10
11
|
reload_dirs: list | None = None
|
|
11
12
|
reload_excludes: list = dataclasses.field(
|
|
@@ -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):
|
|
@@ -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.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/audio_factory.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/config/config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/image_factory.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/ai/providers/__init__.py
RENAMED
|
File without changes
|
{fastapi_startkit-0.53.0 → fastapi_startkit-0.55.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.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/__init__.py
RENAMED
|
File without changes
|
{fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/auth.py
RENAMED
|
File without changes
|
{fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/channels.py
RENAMED
|
File without changes
|
{fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/event.py
RENAMED
|
File without changes
|
{fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/helpers.py
RENAMED
|
File without changes
|
{fastapi_startkit-0.53.0 → fastapi_startkit-0.55.0}/src/fastapi_startkit/broadcasting/manager.py
RENAMED
|
File without changes
|
{fastapi_startkit-0.53.0 → fastapi_startkit-0.55.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
|
|
File without changes
|
|
File without changes
|