Estoy usando el siguiente código en pyqgis para capturar errores / advertencias de una capa WMS, con el fin de desencadenar una nueva pintura tan pronto como se detecte un error / advertencia (basado en la pregunta anterior: Cómo capturar un mensaje de error WMS del panel de mensajes de registro en QGIS con python? )
Pero, obviamente, el proveedor "WMS" parece tener una restricción de no enviar más de 100 solicitudes de error al registro de mensajes, lo que significa que después del centésimo error / advertencia ya no puedo captar ninguna señal, incluso si la capa WMS está Todavía no responde correctamente. Sin embargo, si envío mensajes propios al panel de registro no parece haber ninguna restricción (ver el código a continuación).
¿Existe la posibilidad de detectar el error / advertencia directamente de la instancia responsable aquí (supongo que es el proveedor WMS), en lugar de usar el panel de registro de mensajes? ¿O tal vez simplemente borrar / restablecer el panel de mensajes de registro en un proceso en ejecución o eliminar la limitación?
Estoy usando QGIS 2.18.2 en Windows 10.
Aquí está el código de Python:
# coding=utf-8
from qgis.core import *
wmsLayer_name="wms-dtk50_wgs"
url_with_params ='url=http://sg.geodatenzentrum.de/wms_dtk50?&crs=EPSG:25832&featureCount=10&format=image/png&layers=DTK50&styles='
wmsLayer = QgsRasterLayer(url_with_params, wmsLayer_name,'wms')
QgsMapLayerRegistry.instance().addMapLayer(wmsLayer)
def errorCatcher( msg, tag, level ):
if tag == 'WMS' and level != 0: #Warnings or Errors (0: Info, 1:Warning, 2:Error)
print "WMS error detected!"
myWMSLayer = QgsMapLayerRegistry.instance().mapLayersByName("wms-dtk50_wgs")[0]
myWMSLayer.triggerRepaint()
# connect with messageReceived SIGNAL from QgsMessageLog to an errorCatcher custom function
# instantly reacts if error/warning occurs
QgsMessageLog.instance().messageReceived.connect( errorCatcher )
#after 100 times triggering a "wmsLayer.triggerRepaint()",
# I get following warning in log messages panel "WMS":
# "2017-01-17T07:17:52 1 Not logging more than 100 request errors."
#this does not raise any issues and prints all 500 test messages in the log panel:
for i in range(500):
QgsMessageLog.instance().logMessage("Message #{}".format(i),"Test",2)
ACTUALIZACIÓN: envié una solicitud de función (consulte: https://hub.qgis.org/issues/16168 )
Respuestas:
En este momento, el límite de 100 está codificado en el proveedor WMS. Pero QGIS es un maravilloso proyecto de código abierto y puede enviar una solicitud de función para convertir este límite en un parámetro configurable.
Cualquier desarrollador puede tomar esta solicitud de función y enviar una nueva solicitud de extracción a QGIS . Si se acepta la solución, los desarrolladores principales estarán encantados de aplicar los cambios tanto para la próxima versión 3 como para las versiones 2.14.xy 2.18.x actuales.
Por lo tanto, la respuesta a su pregunta es el envío de una nueva solicitud de función a QGIS.
fuente