¿Cómo resolver un problema con el panel de mensajes de registro en QGIS: "No registrar más de 100 errores de solicitud"?

9

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)

ingrese la descripción de la imagen aquí

ACTUALIZACIÓN: envié una solicitud de función (consulte: https://hub.qgis.org/issues/16168 )

ADorsch
fuente
1
El límite parece estar cableado en la clase qgswmsprovider en el código C ++. ¿Compilar QGIS desde la fuente es una opción para usted?
Steven Kay
@ Steve Kay ah ok ya veo, hay la sección correspondiente en el código ... Desafortunadamente no tengo experiencia en compilar desde la fuente. Tan pronto como se ejecute mi código, necesito instalar QGIS en varias máquinas. pero si no hay otra opción, supongo que no tengo otra opción ... de todos modos gracias por la pista!
ADorsch

Respuestas:

3

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.

jgrocha
fuente
Ok gracias por ese consejo. Aunque esperaba obtener algún tipo de ideas alternativas, creo que esta es la respuesta que probablemente obtendré. Así que tendría que tener en cuenta, ya sea la compilación de la fuente mediante la manipulación del código fuente o presentar una solicitud de función y la esperanza de que podría ser una solución implementada en el futuro ...
ADorsch
Si prepara y envía una solicitud de función, está ayudando a otros en el futuro que enfrentarán la misma limitación. Estás devolviendo algo útil a la comunidad. Si bien puede corregir la limitación de 100 cambiándola a 5000 o 10000, los desarrolladores intentarán atender su solicitud de una manera adecuada para todos, no solo para usted, manteniendo el código coherente y la documentación actualizada. Al enviar una solicitud de función, está contribuyendo a mejorar QGIS. Una vez que se acepta la solicitud de función y se combina la solicitud de extracción, puede instalar y usar las compilaciones nocturnas.
jgrocha 01 de
¡Absolutamente, estoy contigo aquí! Gracias por su declaración, señalando, que una herramienta de código abierto tan exitosa como QGIS se basa en una comunidad activa, lo que la hace tan altamente dinámica y cómo todos pueden contribuir a este desarrollo.
ADorsch
Por cierto, prepararé una solicitud de función.
ADorsch