我正在try 创建一个简单的可插入FastAPI应用程序,插件可以在其中添加或不添加API端点
这是我的文件夹 struct :
服务器py
import importlib
import pkgutil
from pathlib import Path
import uvicorn
from fastapi import FastAPI
PLUGINS_PATH = Path(__file__).parent.joinpath("plugins")
app = FastAPI()
def import_module(module_name):
"""Imports a module by it's name from plugins folder."""
module = f"plugins.{module_name}"
return importlib.import_module(module, ".")
def load_plugins() -> list:
"""Import plugins from plugins folder."""
loaded_apps = []
for _, application, _ in pkgutil.iter_modules([str(PLUGINS_PATH)]):
module = import_module(application)
print(
f"Loaded app: {module.__meta__['plugin_name']} -- version: {module.__meta__['version']}"
)
loaded_apps.append(module)
return loaded_apps
@app.get("/")
def main():
return "Hello World!"
if __name__ == "__main__":
plugins = load_plugins()
for plugin in plugins:
"""Register the plugins router."""
if "router" in plugin.__dir__():
app_router = plugin.router
app.include_router(app_router)
uvicorn.run("server:app", host="localhost", port=8000, reload=True)
在我的插件文件夹中,我有:
plugins/non_api_plugin/__init__.py
人:
__meta__ = {"plugin_name": "NON API plugin", "version": "0.0.1"}
plugins/<v1|v2>/__init__.py
人
from .routes import routes as router
__meta__ = {"plugin_name": "API <v1|v2>", "version": "0.0.1"}
还有路由.py文件:
from fastapi import APIRouter
routes = APIRouter(prefix="/<v1|v2>")
@routes.get("/")
def novels():
return "Hello World from <v1|v2>"
当我运行服务器时,会加载插件并记录它们的信息,但不会加载API端点.
我错过了什么?我最好的猜测是,我的插件加载系统在某个点上是错误的.