🍱 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 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