Я використовую наступний код у pyqgis для лову помилок / попередження з WMS-рівня, щоб викликати перефарбування, як тільки виявлено помилку / попередження (на основі попереднього питання: Як зловити повідомлення про помилку WMS з панелі повідомлень журналу в QGIS з python? )
Але очевидно, що постачальник "WMS", схоже, має обмеження не надсилати більше 100 запитів про помилки в журнал повідомлень, тобто після 100-ї помилки / попередження я більше не в змозі вловлювати жоден сигнал, навіть якщо рівень WMS є все ще не відповідає правильно. Тим не менш, якщо я надсилаю власні повідомлення на панель журналів, можливо, це не буде обмеженням (див. Код нижче).
Чи є можливість зрозуміти помилку / попередження безпосередньо від відповідального примірника (я думаю, що це WMS-провайдер) замість того, щоб використовувати панель журналу повідомлень? Чи, можливо, просто очистити / скинути панель повідомлень журналу під час запущеного процесу або зняти обмеження?
Я використовую QGIS 2.18.2 в Windows 10.
Ось код 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)
ОНОВЛЕННЯ: Я надіслав запит на функцію (див. Https://hub.qgis.org/isissue/16168 )