45 lines
1.8 KiB
Python
45 lines
1.8 KiB
Python
import importlib
|
|
import pkgutil
|
|
from pathlib import Path
|
|
|
|
from fastapi import APIRouter
|
|
from uvicorn.server import logger
|
|
|
|
# 定义一个 APIRouter 实例
|
|
router = APIRouter()
|
|
|
|
# 初始化 __all__ 列表,用于声明模块公开的对象
|
|
__all__ = []
|
|
|
|
# 获取当前文件所在目录
|
|
current_dir = Path(__file__).parent
|
|
|
|
# 定义可能的路由变量名列表
|
|
ROUTER_VARIABLE_NAMES = ["router", "routes", "api_router"]
|
|
|
|
# 遍历当前目录下的所有 .py 文件
|
|
for module_info in pkgutil.iter_modules([str(current_dir)]):
|
|
if module_info.name != Path(__file__).stem: # 排除当前文件
|
|
module = importlib.import_module(f".{module_info.name}", package=__package__)
|
|
found_router = False
|
|
# 遍历可能的路由变量名
|
|
for var_name in ROUTER_VARIABLE_NAMES:
|
|
if hasattr(module, var_name):
|
|
module_router: APIRouter = getattr(module, var_name)
|
|
api_number = len(module_router.routes)
|
|
logger.info(
|
|
f"[导入路由] 已导入模块: {module_info.name}.{var_name} 共计{api_number}个接口 ✅"
|
|
)
|
|
# 自动创建别名,使用模块名和变量名组合作为别名
|
|
alias_name = f"{module_info.name}_{var_name}"
|
|
globals()[alias_name] = module_router
|
|
# 包含模块的 router 到主 router 中
|
|
router.include_router(module_router, tags=[f"{alias_name} api"])
|
|
# 将别名添加到 __all__ 列表中
|
|
__all__.append(alias_name)
|
|
found_router = True
|
|
if not found_router:
|
|
logger.error(
|
|
f"[导入路由] 未导入模块:{module_info.name},未找到以下任一变量: {', '.join(ROUTER_VARIABLE_NAMES)} "
|
|
)
|