Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

U kunt informatie over de API opvragen zonder in te loggen. In onderstaand voorbeeld wordt eerst het gebruik van de module ‘requests' (zie ook deze documentatie) gedefiieerd, zodat de HyDAMO validatie-API in Python gebruikt kan worden. Ook wordt worden het gebruik van de module ‘os' osen 'time’ gedefinieerd, zodat verderop in deze voorbeelden, eenvoudig bestanden en paden kunnen worden samenvoegd (met het commando os.path.join) en een tijdindicator kan worden gebruikt. Vervolgens wordt de URL van de server met de HyDAMO validatie-API opgegeven. Omdat de validatie webservice gebruikt maakt van een secure (https) verbinding moet bij elk request ook een certificaat meegegeven worden. Download onderstaand pem bestand en voeg dit toe aan (ieder) request (met de extra parameter verify=hydamo_cert).

...

Code Block
languagepy
import requests
import os
import time

server = "https://validatie-api.hydamo.nl"
hydamo_cert = r"...\HyDAMOValidatietool.pem"

#https://validatie-api.hydamo.nl/
response = requests.get(f"{server}/", verify=hydamo_cert)

if response.status_code == 200:
  print(response.text)

...

Code Block
languagepy
#http://validatie-api.hydamo.nl/task/[task_id]/execute/csv,geopackage,geojson
format = "csv,geopackage,geojson"

response_execute_task = requests.post(f"{server}/task/{task_id}/execute/{format}", headers=my_headers, verify=hydamo_cert) 

if response_execute_task.status_code == 202:
    print("Taak wordt gestart!")
    #controleer de status van de validatie-taak (periodiek)
    response_get_task = requests.get(f"{server}/task/{task_id}", headers=my_headers, verify=hydamo_cert) 
    if response_get_task.status_code == 200:
        status = str(response_get_task.json()["status"]) 
        while not (status == "finished" or status == "error"):
            response_get_task = requests.get(f"{server}/task/{task_id}", headers=my_headers, verify=hydamo_cert)
            if response_get_task.status_code == 200:
                status = str(response_get_task.json()["status"])
                print(f"status taak: {status}")
            time.sleep(560)

Het resultaat is:

Taak wordt gestart!
status taak: pending
status taak: validating

status taak: validating
status taak: finished

Let op: validatie-taken van grote datasets kunnen enige aanzienlijke tijd in beslag nemen. Wanneer deze de validatie tijd meer dan 30 minuten wordt, wordt geadviseerd om opnieuw te authentiseren op de validatie-API, om te voorkomen dat de token verloopt.

Download metadata van de validatie-taak

Tekst TODO

Als een validatie-taak gereed is , download metadata beeindigd (al dan niet succesvol), kan de metadata van de validatie-taak gedownload worden ter controle van het validatie resultaat.

Definieer een map waar de resultaat bestanden opgeslagen moeten worden.

...

languagepy

...

Allereerst wordt een lokale folder op een computersysteem gedefinieerd waar naartoe een bestand met metadata kan worden gedownload. Met een POST request naar de API op het endpoint task/result/metadata wordt een bestand met metadata van de validatie-taak opgevraagd. Naast de id van de validatie-taak (in de URL) worden ook de Bearer token (opgeslagen in my_headers) en het (https) beveiligingscertificaat (verify=hydamo_cert) meegegeven in het request. Als de HTML statuscode van de response gelijk is aan 200 (het post request geeft een succesvol resultaat), kan het bestand met de metadata worden opgeslagen in de lokale folder. Hiertoe wordt het resultaat van het request eerst opgeslaten in de variabele ‘result_data'. Vervolgens wordt gecontroleerd of de map waar het bestand opgeslagen moet worden bestaat en zo niet, dan wordt deze aangemaakt. Tot slot wordt het resultaat van het request opgeslagen in het bestand 'taak-id_metadata.json’.

Code Block
languagepy
result_folder = r"...\Resultaten"

#http://validatie-api.hydamo.nl/task/[task_id]/result/metadata
response_get_metadata = requests.get(server + '/task/' + str(task_id) + '/result/metadata', headers=my_headers, verify=hydamo_cert)

if response_get_metadata.status_code == 200:
    result_data = bytes(response_get_metadata.content)

Het resultaat is:

TODO

Download resulaten van de validatie-taak in CSV

Tekst TODO

Als een taak gereed is, download het resultaat als CSV per objectlaag (bijv stuw).

Code Block
languagepy
#http://validatie-api.hydamo.nl/task/[task_id]/result/[objectlaag].csv

response_get_results_csv = requests.get(server + '/task/' + str(task_id) + '/result/stuw.csv', headers=my_headers, verify=hydamo_cert)
                                
if response_get_results_csv.status_code == 200:
    result_data = bytes(response_get_results_csv.content)
    if not os.path.exists(result_folder):
        os.makedirs(result_folder)
    open(os.path.join(result_folder,"stuw.csv"), 'wb').write(response_get_results_csv.content)

Het resultaat is:

TODO

Een validatie-taak annuleren

Tekst TODO


    if not os.path.exists(result_folder):
        os.makedirs(result_folder)
    open(os.path.join(result_folder,f"{task_id}_metadata.json"), 'wb').write(response_get_metadata.content)

Het resultaat is een json bestand met de volgende inhoud (zie ook Resultaten):

{
"api_version": "1.0.0",
"user_name": "thonus",
"task_started": "2022-02-11 13:18:07",
"task_finished": "2022-02-11 13:26:14",
"success": true,
"module_version": "1.0.0",
"date_check": "2022-02-11T13:18:07.817032",
"duration": 487.0597188472748,
"status": "finished",
"dataset_layers": [
"duikersifonhevel",
"hydroobject",
"regelmiddel"
],
"result_layers": ["duikersifonhevel", "hydroobject", "regelmiddel"],
"missing_layers": ["admingrenswaterschap","afsluitmiddel","afvoergebiedaanvoergebied","aquaduct","beheergrenswaterschap","bodemval","brug",…,"sturing","stuw","vispassage","vispassagevlak","vuilvang","zandvang"
],
"error_layers": [],
"syntax_result": ["duikersifonhevel","hydroobject","regelmiddel"],
"validation_result": ["duikersifonhevel","regelmiddel","hydroobject"]
}

Download resultaten van de validatie-taak in CSV formaat

Als er geen fouten voorkomen in de metadata van een afgeronde validatie-taak kunnen de resultaten gedownload worden. In deze stap wordt het validatie-resultaat in een CSV bestand gedownload. N.B. dit is alleen mogelijk als bij het uitvoeren van de validatie-taak ook het format CSV is meegegeven! Een CSV bestand met validatie-resultaten kan gedownload worden door een GET request naar de API op het endpoint task/result te maken. Naast de id van de validatie-taak (in de URL) moet ook de naam van de objectlaag gevolgd door ‘.csv' meegegeven worden in de URL. Daarnaast zijn ook de Bearer token (opgeslagen in my_headers) en het (https) beveiligingscertificaat (verify=hydamo_cert) meegegeven in het request. Als de HTML statuscode van de response gelijk is aan 200 (het post request geeft een succesvol resultaat), kan het CSV bestand met validatie-resultaten worden opgeslagen in de lokale folder. In dit voorbeeld hebben de resultaten van object 'duikersifonhevel’ beschouwd. N.B. voor elke objectlaag moeten een apart CSV bestand gedownload worden!

Code Block
languagepy
#http://validatie-api.hydamo.nl/task/[task_id]/result/[objectlaag].csv
response_get_results_csv = requests.get(server + '/task/' + str(task_id) + '/result/duikersifonhevel.csv', headers=my_headers, verify=hydamo_cert)
                                
if response_get_results_csv.status_code == 200:
    result_data = bytes(response_get_results_csv.content)
    if not os.path.exists(result_folder):
        os.makedirs(result_folder)
    open(os.path.join(result_folder,"duikersifonhevel.csv"), 'wb').write(response_get_results_csv.content)

Het resultaat is een CSV bestand met resultaten van de validatie van de duikersifonhevels in de dataset (zie ook Resultaten).

Download resultaten van de validatie-taak in geopackage formaat

Op vergelijkbare manier als in de beschrijving voor het downloaden van een resultaat in CSV formaat, kunnen de resultaten ook in een geopackage gedownload worden, zodat deze te gebruiken zijn in een GIS programma. N.B. dit is alleen mogelijk als bij het uitvoeren van de validatie-taak ook het format geopackage is meegegeven! Een geopackage bestand met validatie-resultaten kan gedownload worden door een GET request naar de API op het endpoint task/result te maken. Naast de id van de validatie-taak (in de URL) moet ook het fomat ‘geopackage' meegegeven worden in de URL. Daarnaast zijn ook de Bearer token (opgeslagen in my_headers) en het (https) beveiligingscertificaat (verify=hydamo_cert) meegegeven in het request. Als de HTML statuscode van de response gelijk is aan 200 (het post request geeft een succesvol resultaat), kan het geopackage bestand met validatie-resultaten worden opgeslagen in de lokale folder. In tegenstelling tot het downloaden CSV bestand met validatie-resultaten per objectlaag, kunnen in een geopackage meerdere objectenlagen opgeslagen worden. Er hoeft in dus maar 1 geopackage bestand gedownload te worden.

Code Block
languagepy
#http://validatie-api.hydamo.nl/task/[task_id]/result/geopackage
response_get_results_geopackage = requests.get(server + '/task/' + str(task_id) + '/result/geopackage', headers=my_headers, verify=hydamo_cert)

if response_get_results_geopackage.status_code == 200:
    result_data = bytes(response_get_results_geopackage.content)
    if not os.path.exists(result_folder):
        os.makedirs(result_folder)
    open(os.path.join(result_folder,"validationresults.gpkg"), 'wb').write(response_get_results_geopackage.content)

Het resultaat is een geopackage bestand met resultaten van de validatie voor alle objectlagen in de dataset (zie ook Resultaten).

Download alle resultaat bestanden van de validatie-taak

Het is ook mogelijk om alle resultaat bestanden van een validatietaak tegelijk te downloaden in een zip-bestand. Dit zip-bestand bevat dan zowel het metadata JSON bestand als de alle uitvoerformaten die bij het starten van de taak zijn meegegeven (geopackage, CSV bestanden en/of GEOJSON bestanden). Een zip-bestand met alle resultaten kan gedownload worden door een GET request naar de API op het endpoint task/result te maken. Naast de id van de validatie-taak (in de URL) moet ook het fomat ‘zip' meegegeven worden in de URL. Daarnaast zijn ook de Bearer token (opgeslagen in my_headers) en het (https) beveiligingscertificaat (verify=hydamo_cert) meegegeven in het request. Als de HTML statuscode van de response gelijk is aan 200 (het post request geeft een succesvol resultaat), kan het zip-bestand met validatie-resultaten worden opgeslagen in de lokale folder.

Code Block
languagepy
#http://validatie-api.hydamo.nl/task/[task_id]/result/zip
response_get_all_results = requests.get(server + '/task/' + str(task_id) + '/result/zip', headers=my_headers, verify=hydamo_cert)

if response_get_all_results.status_code == 200:
    result_data = bytes(response_get_all_results.content)
    if not os.path.exists(result_folder):
        os.makedirs(result_folder)
    open(os.path.join(result_folder,"validationresults.zip"), 'wb').write(response_get_all_results.content)

Het resultaat is een zip-bestand met alle bestanden van de validatietaak.

Een validatie-taak annuleren

Het kan voorkomen dat een validatie-taak wordt gestart die veel doorlooptijd vraagt, maar waarvan op een gegeven moment wordt geconcludeerd dat er iets niet klopt. Een validatie-taak die gestart is kan door een gebruiker geannuleerd worden door een POST request naar de API op het endpoint task/kill te sturen. Naast de id van de validatie-taak (in de URL) worden ook de Bearer token (opgeslagen in my_headers) en het (https) beveiligingscertificaat (verify=hydamo_cert) meegegeven in het request. Als de HTML statuscode van de response gelijk is aan 202 (het post request geeft aan dat de actie is geaccepteerd), wordt de taak geannuleerd.

Code Block
languagepy
#http://validatie-api.hydamo.nl/task/[task_id]/kill
response_kill_task = requests.post(server + '/task/' + str(task_id) + '/kill', headers=my_headers, verify=hydamo_cert)
                                
if response_kill_task.status_code == 202:
    print('De taak is geannuleerd!')

Het resultaat is dat de taak is geannuleerd. Dit kan eventueel met gecontroleerd worden door de status van de taak op te vragen.

Een validatie-taak verwijderen

Elke validatie-taak kan weer verwijderd worden uit de lijst met validatie-taken. Alleen validatie-taken die gestart zijn, m.a.w. waarvan de validatie wordt uitgevoerd kunnen niet verwijderd worden. Deze validatie-taken zullen eerst geannuleerd moeten worden (zie voorgaande paragraaf). Een taak kan verwijderd worden door een DELETE request naar de API op het endpoint task te sturen. Naast de id van de validatie-taak (in de URL) worden ook de Bearer token (opgeslagen in my_headers) en het (https) beveiligingscertificaat (verify=hydamo_cert) meegegeven in het request. Als de HTML statuscode van de response gelijk is aan 200 (het delete request geeft een succesvol resultaat), is de taak verwijderd. Bij het verwijderen van de taak worden ook alle toegevoegde dataset bestanden en bestanden met validatieregels verwijderd. N.B. na 10 dagen worden validatie-taken die gevalideerd zijn door het systeem verwijderd.

Code Block
languagepy
#http://validatie-api.hydamo.nl/task/[task_id]/kill

response_getdelete_results_csvtask = requests.getdelete(server + '/task/' + str(task_id) + '/kill', headers=my_headers, verify=hydamo_cert)
                                
if response_getdelete_results_csvtask.status_code == 201200:
    print('Taak is geannuleerdverwijderd!')

Het resultaat is dat de validatie-taak uit de takenlijst is verwijderd.

Bovenstaande voorbeelden zijn opgenomen in een Jupyter notebook. Dit notebook kunt u hier downloaden. Let op: TODOu moet wel de paden en login gegevens zelf aanpassen, anders werkt het notebook niet.

View file
nameVoorbeeld_Wiki.ipynb