1 votos

Comprobación del estado del cálculo de capas mediante la API

Escribí un python script que actualiza los valores de un conjunto de datos y luego devuelve una imagen estática del mapa al que está conectado.

El problema es que si descargo la imagen demasiado pronto después de actualizar el conjunto de datos, una de las capas de visualización del mapa que requiere muchos cálculos no aparecerá.

No quiero tener que establecer un tiempo de espera manual en el código porque el tamaño de los datos que estoy cargando podría oscilar entre 100 y 10.000 puntos de datos.

¿Existe una url de la API a la que pueda llamar para saber cuándo se está actualizando una capa y cuándo ha terminado?

He intentado utilizar la url de visualización pero no he podido encontrar nada en los datos JSON sobre un estado de actualización.

img_url1 = 'https://%s.carto.com/api/v2/viz/%s/viz.json/?api_key=%s&' %(self.options['u'], map_id, self.options['k'])
r1 = requests.get(img_url1)
print(json.dumps(r4.json(), indent=2))

En un hilo similar alguien sugirió usar esto para refrescar los datos de the_geom pero tampoco tuve suerte ahí:

refresh_url = "https://{username}.carto.com/api/v2/sql?q=UPDATE table SET the_geom = cdb_latlng(latitude, longitude)&api_key={api_key}".format(username=self.options['u'], api_key=self.options['k'])
r4 = requests.get(refresh_url)
print(json.dumps(r4.json(), indent=2))

He intentado utilizar la API de mapas con nombre, pero el campo "Última actualización" muestra la hora de inicio de la actualización, no la de finalización, y el campo "Fecha" sólo muestra la hora actual.

img_url2 = 'https://{user}.carto.com/api/v1/map/named/{template}/jsonp?auth_token={auth_token}&callback=callback'.format(user=self.options['u'], template=tpl_name, auth_token=self.options['k'])
r2 = requests.get(img_url2)
print(r2.headers)

'Date': 'Mon, 10 Feb 2020 20:27:14 GMT', 
'Content-Type': 'text/javascript; charset=utf-8', 
'Transfer-Encoding': 'chunked', 
'Connection': 'keep-alive', 
'Vary': 'Accept-Encoding, Authorization', 
'Access-Control-Allow-Origin': '*', 
'Access-Control-Allow-Headers': 'X-Requested-With, X-Prototype-Version, X-CSRF-Token, Authorization', 
'Carto-Rate-Limit-Limit': '21', 
'Carto-Rate-Limit-Remaining': '20', 
'Carto-Rate-Limit-Reset': '0', 
'Cache-Control': 'public,max-age=5,must-revalidate', 
'Surrogate-Key': '{removed for privacy}', 
'Last-Modified': 'Mon, 10 Feb 2020 20:14:40 GMT', 
'X-Layergroup-Id': '{removed for privacy}', 
'X-Content-Type-Options': 'nosniff', 
'X-Varnish': '47747576', 
'Age': '0', 
'X-Cache': 'MISS', 
'Content-Encoding': 'gzip'

0voto

user2601 Puntos 68

Desde el lado de postgresql hay tablas del sistema que te dicen si una consulta se está ejecutando, pero estas no son consultables a través de la API de Carto por razones obvias de seguridad.

Podrías probar a ver si la API de lotes proporciona el estado de la consulta ver: https://carto.com/developers/sql-api/guides/batch-queries/

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X