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

PyWPS Quickstart

PyWPS ist eine OGC WPS (Web Processing Service 1.0.0) Server Implementierung, die in Python geschrieben wurde.

Die PyWPS 4.0.0-Bibliothek ist standardmäßig auf OSGeoLive installiert. Dies ist eine Kernbibliothek, die nicht direkt ausgeführt werden soll, sondern bei der Entwicklung von WPS-Diensten verwendet werden soll. Ein Beispieldienst basierend auf Flask ist bei GitHub verfügbar, um einen ersten Kontakt mit PyWPS zu erleichtern.

Diese Kurzanleitung beschreibt:

  • Installiere und konfiguriere den pywps-flask-Beispiel-Service

  • Führen Sie den GetCapabilities-, DescribeProcess- und Execute-Request durch.

  • Entwickeln Sie Ihre eigenen WPS-Prozesse

Installation von pywps-flask

Da der Beispieldienst von Flask abhängt, stellen Sie sicher, dass er auf Ihrem OSGeoLive installiert ist:

sudo apt install python-flask

Klone dann das Repository von GitHub:

git clone https://github.com/geopython/pywps-flask.git

Wechseln Sie nun in den Repository-Ordner, und bearbeiten Sie die Konfigurationsdatei. Dies kann mit einem Programm wie ‚nano‘ erfolgen:

nano pywps.cfg

Das einzige wichtige, zu überprüfende Thema ist der Speicherort der Protokollierungsdatenbank. ‚Pywps-flask‘ stellt eine SQLite-Beispieldatenbank bereit, die zu diesem Zweck verwendet werden kann. Stellen Sie sicher, dass sich die Einstellung „Datenbank“ wie folgt liest:

database=sqlite:////home/user/pywps-flask/logs/pywps-logs.sqlite3

Speichern Sie die Konfigurationsdatei und beenden Sie ‚nano‘, sie können den Dienst jetzt ausführen:

python demo.py

Wenn alles gut geht, erhalten Sie eine Nachricht wie:

* Läuft unter http://127.0.0.1:5000/ (Beenden Sie den Dienst über CTRL+C)

Testen Sie die verfügbaren Prozesse

Öffnen Sie einen Webbrowser, und zeigen Sie ihn auf die Adresse, an der der Beispieldienst lauscht: http://127.0.0.1:5000/ Sie werden mit der folgenden Seite angezeigt:

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

Verwenden Sie die grünen Schaltflächen, um den Dienst zu erkunden. Stellen Sie eine „GetCapabilities“-Aufruf für eine Übersicht über den Dienst aus. Über den „DescribeProcess“-Aufruf können Sie Details eines bestimmten Projekts erhalten. Führen Sie die Reuquest-URLs im Browser aus.

Es ist nun an der Zeit, einen ‚Execute‘-Aufruf zu testen. Sie können den „say_hello“-Prozess ausprobieren, der ziemlich einfach ist. Rufen Sie Ihren Webbrowser mit folgender Adresse auf:

http://localhost:5000/wps?service=WPS&version=1.0.0&request=Execute&identifier=say_hello&dataInputs=name=OSGeo-Live

Der Prozess antwortet einfach mit einer „Hello OSGeo“-Meldung, die in einem Standard-WPS-Antwortdokument codiert ist. Ihr Browser sollte so etwas wie Folgendes anzeigen:

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

Entwicklung von WPS-Prozessen

Um neue Prozesse zu entwickeln, müssen Sie lediglich neue Python-Module im Ordner „Prozesse“ erstellen. Verwenden Sie die vorhandenen Prozesse als Vorlagen, um den Code zu erstellen. Ein genauerer Blick auf den „say_hello“-Prozess zeigt das Hauptmerkmal eines PyWPS-Prozesses:

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. Rufen Sie den übergeordneten Konstruktor auf und geben Sie die Metadaten des Prozesses weiter:

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

Was kommt als nächstes

PyWPS gibt Ihnen die Freiheit und Flexibilität, Ihre eigenen Python-Prozesse zu schreiben und entsprechend verfügbar zu machen.

  • Offizielle Dokumentation – Weitere Informationen zur PyWPS-Konfiguration und der API finden Sie in der Dokumentation auf der PyWPS-Website.

  • Tutorial - Probieren Sie den workshop, ein Tutorial, das in Workshops verwendet wird, um neue Benutzer an PyWPS 4 heranzuführen.

  • Bereitstellung in der Produktion - Der „pywps-flask“-Dienst ist nur ein Beispiel und nicht für die Produktion konzipiert. Eine mögliche Alternative ist ein Django-basierter Dienst, pywps-django. Die Dokumentation weitre Informaationen bereit wie ein Dienst in Produktion mit Apache oder nginx und Gunicorn aufgebaut werden kann.