从pywps 3.x迁移到4.x

pywps 3.x和4.x的基本概念保持不变:只需部署一次pywps,就可以有许多具有一组进程的实例。将进程存储在单个文件中是一种很好的做法,尽管这不是必需的。

注解

不幸的是,没有自动转换进程的工具,也没有兼容模块。如果您想赞助该模块的开发,请直接通过PYWPS邮件列表或PSC成员联系项目指导委员会。

配置文件

配置文件格式保持不变(它是 configparser 模块)。部分有点偏移,所以它们更像另一个Geopython项目- pycsw .

见节 配置 .

单进程定义

3.x和4.x分支之间的主要原则是相同的:必须定义流程类 class 及其 __init__ 方法。

前者 execute() 方法现在可以是任何函数,并指定为 handler 属性。

handler 函数get的两个参数: requestresponse . 在 requests ,存储所有输入数据, response 将对输出数据进行分类。

3.x和4.x的主要区别是, 每个输入都是输入列表 . 这种行为的原因是,作为pywps的用户,您定义了由类型和标识符定义的输入。当pywps进程转到运行作业时,通常可以 多个具有相同标识符的输入 定义。因此,不要打电话:

def execute(self):

        ...

        # 3.x inputs
        input = self.my_input.getValue()

您应该使用输入列表的第一个索引:

def handler(request, response):

        ...

        # 4.X inputs
        input = request.inputs['my_input'][0].file

输入和输出数据操作

顺便说一下,pywps输入现在有 filedataurlstream 属性。它们透明地将一种数据表示类型转换为另一种数据表示类型。您可以使用 stream 或者直接用 input.data . 也可以使用 output.data = {{ ..... }} .

更多参见 过程

部署

虽然pywps 3.x通常部署为cgi应用程序,但pywps 4.x配置为 WSGI application. PyWPS 4.x is distributed without any processes or sample deploy script. We provide such example in our pywps-flask 项目。

注解

PYWPS U PROCESSES环境变量已不存在,必须对进程进行分类才能手动(或半自动)部署脚本。

对于部署脚本,使用的标准wsgi应用程序 flask microframework 必须定义,其中get有两个参数:进程列表和配置文件:

from pywps.app.Service import Service
from processes.buffer import Buffer

processes = [Buffer()]

application = Service(processes, ['wps.cfg'])

这4行代码使用缓冲进程部署pywps。这为您提供了更灵活的方法来定义流程,因为您可以在定义过程中将新变量和配置值传递给每个流程类实例。

样品处理

有关示例流程,请参阅 pywps-flask Github上的项目。

所需步骤总结

  1. 修复配置文件

  2. 每个进程都需要新的类和输入输出定义

  3. execute 方法,您只需要检查输入和输出数据分配,但方法的核心应该保持不变。

  4. 将基于shell或python的cgi脚本替换为基于flask的wsgi脚本