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