[Pywps-commits] r549 - trunk/doc

scm-commit@wald.intevation.org scm-commit at wald.intevation.org
Thu Aug 28 15:10:01 CEST 2008


Author: jachym
Date: 2008-08-28 15:10:01 +0200 (Thu, 28 Aug 2008)
New Revision: 549

Modified:
   trunk/doc/pywps-howto.txt
Log:
text documentation updated

Modified: trunk/doc/pywps-howto.txt
===================================================================
--- trunk/doc/pywps-howto.txt	2008-08-28 13:09:37 UTC (rev 548)
+++ trunk/doc/pywps-howto.txt	2008-08-28 13:10:01 UTC (rev 549)
@@ -1,1821 +1,588 @@
-
    next_inactive up previous
 
-                Implementation of OGC's WPS standard: PyWPS
+                   Implementation of OGC WPS standard: PyWPS
 
-                               Jachym Cepicky
+                                 Jachym Cepicky
 
-     Copyright ©2006 PyWPS Development Team Permission is granted to
-     copy, distribute and/or modify this document under the terms of the
-     GNU Free Documentation License, Version 1.2 or any later version
-     published by the Free Software Foundation; with no Invariant
-     Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of
-     the license is included in the section entitled "GNU Free
-     Documentation License".
+     Copyright (c)2006-2009 PyWPS Development Team Permission is granted to
+     copy, distribute and/or modify this document under the terms of the GNU
+     Free Documentation License, Version 1.2 or any later version published
+     by the Free Software Foundation; with no Invariant Sections, no
+     Front-Cover Texts, and no Back-Cover Texts. A copy of the license is
+     included in the section entitled "GNU Free Documentation License".
 
    In this file, you can found the description of installation and
-   configuration of PyWPS script. At the and, you can learn, how to add
-   your own process to the list of processes. The file describes most
-   recent version of PyWPS (2.0.0), available in subversion respository.
+   configuration of PyWPS script. At the and, you can learn, how to add your
+   own process. This document describes most recent version of PyWPS (2.0.0),
+   available in subversion respository.
 
-   PyPWS project has been started on April 2006 with support of DBU -
-   Deutsche Bundesstiftung Umwelt ([1]http://dbu.de) and with help of
-   GDF-Hannover ([2]http://gdf-hannover.de) and Help Service Remote
-   Sensing ([3]http://www.bnhelp.cz) companies. Initial author is Jachym
-   Cepicky ([4]http://les-ejk.cz).
+   PyWPS project has been started on April 2006 with support of DBU -
+   Deutsche Bundesstiftung Umwelt1 and with help of GDF-Hannover2 and Help
+   Service Remote Sensing3 companies. Initial author is Jachym Cepicky4.
 
 Contents
 
-     * [5]Introduction
-          + [6]How it works
-     * [7]Quick install
-     * [8]Know issues
-     * [9]Installation
-          + [10]Installation the quick 'n' dirty way
-          + [11]Installation the 'clean' way
-     * [12]Configuration
-          + [13]etc/settings.py
-          + [14]etc/grass.py
-          + [15]Testing after installation
-     * [16]Add your own processes
-          + [17]Process initialization and configuration
-          + [18]Process Programming
-          + [19]GRASS specific notes
-     * [20]Testing your new process
-     * [21]Using PyWPS
-          + [22]Input
-          + [23]Output
-     * [24]Example process: addvalue
-     * [25]KVP request encoding of addvalue
-     * [26]XML request encoding addvalue
-     * [27]Licence of PyWPS
-     * [28]Licence of this document
+     * Introduction
+          * How it works
+     * Quick install
+     * Know issues
+     * Installation
+          * Installation the quick 'n' dirty way
+          * Installation the 'clean' way
+     * Configuration
+     * Write your own processes
+          * Process initialization and configuration
+          * Process Programming
+          * Using GRASS GIS
+     * Testing your new process
 
-                                 Introduction
+                                  Introduction
 
-   PyWPS (Python Web Processing Service) is implementation of Web
-   Processing Service standard from Open Geospatial Consortium.
+   PyWPS (Python Web Processing Service) is implementation of Web Processing
+   Service 1.0.x standard from Open Geospatial Consortium5.
 
    It has been started on Mai 2006 as project supported by DBU. It offers
-   environment for programming own process (geofunctions or models) which
-   can be accessed from the public. The main advantage of PyWPS is, that
-   it has been written with native support for GRASS. Access GRASS
-   modules via web interace should be as easy as possible.
+   environment for programming own process (geofunctions or models) which can
+   be accessed from the public. The main advantage of PyWPS is, that it has
+   been written with native support for GRASS GIS6. Access GRASS modules via
+   web interace should be as easy as possible. However, not only GRASS GIS is
+   supported. Usage of other programs, like R package or GDAL or PROJ tools
+   is possible as well.
 
-   Processes can be written using GRASS GIS, but usage of other programs
-   is also possible. Usage together with R package or GDAL or PROJ tools.
+   PyWPS is written in Python programming language, your processes must use
+   this language too.
 
-   PyWPS is written in Python programming language, your processes must
-   use this language too.
+   PyWPS Homepage can be found at http://pywps.wald.intevation.org. PyWPS
+   Wiki is hosted on http://pywps.ominiverdi.org/wiki.
 
-   PyWPS Homepage can be found at [29]http://pywps.wald.intevation.org.
-   PyWPS Wiki is hosted on [30]http://pywps.ominiverdi.org.
-
 How it works
 
-   PyWPS is an translator application between client (Web Browser,
-   Desktop GIS, command line tool, ...) and working tool installed on the
-   server. PyWPS does no work by it self. As working tool, GRASS GIS,
+   PyWPS is an translator application between client (Web Browser, Desktop
+   GIS, command line tool, ...) and working tool installed on the server.
+   PyWPS does no process the data by it self. As working tool, GRASS GIS,
    GDAL, PROJ, R and other programs can be used.
 
-   CAPTION: Figure 1: How does PyWPS work: GRASS GIS is in this case
-   working tool
+     Figure 1: How does PyWPS work: GRASS GIS is in this case working tool
+                               Image pywps-schema 
 
-                             Image pywps-schema
-
                                  Quick install
 
-    1. Install PyWPS, see page [31] [*] for details
-    2. NOTE: Copy original files (process examples, configuration files)
+    1. Install PyWPS, see page [*] for details
+    2. NOTE: Rename original files (process examples, configuration files)
        with .py-dist suffix to .py, when you see them.
-    3. Edit configuration files in pywps/etc/ directory. See page [32]
-       [*] for details.
+    3. Edit configuration files in pywps/etc/ directory. See page [*] for
+       details.
     4. Create or edit __init__.py file in pywps/processes directory. Add
-       available process names to __all__ structure.
-    5. Add your processes to pywps/processes directory. See page [33] [*]
-       for details.
-    6. Run PyWPS with ./wps.py command, see page [34] [*] for details.
+       available process names to __all__ array.
+    5. Add your processes to pywps/processes directory. See page [*] for
+       details.
+    6. Run PyWPS with ./wps.py command, see page [*] for details.
 
                                   Know issues
 
    Known bugs and limitations to UL>
+   * Translations do not work for GetCapabilities. They only work for
+     DescribeProcess request types.
+   * If inputs are of type LiteralValue and it's type is string, it could be
+     security problem. Take care on your inputs and do not use it directly in
+     scripts to avoid your server to be hacked.
 
-     Sometimes, when there is e.g. SyntaxError in the process, teporary
-   file /tmp/pywps* is not deleted, which ledts to ServerBussy exception
-   and the files have to be removed by hand.
+     Please report all problems or unexpected handeling either via pywps
+     mailing list7or using PyWPS bugtracker8.
 
-     If inputs are of type LiteralValue and it's type is string, it is
-   not controlled properly. Take care on your inputs and do not use it
-   directly in scripts to avoid your server to be hacked.
+                                  Installation
 
-   Please report all problems or unexpected handeling either via pywps
-   mailing list[35]^1or using PyWPS bugtracker[36]^2.
+     Required packages:
 
-                                 Installation
+       * python
+       * python-xml
+       * python-htmltmpl
 
-   Required packages:
+     Recommended packages:
 
-     * python
-     * python-xml
+       * Web Server (e.g. Apache) - http://httpd.apache.org - You will need
+         an web server, to be able to execute processes from remote
+         computers.
 
-   Recommended packages:
+       * GIS GRASS - http://grass.itc.it - Geographical Resources Analysis
+         Support System (GRASS) is Open Source GIS, which provides more then
+         350 modules for raster and vector (2D, 3D) data analysis. PyWPS is
+         written with native support for GRASS and it's functions.
 
-     * Web Server (e.g. Apache) - [37]http://httpd.apache.org - You will
-       need an web server, to be able to execute processes from remote
-       computers.
-     * GIS GRASS - [38]http://grass.itc.it - Geographical Resources
-       Analysis Support System (GRASS) is Open Source GIS, which provides
-       more then 350 modules for raster and vector (2D, 3D) data
-       analysis. PyWPS is written with native support for GRASS and it's
-       functions.
-     * PROJ.4 - [39]http://proj.maptools.org - Cartographic Projections
-       library used in various Open Source projects, such as GRASS, UMN
-       MapServer, QGIS and others. It can be used e.g. for data
-       transformation.
-     * GDAL/OGR - [40]http://gdal.org - translator library for raster
-       geospatial data formats, is used in various projects for
-       importing, exporting and transformation between various raster and
-       vector data formats.
-     * R - [41]http://www.r-project.org - is a language and environment
-       for statistical computing and graphics.
+       * PROJ.4 - http://proj.maptools.org - Cartographic Projections library
+         used in various Open Source projects, such as GRASS, UMN MapServer,
+         QGIS and others. It can be used e.g. for data transformation.
 
+       * GDAL/OGR - http://gdal.org - translator library for raster
+         geospatial data formats, is used in various projects for importing,
+         exporting and transformation between various raster and vector data
+         formats.
+
+       * R - http://www.r-project.org - is a language and environment for
+         statistical computing and graphics.
+
 Installation the quick 'n' dirty way
 
-   For installing pywps to your server simply unzip the archive to the
-   directory, where cgi programs are allowed to run. You can also use
-   current repository version.
+     For installing pywps to your server simply unzip the archive to the
+     directory, where cgi programs are allowed to run. You can also use
+     current repository version.
 
-$ cd /usr/lib/cgi-bin/
-$ tar xvzf /tmp/pywps-VERSION.tar.gz
-$ pywps/wps.py
+ $ cd /usr/lib/cgi-bin/
+ $ tar xvzf /tmp/pywps-VERSION.tar.gz
+ $ pywps/wps.py
 
 Installation the 'clean' way
 
-   Unzip the package
-$ tar -xzf pywps-VERSION.tar.gz
+     Unzip the package
 
-   and run
-$ python setup.py install
+ $ tar -xzf pywps-VERSION.tar.gz
 
-   Several binary packages for Linux distributios are also avaliable on
-   PyWPS site[42]^3.
+     and run
 
-                                 Configuration
+ $ python setup.py install
 
-   Before you start to tune your pywps program, you should get your copy
-   of OpenGIS(R) Web Processing Service document (OGC 05-007r4) version
-   0.4.0 from
-   [43]http://www.opengeospatial.org/specs/?page=specs
+     adjust the configuration file
 
-   NOTE: Note, that the configuration option are CASE SENSITIVE
+ $ vim /etc/pywps.cfg
 
-   Pywps configuration takes places in two files. The files are actually
-   python scripts, so it does not harm, if you have some experience in
-   python programming language. But you should be able to setup the
-   program without any python knowledge.
+     permint write access to templates directory
 
-   The first file is in etc/settings.py and (optional) the second file is
-   etc/grass.py which has to be setuped if you do want to use GRASS GIS
-   modules in your scripts. Some special "tuning" can be done in
-   processes/__init__.py file. You can allways obtain original
-   configuration files from Wps/default_settings.py and
-   Wps/default_grass.py.
+ # chmod -R 777 /usr/lib/python2.5/site-packages/pywps/Templates
 
-etc/settings.py
+     Several binary packages for Linux distributios (RPM,DEB) are also
+     avaliable on PyWPS homepage9.
 
-   This file has got two sections: WPS and serverSettings
+                                 Configuration
 
-   In the WPS section, the main configuration is set, which appears
-   mostly in GetCapabilities request. The mandatory parameters, which
-   should be set up are (with default/recommend values):
+     Before you start to tune your PyWPS installation, you should get your
+     copy of OpenGIS(R) Web Processing Service document (OGC 05-007r7)
+     version 1.0.010.
 
-WPS = {
-    'version': "0.4.0",
-    'ServiceIdentification': {
-        'Title':"Jachym's WPS server",
-        'ServiceType':"WPS",
-        'ServiceTypeVersion':"0.1.0",
-        'Abstract':'Abstract to this WPS',
-    },
-    'ServiceProvider': {
-            'ProviderName' : "Your Company",
-            'IndividualName':"Your Name",
-            'PositionName':"Your Position",
-            'Role':"your role",
-            'DeliveryPoint': "Street",
-            'City': "City",
-            'PostalCode':"00000",
-            'Country': "Your country",
-            'ElectronicMailAddress':"your.email at address",
-    },
+     NOTE: Note, that the configuration option are CASE SENSITIVE
 
-    'OperationsMetadata': {
-        'ServerAddress' : "http://localhost/cgi-bin/wps/wps.py",
-    },
-    'Keywords' : ['GRASS','GIS','WPS'],
-}
+     Pywps configuration takes place in pywps.cfg file located in
+     /etc/pywps.cfg or pywps/etc/pywps.cfg.
 
-   In the ServerSettings section, the variables are set, which have
-   impact on the whole server.
+     Default configuration file is located in pywps/default.cfg, you can
+     always make a copy of this file and start the configuration from
+     scratch.
 
-ServerSettings = {
-        # NOTE: You have to create this directory manually and set rights, so
-        #       the program is able to store data in there
-        'outputPath': '/var/www/wpsoutputs',
+     Several sections are in the file.
+       * Section [wps] contains general WPS settings, which are:
+            * encoding - Language encoding (utf-8, iso-8859-2, windows-1250,
+              ...)
+            * title - Server title
+            * version - WPS version (1.0.0)
+            * abstract - Server anstract
+            * fees - Possible fees
+            * constraints - Possible constraints
+            * serveraddress - WPS script address: http://foo/bar/wps.py
+            * keywords - Comma-separated list of kyewords
+            * lang - Default langue (eng)
+       * Section [provider] contains informations about you
+            * providerName - Name of your company
+            * individualName - Your name
+            * positionName
+            * role
+            * deliveryPoint - Street
+            * city
+            * postalCode
+            * country
+            * electronicMailAddress - foo at bar
+            * providerSite - http://foo.bar
+            * phoneVoice
+            * phoneFacsimile
+            * administrativeArea
+       * Section [server] contains server settings
+            * maxoperations - Maximal number of parallel running processes.
+              If set to 0, then there is no limit.
+            * maxinputparamlength - Maximal length of string input parameter.
+            * maxfilesize - Maximal input file size (raster or vector). The
+              size can be determined as follows: 1GB, 5MB, 3kB, 1000b.
+            * tempPath - Direcotory for temporary files (mostly temporary
+              GRASS locations).
+            * outputUrl - Url where the outputs are stored.
+            * outputPath - Path. where output files are stored.
+            * debug - true/false
+       * Section [grass] - GRASS GIS settings
+            * path - $PATH variable, e.g. /usr/lib/grass/bin
+            * addonPath - $GRASS_ADDONS variable
+            * version - GRASS version
+            * gui - Should be "text"
+            * gisbase - Path to GRASS GIS_BASE directory (/usr/lib/grass)
+            * ldLibraryPath - Path of GRASS Libs (/usr/lib/grass/lib)
 
-        #
-        # 'outputUrl' - URL of the directory, where the outputs will be stored
-        'outputUrl':  'http://192.168.1.31/wpsoutputs',
+     File example follows:
 
-        #
-        # tempPath - path to directory, where temporary data will be stored.
-        # NOTE: the pywps has to have rights, to create directories and files
-        #       in this directory
-        'tempPath': '/tmp',
+ [wps]
+ encoding=utf-8
+ title=PyWPS Server
+ version=1.0.0
+ abstract=See http://pywps.wald.intevation.org and http://www.opengeospatial.org/standards/wps
+ fees=None
+ constraints=none
+ serveraddress=http://localhost/cgi-bin/wps
+ keywords=GRASS,GIS,WPS
+ lang=eng
 
-        #
-        # maxOperations - maximum number of operations, which is allowed to low
-        # on this server at ones
-        # default = 1
-        'maxOperations':1,
+ [provider]
+ providerName=Your Company Name
+ individualName=Your Name
+ positionName=Your Position
+ role=Your role
+ deliveryPoint=Street
+ city=City
+ postalCode=000 00
+ country=eu
+ electronicMailAddress=login at server.org
+ providerSite=http://foo.bar
+ phoneVoice=False
+ phoneFacsimile=False
+ administrativeArea=False
 
-        #
-        # maxSize: maximum input file size in bytes
-        # NOTE: maximum file size is 5MB, no care, if this number is higher
-        'maxSize':5242880, # 5 MB
+ [server]
+ maxoperations=3
+ maxinputparamlength=1024
+ maxfilesize=3mb
+ tempPath=/tmp
+ outputUrl=http://localhost/wps/wpsoutputs
+ outputPath=/var/www/wps/wpsoutputs
+ debug=true
 
-        #
-        # maxInputParamLength: maximal length of input values
-        # NOTE: maximum length of input parameters is 256, no matter, how heigh
-t
-        #       is this number
-        'maxInputParamLength':256,
-}
+ [grass]
+ path=/usr/lib/grass/bin/:/usr/lib/grass/scripts/
+ addonPath=
+ version=6.2.1
+ gui=text
+ gisbase=/usr/lib/grass/
+ ldLibraryPath=/usr/lib/grass/lib
 
-etc/grass.py
+     subsectionTesting after installation For test, just run wps.py in your
+     command line:
 
-   This file servers for configuration of GRASS GIS environment (if your
-   processes need one). Everything is stored in grassenv structure.
+ $ ./wps.py "service=wps&request=getcapabilities"
 
-grassenv = {
-    # PATH in which your modules (processes) should be able the search.
-    # Default value:
-    'PATH': "/usr/local/grass-6.1.cvs/bin/:/usr/local/grass-6.1.cvs/scripts/:\
-    /usr/bin/:/bin/:",
+ INIT DONE
+ LOADING PRECOMPILED
+ TEMPLATE: UPTODATE
+ PRECOMPILED: UPTODATE
+ Content-type: text/xml
 
-    # Add eventually some other path, in which should GRASS search for modules
-    'GRASS_ADDON_PATH': "",
+ <?xml version="1.0" encoding="utf-8"?>
+ <wps:Capabilities service="WPS" version="1.0.0" xml:lang="eng,ger"
+     xmlns:xlink="http://www.w3.org/1999/xlink"
+     xmlns:wps="http://www.opengis.net/wps/1.0.0"
+     xmlns:ows="http://www.opengis.net/ows/1.1"
+     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
+     xsi:schemaLocation="http://www.opengis.net/wps/1.0.0
+     http://schemas.opengis.net/wps/1.0.0/wpsGetCapabilities_response.xsd"
+     updateSequence="1">
+         <ows:ServiceIdentification>
+                 <ows:Title>PyWPS Development Server</ows:Title>
+     ...
+ </wps:Capabilities>
 
-    # Version of GRASS, you are using
-    'GRASS_VERSION': "6.1.cvs",
+     If you got something like this, (Capabilities response), everything
+     looks fine.
 
-    # GRASS_PERL, where is your PERL bin installed
-    'GRASS_PERL': "/usr/bin/perl",
+     If you got some other message, like e.g.:
 
-    # GRASS_GUI should be always "text" unless you know, what you are doing
-    'GRASS_GUI': "text",
+ Traceback (most recent call last):
+   File "/usr/bin/wps.py", line 221, in <module>
+     wps = WPS()
+   File "/usr/bin/wps.py", line 140, in __init__
+     self.performRequest()
+   File "/usr/bin/wps.py", line 188, in performRequest
+     from pywps.WPS.GetCapabilities import GetCapabilities
+   File "/usr/lib/python2.5/site-packages/pywps/WPS/GetCapabilities.py", line 26, in <module>
+     from Response import Response
+   File "/usr/lib/python2.5/site-packages/pywps/WPS/Response.py", line 28, in <module>
+     from htmltmpl import TemplateManager, TemplateProcessor
+ ImportError: No module named htmltmpl
 
-    # GISBASE is place, where your GRASS installation is
-    'GISBASE': "/usr/local/grass-6.1.cvs",
+     Than something is wrong with your Python installation or with the
+     program. This message means, that the python-htmltmpl package is not
+     installed in your system.
 
-    # LD_LIBRARY_PATH
-    'LD_LIBRARY_PATH':"/usr/local/grass-6.1.cvs/lib",
+                            Write your own processes
 
-    # HOME has to be set
-    'HOME':"/var/www",
-}
+     All processes are stored in the pywps/processes directory. You can
+     create custom directory anywhere in your system and set $PYTHON_PROCESS
+     environment variabl (how to do this for the web server, refer to your
+     Server documentation). Following example will describe buffering
+     process. Several example processes are distributed along with PyWPS
+     source code.
 
-Testing after installation
+     Create file exampleBufferProcess.py in PYWPS_PROCESSES directory.
 
-   For test, just run wps.py in your command line:
+     Each process is stand-alone python script with one class Process, which
+     has two methods: __init__, execute. It is possible also to add as many
+     your functions/methods, as you wish.
 
-$ ./wps.py
-Content-type: text/xml
-
-<?xml version="1.0" ?>
-<ExceptionReport version="1.0.0" xmlns="http://www.opengis.net/ows"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-        <Exception exceptionCode="MissingParameterValue" locator="request"/>
-</ExceptionReport>
-
-   If you got some other message, like e.g.:
-
-Traceback (most recent call last):
-  File "trunk/index.py", line 53, in ?
-    from Wps import wpsexceptions
-  File "/home/jachym/prog/pywps/trunk/Wps/wpsexceptions.py", line 8, in ?
-    from xml.dom.minidom import Document
-ImportError: No module named xml.dom.minidom
-
-   Than something is wrong with your Python installation or with the
-   program. This message means, that the xml.dom.minidom package is not
-   installed in your system.
-
-                            Add your own processes
-
-   NOTE: This section has changed from previous stable 1.0.0 version. The
-   processes, you defined for 1.0.0 branch should work for 2.0.0 branch
-   too.
-
-   All processes are stored in the processes directory. Put your file
-   e.g. myprocess.py in there. Several example processes are distributed
-   along with PyWPS source code.
-
-   Process is python class derived from prepared WPSProcess class in
-   pywps.Wps package. In it __init__(self) method, process metadata,
-   inputs and outpus are defined and in execute(self) method, own
-   computation is performed.
-
-   It is possible also to add as many your functions, as you wish.
-
 Process initialization and configuration
 
-   First of all, you have to add name of your process to
-   pywps/processes/__init__.py file. Then you can start to edit the
-   process file it's self.
+   1 from pywps.Process.Process import WPSProcess                               
+   2 class Process(WPSProcess):
+   3     """Main process class"""
+   4     def __init__(self):
+   5         """Process initialization"""
+   7         # init process
+   8         WPSProcess.__init__(self,
+   9             identifier = "exampleBufferProcess",
+  10             title="Buffer",
+  11             version = "0.2",
+  12             storeSupported = "true",
+  13             statusSupported = "true",
+  14             abstract="Create a buffer around an input vector file",
+  15             grassLocation = True)
 
-01 # importing necessary files
-02 import pywps.Wps.WPSProcess
-03
-04 class Process(WPSProcess):
-05      def __init__(self):
-06          WPSProcess.__init__(self,
-07                Identifier="ogr2ogr",
-18                Title="ogr2ogr interface",
-19                Abstract="Convert vector file to another format",
-10                processVersion = "0.2",
-11                statusSupported="true",
-12                storeSupported="true")
+     We defined new process called exampleBufferProcess. The process is
+     allowed to store it's output data on the server (storeSupported) and it
+     is also possible to run it in asynchronous mode (statusSupported). The
+     process will run within GRASS GIS environment (grassLocation = True).
 
-   We defined new process called ogr2ogr. The process is allowed to store
-   it's output data on the server (storeSupported) and it is also
-   possible to run it in asynchronous mode (statusSupported).
-
-   Eventually optional attributes can be found in the table 38 - "Parts
-   of ExecuteResponse data structure" in the WPS reference
-   document[44]^4. It is also possible to redefine some variable later,
-   after initialization:
-
-13
-14          self.Title="ogr2ogr interface"
-15
-
     Metadata defition
 
-   is stored in array self.Metadata in __init__ method. You can add new
-   Medatada using self.AddMetadata() method:
-            self.AddMetadata(Identifier="point",type="point",
-                            textContent="Click in the map")
+     is stored in array self.Metadata in __init__ method. You can add new
+     Medatada using self.AddMetadata() method:
 
-   This code will produce in DescribeProcess responce document following
-   element:
-...
-<ows:Metadata Identifier="point" type="point">
-    Click in the map
-</ows:Metadata>
-...
+             self.AddMetadata(identifier="point",type="point",
+                             textContent="Click in the map")
 
   Data Inputs
 
-   Data inputs are stored in self.Inputs array. To add inputs to your
-   process, you should use methods defined in WPSProcess class.
+     Three types of data inputs are defined:
+       * Literal Input - Basic literal input - single number or text value
+       * ComplexValue Input - Mostly vector file embded in input XML request
+         or reference (URL) to such file.
+       * BoundingBox Input - Coordinates for lower-left and upper-right
+         corner.
 
-   Four types of data inputs are defined:
-     * Literal Input - Basic literal input - single number or text value
-     * ComplexValue Input - Mostly vector file embded in input XML
-       request
-     * ComplexValueReference Input - URL to location, where the process
-       is supposed to get the input data.
-     * BoundingBox Input - Coordinates for lower-left and upper-right
-       corner.
-
-   ComplexValue and ComplexValueReference defined on the same way - PyWPS
-   is able to guess, if the input data are reference (link) to some map
-   or raw data directly.
-
-    LiteralInput
-
-   Basic type of data input is LiteralInput type. To define LiteralInput
-   the easy way, you should use AddLiteralInput method:
-
-20
-21          self.AddLiteralInput(Identifier="value",
-                                 Title="Value to be added",
-                                 type=type(0))
-
-   Above example will add new input with identifier value of type
-   integer. Examples of other possibilities of LiteralInputs and
-   resulting part of XML are folowing:
-
-      Example of any allowed input value (default)
-
-self.AddLiteralInput(Identifier="someinput",
-                     Title="Some Input",
-                     allowedvalues='*')
-
-...
-  <Input>
-    <ows:Identifier>someinput</ows:Identifier>
-    <ows:Title>Some Input</ows:Title>
-    <ows:Abstract/>
-        <LiteralData>
-            <SupportedUOMs defaultUOM="m">
-                <ows:UOM>m</ows:UOM>
-            </SupportedUOMs>
-            <ows:AnyValue/>
-        </LiteralData>
-    <MinimumOccurs>1</MinimumOccurs>
-  </Input>
-...
-
-      Example of specified list (with range) of allowed inputs
-
-   Following example will define input with specified list of values:
-   Only values 20, 30, everything between 40-100 and 110 will be
-   accepted:
-self.AddLiteralInput(Identifier="someinput",
-                     Title="Some Input",
-                     allowedvalues=[20,30,[40,100],110])
-
-...
-  <Input>
-    <ows:Identifier>someinput</ows:Identifier>
-    <ows:Title>Some Input</ows:Title>
-    <ows:Abstract/>
-    <LiteralData>
-        <SupportedUOMs defaultUOM="m">
-        <ows:UOM>m</ows:UOM>
-        </SupportedUOMs>
-        <AllowedValues>
-            <Value>20</Value>
-            <Value>30</Value>
-            <Range>
-                <MinimumValue>40</MinimumValue>
-                <MaximumValue>100</MaximumValue>
-            </Range>
-            <Value>110</Value>
-        </AllowedValues>
-    </LiteralData>
-    <MinimumOccurs>1</MinimumOccurs>
-  </Input>
-...
-
-   For further documentation, refere example processes distributed with
-   the source code as well as pydoc pywps/wps/process.py. This help is
-   also available in process.html[45]^5 file distributed along with PyWPS
-   source code.
-
     ComplexInput
 
-   If the request comes as HTTP GET, it is assumed, that the input is
-   only reference to some map. If it comes as HTTP POST, PyWPS tryes to
-   guess, if the client is sending URL to source of the data or if the
-   input data are part of input XML request (e.g. as GML file). So, you,
-   as a process coder do not have to take care on this:
+     Complex input can be raster or vector file, to be processed.
 
-self.AddComplexInput(Indentifier="inputmap",
-      Title="Input map, which should be processed",
-      Formats=["text/xml","image/tiff"])
-...
-    <Input>
-        <ows:Identifier>input</ows:Identifier>
-        <ows:Title>Input raster map</ows:Title>
-        <ows:Abstract/>
-        <ComplexData defaultFormat="image/tiff">
-            <SupportedComplexData>
-                <Format>image/tiff</Format>
-                <Format>text/xml</Format>
-            </SupportedComplexData>
-        </ComplexData>
-        <MinimumOccurs>1</MinimumOccurs>
-    </Input>
+  18         self.dataIn = self.addComplexInput(identifier="data",
+  19                              title = "Input data")
+  20
 
-    BoundingBox Input
+    LiteralInput
 
-   With bounding box, you can define two coordinate pairs, if you have
-   to.
+     With literal input, you can obtain any type of character string.
 
-self.AddBondingBoxInput(Identifier="bbox",
-        Title="BBox input")
+  21         self.widthIn = self.addLiteralInput(identifier = "width",
+  22                              title = "Width")
+  23
 
+     For further documentation, refere example processes distributed with the
+     source code as well as pydoc pywps/Wps/Process.py. This help is also
+     available in process.html11 file distributed along with PyWPS source
+     code.
+
   Data Outputs
 
-   Again four types of output are defined:
-     * Literal Output
-     * ComplexValue Output
-     * ComplexValue Reference
-     * BoundingBox Output
+     Data outputs can be defined in similar way.
+       * Literal Output
+       * ComplexValue Outout
+       * BoundingBox Output
 
-   Data outputs can be defined on similar way, using similar methods:
+    ComplexValue Output
 
-    LiteralOutput
+     The complex value can be raster or vector file (or any other binary or
+     text file).
 
-self.AddLiteralOutput(Identifier="litoutput",
-                     Title="Resulting output value")
+ 24        self.bufferOut = self.addComplexOutput(identifier="buffer",
+ 25                                title="Output buffer file")
+ 26
 
-...
-  <Output>
-    <ows:Identifier>litoutput</ows:Identifier>
-    <ows:Title>Resulting output value</ows:Title>
-    <ows:Abstract/>
-    <LiteralOutput>
-      <SupportedUOMs defaultUOM="m">
-        <ows:UOM>m</ows:UOM>
-      </SupportedUOMs>
-    </LiteralOutput>
-  </Output>
-...
+    Literal Output
 
-    ComplexValue and ComplexValueReference Output
+     If you want to output any text string.
 
-   To the oposite of data Inputs, Outputs can distinguish between
-   ComplexValue output and ComplexValueReference. ComplexValue is
-   directly embed into the output XML document and ComplexValueReference
-   is stored on the server and only URL pointing the the file is refering
-   to it. In general, vector files in GML format can be easy embed to the
-   output XML, TIFF raster files is better to leave on the server.
+ 27          self.textOut = self.addLiteralOutput(identifier="text",
+ 28                               title="just some text")
+ 29
 
-self.AddComplexReferenceOutput(Identifier="output",
-                Title="Resulting output map",
-                Formats=["image/tiff"])
-
-...
-  <Output>
-    <ows:Identifier>output</ows:Identifier>
-    <ows:Title>Resulting output map</ows:Title>
-    <ows:Abstract/>
-    <ComplexOutput defaultFormat="image/tiff">
-      <SupportedComplexData>
-        <Format>image/tiff</Format>
-      </SupportedComplexData>
-    </ComplexOutput>
-  </Output>
-...
-
-    BoundingBox Output
-
-   Beside LiteralValue and ComplexValue, BoundingBoxValue is also
-   defined. The coordinates are stored in array of four members:
-
-self.GetInputValue("bboxinput")
-[0,0,100,100]
-
-   So on our ogr2ogr process, we have to define three types of input:
-   ComplexValue of input vector file and EPSG codes of target and source
-   files:
-
-16      self.AddComplexInput(Identifier="inputmap",
-17          Title ="Input vector file",
-18          Abstract = "Input vector file to be converted",
-19          Formats=["text/xml"])
-20
-21      self.AddLiteralInput(Identifier="sepsg",
-22          Title="Source EPSG",
-23          Abstract="Source EPSG code",
-24          value=4326)
-
-   And we also define two outputs: ComplexValueReference and ComplexValue
-   type.
-
-25      self.AddComplexOutput(Identifier="outputmap",
-26          Title ="Input vector file",
-27          Abstract = "Input vector file to be converted",
-28
-29      self.LiteralOutput(Identifier="sepsg",
-30          Title="Source EPSG",
-31          Abstract="Source EPSG code",
-32          value=4326)
-
 Process Programming
 
-   The process must be defined in the execute(self) function. You can
-   access the input values via self.GetInputValue(Identifier) method.
+     The process must be defined in the execute(self) method. Basicly, you
+     want to get input values and set output values. For this purpose, you
+     can use getValue(input_identifier) and setValue(output_identifier,value)
+     methods of the input/output objects (see lower).
 
-   NOTE: Usage of the old method, accessing the values via
-   self.Inputs[index]['value'] or via self.DataInputs array is possible,
-   but should not be used.
+     If you need to execute some shell command, you should use
+     self.cmd(command,["string for standard input"]) instead of e.g.
+     os.system() or os.popen() functions.
 
-   Also variable self.grassenv will be in your process at your service.
-   This dictionary stores environment variables used by GRASS GIS, such
-   se LOCATION_NAME or MAPSET.
+     Calculation progress can be set using self.status(string message, number
+     percent) method.
 
-   Output values should be set using self.SetOutputValue(Identifier,
-   value) method.
+     Example follows:
 
-   NOTE: Usage of the old methods of output values setting, directly to
-   self.Outputs[index]['value'] variable or to
-   self.DataOutputs['identifier'] dictionary, is possible, but should
-   better not be used.
+ 33     def execute(self):
+ 34         """Execute process.
+ 35        
+ 36         Each command will be executed and output values will be set
+ 37         """
+ 38
+ 39         # run some command from the command line
+ 40         self.cmd("g.region -d")
+ 41
+ 42         # set status value
+ 43         self.status.set("Importing data",20)
+ 44         self.cmd("v.in.ogr dsn=%s output=data" %\
+ 45                 (self.getInputValue('data')))
+ 46            
+ 47         self.status.set("Buffering",50)
+ 48         self.cmd("v.buffer input=data output=data_buff buffer=%s scale=1.0 tolerance=0.01" %\
+ 49                 (self.getInputValue('width')))
+ 50
+ 51         self.status.set("Exporting data",90)
+ 52
+ 53         self.cmd("v.out.ogr type=area format=GML input=data_buff dsn=out.xml olayer=path.xml")
+ 54        
+ 55         self.bufferOut.setValue("out.xml")
+ 56         self.textOut.setValue("ahoj, svete")
+ 57         return
 
-   If you need to execute some shell command, you should use
-   self.Cmd(command,["string for standard input"]) instead of e.g.
-   os.system() or os.popen() functions.
-
-33
-35      def execute(self):
-36
-37          #
-38          # calculation
-39          #
-30          self.Cmd("""ogr2ogr -s_srs "+init=epsg:4326" -t_srs \
-31          "+init=epsg:2065" %s output.file""" % (self.GetInputValue("inputmap
-")))
-32         #
-43         # setting results
-44         #
-45         self.SetOutputValue("outputmap","output.file")
-46         self.SetOutputValue("sepsg","4326")
-47
-48         return
-
   Error handling
 
-   At the end of the execute function, None value should be returned. Any
-   other value means, that the calculation will be stopped and error
-   report will be returned back to the client.
+     At the end of the execute function, None value should be returned. Any
+     other value means, that the calculation will be stopped and error report
+     will be returned back to the client, example:
 
-  Using standard in- and output with external commands
+         def execute(self):
+             ...
+             return "Ups, something failed!"
 
-   The self.Cmd() accepts input parameter, wich is a text string, which
-   is directred to standard input of the command:
+Using GRASS GIS
 
-    result = self.Cmd(cmd="wc -c",
-             input="calculate number of characters for this sentence")
+     Configuration is done using standard pywps configuration file (see
+     page[*]).
 
-    # result[0].split()
+     If you want to use GRASS GIS commands in your process, and there is no
+     GRASS Location to be used, you have to set grassLocation=True in process
+     definition:
 
-   self.Cmd() returns list of lines from the programms standard output to
-   the process:
+          WPSProcess.__init__(self,
+              identifier = "exampleBufferProcess",
+              ....
+              grassLocation = True)
 
-    for line in self.Cmd("ls -l"):
-        # do some operations of list of files
-        pass
+     In this case, temporary GRASS Location will be created and after the
+     process is done, it will be deleted again. By default, no GRASS Location
+     is created.
 
-GRASS specific notes
+     You can also work in existing GRASS Location, then just set the location
+     path:
 
-   Special class for GRASS GIS is defined too, which has functions and
-   variables specific to this program. The process, in which should use
-   GRASS modules should be defined as follows:
+          WPSProcess.__init__(self,
+              identifier = "exampleBufferProcess",
+              ....
+              grassLocation = "/home/grass/grassdata/spearfish60")
 
-# importing necessary files
-import pywps.Wps.GRASSWPSProcess
+                            Testing your new process
 
-class Process(GRASSWPSProcess):
-     def __init__(self):
-         GRASSWPSProcess.__init__(self,
-               Identifier="spearpath",
-               Title="Spearfish path searching",
-               Abstract="Find the shortest path on the roads map on Spearfish d
-ataset",
-               processVersion = "0.2",
-               statusSupported="true",
-               storeSupported="true",
-               # grassLocation="/var/www/spearfish60/" # work on existing locat
-ion)
+     To test your PyWPS installation, you run it either as Webserver
+     cgi-application or in the command line directly. It is always good to
+     start with the command line test, so do not have to check error.log of
+     the web server.
 
-   By default, self.grassLocation[46]^6 variable is set to None, which
-   means, that temporary location will be created and after the
-   calculation is done, it will be deleted again. You can set this while
-   process initialization or later[47]^7.
+       * GetCapabilities request (webserver)
 
-   WPSProcess class provides special method self.GCmd(command_string),
-   which tryes to catch output from GRASS modules, especially progress
-   information inidcated by percent done. Method GCmd() stores the output
-   of GRASS modules to self.status variable, so if the process is running
-   assynchronously, client application can track the progress of each
-   module directly.
+ ./wps.py "service=wps&request=getcapabilities"
 
-    def execute(self):
-        """
-        This function serves like simple GRASS - python script
+ wget -nv -q -O - "http://localhost/cgi-bin/wps.py?\
+     service=Wps&request=getcapabilities"
 
-        It returns None, if process succeed or String if process failed
-        """
-        self.GCmd("g.region -d")
+       * DescribeProcess request:
 
+ ./wps.py "version=1.0.0&service=Wps&request=DescribeProcess&\
+     Identifier=bufferExampleProcess"
 
-        # v.net.path reads from standard input
-        self.GCmd("v.net.path in=roads out=path","0 %s %s %s %s" % (self.GetInp
-utValue('x1'),
-                self.GetInputValue('y1'),
-                self.GetInputValue('x2'),
-                self.GetInputValue('y2')))
+ wget -nv -q -O - "http://localhost/cgi-bin/wps.py?\
+     version=0.4.0&service=Wps&request=DescribeProcess&\
+     Identifier=exampleBufferProcess"
 
-        self.GCmd("v.out.ogr format=GML input=path dsn=out.xml olayer=path.xml"
-)
+       * Execute request: For data inputs encoding, using HTTP Get method,
+         see OGC 05-007r712, page 38 "Execute HTTP GET request KVP encoding``
 
-        if "out.xml" in os.listdir(os.curdir):
-            shutil.copy("out.xml","out2.xml")
-            self.SetOutputValue('outputReference',"out.xml")
-            self.SetOutputValue('outputData',"out2.xml")
-            return
-        else:
-            return "Ouput file not created!"
+ ./wps.py "version=1.0.0&service=Wps&\
+     request=Execute&Identifier=exampleBufferProcess&\
+     datainputs=data=http://foo/bar/roads.gml;width=0.5"
 
-   It is also possible to run GRASS modules using python's os.system() or
-   os.popen() function. Before you do so, it is important to import the
-   os python package (usually one of the first lines in the file). This
-   approach might not be the best, but it is the simplest one. Feel free
-   to use any other low-end functions.
+     Some examples of XML request econding are available in doc/examples
+     directory.
 
-   Unfortunately, the GRASS modules are very verbose. Some messages are
-   written to STDOUT, some to STDERR. The STDERR will be stored in the
-   error file of your web server. But you have to "catch" the messages,
-   sent to STDOUT. This can be done e.g. by using " $1>\&2$ " statement
-   (redirecting STDOUT to STDERR in shell):
+     Before testing WPS via HTTP POST, you have to set REQUEST_METHOD
+     environment variable, then you can redirect input XML into wps.py script
+     via standard input:
 
-os.system("""
-    echo "Rekni jim drazi, tatko, za to nic nedas."  >&2
-""")
+ $ export REQUEST_METHOD=POST
+ $ cat doc/wps_execute_request-responsedocument.xml|./wps.py
 
-   You can avoid this problem using formentioned self.GCmd() method.
+                            About this document ...
 
-                           Testing your new process
+     Implementation of OGC WPS standard: PyWPS
 
-   To test your PyWPS installation, you run it either as Webserver
-   cgi-application or in the command line directly. It is always good to
-   start with the command line test, so do not have to check error.log of
-   the web server.
+     This document was generated using the LaTeX2HTML translator Version
+     2002-2-1 (1.71)
 
-     * GetCapabilities request (webserver)
-./wps.py "service=wps&request=getcapabilities"
+     Copyright (c) 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based
+     Learning Unit, University of Leeds.
+     Copyright (c) 1997, 1998, 1999, Ross Moore, Mathematics Department,
+     Macquarie University, Sydney.
 
-wget -nv -q -O - "http://localhost/cgi-bin/wps.py?\
-    service=Wps&request=getcapabilities"
-     * DescribeProcess request:
-./wps.py "version=0.4.0&service=Wps&request=DescribeProcess&\
-    Identifier=your_process"
+     The command line arguments were:
+     latex2html -split 0 pywps-howto.tex
 
-wget -nv -q -O - "http://localhost/cgi-bin/wps.py?\
-    version=0.4.0&service=Wps&request=DescribeProcess&\
-    Identifier=your_process"
-     * Execute request:
-./wps.py "version=0.4.0&service=Wps&\
-    request=Execute&Identifier=your_process&\
-    datainputs=input1,value1,input2,value2"
+     The translation was initiated by Jachym Cepicky on 2008-08-28
 
-wget -nv -q -O - "http://localhost/cgi-bin/wps.py?\
-    version=0.4.0&service=Wps&\
-    request=Execute&Identifier=your_process&\
-    datainputs=input1,value1,input2,value2" \
+     ----------------------------------------------------------------------
 
-                                  Using PyWPS
+    Footnotes
 
-Input
+     ... Umwelt1
+             http://dbu.de
 
-   To get response from PyWPS you have to formulate appropriate query
-   string first. You can use HTTP GET style or HTTP POST style.
+     ... GDF-Hannover2
+             http://gdf-hannover.de
 
-   HTTP GET style is standard URL, with all parameters in one line. You
-   can not set any ComplexValue data in your process via HTTP GET.
-   Example:
+     ... Sensing3
+             http://www.bnhelp.cz
 
-wget -nv -q -O - --post-data="version=0.4.0&service=Wps&\
-        request=Execute&Identifier=your_process&\
-        datainputs=input1,value1,input2,value2"\
-        "http://localhost/cgi-bin/wps.py"
+     ... Cepicky4
+             http://les-ejk.cz
 
-   In HTTP POST style, you send one "request" parameter, which contains
-   XML input. The XML file can contain also included ComplexValue data,
-   e.g. GML file. Example:
+     ... Consortium5
+             http://www.opengeospatial.org/standards/requests/28
 
-wget --post-file=execute-post.txt \
-        "http://localhost/pywps/wps.py" -O - -nv -q
+     ... GIS6
+             http://grass.itc.it
 
-   The execute-post.txt file can look like follows:
-<?xml version="1.0" encoding="utf-8"?>
-<Execute service="WPS" version="0.4.0" store="false" status="false"
-xmlns="http://www.opengeospatial.net/wps"
-xmlns:ows="http://www.opengeospatial.net/ows"
-xmlns:xlink="http://www.w3.org/1999/xlink"
-xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://www.opengeospatial.net/wps/wpsDescribeProcess.xsd">
-    <ows:Identifier>searchpath</ows:Identifier>
-    <DataInputs>
-        <Input>
-            <ows:Identifier>streetmap</ows:Identifier>
-            <ows:Title>The map</ows:Title>
-            <ows:ComplexValue>
-                <Value>
-<ogr:FeatureCollection
-     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-     xsi:schemaLocation="http://ogr.maptools.org/ donut.xsd"
-     xmlns:ogr="http://ogr.maptools.org/"
-     xmlns:gml="http://www.opengis.net/gml">
-  <gml:boundedBy>
-    <gml:Box>
-      <gml:coord><gml:X>4.263256414560601e-14</gml:X>
-        <gml:Y>-70.71067811865474</gml:Y></gml:coord>
-      <gml:coord><gml:X>141.4213562373095</gml:X>
-      <gml:Y>70.71067811865474</gml:Y></gml:coord>
-    </gml:Box>
-  </gml:boundedBy>
-  <gml:featureMember>
-    <ogr:donut fid="F0">
-      <ogr:geometryProperty><gml:LineString><gml:coordinates>
-      70.710678118654755,70.710678118654741,0 141.42135623730951,0.0,
-      0 70.710678118654741,-70.710678118654741,0 0.000000000000043,
-      0.000000000000057,0 70.710678118654755,
-      70.710678118654741,0</gml:coordinates>
-      </gml:LineString></ogr:geometryProperty>
-    </ogr:donut>
-  </gml:featureMember>
-  <gml:featureMember>
-    <ogr:donut fid="F0">
-      <ogr:geometryProperty><gml:LineString><gml:coordinates>50.000000000000014
-,
-      0.000000000000021,0 71.213203435596427,-21.213203435596419,0
-      92.426406871192853,0.0,0 71.213203435596427,21.213203435596423,0
-      50.000000000000014,0.000000000000021,0</gml:coordinates>
-      </gml:LineString></ogr:geometryProperty>
-    </ogr:donut>
-  </gml:featureMember>
-</ogr:FeatureCollection>
-                </Value>
-            </ows:ComplexValue>
-        </Input>
+     ... list7
+             http://wald.intevation.org/mailman/listinfo/pywps-develPyWPS -
+             development list
 
-        <Input>
-            <ows:Identifier>x1</ows:Identifier>
-            <ows:LiteralValue>591679.31</ows:LiteralValue>
-        </Input>
-        <Input>
-            <ows:Identifier>y1</ows:Identifier>
-            <ows:LiteralValue>4927205.07</ows:LiteralValue>
-        </Input>
-        <Input>
-            <ows:Identifier>x2</ows:Identifier>
-            <ows:LiteralValue>608642.625</ows:LiteralValue>
-        </Input>
-        <Input>
-            <ows:Identifier>y2</ows:Identifier>
-            <ows:LiteralValue>4915876.31</ows:LiteralValue>
-        </Input>
-    </DataInputs>
-</Execute>
+     ... bugtracker8
+             http://wald.intevation.org/tracker/?atid=174&group_id=22&func=browsePyWPS
+             Bug tracker
 
-   You can see, that there are 4 inputs in this process:
+     ... homepage9
+             http://pywps.wald.intevation.org
 
-    1. ComplexValue GML File
-    2. x1 coordinate
-    3. y1 coordinate
-    4. x2 coordinate
-    5. y2 coordinate
+     ... 1.0.010
+             http://www.opengeospatial.org/standards/wps
 
-Output
+     ...process.html11
+             http://wald.intevation.org/plugins/scmsvn/viewcvs.php/*checkout*/trunk/doc/process.html?rev=369&root=pywpsDocumentation
+             to Process.py module
 
-   The output from PyWPS can be either XML file or results of processes
-   directly. In default configuration, no files are stored on the server,
-   resulting values (maps) are returned to the client. If you want to
-   return XML file with outputs encoding, you have to enable it in you
-   process configuration with option storeSupported:
+     ... 05-007r712
+             http://opengeospatial.org/standards/wps/
 
-    self.storeSupported = "true"
+     ----------------------------------------------------------------------
 
-   And you have to call the PyWPS with "store=true" option:
+     next_inactive up previous
 
-    version=0.4.0&service=Wps&request=Execute&Identifier=your_process&\
-                    datainputs=input1,value1,input2,value2&store=true
-
-   Or in XML input:
-
-request=<?xml version="1.0" encoding="utf-8"?>
-<Execute service="WPS" version="0.4.0" store="true" status="false"
-xmlns="http://www.opengeospatial.net/wps"
-xmlns:ows="http://www.opengeospatial.net/ows"
-xmlns:xlink="http://www.w3.org/1999/xlink"
-xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-xsi:schemaLocation="http://www.opengeospatial.net/wps/wpsDescribeProcess.xsd">
-
-...
-
-   This will cause PyWPS to look after self.status array in your process
-   in form form
-    self.status = ["Message", Percent_Done]
-
-   and generate XML file in statusLocation with this embed message. E.g.
-
-    self.status = ["Generating raster map", 50]
-
-   or better
-    self.SetStatus("Generarting raster map", 50)
-
-   will become
-
-...
-    <Status>
-            <ProcessStarted message="Generating raster map" percentCompleted="5
-0"/>
-    </Status>
-...
-
-                           Example process: addvalue
-
-   This sample process describes how to made your own WPS processes.
-   Purpose of this process is:
-     * Download input raster map from some server
-     * Convert it to integer values
-     * Add input value to each raster cell
-     * Convert raster to vector
-     * Export raster to TIFF and vector to GML. Vector file will be embed
-       ot output XML file.
-
-"""
-
-pywps process example:
-
-addvalue: Adds some value to raster map
-"""
-# Author:       Jachym Cepicky
-#               http://les-ejk.cz
-# Lince:        GNU/GPL
-#
-# Copyright (C) 2006 Jachym Cepicky
-
-import os,time,string,sys,shutil
-from pywps.Wps.process import GRASSWPSProcess
-
-class Process (GRASSWPSProcess):
-    #
-    # Initialization
-    #
-    def __init__(self):
-        GRASSWPSProcess.__init__(self,
-                            Identifier="Addvalue",
-                    Title="Add some value to input raster map",
-                            processVersion = "0.2",
-                            statusSupported="true",
-                            storeSupported="true",
-                            grassLocation = None)
-
-
-        #
-        # Inputs
-        self.AddComplexInput(Identifier="input",
-                            Title="Input raster map",
-                            Formats=["image/tiff"])
-        self.AddLiteralInput(Identifier="value",
-                            Title="Value to be added",
-                            type=type(0))
-
-        #
-        # Outputs
-        self.AddComplexReferenceOutput(Identifier="output",
-                            Title="Resulting output map",
-                            Formats=["image/tiff"])
-    #
-    # Execute part of the process
-    #
-    def execute(self):
-        """
-        This function
-            1) Imports the raster map
-            2) runs r.mapcalc out=in+value
-            3) Exports the raster map
-            4) returns the new file name or 'None' if something went wrong
-        """
-
-        # import of the data
-        self.SetStatus("Importing data")
-        if not self.GCmd("r.in.gdal -o in=%s out=input" %\
-                (self.GetInputValue("input"))):
-            return "Could not import raster file"
-        self.SetStatus("Importing data",10)
-
-        # compositing 3 bands to one raster file
-        for gdalinfoln in os.popen("gdalinfo %s" %\
-                (self.GetInputValue("input"))):
-            if gdalinfoln.split()[0] == "Band" and gdalinfoln.split()[1] == "3"
-:
-                self.GCmd("""g.region rast=input.red """)
-                self.GCmd("r.composite r=input.red b=input.blue g=input.green o
-ut=input")
-
-        # region setting
-        self.GCmd("""g.region rast=input""")
-
-        # adding the value
-        self.SetStatus("Adding new value to raster map",50)
-        self.GCmd("r.mapcalc output='input+%f'" % float(self.GetInputValue('val
-ue')))
-
-        # output
-        self.SetStatus("Raster file export", 90)
-        self.GCmd("r.out.gdal type=Int32 in=output out=%s" % "output.tif")
-
-        # setting output values
-        self.SetOutputValue("output","output.tif")
-        if "output.tif" in os.listdir(os.curdir):
-            return  # OK
-        else:
-            return "Output file not created!" # FAILED
-        """
-
-                       KVP request encoding of addvalue
-
-   This process can be lunched with URL:
-   http://localhost/cgi-bin/wps.py?service=wps&version=0.4.0&identifier=a
-   ddvalue&request=execute& $\backslash$
-   datainputs=input,http://localhost/data/raster.tif,value,250&status=tru
-   e&store=true
-
-                         XML request encoding addvalue
-
-request=<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
-<Execute service='wps' version='0.4.0' store='true' status='false'
-    xmlns="http://www.opengeospatial.net/wps"
-    xmlns:ows="http://www.opengeospatial.net/ows">
-<ows:Identifier>addvalue</ows:Identifier>
-<DataInputs>
-    <Input>
-        <ows:Identifier>input</ows:Identifier>
-        <ComplexValueReference reference='http://localhost/wps/data/soils.tif'
-/>
-    </Input>
-    <Input>
-        <ows:Identifier>value</ows:Identifier>
-        <LiteralValue>250</LiteralValue>
-    </Input>
-    <!-- Input>
-        <ows:Identifier>bbox</ows:Identifier>
-        <BoundingBoxValue>
-            <BoundingBox>
-                <LowerCorner>-1 -1</LowerCorner>
-                <UpperCorner>10 10</UpperCorner>
-            </BoundingBox>
-        </BoundingBoxValue>
-    </Input -->
-</DataInputs>
-</Execute>
-
-                               Licence of PyWPS
-
-                       The GNU General Public License
-
-                            Version 2, June 1991
-
-           Copyright © 1989, 1991 Free Software Foundation, Inc.
-
-          51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-
-    Everyone is permitted to copy and distribute verbatim copies of this
-             license document, but changing it is not allowed.
-
-  Preamble:
-
-   The licenses for most software are designed to take away your freedom
-   to share and change it. By contrast, the GNU General Public License is
-   intended to guarantee your freedom to share and change free
-   software--to make sure the software is free for all its users. This
-   General Public License applies to most of the Free Software
-   Foundation's software and to any other program whose authors commit to
-   using it. (Some other Free Software Foundation software is covered by
-   the GNU Library General Public License instead.) You can apply it to
-   your programs, too.
-
-   When we speak of free software, we are referring to freedom, not
-   price. Our General Public Licenses are designed to make sure that you
-   have the freedom to distribute copies of free software (and charge for
-   this service if you wish), that you receive source code or can get it
-   if you want it, that you can change the software or use pieces of it
-   in new free programs; and that you know you can do these things.
-
-   To protect your rights, we need to make restrictions that forbid
-   anyone to deny you these rights or to ask you to surrender the rights.
-   These restrictions translate to certain responsibilities for you if
-   you distribute copies of the software, or if you modify it.
-
-   For example, if you distribute copies of such a program, whether
-   gratis or for a fee, you must give the recipients all the rights that
-   you have. You must make sure that they, too, receive or can get the
-   source code. And you must show them these terms so they know their
-   rights.
-
-   We protect your rights with two steps: (1) copyright the software, and
-   (2) offer you this license which gives you legal permission to copy,
-   distribute and/or modify the software.
-
-   Also, for each author's protection and ours, we want to make certain
-   that everyone understands that there is no warranty for this free
-   software. If the software is modified by someone else and passed on,
-   we want its recipients to know that what they have is not the
-   original, so that any problems introduced by others will not reflect
-   on the original authors' reputations.
-
-   Finally, any free program is threatened constantly by software
-   patents. We wish to avoid the danger that redistributors of a free
-   program will individually obtain patent licenses, in effect making the
-   program proprietary. To prevent this, we have made it clear that any
-   patent must be licensed for everyone's free use or not licensed at
-   all.
-
-   The precise terms and conditions for copying, distribution and
-   modification follow.
-
-                         GNU GENERAL PUBLIC LICENSE
-      TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-    1. This License applies to any program or other work which contains a
-       notice placed by the copyright holder saying it may be distributed
-       under the terms of this General Public License. The ``Program'',
-       below, refers to any such program or work, and a ``work based on
-       the Program'' means either the Program or any derivative work
-       under copyright law: that is to say, a work containing the Program
-       or a portion of it, either verbatim or with modifications and/or
-       translated into another language. (Hereinafter, translation is
-       included without limitation in the term ``modification''.) Each
-       licensee is addressed as ``you''.
-       Activities other than copying, distribution and modification are
-       not covered by this License; they are outside its scope. The act
-       of running the Program is not restricted, and the output from the
-       Program is covered only if its contents constitute a work based on
-       the Program (independent of having been made by running the
-       Program). Whether that is true depends on what the Program does.
-    2. You may copy and distribute verbatim copies of the Program's
-       source code as you receive it, in any medium, provided that you
-       conspicuously and appropriately publish on each copy an
-       appropriate copyright notice and disclaimer of warranty; keep
-       intact all the notices that refer to this License and to the
-       absence of any warranty; and give any other recipients of the
-       Program a copy of this License along with the Program.
-       You may charge a fee for the physical act of transferring a copy,
-       and you may at your option offer warranty protection in exchange
-       for a fee.
-    3. You may modify your copy or copies of the Program or any portion
-       of it, thus forming a work based on the Program, and copy and
-       distribute such modifications or work under the terms of Section 1
-       above, provided that you also meet all of these conditions:
-         1. You must cause the modified files to carry prominent notices
-            stating that you changed the files and the date of any
-            change.
-         2. You must cause any work that you distribute or publish, that
-            in whole or in part contains or is derived from the Program
-            or any part thereof, to be licensed as a whole at no charge
-            to all third parties under the terms of this License.
-         3. If the modified program normally reads commands interactively
-            when run, you must cause it, when started running for such
-            interactive use in the most ordinary way, to print or display
-            an announcement including an appropriate copyright notice and
-            a notice that there is no warranty (or else, saying that you
-            provide a warranty) and that users may redistribute the
-            program under these conditions, and telling the user how to
-            view a copy of this License. (Exception: if the Program
-            itself is interactive but does not normally print such an
-            announcement, your work based on the Program is not required
-            to print an announcement.)
-       These requirements apply to the modified work as a whole. If
-       identifiable sections of that work are not derived from the
-       Program, and can be reasonably considered independent and separate
-       works in themselves, then this License, and its terms, do not
-       apply to those sections when you distribute them as separate
-       works. But when you distribute the same sections as part of a
-       whole which is a work based on the Program, the distribution of
-       the whole must be on the terms of this License, whose permissions
-       for other licensees extend to the entire whole, and thus to each
-       and every part regardless of who wrote it.
-       Thus, it is not the intent of this section to claim rights or
-       contest your rights to work written entirely by you; rather, the
-       intent is to exercise the right to control the distribution of
-       derivative or collective works based on the Program.
-       In addition, mere aggregation of another work not based on the
-       Program with the Program (or with a work based on the Program) on
-       a volume of a storage or distribution medium does not bring the
-       other work under the scope of this License.
-    4. You may copy and distribute the Program (or a work based on it,
-       under Section 2) in object code or executable form under the terms
-       of Sections 1 and 2 above provided that you also do one of the
-       following:
-         1. Accompany it with the complete corresponding machine-readable
-            source code, which must be distributed under the terms of
-            Sections 1 and 2 above on a medium customarily used for
-            software interchange; or,
-         2. Accompany it with a written offer, valid for at least three
-            years, to give any third party, for a charge no more than
-            your cost of physically performing source distribution, a
-            complete machine-readable copy of the corresponding source
-            code, to be distributed under the terms of Sections 1 and 2
-            above on a medium customarily used for software interchange;
-            or,
-         3. Accompany it with the information you received as to the
-            offer to distribute corresponding source code. (This
-            alternative is allowed only for noncommercial distribution
-            and only if you received the program in object code or
-            executable form with such an offer, in accord with Subsection
-            b above.)
-       The source code for a work means the preferred form of the work
-       for making modifications to it. For an executable work, complete
-       source code means all the source code for all modules it contains,
-       plus any associated interface definition files, plus the scripts
-       used to control compilation and installation of the executable.
-       However, as a special exception, the source code distributed need
-       not include anything that is normally distributed (in either
-       source or binary form) with the major components (compiler,
-       kernel, and so on) of the operating system on which the executable
-       runs, unless that component itself accompanies the executable.
-       If distribution of executable or object code is made by offering
-       access to copy from a designated place, then offering equivalent
-       access to copy the source code from the same place counts as
-       distribution of the source code, even though third parties are not
-       compelled to copy the source along with the object code.
-    5. You may not copy, modify, sublicense, or distribute the Program
-       except as expressly provided under this License. Any attempt
-       otherwise to copy, modify, sublicense or distribute the Program is
-       void, and will automatically terminate your rights under this
-       License. However, parties who have received copies, or rights,
-       from you under this License will not have their licenses
-       terminated so long as such parties remain in full compliance.
-    6. You are not required to accept this License, since you have not
-       signed it. However, nothing else grants you permission to modify
-       or distribute the Program or its derivative works. These actions
-       are prohibited by law if you do not accept this License.
-       Therefore, by modifying or distributing the Program (or any work
-       based on the Program), you indicate your acceptance of this
-       License to do so, and all its terms and conditions for copying,
-       distributing or modifying the Program or works based on it.
-    7. Each time you redistribute the Program (or any work based on the
-       Program), the recipient automatically receives a license from the
-       original licensor to copy, distribute or modify the Program
-       subject to these terms and conditions. You may not impose any
-       further restrictions on the recipients' exercise of the rights
-       granted herein. You are not responsible for enforcing compliance
-       by third parties to this License.
-    8. If, as a consequence of a court judgment or allegation of patent
-       infringement or for any other reason (not limited to patent
-       issues), conditions are imposed on you (whether by court order,
-       agreement or otherwise) that contradict the conditions of this
-       License, they do not excuse you from the conditions of this
-       License. If you cannot distribute so as to satisfy simultaneously
-       your obligations under this License and any other pertinent
-       obligations, then as a consequence you may not distribute the
-       Program at all. For example, if a patent license would not permit
-       royalty-free redistribution of the Program by all those who
-       receive copies directly or indirectly through you, then the only
-       way you could satisfy both it and this License would be to refrain
-       entirely from distribution of the Program.
-       If any portion of this section is held invalid or unenforceable
-       under any particular circumstance, the balance of the section is
-       intended to apply and the section as a whole is intended to apply
-       in other circumstances.
-       It is not the purpose of this section to induce you to infringe
-       any patents or other property right claims or to contest validity
-       of any such claims; this section has the sole purpose of
-       protecting the integrity of the free software distribution system,
-       which is implemented by public license practices. Many people have
-       made generous contributions to the wide range of software
-       distributed through that system in reliance on consistent
-       application of that system; it is up to the author/donor to decide
-       if he or she is willing to distribute software through any other
-       system and a licensee cannot impose that choice.
-       This section is intended to make thoroughly clear what is believed
-       to be a consequence of the rest of this License.
-    9. If the distribution and/or use of the Program is restricted in
-       certain countries either by patents or by copyrighted interfaces,
-       the original copyright holder who places the Program under this
-       License may add an explicit geographical distribution limitation
-       excluding those countries, so that distribution is permitted only
-       in or among countries not thus excluded. In such case, this
-       License incorporates the limitation as if written in the body of
-       this License.
-   10. The Free Software Foundation may publish revised and/or new
-       versions of the General Public License from time to time. Such new
-       versions will be similar in spirit to the present version, but may
-       differ in detail to address new problems or concerns.
-       Each version is given a distinguishing version number. If the
-       Program specifies a version number of this License which applies
-       to it and ``any later version'', you have the option of following
-       the terms and conditions either of that version or of any later
-       version published by the Free Software Foundation. If the Program
-       does not specify a version number of this License, you may choose
-       any version ever published by the Free Software Foundation.
-   11. If you wish to incorporate parts of the Program into other free
-       programs whose distribution conditions are different, write to the
-       author to ask for permission. For software which is copyrighted by
-       the Free Software Foundation, write to the Free Software
-       Foundation; we sometimes make exceptions for this. Our decision
-       will be guided by the two goals of preserving the free status of
-       all derivatives of our free software and of promoting the sharing
-       and reuse of software generally.
-
-                                NO WARRANTY
-   12. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
-       WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
-       LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS
-       AND/OR OTHER PARTIES PROVIDE THE PROGRAM ``AS IS'' WITHOUT
-       WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
-       NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-       FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE
-       QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-       PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
-       SERVICING, REPAIR OR CORRECTION.
-   13. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-       WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
-       MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
-       LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
-       INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
-       INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-       DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
-       OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
-       OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
-       ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-                        END OF TERMS AND CONDITIONS
-
-                           Licence of this document
-
-                       GNU Free Documentation License
-
-                         Version 1.2, November 2002
-
-          Copyright ©2000,2001,2002 Free Software Foundation, Inc.
-
-           51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-    Everyone is permitted to copy and distribute verbatim copies of this
-             license document, but changing it is not allowed.
-
-                                  Preamble
-
-   The purpose of this License is to make a manual, textbook, or other
-   functional and useful document "free" in the sense of freedom: to
-   assure everyone the effective freedom to copy and redistribute it,
-   with or without modifying it, either commercially or noncommercially.
-   Secondarily, this License preserves for the author and publisher a way
-   to get credit for their work, while not being considered responsible
-   for modifications made by others.
-
-   This License is a kind of "copyleft", which means that derivative
-   works of the document must themselves be free in the same sense. It
-   complements the GNU General Public License, which is a copyleft
-   license designed for free software.
-
-   We have designed this License in order to use it for manuals for free
-   software, because free software needs free documentation: a free
-   program should come with manuals providing the same freedoms that the
-   software does. But this License is not limited to software manuals; it
-   can be used for any textual work, regardless of subject matter or
-   whether it is published as a printed book. We recommend this License
-   principally for works whose purpose is instruction or reference.
-
-                      1. APPLICABILITY AND DEFINITIONS
-
-   This License applies to any manual or other work, in any medium, that
-   contains a notice placed by the copyright holder saying it can be
-   distributed under the terms of this License. Such a notice grants a
-   world-wide, royalty-free license, unlimited in duration, to use that
-   work under the conditions stated herein. The "Document", below, refers
-   to any such manual or work. Any member of the public is a licensee,
-   and is addressed as "you". You accept the license if you copy, modify
-   or distribute the work in a way requiring permission under copyright
-   law.
-
-   A "Modified Version" of the Document means any work containing the
-   Document or a portion of it, either copied verbatim, or with
-   modifications and/or translated into another language.
-
-   A "Secondary Section" is a named appendix or a front-matter section of
-   the Document that deals exclusively with the relationship of the
-   publishers or authors of the Document to the Document's overall
-   subject (or to related matters) and contains nothing that could fall
-   directly within that overall subject. (Thus, if the Document is in
-   part a textbook of mathematics, a Secondary Section may not explain
-   any mathematics.) The relationship could be a matter of historical
-   connection with the subject or with related matters, or of legal,
-   commercial, philosophical, ethical or political position regarding
-   them.
-
-   The "Invariant Sections" are certain Secondary Sections whose titles
-   are designated, as being those of Invariant Sections, in the notice
-   that says that the Document is released under this License. If a
-   section does not fit the above definition of Secondary then it is not
-   allowed to be designated as Invariant. The Document may contain zero
-   Invariant Sections. If the Document does not identify any Invariant
-   Sections then there are none.
-
-   The "Cover Texts" are certain short passages of text that are listed,
-   as Front-Cover Texts or Back-Cover Texts, in the notice that says that
-   the Document is released under this License. A Front-Cover Text may be
-   at most 5 words, and a Back-Cover Text may be at most 25 words.
-
-   A "Transparent" copy of the Document means a machine-readable copy,
-   represented in a format whose specification is available to the
-   general public, that is suitable for revising the document
-   straightforwardly with generic text editors or (for images composed of
-   pixels) generic paint programs or (for drawings) some widely available
-   drawing editor, and that is suitable for input to text formatters or
-   for automatic translation to a variety of formats suitable for input
-   to text formatters. A copy made in an otherwise Transparent file
-   format whose markup, or absence of markup, has been arranged to thwart
-   or discourage subsequent modification by readers is not Transparent.
-   An image format is not Transparent if used for any substantial amount
-   of text. A copy that is not "Transparent" is called "Opaque".
-
-   Examples of suitable formats for Transparent copies include plain
-   ASCII without markup, Texinfo input format, LaTeX input format, SGML
-   or XML using a publicly available DTD, and standard-conforming simple
-   HTML, PostScript or PDF designed for human modification. Examples of
-   transparent image formats include PNG, XCF and JPG. Opaque formats
-   include proprietary formats that can be read and edited only by
-   proprietary word processors, SGML or XML for which the DTD and/or
-   processing tools are not generally available, and the
-   machine-generated HTML, PostScript or PDF produced by some word
-   processors for output purposes only.
-
-   The "Title Page" means, for a printed book, the title page itself,
-   plus such following pages as are needed to hold, legibly, the material
-   this License requires to appear in the title page. For works in
-   formats which do not have any title page as such, "Title Page" means
-   the text near the most prominent appearance of the work's title,
-   preceding the beginning of the body of the text.
-
-   A section "Entitled XYZ" means a named subunit of the Document whose
-   title either is precisely XYZ or contains XYZ in parentheses following
-   text that translates XYZ in another language. (Here XYZ stands for a
-   specific section name mentioned below, such as "Acknowledgements",
-   "Dedications", "Endorsements", or "History".) To "Preserve the Title"
-   of such a section when you modify the Document means that it remains a
-   section "Entitled XYZ" according to this definition.
-
-   The Document may include Warranty Disclaimers next to the notice which
-   states that this License applies to the Document. These Warranty
-   Disclaimers are considered to be included by reference in this
-   License, but only as regards disclaiming warranties: any other
-   implication that these Warranty Disclaimers may have is void and has
-   no effect on the meaning of this License.
-
-                            2. VERBATIM COPYING
-
-   You may copy and distribute the Document in any medium, either
-   commercially or noncommercially, provided that this License, the
-   copyright notices, and the license notice saying this License applies
-   to the Document are reproduced in all copies, and that you add no
-   other conditions whatsoever to those of this License. You may not use
-   technical measures to obstruct or control the reading or further
-   copying of the copies you make or distribute. However, you may accept
-   compensation in exchange for copies. If you distribute a large enough
-   number of copies you must also follow the conditions in section 3.
-
-   You may also lend copies, under the same conditions stated above, and
-   you may publicly display copies.
-
-                           3. COPYING IN QUANTITY
-
-   If you publish printed copies (or copies in media that commonly have
-   printed covers) of the Document, numbering more than 100, and the
-   Document's license notice requires Cover Texts, you must enclose the
-   copies in covers that carry, clearly and legibly, all these Cover
-   Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
-   the back cover. Both covers must also clearly and legibly identify you
-   as the publisher of these copies. The front cover must present the
-   full title with all words of the title equally prominent and visible.
-   You may add other material on the covers in addition. Copying with
-   changes limited to the covers, as long as they preserve the title of
-   the Document and satisfy these conditions, can be treated as verbatim
-   copying in other respects.
-
-   If the required texts for either cover are too voluminous to fit
-   legibly, you should put the first ones listed (as many as fit
-   reasonably) on the actual cover, and continue the rest onto adjacent
-   pages.
-
-   If you publish or distribute Opaque copies of the Document numbering
-   more than 100, you must either include a machine-readable Transparent
-   copy along with each Opaque copy, or state in or with each Opaque copy
-   a computer-network location from which the general network-using
-   public has access to download using public-standard network protocols
-   a complete Transparent copy of the Document, free of added material.
-   If you use the latter option, you must take reasonably prudent steps,
-   when you begin distribution of Opaque copies in quantity, to ensure
-   that this Transparent copy will remain thus accessible at the stated
-   location until at least one year after the last time you distribute an
-   Opaque copy (directly or through your agents or retailers) of that
-   edition to the public.
-
-   It is requested, but not required, that you contact the authors of the
-   Document well before redistributing any large number of copies, to
-   give them a chance to provide you with an updated version of the
-   Document.
-
-                              4. MODIFICATIONS
-
-   You may copy and distribute a Modified Version of the Document under
-   the conditions of sections 2 and 3 above, provided that you release
-   the Modified Version under precisely this License, with the Modified
-   Version filling the role of the Document, thus licensing distribution
-   and modification of the Modified Version to whoever possesses a copy
-   of it. In addition, you must do these things in the Modified Version:
-
-   A.
-          Use in the Title Page (and on the covers, if any) a title
-          distinct from that of the Document, and from those of previous
-          versions (which should, if there were any, be listed in the
-          History section of the Document). You may use the same title as
-          a previous version if the original publisher of that version
-          gives permission.
-   B.
-          List on the Title Page, as authors, one or more persons or
-          entities responsible for authorship of the modifications in the
-          Modified Version, together with at least five of the principal
-          authors of the Document (all of its principal authors, if it
-          has fewer than five), unless they release you from this
-          requirement.
-   C.
-          State on the Title page the name of the publisher of the
-          Modified Version, as the publisher.
-   D.
-          Preserve all the copyright notices of the Document.
-   E.
-          Add an appropriate copyright notice for your modifications
-          adjacent to the other copyright notices.
-   F.
-          Include, immediately after the copyright notices, a license
-          notice giving the public permission to use the Modified Version
-          under the terms of this License, in the form shown in the
-          Addendum below.
-   G.
-          Preserve in that license notice the full lists of Invariant
-          Sections and required Cover Texts given in the Document's
-          license notice.
-   H.
-          Include an unaltered copy of this License.
-   I.
-          Preserve the section Entitled "History", Preserve its Title,
-          and add to it an item stating at least the title, year, new
-          authors, and publisher of the Modified Version as given on the
-          Title Page. If there is no section Entitled "History" in the
-          Document, create one stating the title, year, authors, and
-          publisher of the Document as given on its Title Page, then add
-          an item describing the Modified Version as stated in the
-          previous sentence.
-   J.
-          Preserve the network location, if any, given in the Document
-          for public access to a Transparent copy of the Document, and
-          likewise the network locations given in the Document for
-          previous versions it was based on. These may be placed in the
-          "History" section. You may omit a network location for a work
-          that was published at least four years before the Document
-          itself, or if the original publisher of the version it refers
-          to gives permission.
-   K.
-          For any section Entitled "Acknowledgements" or "Dedications",
-          Preserve the Title of the section, and preserve in the section
-          all the substance and tone of each of the contributor
-          acknowledgements and/or dedications given therein.
-   L.
-          Preserve all the Invariant Sections of the Document, unaltered
-          in their text and in their titles. Section numbers or the
-          equivalent are not considered part of the section titles.
-   M.
-          Delete any section Entitled "Endorsements". Such a section may
-          not be included in the Modified Version.
-   N.
-          Do not retitle any existing section to be Entitled
-          "Endorsements" or to conflict in title with any Invariant
-          Section.
-   O.
-          Preserve any Warranty Disclaimers.
-
-   If the Modified Version includes new front-matter sections or
-   appendices that qualify as Secondary Sections and contain no material
-   copied from the Document, you may at your option designate some or all
-   of these sections as invariant. To do this, add their titles to the
-   list of Invariant Sections in the Modified Version's license notice.
-   These titles must be distinct from any other section titles.
-
-   You may add a section Entitled "Endorsements", provided it contains
-   nothing but endorsements of your Modified Version by various
-   parties-for example, statements of peer review or that the text has
-   been approved by an organization as the authoritative definition of a
-   standard.
-
-   You may add a passage of up to five words as a Front-Cover Text, and a
-   passage of up to 25 words as a Back-Cover Text, to the end of the list
-   of Cover Texts in the Modified Version. Only one passage of
-   Front-Cover Text and one of Back-Cover Text may be added by (or
-   through arrangements made by) any one entity. If the Document already
-   includes a cover text for the same cover, previously added by you or
-   by arrangement made by the same entity you are acting on behalf of,
-   you may not add another; but you may replace the old one, on explicit
-   permission from the previous publisher that added the old one.
-
-   The author(s) and publisher(s) of the Document do not by this License
-   give permission to use their names for publicity for or to assert or
-   imply endorsement of any Modified Version.
-
-                           5. COMBINING DOCUMENTS
-
-   You may combine the Document with other documents released under this
-   License, under the terms defined in section 4 above for modified
-   versions, provided that you include in the combination all of the
-   Invariant Sections of all of the original documents, unmodified, and
-   list them all as Invariant Sections of your combined work in its
-   license notice, and that you preserve all their Warranty Disclaimers.
-
-   The combined work need only contain one copy of this License, and
-   multiple identical Invariant Sections may be replaced with a single
-   copy. If there are multiple Invariant Sections with the same name but
-   different contents, make the title of each such section unique by
-   adding at the end of it, in parentheses, the name of the original
-   author or publisher of that section if known, or else a unique number.
-   Make the same adjustment to the section titles in the list of
-   Invariant Sections in the license notice of the combined work.
-
-   In the combination, you must combine any sections Entitled "History"
-   in the various original documents, forming one section Entitled
-   "History"; likewise combine any sections Entitled "Acknowledgements",
-   and any sections Entitled "Dedications". You must delete all sections
-   Entitled "Endorsements".
-
-                        6. COLLECTIONS OF DOCUMENTS
-
-   You may make a collection consisting of the Document and other
-   documents released under this License, and replace the individual
-   copies of this License in the various documents with a single copy
-   that is included in the collection, provided that you follow the rules
-   of this License for verbatim copying of each of the documents in all
-   other respects.
-
-   You may extract a single document from such a collection, and
-   distribute it individually under this License, provided you insert a
-   copy of this License into the extracted document, and follow this
-   License in all other respects regarding verbatim copying of that
-   document.
-
-                   7. AGGREGATION WITH INDEPENDENT WORKS
-
-   A compilation of the Document or its derivatives with other separate
-   and independent documents or works, in or on a volume of a storage or
-   distribution medium, is called an "aggregate" if the copyright
-   resulting from the compilation is not used to limit the legal rights
-   of the compilation's users beyond what the individual works permit.
-   When the Document is included in an aggregate, this License does not
-   apply to the other works in the aggregate which are not themselves
-   derivative works of the Document.
-
-   If the Cover Text requirement of section 3 is applicable to these
-   copies of the Document, then if the Document is less than one half of
-   the entire aggregate, the Document's Cover Texts may be placed on
-   covers that bracket the Document within the aggregate, or the
-   electronic equivalent of covers if the Document is in electronic form.
-   Otherwise they must appear on printed covers that bracket the whole
-   aggregate.
-
-                               8. TRANSLATION
-
-   Translation is considered a kind of modification, so you may
-   distribute translations of the Document under the terms of section 4.
-   Replacing Invariant Sections with translations requires special
-   permission from their copyright holders, but you may include
-   translations of some or all Invariant Sections in addition to the
-   original versions of these Invariant Sections. You may include a
-   translation of this License, and all the license notices in the
-   Document, and any Warranty Disclaimers, provided that you also include
-   the original English version of this License and the original versions
-   of those notices and disclaimers. In case of a disagreement between
-   the translation and the original version of this License or a notice
-   or disclaimer, the original version will prevail.
-
-   If a section in the Document is Entitled "Acknowledgements",
-   "Dedications", or "History", the requirement (section 4) to Preserve
-   its Title (section 1) will typically require changing the actual
-   title.
-
-                               9. TERMINATION
-
-   You may not copy, modify, sublicense, or distribute the Document
-   except as expressly provided for under this License. Any other attempt
-   to copy, modify, sublicense or distribute the Document is void, and
-   will automatically terminate your rights under this License. However,
-   parties who have received copies, or rights, from you under this
-   License will not have their licenses terminated so long as such
-   parties remain in full compliance.
-
-                    10. FUTURE REVISIONS OF THIS LICENSE
-
-   The Free Software Foundation may publish new, revised versions of the
-   GNU Free Documentation License from time to time. Such new versions
-   will be similar in spirit to the present version, but may differ in
-   detail to address new problems or concerns. See
-   http://www.gnu.org/copyleft/.
-
-   Each version of the License is given a distinguishing version number.
-   If the Document specifies that a particular numbered version of this
-   License "or any later version" applies to it, you have the option of
-   following the terms and conditions either of that specified version or
-   of any later version that has been published (not as a draft) by the
-   Free Software Foundation. If the Document does not specify a version
-   number of this License, you may choose any version ever published (not
-   as a draft) by the Free Software Foundation.
-
-                            About this document ...
-
-   Implementation of OGC's WPS standard: PyWPS
-
-   This document was generated using the [48]LaTeX2HTML translator
-   Version 2002-2-1 (1.71)
-
-   Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based
-   Learning Unit, University of Leeds.
-   Copyright © 1997, 1998, 1999, [49]Ross Moore, Mathematics Department,
-   Macquarie University, Sydney.
-
-   The command line arguments were:
-   latex2html -split 0 pywps-howto.tex
-
-   The translation was initiated by Jachym Cepicky on 2007-08-14
-     _________________________________________________________________
-
-    Footnotes
-
-   ... list[50]^1
-          http://wald.intevation.org/mailman/listinfo/pywps-develPyWPS -
-          development list
-
-   ... bugtracker[51]^2
-          http://wald.intevation.org/tracker/?atid=174&group_id=22&func=b
-          rowsePyWPS Bug tracker
-
-   ... site[52]^3
-          [53]http://pywps.wald.intevation.org
-
-   ... document[54]^4
-          [55]http://www.opengeospatial.org/standards/requests/28
-
-   ...process.html[56]^5
-          http://wald.intevation.org/plugins/scmsvn/viewcvs.php/*checkout
-          */trunk/doc/process.html?rev=369&root=pywpsDocumentation to
-          process.py module
-
-   ...self.grassLocation[57]^6
-          See e.g.
-          http://grass.itc.it/grass63/manuals/html63_user/helptext.htmlGR
-          ASS manual for details
-
-   ... later[58]^7
-          self.grassLocation="/path/to/location"
-     _________________________________________________________________
-
-   next_inactive up previous
-
-
-    Jachym Cepicky 2007-08-14
-
-Reference
-
-   1. http://dbu.de/
-   2. http://gdf-hannover.de/
-   3. http://www.bnhelp.cz/
-   4. http://les-ejk.cz/
-   5. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#SECTION00020000000000000000
-   6. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#SECTION00021000000000000000
-   7. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#SECTION00030000000000000000
-   8. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#SECTION00040000000000000000
-   9. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#SECTION00050000000000000000
-  10. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#SECTION00051000000000000000
-  11. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#SECTION00052000000000000000
-  12. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#SECTION00060000000000000000
-  13. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#SECTION00061000000000000000
-  14. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#SECTION00062000000000000000
-  15. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#SECTION00063000000000000000
-  16. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#SECTION00070000000000000000
-  17. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#SECTION00071000000000000000
-  18. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#SECTION00072000000000000000
-  19. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#SECTION00073000000000000000
-  20. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#SECTION00080000000000000000
-  21. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#SECTION00090000000000000000
-  22. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#SECTION00091000000000000000
-  23. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#SECTION00092000000000000000
-  24. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#SECTION000100000000000000000
-  25. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#SECTION000110000000000000000
-  26. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#SECTION000120000000000000000
-  27. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#SECTION000130000000000000000
-  28. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#SECTION000140000000000000000
-  29. http://pywps.wald.intevation.org/
-  30. http://pywps.ominiverdi.org/
-  31. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#install
-  32. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#configuration
-  33. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#processes
-  34. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#testing
-  35. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#foot377
-  36. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#foot378
-  37. http://httpd.apache.org/
-  38. http://grass.itc.it/
-  39. http://proj.maptools.org/
-  40. http://gdal.org/
-  41. http://www.r-project.org/
-  42. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#foot91
-  43. http://www.opengeospatial.org/specs/?page=specs
-  44. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#foot381
-  45. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#foot382
-  46. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#foot385
-  47. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#foot386
-  48. http://www.latex2html.org/
-  49. http://www.maths.mq.edu.au/~ross/
-  50. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#tex2html8
-  51. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#tex2html9
-  52. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#tex2html15
-  53. http://pywps.wald.intevation.org/
-  54. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#tex2html18
-  55. http://www.opengeospatial.org/standards/requests/28
-  56. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#tex2html20
-  57. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#tex2html21
-  58. file://localhost/home/jachym/src/pywps/trunk/doc/pywps-howto.html#tex2html22
+      Jachym Cepicky 2008-08-28



More information about the Pywps-commits mailing list