🍱 Add package_routers()
This commit is contained in:
parent
e43dced167
commit
4d8952eff7
1 changed files with 27 additions and 0 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue