../../_images/logo_pywps.png ../../_images/OSGeo_project.png

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 e Execute.

  • 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:

../../_images/pywps-4.0.0_example.png

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:

../../_images/pywps-4.0.0_response.png

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')]
  1. 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.