Vypublikování skriptu jako WPS procesu¶
Skript upravíme následovně:
Vytvoříme třídu
ObcePsc
, která dědí vlastnosti z třídyProcess
(řádky 11 a 29-39).Definujeme vstupní (řádky 13-19) a výstupní (řádky 20-27) parametry WPS procesu
Implementujeme funkci
_handler()
(55), která se vykoná v okamžiku, kdy od klienta dorazí na server dotaz typurequest=execute
.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.