🍱 Add package_routers()

This commit is contained in:
Brian Wiborg 2025-09-30 00:30:55 +02:00
parent e43dced167
commit 4d8952eff7
No known key found for this signature in database

View file

@ -1,2 +1,29 @@
import importlib
import inspect
import pkgutil
import pathlib
from fastapi import APIRouter, Depends, HTTPException from fastapi import APIRouter, Depends, HTTPException
from http import HTTPStatus 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