Hi Soeren,
[cc to Horst Düster - I'm not subscribed to the QGIS lists, trying to limit my flow of mails, but we can take it over there if you prefer, but I want to make sure that this is really a plugin problem and not my bad usage of your wps-grass bridge]
On 15/04/11 09:40, Moritz Lennert wrote:
On 15/04/11 09:20, Soeren Gebbert wrote:
Hi Moritz,
the problem may be related to the QGIS WPS plugin version. The plugin
is still in an experimental state and under active development, but
the latest SVN version should be usable. Which version of the plugin
do you use?
0.5.
0.5.0 to be precice.
I've found the DEBUG option in the source code. Now I can see the request XML and the problem seems to be this (trying to launch a simple v.perturb on the busstopsall map of the shapefile collection of the nc_spm grass demo data):
<ows:Identifier>input</ows:Identifier>
<ows:Title>input</ows:Title>
<wps:Data>
<wps:ComplexData mimeType="text/xml" schema="http://schemas.opengis.net/gml/2.1.2/feature.xsd" enconding="utf-8"></wps:ComplexData>
</wps:Data>
</wps:Input>
i.e. the input data info is empty.
The same seems to be true for the output data:
<ows:Identifier>input</ows:Identifier>
<ows:Title>input</ows:Title>
<wps:Data>
<wps:ComplexData mimeType="text/xml" schema="http://schemas.opengis.net/gml/2.1.2/feature.xsd" enconding="utf-8"></wps:ComplexData>
</wps:Data>
</wps:Input>
Whereas the 'parameter' option contains the value I gave:
<wps:Input>
<ows:Identifier>parameters</ows:Identifier>
<ows:Title>parameters</ows:Title>
<wps:Data>
<wps:LiteralData>20</wps:LiteralData>
</wps:Data>
</wps:Input>
Here some info about my config:
pywps.cfg:
[grass]
path=/home/mlennert/SRC/GRASS/grass_trunk/dist.i686-pc-linux-gnu/bin:/home/mlennert/SRC/GRASS/grass_trunk/dist.i686-pc-linux-gnu/scripts
addonPath=
version=7.0svn
gui=text
gisbase=/home/mlennert/SRC/GRASS/grass_trunk/dist.i686-pc-linux-gnu
ldLibraryPath=/home/mlennert/SRC/GRASS/grass_trunk/dist.i686-pc-linux-gnu/lib
gisdbase=/home/mlennert/WWW/pywps/grassdata
pywps.cgi:
export PYWPS_CFG="/home/mlennert/WWW/pywps/pywps.cfg"
export PYWPS_PROCESSES="/home/mlennert/SRC/WPS_PROCESS"
and in WPS_PROCESSES I have all the files from your original wps-grass-bridge svn directory:
GlobalGrassSettings.py
GlobalGrassSettings.pyc
GrassXMLtoPyWPS.py
GrassXMLtoYAML.py
GrassXMLtoZCFG.py
PyWPSGrassModuleStarter.py
the gms and wpsXML directories (I erased the zoo-related) and a long list of grass modules descriptors, of which just the v.perturb one as example:
# ################################################ #
# This process was generated using GrassXMLtoPyWPS #
# Author: Soeren Gebbert #
# Mail: soerengebbert <at> googlemail <dot> com #
# ################################################ #
from pywps.Process import WPSProcess
from PyWPSGrassModuleStarter import PyWPSGrassModuleStarter
class v_perturb(WPSProcess):
def __init__(self):
WPSProcess.__init__(self, identifier = 'v.perturb', title = 'Random location perturbations of vector points.', version = 1, statusSupported = True, storeSupported = True, metadata = [{'type': 'simple', 'title': 'vector'}, {'type': 'simple', 'title': 'statistics'}], abstract = 'http://grass.osgeo.org/grass70/manuals/html70_user/v.perturb.html’)
# Literal and complex inputs
self.addComplexInput(identifier = 'input', title = 'Data source for direct OGR access', minOccurs = 1, maxOccurs = 1, formats = [{'mimeType': 'text/xml', 'schema': 'http://schemas.opengis.net/gml/2.1.2/feature.xsd’, 'encoding': 'UTF-8'}, {'mimeType': 'text/xml', 'schema': 'http://schemas.opengis.net/kml/2.2.0/ogckml22.xsd’, 'encoding': 'UTF-8'}, {'mimeType': 'application/dgn', 'schema': 'None', 'encoding': 'None'}, {'mimeType': 'application/shp', 'schema': 'None', 'encoding': 'None'}, {'mimeType': 'application/x-zipped-shp', 'schema': 'None', 'encoding': 'None'}])
self.addLiteralInput(identifier = 'layer', title = 'A single vector map can be connected to multiple database tables. This number determines which table to use. Layer name for direct OGR access.', minOccurs = 1, maxOccurs = 1, type = type("string"), default = "-1")
self.addLiteralInput(identifier = 'distribution', title = 'Distribution of perturbation', minOccurs = 0, maxOccurs = 1, type = type("string"), default = "uniform", allowedValues = ['uniform', 'normal'])
self.addLiteralInput(identifier = 'parameters', title = 'If the distribution is uniform, only one parameter, the maximum, is needed. For a normal distribution, two parameters, the mean and standard deviation, are required.', minOccurs = 1, maxOccurs = 1024, type = type(0.0), allowedValues = '*')
self.addLiteralInput(identifier = 'minimum', title = 'Minimum deviation in map units', minOccurs = 0, maxOccurs = 1, type = type(0.0), default = 0.0)
self.addLiteralInput(identifier = 'seed', title = 'Seed for random number generation', minOccurs = 0, maxOccurs = 1, type = type(0), default = 0)
# complex outputs
self.addComplexOutput(identifier = 'output', title = 'Name for output vector map', formats = [{'mimeType': 'text/xml', 'schema': 'http://schemas.opengis.net/gml/2.1.2/feature.xsd’, 'encoding': 'UTF-8'}, {'mimeType': 'text/xml', 'schema': 'http://schemas.opengis.net/kml/2.2.0/ogckml22.xsd’, 'encoding': 'UTF-8'}])
def execute(self):
starter = PyWPSGrassModuleStarter()
starter.fromPyWPS("v.perturb", self.inputs, self.outputs, self.pywps)
if __name__ == "__main__":
process = v_perturb()
process.execute()
Any ideas ?
Moritz
2011/4/14 Moritz Lennert<mlennert@club.worldonline.be>:
Soeren,
Thanks for the great work on WPS integration !
On 28/01/11 11:44, Soeren Gebbert wrote:
How to attach GRASS modules to PyWPS using the wps-grass-bridge is
documented here:
http://code.google.com/p/wps-grass-bridge/wiki/PyWPS_Integration
Well, the code isn't stable yet but it demonstrates the possibilities
of this approach.
I've tried following the above instructions, and the server does give a
correct answer for GetCapabilities. I can also see the list of
modules in
the QGIS WPS plugin and get the GUI of a module. However, once I run the
module I always get the following error, whatever the module I try:
<wps:ProcessFailed>
<wps:ExceptionReport>
<ows:Exception exceptionCode="NoApplicableCode">
<ows:ExceptionText>argument 1 must be string or buffer,
not None</ows:ExceptionText>
</ows:Exception>
</wps:ExceptionReport>
</wps:ProcessFailed>
Any idea what could be wrong ? I can't find a way to see what URL the
QGIS
plugin sends to the server.
Moritz
_______________________________________________
grass-dev mailing list
grass-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-dev