插件式服务器
项目描述
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 |