使用插件扩展神器的pypi repos

时间:2018-05-31 20:19:49

标签: artifactory pypi

我正在尝试迁移遗留系统以使用神器。但是我有两个阻挡者:

  1. 旧脚本需要PyPixmlrpc,这个神器不支持
  2. 他们也使用upload_docs,不支持神器的pypi实现
  3. 一个较小的问题,旧脚本调用寄存器,他们期望200而不是204 http状态代码。

我可以写一个插件来实现这个吗?

查看https://www.jfrog.com/confluence/display/RTF/User+Plugins我无法找到请求POST /api/pypi/<index-name>的回调。

如果我能做到

  1. 为我们实际使用的方法工作,
  2. 只是假装它已部署文档而
  3. 以正确的状态代码回复
我将成为很开心。

1 个答案:

答案 0 :(得分:2)

正如您所说,Pypi API端点没有插件挂钩。可以使用altResponse端点来自定义工件下载,但随后您将被限制为无请求正文的GET请求,这对您来说也不是一个好选择。

我认为最可行的方法是定义一个自定义executions端点。这样,您可以指定可接受的方法,读取正文并设置自己的响应代码和正文。这样做的主要缺点是您无法自定义路径(始终为/api/plugins/execute/[execution_name]),但是可以解决此问题。

执行端点可以采用以下形式的参数:

/api/plugins/execute/[execution_name]?params=[param_name]=[param_val]

说您的插件有一个参数path,它代表您的旧脚本要调用的API路径。然后,可以将基本URL设置为/api/plugins/execute/[execution_name]?params=path=/,以便将API路径附加到参数中。另外,您可以使用nginx或其他反向代理将原始API路径重写为该表单。

(由于您将使用XML-RPC,因此我认为您无需担心任何此类路径问题,但是为了完整起见,我还是将其包括在内。)

这种方法存在一些问题:

  • 执行端点仅允许String响应,因此在响应正文中发送二进制数据可能很麻烦。但是,请求主体不存在这种限制。
  • 如果需要多个请求方法,则将需要多个执行端点。这意味着您将需要使用反向代理将每个方法重写为单独的端点。同样,由于XML-RPC仅使用POST,所以这对您来说可能不是问题。
  • 执行端点无法自定义响应头。因此,如果您的脚本期望使用特定的Content-Type或其他标头,则需要使用反向代理将其插入响应中。