File size: 1,942 Bytes
6aecb2e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | 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__)
|