diff --git a/src/fastapi_toolsets/cli/commands/fixtures.py b/src/fastapi_toolsets/cli/commands/fixtures.py index c341179..f7cc43c 100644 --- a/src/fastapi_toolsets/cli/commands/fixtures.py +++ b/src/fastapi_toolsets/cli/commands/fixtures.py @@ -6,7 +6,7 @@ from rich.console import Console from rich.table import Table -from ...fixtures import Context, LoadStrategy, load_fixtures_by_context +from ...fixtures import Context, LoadStrategy from ...logger import get_logger from ..config import get_db_context, get_fixtures_registry from ..utils import async_command @@ -71,6 +71,8 @@ async def load( ] = False, ) -> None: """Load fixtures into the database.""" + from ...fixtures import load_fixtures_by_context + registry = get_fixtures_registry() db_context = get_db_context() diff --git a/src/fastapi_toolsets/cli/utils.py b/src/fastapi_toolsets/cli/utils.py index 29506d4..a9d4ffc 100644 --- a/src/fastapi_toolsets/cli/utils.py +++ b/src/fastapi_toolsets/cli/utils.py @@ -1,6 +1,5 @@ """CLI utility functions.""" -import asyncio import functools from collections.abc import Callable, Coroutine from typing import Any, ParamSpec, TypeVar @@ -24,6 +23,8 @@ async def load(ctx: typer.Context) -> None: @functools.wraps(func) def wrapper(*args: P.args, **kwargs: P.kwargs) -> T: + import asyncio + return asyncio.run(func(*args, **kwargs)) return wrapper diff --git a/src/fastapi_toolsets/fixtures/__init__.py b/src/fastapi_toolsets/fixtures/__init__.py index df5302e..458900f 100644 --- a/src/fastapi_toolsets/fixtures/__init__.py +++ b/src/fastapi_toolsets/fixtures/__init__.py @@ -1,8 +1,6 @@ """Fixture system for seeding databases with dependency resolution.""" -from .enum import LoadStrategy -from .registry import Context, FixtureRegistry -from .utils import load_fixtures, load_fixtures_by_context +from .enum import Context, LoadStrategy __all__ = [ "Context", @@ -11,3 +9,20 @@ "load_fixtures", "load_fixtures_by_context", ] + +_LAZY = { + "FixtureRegistry": ".registry", + "load_fixtures": ".utils", + "load_fixtures_by_context": ".utils", +} + + +def __getattr__(name: str): + module_name = _LAZY.get(name) + if module_name is None: + raise AttributeError(f"module {__name__!r} has no attribute {name!r}") + + import importlib + + module = importlib.import_module(module_name, __name__) + return getattr(module, name)