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