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

Guide de démarrage avec PyWPS

PyWPS est une implémentation de serveur OGC WPS (Web Processing Service 1.0.0) écrite dans Python.

La bibliothèque PyWPS 4.0.0 est installée par défaut sur OSGeo-Live. Il s’agit d’une bibliothèque de base qui n’est pas destinée à être exécutée directement, mais plutôt à être utilisée dans le développement de services WPS. Un service d’exemple basé sur Flask est disponible sur GitHub pour faciliter un premier contact avec PyWPS.

Ce guide de démarrage rapide décrit comment :

  • Installer et configurer le service d’exemple pywps-flask

  • Effectuez des demandes GetCapabilities, DescribeProcess et Execute

  • Développez vos propres processus WPS

Installer pywps-flask

Étant donné que le service d’exemple dépend de Flask, assurez-vous qu’il est installé sur votre OSGeoLive :

sudo apt install python-flask

Puis clonez le dépot à partir GitHub :

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

Maintenant, déplacez-vous dans le dépôt et modifiez le fichier de configuration. Cela peut être fait avec un programme comme nano :

nano pywps.cfg

La seule chose essentielle à vérifier est l’emplacement de la base de données de journalisation.`Pywps-flask` fournit un exemple de base de données SQLite qui peut être utilisé à cette fin. Assurez-vous que le paramètre database se lit comme suit :

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

Enregistrez le fichier de configuration et sortez de nano, vous pouvez maintenant exécuter le service :

python demo.py

Si tout va bien, vous recevrez un message comme ceci :

* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

Tester les processus disponibles

Ouvrez un navigateur Web et pointez-le vers l’adresse où le service d’exemple est à l’écoute: http://127.0.0.1:5000/ La page suivante vous sera présenté :

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

Utilisez les boutons verts pour explorer le service. Émettre une demande de GetCapabilities pour un aperçu du service; émettre une demande de DescribeProcess pour connaître les détails d’un projet particulier. Notez l’URL de la demande dans l’adresse du navigateur.

Il est maintenant temps de tester une demande Execute Vous pouvez essayer le processus say_hello, qui est assez simple. Dirigez votre navigateur Web vers l’adresse suivante :

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

Le processus répond simplement par un message « Hello OSGeo », codé dans un document de réponse WPS standard. Votre navigateur devrait montrer quelque chose comme:

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

Développement de processus WPS

Pour développer de nouveaux processus, il vous suffit de créer de nouveaux modules Python à l’intérieur du dossier processes . Utilisez les processus existants comme modèles pour vous aider à structurer votre code. Un examen plus étroit du processus say_hello montre la principale caractéristique d’un processus 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. Invoquez le constructeur parent, en transmettant les métadonnées du processus :

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

Ensuite ?

PyWPS vous donne la liberté et la flexibilité d’écrire vos propres processus Python et de les exposer de la même manière.

  • Documentation officielle - Pour plus d’informations sur la configuration de PyWPS et l’API, consultez la documentation sur le site Web de PyWPS.

  • Tutoriel - Essayez le workshop, un tutoriel utilisé dans les ateliers pour initier les nouveaux utilisateurs à PyWPS 4.

  • Déploiement à la production - Le service pywps-flask n’est qu’un exemple et n’est pas conçu pour la production. Une alternative possible est un service basé sur Django,`pywps-django <https://github.com/jorgejesus/pywps-django>`_. La documentation fournit plus de détails sur la façon de mettre en place un service de production avec Apache ou nginx et Gunicorn.