Como resolver um problema com o painel de mensagens de log no QGIS: “Não registrando mais de 100 erros de solicitação.”?

9

Estou usando o seguinte código no pyqgis para capturar erros / aviso de uma camada WMS, a fim de acionar uma repintura assim que um erro / aviso for detectado (com base na pergunta anterior: Como capturar a mensagem de erro do WMS no painel de mensagens de log no QGIS com python? )

Mas, obviamente, o provedor "WMS" parece ter uma restrição de não enviar mais de 100 solicitações de erro para o log de mensagens, ou seja, após o 100º erro / aviso, não consigo mais captar nenhum sinal, mesmo que a camada WMS seja ainda não está respondendo corretamente. No entanto, se eu enviar mensagens próprias para o painel de log, não parece haver nenhuma restrição (consulte o código abaixo).

Existe a possibilidade de capturar o erro / aviso diretamente da instância responsável aqui (eu acho que é o provedor WMS), em vez de usar o painel de log de mensagens? Ou talvez apenas limpe / redefina o painel de mensagens de log em um processo em execução ou remova a limitação?

Estou usando o QGIS 2.18.2 no Windows 10.

Aqui está o código 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)

insira a descrição da imagem aqui

ATUALIZAÇÃO: enviei uma solicitação de recurso (consulte: https://hub.qgis.org/issues/16168 )

ADorsch
fonte
11
O limite parece estar conectado na classe qgswmsprovider no código C ++. A compilação do QGIS a partir da fonte é uma opção para você?
Steven Kay
@ Steven Kay ah ok Entendo, existe a seção correspondente no código ... Infelizmente não tenho experiência em compilar a partir do código-fonte. Assim que meu código estiver em execução, preciso instalar o QGIS em várias máquinas. mas se não houver outra opção, acho que não tenho escolha ... de qualquer forma, thx pela dica!
ADorsch 27/01

Respostas:

3

No momento, o limite de 100 está codificado no provedor WMS. Mas o QGIS é um maravilhoso projeto de código aberto e você pode enviar uma solicitação de recurso para transformar esse limite em um parâmetro configurável.

Qualquer desenvolvedor pode atender a essa solicitação de recurso e enviar uma nova solicitação de recebimento ao QGIS . Se a solução for aceita, os desenvolvedores principais terão prazer em aplicar as alterações na próxima versão 3 e nas atuais versões 2.14.xe 2.18.x.

Portanto, a resposta à sua pergunta é um novo envio de solicitação de recurso ao QGIS.

jgrocha
fonte
Ok, obrigado por esse conselho. Embora eu esperasse ter algum tipo de idéia de solução alternativa, acho que essa é a resposta que eu provavelmente terei. Então eu teria que quer considerar compilar a partir do código manipulando o código-fonte ou enviar um pedido de recurso e esperança de que possa haver uma solução implementada no futuro ...
ADorsch
Se você preparar e enviar uma solicitação de recurso, estará ajudando outras pessoas no futuro que enfrentarão a mesma limitação. Você está retornando algo útil de volta à comunidade. Embora você possa corrigir a limitação de 100 alterando-a para 5000 ou 10000, os desenvolvedores tentarão atender à sua solicitação de maneira adequada para todos, não apenas para você, mantendo o código consistente e a documentação atualizada. Ao enviar uma solicitação de recurso, você está contribuindo para melhorar o QGIS. Depois que a solicitação do recurso for aceita e a solicitação pull for mesclada, você poderá instalar e usar as compilações noturnas.
jgrocha
Absolutamente, estou com você aqui! Agradecemos sua declaração, apontando que uma ferramenta de código aberto tão bem-sucedida como o QGIS se baseia em uma comunidade ativa, o que a torna altamente dinâmica e como todos podem contribuir para esse desenvolvimento.
ADorsch
A propósito, prepararei uma solicitação de recurso!
ADorsch