diff --git a/src/ohmyapi/router.py b/src/ohmyapi/router.py index ed96e12..52116e1 100644 --- a/src/ohmyapi/router.py +++ b/src/ohmyapi/router.py @@ -1,2 +1,29 @@ +import importlib +import inspect +import pkgutil +import pathlib + from fastapi import APIRouter, Depends, HTTPException from http import HTTPStatus +from typing import Generator + + +def package_routers( + package_name: str, + package_path: str | pathlib.Path) -> Generator[APIRouter, None, None]: + """ + Discover all APIRouter instances in submodules of the given package. + """ + if isinstance(package_path, str): + package_path = pathlib.Path(package_path).parent + + for module_info in pkgutil.iter_modules([str(package_path)]): + if module_info.name.startswith("_"): + continue # skip private modules like __init__.py + + module_fqname = f"{package_name}.{module_info.name}" + module = importlib.import_module(module_fqname) + + for _, obj in inspect.getmembers(module): + if isinstance(obj, APIRouter): + yield obj