मैं एक WMS-लेयर से त्रुटियों / चेतावनी को पकड़ने के लिए pyqgis में निम्नलिखित कोड का उपयोग कर रहा हूं, जैसे ही एक त्रुटि / चेतावनी का पता लगाने के लिए एक पुनरावर्ती को ट्रिगर किया जाता है (पिछले प्रश्न के आधार पर: लॉग संदेश पैनल से WMS त्रुटि संदेश कैसे पकड़ा जाए अजगर के साथ QGIS में? )
लेकिन स्पष्ट रूप से "WMS" प्रदाता को लगता है कि संदेश लॉग में 100 से अधिक त्रुटि अनुरोध नहीं भेजने का प्रतिबंध है, जिसका अर्थ है कि 100 वीं त्रुटि / चेतावनी के बाद भी मैं कोई संकेत नहीं पकड़ पा रहा हूं, भले ही WMS- लेयर हो अभी भी सही ढंग से जवाब नहीं दे रहा है। फिर भी, अगर मैं लॉग पैनल में अपने संदेश भेजता हूं, तो कोई प्रतिबंध नहीं लगता है (नीचे कोड देखें)।
क्या संदेश लॉग पैनल का उपयोग करने के बजाय, उस उदाहरण से सीधे त्रुटि / चेतावनी को पकड़ने की संभावना है जो यहां जिम्मेदार है (मुझे लगता है कि यह डब्ल्यूएमएस-प्रदाता है)? या शायद चल रही प्रक्रिया में लॉग संदेश पैनल को केवल स्पष्ट / रीसेट करें या सीमा हटा दें?
मैं विंडोज 10 पर QGIS 2.18.2 का उपयोग कर रहा हूं।
यहाँ अजगर कोड है:
# 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)
अद्यतन: मैंने एक सुविधा अनुरोध प्रस्तुत किया (देखें: https://hub.qgis.org/issues/16168 )