This page describes the convention for the PyWPS plugin to find and expose matlab processes.
Example
function [data] = oil_spill(track, volume) % OIL_SPILL generate a dataset of an oil spill based on a track and total volume % % This is also part of the abstract % % input: % track = linestring % volume = double % % output: % data = file.nc %
Finding processes
Matlab functions can be exposed as WPS processes. The processes are found by putting matlab scripts in the directory that is exposed by the environment variable MATLAB_PROCESSES (analogue to PYWPS_PROCESSES). Matlab processes have the form of a matlab function, stored within a file with the name function.m.
WPS Process properties
The WPS process properties can be specified according to the table below. A process is a function and the properties are introspected from the comments by the following convention.
WPS property |
Matlab implementation |
example |
---|---|---|
identifier |
function name, lower case |
run_model -> run_model |
title |
function name, Title cased, _ replaced by spaces |
run_model -> Run model |
abstract |
first comment line, after CAPITALIZED function name and following comment block |
% FUNCTION some text -> some text |
metadata |
not supported |
|
profile |
not supported |
|
wsdl |
not supported |
|
version |
not supported |
|
service |
always WPS |
|
language |
always en-GB |
|
DataInputs |
list below % input: |
see example and details below |
ProcessOutputs |
list below % output: |
see example and details below |
storeSupported |
always false |
|
statusSupported |
always false |
|
WPS Input properties
The input properties are the function arguments, which properties are introspected from the comments by the following convention.
WPS property |
Matlab implementation |
example |
---|---|---|
identifier |
function name, lower case |
run_model -> run_model |
title |
function name, Title cased, _ replaced by spaces |
run_model -> Run model |
abstract |
first comment line, after CAPITALIZED function name and following comment block |
% FUNCTION some text -> some text |
minOccurs |
always 1 |
|
maxOccurs |
always 1 |
|
Metadata |
not supported |
|
InputForm Choice |
not supported |
|
ComplexData |
SFS types supported, by WKT type: linestring,geometry,point,etc... |
|
LiteralData |
basic types supported: float,int,string |
|
BoundingBox Data |
specified by the word bbox |
|
WPS Matlab JSON input.
Because you can't call matlab functions dynamically we prepare input for the matlab processes in JSON messages.
These JSON messages have the following form.
// The following is an example of the CouchDB job queue // The _id, _rev and _attachments are couchdb specific { "_id": "723cd54245f4c578550768758b001564", "_rev": "6-e16ee53ee4642e2a3a080306f727a43f", "identifier": "tide_analysis", "dataInputs": { "timeseries": "data.xls", "location": "POINT(52 3)" }, "_attachments": { "data.xls": { "content_type": "application/vnd.ms-excel", "revpos": 5, "length": 50688, "stub": true } }
WPS Matlab JSON input.
- install CouchDB from http://couchdb.apache.org/
- Via the
Create Database
link create a database called 'wps' (small case) - Click on wps database,
- Via the
New Document
link create a new view. - Manually update the source block (double click in the source block) by adding the following code:
{ "_id": "_design/views", "language": "javascript", "views": { "processes": { "map": "function(doc) {\n\n if (doc.type == \"processes\") {\n \n doc.processes.forEach(function(element){\n emit(element.identifier, element);\n });\n}\n}" }, "input": { "map": "function(doc) {\n if (doc.type == \"input\") {\n emit(null, doc);\n}\n}" }, "output": { "map": "function(doc) {\n if (doc.type == \"output\") {\n emit(doc._id, doc);\n}\n}" }, "matlab": { "map": "function(doc) {\n\n if (doc.type == \"processes\" && doc.language == \"matlab\") {\n \n \n emit(doc._id, doc);\n }\n}" } } }
- If you modify an existing document, keep the original
"_rev": "BUT KEEP THE AUTOMATIC REV CODE GENERATED BY YOUR COUCHDB"
- Test
http://localhost:5984/wps/_design/views/_view/matlab
to look like:{"total_rows":0,"offset":0,"rows":[ ]}
- Switch to
queue_url = 'http://localhost:5984'
in the matlab wps runnerwps.runner.run
- Check out this fork of pywps https://github.com/openearth/PyWPS and use branch couchprocesses