# #region ApiRoutesModule [C:5] [TYPE Module] [SEMANTICS api, package, router, lazy, import] # @defgroup Api Module group. # @BRIEF Provide lazy route module loading to avoid heavyweight imports during tests. # @LAYER API # @RELATION CALLS -> [ApiRoutesGetAttr] # @RELATION BINDS_TO -> [Route_Group_Contracts] # @PRE FastAPI app initialized, route modules available in package # @POST Route modules are lazily loadable via __getattr__ # @INVARIANT Only names listed in __all__ are importable via __getattr__. # #region Route_Group_Contracts [C:3] [TYPE Block] # @ingroup Api # @BRIEF Declare the canonical route-module registry used by lazy imports and app router inclusion. # @RELATION DEPENDS_ON -> [PluginsRouter] # @RELATION DEPENDS_ON -> [TasksRouter] # @RELATION DEPENDS_ON -> [SettingsRouter] # @RELATION DEPENDS_ON -> [ReportsRouter] # @RELATION DEPENDS_ON -> [LlmRoutes] # @SIDE_EFFECT Registers route group imports via __getattr__ # @DATA_CONTRACT Package -> RouterModule mapping __all__ = [ "admin", "admin_api_keys", "agent_conversations", "agent_status", "agent_superset", "agent_superset_explore", "assistant", "clean_release", "clean_release_v2", "dashboards", "dataset_review", "datasets", "environments", "git", "health", "llm", "maintenance", "mappings", "migration", "plugins", "profile", "reports", "settings", "storage", "tasks", "translate", "validation_tasks", ] # #endregion Route_Group_Contracts # #region ApiRoutesGetAttr [C:3] [TYPE Function] # @ingroup Api # @BRIEF Lazily import route module by attribute name. # @RELATION DEPENDS_ON -> [ApiRoutesModule] # @PRE name is module candidate exposed in __all__. # @POST Returns imported submodule or raises AttributeError. def __getattr__(name): if name in __all__: import importlib return importlib.import_module(f".{name}", __name__) raise AttributeError(f"module {__name__!r} has no attribute {name!r}") # #endregion ApiRoutesGetAttr # #endregion ApiRoutesModule