Forgot to mention that some time ago I wrote a python class to handle all this boring stuff for QGIS 2:
https://github.com/boundlessgeo/lib-qgis-commons/blob/master/qgiscommons2/network/networkaccessmanager.py On Mon, Jan 15, 2018 at 2:48 PM, Alessandro Pasotti <apaso...@gmail.com> wrote: > On Mon, Jan 15, 2018 at 12:48 PM, David Marteau <dmart...@3liz.com> wrote: > >> Hi, >> >> We hit a very nasty problem when trying to load projects with wms layer >> defined from python: loading capabilities fail with timeout error, thus >> preventing creating any project or layer from python. >> >> The problem has been verified in Debian, Ubuntu and fresh OSX build from >> master branch. >> >> We have somehow been able to reduce the problem to the loading of the >> wmsprovider. The following python code provide a minimal example for >> reproducing the problem: >> >> ===================8<============================== >> import os >> import logging >> >> from qgis.core import QgsApplication, QgsMessageLog >> from qgis.core import QgsProject, QgsProviderRegistry >> >> logger = logging.getLogger() >> logger.setLevel(logging.DEBUG) >> >> # No Display >> os.environ['QT_QPA_PLATFORM'] = 'offscreen' >> >> qgis_application = QgsApplication([], False ) >> qgis_application.setPrefixPath('/usr/local', True) >> qgis_application.initQgis() >> >> # Log any messages >> def writelogmessage(message, tag, level): >> arg = '{}: {}'.format( tag, message ) >> if level == QgsMessageLog.WARNING: >> logger.warning(arg) >> elif level == QgsMessageLog.CRITICAL: >> logger.error(arg) >> else: >> logger.info(arg) >> >> messageLog = QgsApplication.messageLog() >> messageLog.messageReceived.connect( writelogmessage ) >> >> >> wmsuri = ("contextualWMSLegend=0&crs=EPSG:4326&dpiMode=7&featureCount >> =10&format=image/jpeg" >> "&layers=s2cloudless&styles&tileMatrixSet=s2cloudless-wm >> sc-14" >> "&url=http://tiles.maps.eox.at/wms?" ) >> >> # Request Timeout >> provider = QgsProviderRegistry.instance().createProvider( "wms", wmsuri ) >> >> qgis_application.exitQgis() >> del qgis_application >> ====================8<============================= >> >> This fail with the following qgis errors >> >> WMS: Download of capabilities failed: Operation canceled >> Network: Network request https://tiles.maps.eox >> .at/wms?SERVICE=WMS&REQUEST=GetCapabilities timed out >> >> Note that the following piece of code work perfectly and proceed the >> request without problems: >> >> ============================================================== >> from PyQt5.QtCore import QUrl, QEventLoop >> from PyQt5.QtNetwork import QNetworkRequest >> >> url = QUrl("https://tiles.maps.eox.at/wms?SERVICE=WMS&REQUEST=GetC >> apabilities") >> >> request = QNetworkRequest() >> request.setUrl(url) >> manager = QgsNetworkAccessManager.instance() >> replyObject = manager.get(request) >> >> loop = QEventLoop() >> def onfinish( ): >> print("Qt Return Code:",replyObject.attribute(Q >> NetworkRequest.HttpStatusCodeAttribute)) >> answer = replyObject.readAll(); >> print(answer[:200],"\n") >> loop.quit() >> >> replyObject.finished.connect( onfinish ) >> loop.exec() >> ============================================================== >> >> So this is not fundamentally a problem with the network manager. >> >> At this point we are stuck because the provider do not do something >> fundamentally different from the last piece of code, >> >> In qgis code the request execution stall at: https://github.com/qgis/QG >> IS/blob/master/src/providers/wms/qgswmscapabilities.cpp#L1964 >> >> The problem does not occur if we run the project from the Desktop >> application: we think that there is a problem with the QEventLoop execution >> but we have no clue atm to check this assumption. >> >> So if anybody have any idea on the subject…... >> > > > Hi David, > > You need an event loop to use a Q(qg)NetworkAccessManager, it's > asynchronous. > > > > -- > Alessandro Pasotti > w3: www.itopen.it > -- Alessandro Pasotti w3: www.itopen.it
_______________________________________________ QGIS-Developer mailing list QGIS-Developer@lists.osgeo.org List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer