跳转到主要内容

插件式服务器

项目描述

FPS

FPS(Fast Pluggable Server),是一个框架,用于基于插件组合和运行Web服务器。它基于FastAPIuvicorntyperpluggy

动机

为了更好地了解这个项目的动机,请参阅Jupyter服务器团队指南

工作原理

FPS的主要目的是提供用于注册端点、静态挂载、CLI设置/拆解等钩子。

然后,一个应用程序可以通过提供特定/专用端点的多个插件进行组合。这些端点可以使用fps.hooks.register_routerfastapi.APIRouter进行注册。

即将推出

最重要的部分将是一个漂亮的配置系统,以及一个支持多进程的记录器,具有统一的格式化程序,为开发人员/运营人员/用户提供顺畅的体验。

概念

FPS中广泛使用了以下概念

  • 一个hookhook实现是一个标记为实现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_routerfps_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 是在 FPSentry_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 查看散列)

上传时间 Python 3

支持