Comment résoudre le problème avec le panneau des messages de journal dans QGIS: «Ne pas enregistrer plus de 100 erreurs de demande.»?

9

J'utilise le code suivant dans pyqgis pour intercepter les erreurs / avertissements d'une couche WMS, afin de déclencher une repeinture dès qu'une erreur / avertissement est détectée (basé sur la question précédente: Comment intercepter un message d'erreur WMS à partir du panneau des messages de journal dans QGIS avec python? )

Mais évidemment, le fournisseur "WMS" semble avoir une restriction de ne pas envoyer plus de 100 requêtes d'erreur au journal des messages, ce qui signifie qu'après la 100ème erreur / avertissement, je ne suis plus en mesure de capter aucun signal, même si la couche WMS est ne répond toujours pas correctement. Néanmoins, si j'envoie mes propres messages au panneau de connexion, il ne semble pas y avoir de restriction (voir le code ci-dessous).

Existe-t-il une possibilité d'attraper l'erreur / l'avertissement directement à partir de l'instance responsable ici (je suppose que c'est le fournisseur WMS), au lieu d'utiliser le panneau de journal des messages? Ou peut-être simplement effacer / réinitialiser le panneau des messages du journal dans un processus en cours ou supprimer la limitation?

J'utilise QGIS 2.18.2 sur Windows 10.

Voici le code 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)

entrez la description de l'image ici

MISE À JOUR: J'ai soumis une demande de fonctionnalité (voir: https://hub.qgis.org/issues/16168 )

ADorsch
la source
1
La limite semble être câblée dans la classe qgswmsprovider dans le code C ++. La compilation de QGIS à partir des sources est-elle une option pour vous?
Steven Kay
@Steven Kay ah ok je vois, il y a la section correspondante dans le code ... Malheureusement je n'ai aucune expérience dans la compilation à partir des sources. Dès que mon code est en cours d'exécution, je dois installer QGIS sur plusieurs machines. mais s'il n'y a pas d'autre option, je suppose que je n'ai pas le choix ... de toute façon merci pour l'indice!
ADorsch

Réponses:

3

À l'heure actuelle, la limite de 100 est codée en dur dans le fournisseur WMS. Mais QGIS est un merveilleux projet open source et vous pouvez soumettre une demande de fonctionnalité pour transformer cette limite en paramètre configurable.

Tout développeur peut accepter cette demande de fonctionnalité et soumettre une nouvelle demande d'extraction à QGIS . Si la solution est acceptée, les développeurs principaux seront heureux d'appliquer les modifications à la fois pour la prochaine version 3 et pour les versions 2.14.x et 2.18.x actuelles.

Donc, la réponse à votre question est une nouvelle demande de fonctionnalité envoyée à QGIS.

jgrocha
la source
Ok merci pour ce conseil. Bien que j'espérais avoir une sorte d'idées de contournement, je suppose que c'est autant de réponse que j'aurai probablement. Je devrais donc envisager de compiler à partir des sources en manipulant le code source ou soumettre une demande de fonctionnalité et espérer qu'une solution puisse être implémentée à l'avenir ...
ADorsch
Si vous préparez et soumettez une demande de fonctionnalité, vous en aiderez d'autres à l'avenir qui seront confrontés à la même limitation. Vous retournez quelque chose d'utile à la communauté. Bien que vous puissiez corriger la limitation 100 en la changeant en 5000 ou 10000, les développeurs essaieront de répondre à votre demande d'une manière qui convient à tous, pas seulement à vous, en gardant le code cohérent et la documentation mise à jour. En soumettant une demande de fonctionnalité, vous contribuez à améliorer QGIS. Une fois la demande de fonctionnalité acceptée et la demande d'extraction fusionnée, vous pouvez installer et utiliser les versions nocturnes.
jgrocha
Absolument, je suis avec toi ici! Merci pour votre déclaration, soulignant qu'un tel outil open source réussi comme QGIS est basé sur une communauté active ce qui le rend si dynamique et comment tout le monde peut contribuer à ce développement.
ADorsch
Je préparerai d'ailleurs une demande de fonctionnalité!
ADorsch