从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的两个参数: request 和 response . 在 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输入现在有 file , data , url 和 stream 属性。它们透明地将一种数据表示类型转换为另一种数据表示类型。您可以使用 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上的项目。
所需步骤总结¶
修复配置文件
每个进程都需要新的类和输入输出定义
在 execute 方法,您只需要检查输入和输出数据分配,但方法的核心应该保持不变。
将基于shell或python的cgi脚本替换为基于flask的wsgi脚本