Guida rapida PyWPS¶
PyWPS è un’implementazione del server OGC WPS (Web Processing Service 1.0.0) scritta in Python.
La libreria PyWPS 4.0.0 è installata di default su OSGeo-Live. Questa è una libreria di base che non è destinata ad essere eseguita direttamente, ma piuttosto ad essere usata nello sviluppo di servizi WPS. Un esempio di servizio basato su Flask è disponibile su GitHub per facilitare un primo contatto con PyWPS.
Questa Guida Rapida descrive come:
Installa e configura il servizio di esempio pywps-flask
Esegui le richieste
GetCapabilities
,DescribeProcess
eExecute
.Sviluppa i propri processi WPS
Installa pywps-flask¶
Poiché il servizio di esempio dipende da Flask, assicurati che sia installato sul tuo OSGeo-Live:
sudo apt install python-flask
Poi clona il repository da GitHub:
git clone https://github.com/geopython/pywps-flask.git
Ora spostati nella cartella del repository e modifica il file di configurazione. Questo può essere fatto con un programma come nano:
nano pywps.cfg
L’unica cosa critica da verificare è la posizione del database di registrazione. Pywps-flask fornisce un database SQLite di esempio che può essere usato per questo scopo. Assicurati che l’impostazione del database sia così:
database=sqlite:////home/user/pywps-flask/logs/pywps-logs.sqlite3
Salva il file di configurazione ed esci da nano, ora puoi eseguire il servizio:
python demo.py
Se tutto va bene riceverai indietro un messaggio come:
* In esecuzione su http://127.0.0.1:5000/ (premere CTRL+C per uscire)
Test dei processi disponibili¶
Apri un browser web e puntalo all’indirizzo dove il servizio di esempio è in ascolto: http://127.0.0.1:5000/ Ti verrà presentata la seguente pagina:
Usa i pulsanti verdi per esplorare il servizio. Fai una richiesta GetCapabilities per una panoramica del servizio; fai una richiesta DescribeProcess per conoscere i dettagli di un particolare progetto. Nota l’URL della richiesta nell’indirizzo del browser.
Ora è il momento di testare una richiesta Execute. Puoi provare il processo say_hello, che è abbastanza semplice. Indirizza il tuo browser web al seguente indirizzo:
http://localhost:5000/wps?service=WPS&version=1.0.0&request=Execute&identifier=say_hello&dataInputs=name=OSGeo-Live
Il processo risponde semplicemente con un messaggio «Ciao OSGeo», codificato in un documento di risposta WPS standard. Il tuo browser dovrebbe mostrare qualcosa come:
Sviluppo dei processi WPS¶
Per sviluppare nuovi processi tutto quello che devi fare è creare nuovi moduli Python all’interno della cartella processes. Usa i processi esistenti come modelli per aiutarti a strutturare il tuo codice. Uno sguardo più attento al processo say_hello mostra la caratteristica principale di un processo PyWPS:
1. Import the necessary assets and create a class inheriting from the PyWPS Process class. In the constructor create the necessary objects for inputs and outputs:
from pywps import Process, LiteralInput, LiteralOutput, UOM
class SayHello(Process):
def __init__(self):
inputs = [LiteralInput('name', 'Input name', data_type='string')]
outputs = [LiteralOutput('response',
'Output response', data_type='string')]
Invoca il costruttore padre, passando i metadati del processo:
super(SayHello, self).__init__(
self._handler,
identifier='say_hello',
title='Process Say Hello',
abstract='Returns a literal string output\
with Hello plus the inputed name',
version='1.3.3.7',
inputs=inputs,
outputs=outputs,
store_supported=True,
status_supported=True
)
3. Create the handler method, that will be invoked to handle Execute requests. Use the request and response objects to retrieve inputs and set outputs.
def _handler(self, request, response):
response.outputs['response'].data = 'Hello ' + \
request.inputs['name'][0].data
response.outputs['response'].uom = UOM('unity')
return response
E ora¶
PyWPS ti dà la libertà e la flessibilità di scrivere i tuoi processi Python ed esporli di conseguenza.
Documentazione ufficiale - Per ulteriori informazioni sulla configurazione di PyWPS e sulle API, consulta la documentazione sul sito web di PyWPS.
Tutorial - Prova il workshop, un tutorial usato nei workshop per introdurre nuovi utenti a PyWPS 4.
Distribuzione in produzione - Il servizio pywps-flask è solo un esempio e non è progettato per la produzione. Una possibile alternativa è un servizio basato su Django, pywps-django. La documentazione fornisce ulteriori dettagli su come impostare un servizio di produzione <https://pywps.readthedocs.io/en/latest/deployment.html>`_ con Apache o nginx e Gunicorn.