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