Supervisord y Systemd

Celery

Rabbitmq y Redis

Cómo realizar una subida asíncrona a través de la API

En GeoNode es posible subir recursos a través de la API de manera asíncrona o sincrónica.

Aquí está disponible un ejemplo completo de carga a través de API https://github.com/GeoNode/geonode/blob/582d6efda74adb8042d1d897004bbf764e6e0285/geonode/upload/api/tests.py#L416

Paso 1

Crear una sesión de cliente común, esto es fundamental debido a que geonode verificará la sesión de solicitud. Por ejemplo, con las solicitudes haremos algo como:

import requests
client = requests.session()

Nota: en Django esta parte ya está gestionada

Paso 2

Llama al endpoint api/v2/uploads/upload con el método PUT (es un endpoint de tipo form-data), especificando en files un diccionario con los nombres y los archivos que deseas subir, y un payload de datos con la información requerida. Por ejemplo:

params = {
    "permissions": '{ "users": {"AnonymousUser": ["view_resourcebase"]} , "groups":{}}',  # layer permissions
    "time": "false",
    "layer_title": "layer_title",
    "time": "false",
    "charset": "UTF-8",
}

files = {
    "filename": <_io.BufferedReader name="filename">
}

client.put(
    "http://localhost:8000/api/v2/uploads/upload/",
    auth=HTTPBasicAuth(username, password),
    data=params,
    files=files,
)

Returns:
- dict with import id of the resource

Paso 3

Llamar a la página de carga final para activar la importación real. Si se configura correctamente, Geoserver gestionará la carga de forma asincrónica.

client.get("http://localhost:8000/upload/final?id={import_id}")

El import_id se devuelve del paso anterior

Paso 4

La carga se ha completado en GeoNode, debemos comprobar que Geoserver ha completado su parte. Para ello, basta con llamar a la información detallada sobre la carga que estamos realizando

client.get(f"http://localhost:8000/api/v2/uploads/{upload_id}")

Cuando el estado es PROCESSED y la finalización es 100% podemos ver el recurso en geonode y geoserver