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 )