插件式服务器
项目描述
FPS
FPS(Fast Pluggable Server),是一个框架,用于基于插件组合和运行Web服务器。它基于FastAPI、uvicorn、typer和pluggy。
动机
为了更好地了解这个项目的动机,请参阅Jupyter服务器团队指南。
工作原理
FPS的主要目的是提供用于注册端点、静态挂载、CLI设置/拆解等钩子。
然后,一个应用程序可以通过提供特定/专用端点的多个插件进行组合。这些端点可以使用fps.hooks.register_router与fastapi.APIRouter进行注册。
即将推出
最重要的部分将是一个漂亮的配置系统,以及一个支持多进程的记录器,具有统一的格式化程序,为开发人员/运营人员/用户提供顺畅的体验。
概念
在FPS中广泛使用了以下概念
- 一个
hook或hook实现是一个标记为实现hook规范的方法hook规范是hook的声明@pluggy.HookspecMarker(HookType.ROUTER.value) def router() -> APIRouter: pass
- 钩子通过Python的
entry_point自动收集,并在正确的时间运行[options.entry_points] fps_router = fps_helloworld_router = fps_helloworld.routes fps_config = fps_helloworld_config = fps_helloworld.config
- 定义了多个
entry_point组(例如fps_router,fps_config等)- 要收集的钩子必须在对应的组中声明
- 在先前的示例中,
HookType.ROUTER.value等于fps_router,因此在该组中声明了router钩子
fps.hooks.register_<hook-name>辅助函数返回此类钩子def register_router(r: APIRouter): def router_callback() -> APIRouter: return r return pluggy.HookimplMarker(HookType.ROUTER.value)( function=router_callback, specname="router" )
plugin是在FPS的entry_point中声明的 Python 模块- 插件可以包含零个或多个钩子
- 在下面的
helloworld示例中,声明了config钩子,但没有声明plugin_name钩子。两者都是fps_config组的钩子。from fps.config import PluginModel from fps.hooks import register_config class HelloConfig(PluginModel): random: bool = True c = register_config(HelloConfig)
plugins package是一个声明一个或多个插件的 Python 包
配置
FPS 现在支持使用 toml 格式的配置。
优先顺序
目前,配置的加载顺序为:fps.toml < <plugin-name>.toml < <cli-passed-file> < <cli-arg>。
fps.toml 和 <cli-passed-file> 文件可以包含任何插件的配置,而 <plugin-name>.toml 文件将仅用于特定插件。
fps.toml 和 <plugin-name>.toml 目前必须位于当前工作目录中。将很快实现从用户主目录或系统应用程序目录加载的支持。
注意:环境变量 FPS_CONFIG_FILE 用于存储通过 CLI 传递的文件名,并将其提供给子进程。
合并策略
目前,多个配置来源之间的合并策略相当简单
- 优先级较高的来源的字典值获胜
- 不向序列追加/预加
测试
FPS 有一个利用 pytest 修复和 fastAPI 依赖项覆盖的 测试模块。
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源代码分发
fps-0.0.21.tar.gz (14.9 kB 查看散列)
构建分发
fps-0.0.21-py3-none-any.whl (15.4 kB 查看散列)
关闭
fps-0.0.21.tar.gz 的散列
| 算法 | 散列摘要 | |
|---|---|---|
| SHA256 | 93d908c8b518b14879f1128f467834311ad1ae546ca6e49b47d72d0aa00f22f6 |
|
| MD5 | 83662b41d02445483b81b4c040d8835d |
|
| BLAKE2b-256 | 15cb0cc97a8bdf2f9404dfd2cd3e0a33dfda12479d62f673de91cfa6327694b7 |