fastapi-startkit 0.58.0__tar.gz → 0.59.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.58.0 → fastapi_startkit-0.59.0}/PKG-INFO +1 -1
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/pyproject.toml +1 -1
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/models/builder.py +58 -56
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/models/model.py +62 -60
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/README.md +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/.DS_Store +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/ai/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/ai/agent.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/ai/ai.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/ai/audio.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/ai/audio_factory.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/ai/config/ai.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/ai/config/config.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/ai/decorators.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/ai/document.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/ai/image.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/ai/image_factory.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/ai/judge.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/ai/lab.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/ai/pipeline.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/ai/providers/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/ai/providers/ai_provider.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/ai/recording.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/ai/runner.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/ai/state.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/ai/testing.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/ai/tinker.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/ai/types.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/application.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/broadcasting/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/broadcasting/auth.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/broadcasting/channels.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/broadcasting/config.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/broadcasting/drivers/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/broadcasting/drivers/log_driver.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/broadcasting/drivers/reverb_driver.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/broadcasting/event.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/broadcasting/helpers.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/broadcasting/manager.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/broadcasting/provider.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/broadcasting/reverb/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/broadcasting/reverb/channel_manager.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/broadcasting/reverb/connection.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/broadcasting/reverb/server.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/broadcasting/stubs/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/broadcasting/stubs/channels.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/carbon/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/carbon/carbon.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/config/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/config/app.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/configuration/Configuration.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/configuration/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/configuration/config.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/configuration/helpers.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/configuration/providers/ConfigurationProvider.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/configuration/providers/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/console/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/console/application.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/console/can_override_config.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/console/can_override_default_options.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/console/command.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/console/publish_command.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/container/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/container/container.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/environment/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/environment/environment.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/events/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/events/dispatcher.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/events/fake.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/events/helpers.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/events/listener.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/events/provider.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/exceptions/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/exceptions/exceptions.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/exceptions/handler.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/AI.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/AI.pyi +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Cache.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Config.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Config.pyi +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Dump.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Dump.pyi +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Event.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Event.pyi +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Facade.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Gate.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Gate.pyi +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Hash.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Hash.pyi +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Loader.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Loader.pyi +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Mail.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Mail.pyi +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Notification.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Notification.pyi +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Queue.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Queue.pyi +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/RateLimiter.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/RateLimiter.pyi +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Request.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Request.pyi +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Response.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Response.pyi +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Session.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Session.pyi +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Url.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Url.pyi +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/View.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/View.pyi +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Vite.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/Vite.pyi +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/facades/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/fastapi/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/fastapi/commands/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/fastapi/commands/serve_command.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/fastapi/config/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/fastapi/config/fastapi.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/fastapi/events.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/fastapi/exceptions.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/fastapi/middleware.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/fastapi/providers/fastapi_provider.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/fastapi/requests/model.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/fastapi/routers/router.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/fastapi/testing/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/fastapi/testing/assertable_json.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/fastapi/testing/test_case.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/fastapi/testing/test_response.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/foundation/app_provider.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/inertia/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/inertia/constant.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/inertia/context.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/inertia/inertia.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/inertia/middleware.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/inertia/props/props.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/inertia/provider.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/jsonapi/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/jsonapi/response.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/loader/Loader.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/loader/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/ChannelFactory.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/channels/BaseChannel.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/channels/DailyChannel.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/channels/MultiBaseChannel.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/channels/SingleChannel.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/channels/SlackChannel.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/channels/StackChannel.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/channels/SyslogChannel.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/channels/TerminalChannel.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/channels/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/config/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/config/channels.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/config/logging.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/drivers/BaseDriver.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/drivers/LogSingleDriver.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/drivers/LogSlackDriver.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/drivers/LogSyslogDriver.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/drivers/LogTerminalDriver.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/drivers/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/factory.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/file.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/handler.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/listeners.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/logger.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/managers/LoggingManager.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/managers/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/providers/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/logging/providers/log_provider.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/collection/Collection.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/collection/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/commands/DBMigrateCommand.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/commands/DBSeedCommand.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/commands/MakeMigrationCommand.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/commands/MakeModelCommand.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/commands/MakeObserverCommand.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/commands/MakeSeedCommand.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/commands/MigrateFreshCommand.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/commands/MigrateRefreshCommand.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/commands/MigrateResetCommand.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/commands/MigrateRollbackCommand.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/commands/MigrateStatusCommand.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/commands/ShellCommand.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/commands/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/commands/stubs/create_migration.stub +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/commands/stubs/create_seed.stub +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/commands/stubs/model.stub +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/commands/stubs/observer.stub +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/commands/stubs/table_migration.stub +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/config/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/config/config.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/config/database.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/connections/connection.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/connections/factory.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/connections/manager.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/connections/mysql_connection.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/connections/postgres_connection.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/connections/sqlite_connection.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/exceptions.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/expressions/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/expressions/expressions.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/facades/DB.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/facades/Schema.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/facades/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/factory/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/factory/factory.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/helpers/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/helpers/misc.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/migrations/Migration.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/migrations/Migrator.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/migrations/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/models/MigrationModel.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/models/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/models/attribute.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/models/caster.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/models/fields.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/models/observer.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/models/pivot.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/models/registry.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/models/relationship.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/observers/ObservesEvents.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/observers/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/pagination/BasePaginator.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/pagination/LengthAwarePaginator.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/pagination/SimplePaginator.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/pagination/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/providers/DatabaseProvider.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/providers/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/query/EagerLoadMixin.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/query/EagerRelation.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/query/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/query/grammars/BaseGrammar.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/query/grammars/MSSQLGrammar.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/query/grammars/MySQLGrammar.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/query/grammars/PostgresGrammar.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/query/grammars/SQLiteGrammar.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/query/grammars/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/query/processors/MSSQLPostProcessor.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/query/processors/MySQLPostProcessor.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/query/processors/PostgresPostProcessor.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/query/processors/SQLitePostProcessor.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/query/processors/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/query/support.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/relationships/BaseRelationship.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/relationships/BelongsTo.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/relationships/BelongsToMany.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/relationships/HasMany.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/relationships/HasManyThrough.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/relationships/HasOne.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/relationships/HasOneThrough.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/relationships/MorphMany.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/relationships/MorphOne.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/relationships/MorphTo.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/relationships/MorphToMany.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/relationships/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/schema/Blueprint.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/schema/Column.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/schema/ColumnDiff.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/schema/Constraint.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/schema/ForeignKeyConstraint.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/schema/Index.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/schema/Table.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/schema/TableDiff.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/schema/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/schema/platforms/MSSQLPlatform.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/schema/platforms/MySQLPlatform.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/schema/platforms/Platform.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/schema/platforms/PostgresPlatform.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/schema/platforms/SQLitePlatform.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/schema/platforms/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/schema/schema.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/seeders/Seeder.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/seeders/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/stubs/create-migration.html +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/stubs/table-migration.html +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/testing/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/masoniteorm/testing/transaction.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/mcp/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/mcp/argument.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/mcp/prompt.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/mcp/protocol.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/mcp/providers/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/mcp/providers/mcp_provider.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/mcp/request.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/mcp/resource.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/mcp/response.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/mcp/server.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/mcp/tool.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/process/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/process/exception.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/process/fake.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/process/process.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/process/result.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/py.typed +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/skills/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/skills/adapters/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/skills/adapters/base.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/skills/adapters/claude.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/skills/adapters/gemini.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/skills/commands/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/skills/commands/skills.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/skills/parser.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/skills/provider.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/skills/registry.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/skills/stubs/.ai/fastapi-startkit/database/SKILL.md +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/skills/stubs/.ai/fastapi-startkit/fastapi/SKILL.md +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/skills/stubs/.ai/fastapi-startkit/inertia/SKILL.md +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/storage/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/storage/config/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/storage/config/storage.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/storage/data/mime.types +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/storage/drivers/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/storage/drivers/fake.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/storage/drivers/local.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/storage/drivers/s3.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/storage/file.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/storage/filestream.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/storage/helper.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/storage/providers/provider.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/storage/storage.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/support/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/support/collection.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/support/dataclass.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/support/providers/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/support/providers/provider.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/support/string.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/support/structures.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/support/uri.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/testing/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/testing/test_case.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/vite/__init__.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/vite/config/vite.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/vite/exceptions.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/vite/providers/provider.py +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/vite/stubs/package.json +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/vite/stubs/resources/css/app.css +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/vite/stubs/resources/js/app.ts +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/vite/stubs/resources/templates/index.html +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/vite/stubs/tsconfig.json +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.0}/src/fastapi_startkit/vite/stubs/vite.config.ts +0 -0
- {fastapi_startkit-0.58.0 → fastapi_startkit-0.59.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.59.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.59.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,5 +1,5 @@
|
|
|
1
1
|
import inspect
|
|
2
|
-
from collections.abc import Callable
|
|
2
|
+
from collections.abc import Callable, Iterable
|
|
3
3
|
from typing import TYPE_CHECKING, Any, Generic, Self, TypeVar, overload
|
|
4
4
|
|
|
5
5
|
from fastapi_startkit.masoniteorm.expressions.expressions import (
|
|
@@ -67,13 +67,13 @@ class QueryBuilder(EagerLoadMixin, SupportMixin, Generic[TModel]):
|
|
|
67
67
|
"!~~*",
|
|
68
68
|
]
|
|
69
69
|
|
|
70
|
-
def __init__(self, connection: "Connection", grammar, processor):
|
|
70
|
+
def __init__(self, connection: "Connection", grammar: Any, processor: Any):
|
|
71
71
|
super().__init__()
|
|
72
72
|
self.connection = connection
|
|
73
73
|
self.grammar = grammar
|
|
74
74
|
self.processor = processor
|
|
75
75
|
|
|
76
|
-
self._columns = []
|
|
76
|
+
self._columns: list[Any] = []
|
|
77
77
|
self._table = ""
|
|
78
78
|
self._limit = False
|
|
79
79
|
self._offset = False
|
|
@@ -91,35 +91,35 @@ class QueryBuilder(EagerLoadMixin, SupportMixin, Generic[TModel]):
|
|
|
91
91
|
self._global_scopes = {}
|
|
92
92
|
self._action = "select"
|
|
93
93
|
|
|
94
|
-
def set_action(self, action: str) -> "
|
|
94
|
+
def set_action(self, action: str) -> "Self":
|
|
95
95
|
self._action = action
|
|
96
96
|
return self
|
|
97
97
|
|
|
98
|
-
def set_model(self, model) -> "
|
|
98
|
+
def set_model(self, model: "TModel") -> "Self":
|
|
99
99
|
self._model = model
|
|
100
100
|
self._table = model.get_table_name()
|
|
101
101
|
self._global_scopes = model._global_scopes
|
|
102
102
|
return self
|
|
103
103
|
|
|
104
|
-
def with_(self, *eagers) -> "
|
|
104
|
+
def with_(self, *eagers) -> "Self":
|
|
105
105
|
self._eager_relation.register(eagers)
|
|
106
106
|
return self
|
|
107
107
|
|
|
108
108
|
def get_table_name(self) -> str:
|
|
109
109
|
return self._table
|
|
110
110
|
|
|
111
|
-
def table(self, table: str) -> "
|
|
111
|
+
def table(self, table: str) -> "Self":
|
|
112
112
|
self._table = table
|
|
113
113
|
return self
|
|
114
114
|
|
|
115
|
-
def where_in(self, column: str, values) -> "
|
|
115
|
+
def where_in(self, column: str, values: Iterable[Any]) -> "Self":
|
|
116
116
|
if hasattr(values, "_items"):
|
|
117
|
-
values = values
|
|
117
|
+
values = getattr(values, "_items")
|
|
118
118
|
values = list(values) if not isinstance(values, list) else values
|
|
119
119
|
self._wheres.append(QueryExpression(column, "IN", values))
|
|
120
120
|
return self
|
|
121
121
|
|
|
122
|
-
def select(self, *args) -> "
|
|
122
|
+
def select(self, *args: "str | list[str]") -> "Self":
|
|
123
123
|
for arg in args:
|
|
124
124
|
if isinstance(arg, list):
|
|
125
125
|
for column in arg:
|
|
@@ -129,14 +129,14 @@ class QueryBuilder(EagerLoadMixin, SupportMixin, Generic[TModel]):
|
|
|
129
129
|
self._columns += (SelectExpression(column),)
|
|
130
130
|
return self
|
|
131
131
|
|
|
132
|
-
def limit(self, limit: int) -> "
|
|
132
|
+
def limit(self, limit: int) -> "Self":
|
|
133
133
|
self._limit = limit
|
|
134
134
|
return self
|
|
135
135
|
|
|
136
|
-
async def find(self, primary_key: str | int, columns=None) -> "TModel | None":
|
|
136
|
+
async def find(self, primary_key: str | int, columns: "list[str] | str | None" = None) -> "TModel | None":
|
|
137
137
|
return await self.where(self._model.__primary_key__, primary_key).first(columns)
|
|
138
138
|
|
|
139
|
-
async def find_or_fail(self, primary_key: str | int, columns=None) -> "TModel":
|
|
139
|
+
async def find_or_fail(self, primary_key: str | int, columns: "list[str] | str | None" = None) -> "TModel":
|
|
140
140
|
"""Return the record matching ``primary_key``.
|
|
141
141
|
|
|
142
142
|
Raises:
|
|
@@ -149,7 +149,7 @@ class QueryBuilder(EagerLoadMixin, SupportMixin, Generic[TModel]):
|
|
|
149
149
|
raise ModelNotFoundException(f"{type(self._model).__name__} with primary key {primary_key!r} not found.")
|
|
150
150
|
return result
|
|
151
151
|
|
|
152
|
-
async def first_or_fail(self, columns=None) -> "TModel":
|
|
152
|
+
async def first_or_fail(self, columns: "list[str] | str | None" = None) -> "TModel":
|
|
153
153
|
from fastapi_startkit.masoniteorm.exceptions import ModelNotFoundException
|
|
154
154
|
|
|
155
155
|
result = await self.first(columns)
|
|
@@ -157,7 +157,7 @@ class QueryBuilder(EagerLoadMixin, SupportMixin, Generic[TModel]):
|
|
|
157
157
|
raise ModelNotFoundException(f"{type(self._model).__name__} not found.")
|
|
158
158
|
return result
|
|
159
159
|
|
|
160
|
-
async def first(self, columns=None) -> "TModel | None":
|
|
160
|
+
async def first(self, columns: "list[str] | str | None" = None) -> "TModel | None":
|
|
161
161
|
if not columns:
|
|
162
162
|
columns = []
|
|
163
163
|
|
|
@@ -170,7 +170,9 @@ class QueryBuilder(EagerLoadMixin, SupportMixin, Generic[TModel]):
|
|
|
170
170
|
columns = []
|
|
171
171
|
return await self.get_models(columns)
|
|
172
172
|
|
|
173
|
-
async def get_models(self, columns=None):
|
|
173
|
+
async def get_models(self, columns: "list[str] | str | None" = None) -> "Collection[TModel]":
|
|
174
|
+
if not columns:
|
|
175
|
+
columns = []
|
|
174
176
|
self.select(columns)
|
|
175
177
|
models = await self.connection.select(self.to_qmark(), list(self.get_bindings()))
|
|
176
178
|
collection = self._model.hydrate(models)
|
|
@@ -180,15 +182,15 @@ class QueryBuilder(EagerLoadMixin, SupportMixin, Generic[TModel]):
|
|
|
180
182
|
|
|
181
183
|
return collection
|
|
182
184
|
|
|
183
|
-
def get_bindings(self) -> tuple:
|
|
185
|
+
def get_bindings(self) -> tuple[Any, ...]:
|
|
184
186
|
return self._bindings
|
|
185
187
|
|
|
186
|
-
def run_scopes(self) -> "
|
|
188
|
+
def run_scopes(self) -> "Self":
|
|
187
189
|
for name, scope in self._global_scopes.get(self._action, {}).items():
|
|
188
190
|
scope(self)
|
|
189
191
|
return self
|
|
190
192
|
|
|
191
|
-
def without_global_scopes(self) -> "
|
|
193
|
+
def without_global_scopes(self) -> "Self":
|
|
192
194
|
self._global_scopes = {}
|
|
193
195
|
return self
|
|
194
196
|
|
|
@@ -218,11 +220,11 @@ class QueryBuilder(EagerLoadMixin, SupportMixin, Generic[TModel]):
|
|
|
218
220
|
self.run_scopes()
|
|
219
221
|
return self.get_grammar().compile(self._action).to_sql()
|
|
220
222
|
|
|
221
|
-
def offset(self, offset: int) -> "
|
|
223
|
+
def offset(self, offset: int) -> "Self":
|
|
222
224
|
self._offset = offset
|
|
223
225
|
return self
|
|
224
226
|
|
|
225
|
-
def order_by(self, column, direction: str = "asc") -> "
|
|
227
|
+
def order_by(self, column: "str | QueryBuilder[Any]", direction: str = "asc") -> "Self":
|
|
226
228
|
direction = direction.upper()
|
|
227
229
|
if isinstance(column, QueryBuilder):
|
|
228
230
|
self._order_by += (OrderByExpression(None, direction, builder=column),)
|
|
@@ -232,67 +234,67 @@ class QueryBuilder(EagerLoadMixin, SupportMixin, Generic[TModel]):
|
|
|
232
234
|
self._order_by += (OrderByExpression(col, direction),)
|
|
233
235
|
return self
|
|
234
236
|
|
|
235
|
-
def order_by_raw(self, expression: str) -> "
|
|
237
|
+
def order_by_raw(self, expression: str) -> "Self":
|
|
236
238
|
self._order_by += (OrderByExpression(expression, raw=True),)
|
|
237
239
|
return self
|
|
238
240
|
|
|
239
|
-
def latest(self, column: str = "created_at") -> "
|
|
241
|
+
def latest(self, column: str = "created_at") -> "Self":
|
|
240
242
|
return self.order_by(column, "desc")
|
|
241
243
|
|
|
242
|
-
def oldest(self, column: str = "created_at") -> "
|
|
244
|
+
def oldest(self, column: str = "created_at") -> "Self":
|
|
243
245
|
return self.order_by(column, "asc")
|
|
244
246
|
|
|
245
|
-
def group_by(self, column: str) -> "
|
|
247
|
+
def group_by(self, column: str) -> "Self":
|
|
246
248
|
for col in column.split(","):
|
|
247
249
|
col = col.strip()
|
|
248
250
|
self._group_by += (GroupByExpression(col),)
|
|
249
251
|
return self
|
|
250
252
|
|
|
251
|
-
def group_by_raw(self, expression: str) -> "
|
|
253
|
+
def group_by_raw(self, expression: str) -> "Self":
|
|
252
254
|
self._group_by += (GroupByExpression(expression, raw=True),)
|
|
253
255
|
return self
|
|
254
256
|
|
|
255
|
-
def having(self, column: str, equality: str, value) -> "
|
|
257
|
+
def having(self, column: str, equality: str, value: Any) -> "Self":
|
|
256
258
|
self._having += (HavingExpression(column, equality, value),)
|
|
257
259
|
return self
|
|
258
260
|
|
|
259
|
-
def where_null(self, column: str) -> "
|
|
261
|
+
def where_null(self, column: str) -> "Self":
|
|
260
262
|
self._wheres += (QueryExpression(column, "=", None, "NULL"),)
|
|
261
263
|
return self
|
|
262
264
|
|
|
263
|
-
def where_not_null(self, column: str) -> "
|
|
265
|
+
def where_not_null(self, column: str) -> "Self":
|
|
264
266
|
self._wheres += (QueryExpression(column, "=", None, "NOT NULL"),)
|
|
265
267
|
return self
|
|
266
268
|
|
|
267
|
-
def or_where_null(self, column: str) -> "
|
|
269
|
+
def or_where_null(self, column: str) -> "Self":
|
|
268
270
|
self._wheres += (QueryExpression(column, "=", None, "NULL", keyword="or"),)
|
|
269
271
|
return self
|
|
270
272
|
|
|
271
|
-
def or_where_not_null(self, column: str) -> "
|
|
273
|
+
def or_where_not_null(self, column: str) -> "Self":
|
|
272
274
|
self._wheres += (QueryExpression(column, "=", None, "NOT NULL", keyword="or"),)
|
|
273
275
|
return self
|
|
274
276
|
|
|
275
|
-
def where_not_in(self, column: str, values) -> "
|
|
277
|
+
def where_not_in(self, column: str, values: Iterable[Any]) -> "Self":
|
|
276
278
|
values = list(values) if not isinstance(values, list) else values
|
|
277
279
|
self._wheres.append(QueryExpression(column, "NOT IN", values))
|
|
278
280
|
return self
|
|
279
281
|
|
|
280
|
-
def between(self, column: str, low, high) -> "
|
|
282
|
+
def between(self, column: str, low: Any, high: Any) -> "Self":
|
|
281
283
|
self._wheres += (BetweenExpression(column, low, high, "BETWEEN"),)
|
|
282
284
|
return self
|
|
283
285
|
|
|
284
|
-
def not_between(self, column: str, low, high) -> "
|
|
286
|
+
def not_between(self, column: str, low: Any, high: Any) -> "Self":
|
|
285
287
|
self._wheres += (BetweenExpression(column, low, high, "NOT BETWEEN"),)
|
|
286
288
|
return self
|
|
287
289
|
|
|
288
|
-
def left_join(self, table: str, column1: str, equality: str, column2: str) -> "
|
|
290
|
+
def left_join(self, table: str, column1: str, equality: str, column2: str) -> "Self":
|
|
289
291
|
return self.join(table, column1, equality, column2, clause="left")
|
|
290
292
|
|
|
291
|
-
def right_join(self, table: str, column1: str, equality: str, column2: str) -> "
|
|
293
|
+
def right_join(self, table: str, column1: str, equality: str, column2: str) -> "Self":
|
|
292
294
|
# SQLite doesn't support RIGHT JOIN — use left join as fallback
|
|
293
295
|
return self.join(table, column1, equality, column2, clause="right")
|
|
294
296
|
|
|
295
|
-
def distinct(self) -> "
|
|
297
|
+
def distinct(self) -> "Self":
|
|
296
298
|
self._distinct = True
|
|
297
299
|
return self
|
|
298
300
|
|
|
@@ -322,27 +324,27 @@ class QueryBuilder(EagerLoadMixin, SupportMixin, Generic[TModel]):
|
|
|
322
324
|
async def avg(self, column: str):
|
|
323
325
|
return await self.aggregate("AVG", column)
|
|
324
326
|
|
|
325
|
-
async def delete(self, column=None, value=None):
|
|
327
|
+
async def delete(self, column: str | None = None, value: Any = None):
|
|
326
328
|
if column is not None:
|
|
327
329
|
self.where(column, value)
|
|
328
330
|
self.set_action("delete")
|
|
329
331
|
sql = self.to_qmark()
|
|
330
332
|
return await self.connection.delete(sql, list(self.get_bindings()))
|
|
331
333
|
|
|
332
|
-
async def create(self, attributes: dict):
|
|
334
|
+
async def create(self, attributes: dict[str, Any]) -> "TModel":
|
|
333
335
|
model = self._model.new_model_instance(attributes)
|
|
334
336
|
await model.save()
|
|
335
337
|
|
|
336
338
|
return model
|
|
337
339
|
|
|
338
|
-
async def first_or_create(self, search: dict, attributes: dict | None = None):
|
|
340
|
+
async def first_or_create(self, search: dict[str, Any], attributes: dict[str, Any] | None = None) -> "TModel":
|
|
339
341
|
instance = await self.where(search).first()
|
|
340
342
|
if instance is not None:
|
|
341
343
|
return instance
|
|
342
344
|
|
|
343
345
|
return await self.create({**(attributes or {}), **search})
|
|
344
346
|
|
|
345
|
-
async def update_or_create(self, search: dict, attributes: dict | None = None):
|
|
347
|
+
async def update_or_create(self, search: dict[str, Any], attributes: dict[str, Any] | None = None) -> "TModel":
|
|
346
348
|
instance = await self.where(search).first()
|
|
347
349
|
if instance is not None:
|
|
348
350
|
if attributes:
|
|
@@ -351,7 +353,7 @@ class QueryBuilder(EagerLoadMixin, SupportMixin, Generic[TModel]):
|
|
|
351
353
|
|
|
352
354
|
return await self.create({**(attributes or {}), **search})
|
|
353
355
|
|
|
354
|
-
async def insert(self, values: dict | list) -> int | None:
|
|
356
|
+
async def insert(self, values: dict[str, Any] | list[dict[str, Any]]) -> int | None:
|
|
355
357
|
self.set_action("bulk_create")
|
|
356
358
|
|
|
357
359
|
if not values:
|
|
@@ -379,7 +381,7 @@ class QueryBuilder(EagerLoadMixin, SupportMixin, Generic[TModel]):
|
|
|
379
381
|
|
|
380
382
|
return await self.connection.insert_get_id(sql, bindings)
|
|
381
383
|
|
|
382
|
-
async def update(self, values: dict) -> int:
|
|
384
|
+
async def update(self, values: dict[str, Any]) -> int:
|
|
383
385
|
updates = [UpdateQueryExpression(col, val) for col, val in values.items()]
|
|
384
386
|
grammar = self.grammar()
|
|
385
387
|
sql = grammar._compile_update(query=self, values=updates, qmark=True).to_sql()
|
|
@@ -492,7 +494,7 @@ class QueryBuilder(EagerLoadMixin, SupportMixin, Generic[TModel]):
|
|
|
492
494
|
# with .table(...) as usual.
|
|
493
495
|
return self.connection.query().table(self._table)
|
|
494
496
|
|
|
495
|
-
def invalid_operator(self, operator):
|
|
497
|
+
def invalid_operator(self, operator: Any) -> bool:
|
|
496
498
|
"""Determine whether an operator is not supported by the builder."""
|
|
497
499
|
return not isinstance(operator, str) or operator.lower() not in self.operators
|
|
498
500
|
|
|
@@ -538,20 +540,20 @@ class QueryBuilder(EagerLoadMixin, SupportMixin, Generic[TModel]):
|
|
|
538
540
|
self._wheres += ((QueryExpression(column, operator, value, "value")),)
|
|
539
541
|
return self
|
|
540
542
|
|
|
541
|
-
def or_where(self, column, *args) -> "
|
|
543
|
+
def or_where(self, column: str, *args: Any) -> "Self":
|
|
542
544
|
operator, value = self._extract_operator_value(*args)
|
|
543
545
|
self._wheres += ((QueryExpression(column, operator, value, "value", keyword="or")),)
|
|
544
546
|
return self
|
|
545
547
|
|
|
546
|
-
def where_raw(self, expression: str, bindings=()) -> "
|
|
548
|
+
def where_raw(self, expression: str, bindings: tuple[Any, ...] = ()) -> "Self":
|
|
547
549
|
self._wheres += (QueryExpression(expression, "=", None, raw=True, bindings=bindings),)
|
|
548
550
|
return self
|
|
549
551
|
|
|
550
|
-
def or_where_raw(self, expression: str, bindings=()) -> "
|
|
552
|
+
def or_where_raw(self, expression: str, bindings: tuple[Any, ...] = ()) -> "Self":
|
|
551
553
|
self._wheres += (QueryExpression(expression, "=", None, raw=True, keyword="or", bindings=bindings),)
|
|
552
554
|
return self
|
|
553
555
|
|
|
554
|
-
def join(self, table: str, column1: str, equality: str, column2: str, clause: str = "join") -> "
|
|
556
|
+
def join(self, table: str, column1: str, equality: str, column2: str, clause: str = "join") -> "Self":
|
|
555
557
|
join_clause = JoinClause(table, clause=clause)
|
|
556
558
|
join_clause.on(column1, equality, column2)
|
|
557
559
|
self._joins += (join_clause,)
|
|
@@ -574,32 +576,32 @@ class QueryBuilder(EagerLoadMixin, SupportMixin, Generic[TModel]):
|
|
|
574
576
|
)
|
|
575
577
|
return operator, column2
|
|
576
578
|
|
|
577
|
-
def where_column(self, column1: str, operator: str, column2: str | None = None) -> "
|
|
579
|
+
def where_column(self, column1: str, operator: str, column2: str | None = None) -> "Self":
|
|
578
580
|
"""Compare two columns (identifiers, never bound values), joined with AND."""
|
|
579
581
|
operator, column2 = self._normalize_where_column(operator, column2)
|
|
580
582
|
self._wheres += (QueryExpression(column1, operator, column2, "value_equals"),)
|
|
581
583
|
return self
|
|
582
584
|
|
|
583
|
-
def or_where_column(self, column1: str, operator: str, column2: str | None = None) -> "
|
|
585
|
+
def or_where_column(self, column1: str, operator: str, column2: str | None = None) -> "Self":
|
|
584
586
|
"""Compare two columns (identifiers, never bound values), joined with OR."""
|
|
585
587
|
operator, column2 = self._normalize_where_column(operator, column2)
|
|
586
588
|
self._wheres += (QueryExpression(column1, operator, column2, "value_equals", keyword="or"),)
|
|
587
589
|
return self
|
|
588
590
|
|
|
589
|
-
def when(self, condition, callback) -> "
|
|
591
|
+
def when(self, condition: Any, callback: Callable[["Self"], Any]) -> "Self":
|
|
590
592
|
if condition:
|
|
591
593
|
callback(self)
|
|
592
594
|
return self
|
|
593
595
|
|
|
594
|
-
def where_exists(self, builder: "QueryBuilder") -> "
|
|
596
|
+
def where_exists(self, builder: "QueryBuilder[Any]") -> "Self":
|
|
595
597
|
self._wheres += (QueryExpression(None, "EXISTS", SubSelectExpression(builder)),)
|
|
596
598
|
return self
|
|
597
599
|
|
|
598
|
-
def or_where_exists(self, builder: "QueryBuilder") -> "
|
|
600
|
+
def or_where_exists(self, builder: "QueryBuilder[Any]") -> "Self":
|
|
599
601
|
self._wheres += (QueryExpression(None, "EXISTS", SubSelectExpression(builder), keyword="or"),)
|
|
600
602
|
return self
|
|
601
603
|
|
|
602
|
-
def where_has(self, relation: str, callback=None) -> "
|
|
604
|
+
def where_has(self, relation: str, callback: Callable[..., Any] | None = None) -> "Self":
|
|
603
605
|
related = getattr(self._model.__class__, relation)
|
|
604
606
|
if callback:
|
|
605
607
|
related.query_where_exists(self, callback, method="where_exists")
|
|
@@ -607,7 +609,7 @@ class QueryBuilder(EagerLoadMixin, SupportMixin, Generic[TModel]):
|
|
|
607
609
|
related.query_has(self, method="where_exists")
|
|
608
610
|
return self
|
|
609
611
|
|
|
610
|
-
def or_where_has(self, relation: str, callback=None) -> "
|
|
612
|
+
def or_where_has(self, relation: str, callback: Callable[..., Any] | None = None) -> "Self":
|
|
611
613
|
related = getattr(self._model.__class__, relation)
|
|
612
614
|
if callback:
|
|
613
615
|
related.query_where_exists(self, callback, method="or_where_exists")
|
|
@@ -616,7 +618,7 @@ class QueryBuilder(EagerLoadMixin, SupportMixin, Generic[TModel]):
|
|
|
616
618
|
return self
|
|
617
619
|
|
|
618
620
|
@classmethod
|
|
619
|
-
def clean_bindings(cls, values):
|
|
621
|
+
def clean_bindings(cls, values: dict[str, Any] | list[dict[str, Any]]) -> list[Any]:
|
|
620
622
|
if isinstance(values, dict):
|
|
621
623
|
values = [values]
|
|
622
624
|
return [val for row in values for val in row.values()]
|