PyWPS and GRASS GIS

PyWPS was originally written with support for GRASS GIS. The processes can be executed within a temporary created GRASS Location or within an existing GRASS Location, within temporary created Mapset. If you are not familiar with this concepts, please review the GRASS documentation.

Configuring PyWPS

First you have to configure PyWPS configuration file, as described in Configuration.

Allowing Process to be executed in the GRASS environment

When you are initializing a new process (see process-initialization), you can add a pywps.Process.WPSProcess.grassLocation attribute to it.

The attribute can have the following values:

None

GRASS Location is not created, GRASS environment is not started (default):

WPSProcess.__init__(self, identifier = "foo)
True

Temporary GRASS Location is created in XY coordinate system. .. note:: In the future, GRASS Location will probably have a

coordinate system token from the input raster or vector file.:

WPSProcess.__init__(self, identifier = “foo”,
…, grassLocation = True)
String

Name of the GRASS Location within the configured grassdbase. If the name starts with “/”, the full path to the location is taken, without any other configuration.:

WPSProcess.__init__(self, identifier = "foo",
    ...
    grassLocation = "spearfish60")

or:

WPSProcess.__init__(self,
    identifier = "foo",
    ...
    grassLocation = "/foo/bar/grassdata/spearfish60")

Running GRASS modules from PyWPS

You have two options: either run GRASS modules as you would do in shell script (running the modules directly) or access the GRASS-python interface.

Running GRASS command line modules

Once the pywps.Process.WPSProcess.execute() method is executed, you can use the pywps.Process.WPSProcess.cmd() method for calling GRASS modules.

Using GRASS-Python interface

Since GRASS 6.4, Python bindings are supported. There are both a ctypes interface and GRASS Modules-Python interface. They are both described in the GRASS Wiki . There are grass.run_command(), grass.mapcalc() and other useful methods.

GRASS-Python interface example

from pywps.Process import WPSProcess

process =  WPSProcess(identifier="grassprocess",
                    title="GRASS Process")

def execute():
    from grass.script import core as grass

    ret = grass.run_command("d.his", h_map = "drap_map",
                                     i_map = "relief_map",
                                     brighten = 0)
    return

process.execute = execute