Supervisor y Sistema

Celery

Rabbitmq y Redis

Cómo: Carga asíncrona a través de API

En geonode es posible cargar recursos a través de API de forma asíncrona/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

Cree 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á administrada

Paso 2

Llame al punto final api/v2/uploads/upload en PUT (es un punto final de formulario-datos) especificando en archivos un diccionario con los nombres y los archivos que queremos cargar 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

Llame 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}")

The `import_id` is returned from the previous step

Paso 4

La carga se completó en GeoNode, debemos verificar hasta que Geoserver haya 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 «PROCESADO» y la finalización es «100%», podemos ver el recurso en el geonode y el geoservidor.