| from importlib import import_module |
| from typing import Any |
|
|
| __all__ = [ |
| 'engine', |
| 'SessionLocal', |
| 'get_db', |
| 'get_async_db', |
| 'init_db', |
| 'Project', |
| 'TodoBoard', |
| 'TodoStage', |
| 'ProjectVersion', |
| 'SlideData', |
| 'PPTTemplate', |
| 'migration_manager', |
| 'health_checker', |
| 'DatabaseService', |
| 'ProjectRepository', |
| 'TodoBoardRepository', |
| 'TodoStageRepository', |
| 'ProjectVersionRepository', |
| 'SlideDataRepository', |
| 'PPTTemplateRepository' |
| ] |
|
|
|
|
| def __getattr__(name: str) -> Any: |
| """ |
| Lazy attribute loader. |
| |
| Importing this package should not eagerly create DB engines (which can require optional drivers |
| like psycopg2). Import the underlying submodules on demand instead. |
| """ |
| if name in {"engine", "SessionLocal", "get_db", "get_async_db", "init_db"}: |
| module = import_module(".database", __name__) |
| return getattr(module, name) |
|
|
| if name in {"Project", "TodoBoard", "TodoStage", "ProjectVersion", "SlideData", "PPTTemplate"}: |
| module = import_module(".models", __name__) |
| return getattr(module, name) |
|
|
| if name == "migration_manager": |
| module = import_module(".migrations", __name__) |
| return getattr(module, name) |
|
|
| if name == "health_checker": |
| module = import_module(".health_check", __name__) |
| return getattr(module, name) |
|
|
| if name == "DatabaseService": |
| module = import_module(".service", __name__) |
| return getattr(module, name) |
|
|
| if name in { |
| "ProjectRepository", |
| "TodoBoardRepository", |
| "TodoStageRepository", |
| "ProjectVersionRepository", |
| "SlideDataRepository", |
| "PPTTemplateRepository", |
| }: |
| module = import_module(".repositories", __name__) |
| return getattr(module, name) |
|
|
| raise AttributeError(f"module {__name__!r} has no attribute {name!r}") |
|
|
|
|
| def __dir__() -> list[str]: |
| return sorted(__all__) |
|
|