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-wmsc-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 <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=GetCapabilities") request = QNetworkRequest() request.setUrl(url) manager = QgsNetworkAccessManager.instance() replyObject = manager.get(request) loop = QEventLoop() def onfinish( ): print("Qt Return Code:",replyObject.attribute(QNetworkRequest.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/QGIS/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…... Regards David
_______________________________________________ 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