Vypublikování skriptu jako WPS procesu

Skript upravíme následovně:

  1. Vytvoříme třídu ObcePsc, která dědí vlastnosti z třídy Process (řádky 11 a 29-39).

  2. Definujeme vstupní (řádky 13-19) a výstupní (řádky 20-27) parametry WPS procesu

  3. Implementujeme funkci _handler() (55), která se vykoná v okamžiku, kdy od klienta dorazí na server dotaz typu request=execute.

  4. Vlastní tělo původního skriptu vnoříme do funkce obce_psc() (44).

 1#!/usr/bin/env python3
 2
 3import os
 4import sys
 5import tempfile
 6
 7from grass.pygrass.modules import Module
 8
 9from pywps import Process, LiteralInput, ComplexOutput, LOGGER, Format
10
11class ObcePsc(Process):
12     def __init__(self):
13          inputs = [
14               LiteralInput(
15                    identifier="psc",
16                    title="Zájmové PSČ",
17                    data_type="string"
18               )
19          ]
20          outputs = [
21               ComplexOutput(
22                    identifier="output",
23                    title="Vystupni GML soubor",
24                    supported_formats=[Format('application/gml+xml')],
25                    as_reference=True
26               )
27          ]
28
29          super().__init__(
30               self._handler,
31               identifier="obce_psc",
32               version="1.0",
33               title="Dotaz na obce dle PSC",
34               abstract="Testovaci sluzba PyWPS.",
35               inputs=inputs,
36               outputs=outputs,
37               grass_location="gismentors",
38               store_supported=True,
39               status_supported=True)
40
41          os.environ['GRASS_SKIP_MAPSET_OWNER_CHECK'] = '1'
42          os.environ['HOME'] = tempfile.gettempdir() # needed by G_home()
43
44     def obce_psc(self, psc):
45          map_name = 'obce_psc_{}'.format(psc)
46          
47          Module('v.extract', input='obce', output='obce1',
48                 where="psc = '{}'".format(psc))
49          Module('v.select', ainput='obce', binput='obce1',
50                 output=map_name,
51                 operator='overlap', overwrite=True)
52
53          return map_name
54          
55     def _handler(self, request, response):
56          psc = request.inputs['psc'][0].data
57
58          LOGGER.debug("Computation started")
59
60          map_name = self.obce_psc(psc)
61          LOGGER.debug("Computation finished")
62
63          LOGGER.debug("Export started")
64          Module('v.out.ogr',
65                 input=map_name,
66                 format='GML',
67                 output='output.gml',
68                 overwrite=True)
69          
70          response.outputs["output"].file = "output.gml"
71          return response

Skript ke stažení zde.