from typing import TYPE_CHECKING, Any, overload
from fastapi import FastAPI, Request
from sqlspec.base import SQLSpec
from sqlspec.extensions.fastapi.providers import DEPENDENCY_DEFAULTS
from sqlspec.extensions.fastapi.providers import provide_filters as _provide_filters
from sqlspec.extensions.starlette.extension import SQLSpecPlugin as _StarlettePlugin
if TYPE_CHECKING:
from collections.abc import Callable
from sqlspec.config import AsyncDatabaseConfig, SyncDatabaseConfig
from sqlspec.core import FilterTypes
from sqlspec.driver import AsyncDriverAdapterBase, SyncDriverAdapterBase
from sqlspec.extensions.fastapi.providers import DependencyDefaults, FilterConfig
# Type aliases for static analysis - IDEs see the real types
_AsyncSession = AsyncDriverAdapterBase
_SyncSession = SyncDriverAdapterBase
_Session = AsyncDriverAdapterBase | SyncDriverAdapterBase
else:
# Runtime fallback - FastAPI sees Any (avoids NameError)
_AsyncSession = Any
_SyncSession = Any
_Session = Any
__all__ = ("SQLSpecPlugin",)
class SQLSpecPlugin(_StarlettePlugin):
"""SQLSpec integration for FastAPI applications.
Extends Starlette integration with dependency injection helpers for FastAPI's
Depends() system.
"""
def __init__(self, sqlspec: SQLSpec, app: "FastAPI | None" = None) -> None:
"""Initialize SQLSpec FastAPI extension.
Args:
sqlspec: Pre-configured SQLSpec instance with registered configs.
app: Optional FastAPI application to initialize immediately.
"""
super().__init__(sqlspec, app)