def _open_wfs(self, name, capabilites_url): # Add new HTTPConnection like in source # https://github.com/qgis/QGIS/blob/master/src/gui/qgsnewhttpconnection.cpp # https://github.com/qgis/QGIS/blob/79616fd8d8285b4eb93adafdfcb97a3e429b832e/src/app/qgisapp.cpp#L3783 self.msg_log_debug(u'add WFS: Name={0}, original URL={1}'.format( name, capabilites_url)) # remove additional url parameters, otherwise adding wfs works the frist time only # https://github.com/qgis/QGIS/blob/9eee12111567a84f4d4de7e020392b3c01c28598/src/gui/qgsnewhttpconnection.cpp#L199-L214 url = QUrl(capabilites_url) query_string = url.query() if query_string: query_string = QUrlQuery(query_string) query_string.removeQueryItem('SERVICE') query_string.removeQueryItem('REQUEST') query_string.removeQueryItem('FORMAT') query_string.removeQueryItem('service') query_string.removeQueryItem('request') query_string.removeQueryItem('format') #also remove VERSION: shouldn't be necessary, but QGIS sometimes seems to append version=1.0.0 query_string.removeQueryItem('VERSION') query_string.removeQueryItem('version') url.setQuery(query_string) capabilites_url = url.toString() self.msg_log_debug(u'add WFS: Name={0}, base URL={1}'.format( name, capabilites_url)) s = QSettings() self.msg_log_debug(u'existing WFS url: {0}'.format( s.value(u'qgis/connections-wfs/{0}/url'.format(name), ''))) key_user = u'qgis/WFS/{0}/username'.format(name) key_pwd = u'qgis/WFS/{0}/password'.format(name) key_referer = u'qgis/connections-wfs/{0}/referer'.format(name) key_url = u'qgis/connections-wfs/{0}/url'.format(name) key_authcfg = u'qgis/WFS/{0}/authcfg'.format(name) s.remove(key_user) s.remove(key_pwd) s.remove(key_referer) s.remove(key_url) s.sync() s.setValue(key_user, '') s.setValue(key_pwd, '') s.setValue(key_referer, '') s.setValue(key_url, capabilites_url) if self.settings.auth_propagate and self.settings.authcfg: s.setValue(key_authcfg, self.settings.authcfg) s.setValue(u'qgis/connections-wfs/selected', name) # create new dialog wfs_dlg = QgsProviderRegistry.instance().selectWidget( "WFS", self.main_win) wfs_dlg = QgsProviderRegistry.instance().createSelectionWidget( "WFS", self.main_win) wfs_dlg.addVectorLayer.connect( lambda url: iface.addVectorLayer(url, name, "WFS")) wfs_dlg.show()