def validate(self): #self.layerList.setTitle('Layers') data_source = self.gmlas_datasource() if data_source is None: QMessageBox.critical(self, plugin_name(), self.tr('Failed to open file using OGR GMLAS driver')) return ogrMetadataLayerPrefix = '_ogr_' self.datasetsListWidget.clear() for i in range(0, data_source.GetLayerCount()): layer = data_source.GetLayer(i) layer_name = layer.GetName() if not layer_name.startswith(ogrMetadataLayerPrefix): feature_count = layer.GetFeatureCount() item = QListWidgetItem("{} ({})".format(layer_name, feature_count)) item.setData(Qt.UserRole, layer_name) self.datasetsListWidget.addItem(item) self.datasetsListWidget.sortItems() self.datasetsListWidget.selectAll()
def validate(self): self.layerList.setTitle('Layers') data_source = self.gmlas_datasource() if data_source is None: QMessageBox.critical( self, plugin_name(), self.tr('Failed to open file using OGR GMLAS driver')) return ogrMetadataLayerPrefix = '_ogr_' self.datasetsListWidget.clear() for i in range(0, data_source.GetLayerCount()): layer = data_source.GetLayer(i) layer_name = layer.GetName() if not layer_name.startswith(ogrMetadataLayerPrefix): feature_count = layer.GetFeatureCount() item = QListWidgetItem("{} ({})".format( layer_name, feature_count)) item.setData(Qt.UserRole, layer_name) self.datasetsListWidget.addItem(item) self.datasetsListWidget.sortItems() self.datasetsListWidget.selectAll() self.layerList.setTitle('{} layer(s) found:'.format( self.datasetsListWidget.count()))
def translate(self, params): if params is None: return params['callback'] = self.translate_callback dlg = QProgressDialog(self) dlg.setWindowTitle(plugin_name()) dlg.setLabelText('Operation in progress') dlg.setMinimum(0) dlg.setMaximum(100) dlg.setWindowModality(Qt.WindowModal) self.progress_dlg = dlg self.setCursor(Qt.WaitCursor) try: log("gdal.VectorTranslate({})".format(str(params))) gdal.PushErrorHandler(gdal_error_handler) with qgis_proxy_settings(): res = gdal.VectorTranslate(**params) gdal.PopErrorHandler() log(str(res)) finally: self.unsetCursor() self.progress_dlg.reset() self.progress_dlg = None
def translate(self, params): if params is None: return params["callback"] = self.translate_callback dlg = QProgressDialog(self) dlg.setWindowTitle(plugin_name()) dlg.setLabelText("Operation in progress") dlg.setMinimum(0) dlg.setMaximum(100) dlg.setWindowModality(Qt.WindowModal) self.progress_dlg = dlg self.setCursor(Qt.WaitCursor) try: log("gdal.VectorTranslate({})".format(str(params))) gdal.PushErrorHandler(gdal_error_handler) with qgis_proxy_settings(): res = gdal.VectorTranslate(**params) gdal.PopErrorHandler() log(str(res)) finally: self.unsetCursor() self.progress_dlg.reset() self.progress_dlg = None
def gmlas_datasource(self): gmlasconf = self.gmlas_config() datasourceFile = self.gml_path() if datasourceFile == "": raise InputError(self.tr("You must select a input file or URL")) isXsd = datasourceFile.endswith(".xsd") isUrl = datasourceFile.startswith("http") swapCoordinates = self.swapCoordinatesCombo.currentText() driverConnection = "" openOptions = [ "EXPOSE_METADATA_LAYERS=YES", "CONFIG_FILE={}".format(gmlasconf) ] openOptions.append("SWAP_COORDINATES={}".format(swapCoordinates)) if isXsd: driverConnection = "GMLAS:" openOptions.append("XSD={}".format(datasourceFile)) elif isUrl: driverConnection = "GMLAS:/vsicurl_streaming/{}".format( datasourceFile) else: driverConnection = "GMLAS:{}".format(datasourceFile) gdal.SetConfigOption("GDAL_HTTP_UNSAFESSL", "YES") gdal.SetConfigOption("GDAL_HTTP_USERAGENT", settings.value("http_user_agent", plugin_name())) with qgis_proxy_settings(): return gdal.OpenEx(driverConnection, open_options=openOptions)
def on_convertButton_clicked(self): gdal.SetConfigOption("OGR_SQLITE_SYNCHRONOUS", "OFF") gdal.SetConfigOption('GDAL_HTTP_UNSAFESSL', 'YES') dest = self.databaseWidget.datasource_name() if dest == '' and self.databaseWidget.format() == "SQLite": with tempfile.NamedTemporaryFile(suffix='.sqlite') as tmp: dest = tmp.name if dest.startswith('PG:'): schema = self.databaseWidget.schema() else: schema = None try: QApplication.setOverrideCursor(Qt.WaitCursor) self.translate(self.import_params(dest)) import_in_qgis(dest, self.databaseWidget.format(), schema) except InputError as e: e.show() except RuntimeError as e: QMessageBox.warning(None, plugin_name(), e.args[0]) finally: QApplication.restoreOverrideCursor()
def do_load(self, append_to_db=None, append_to_schema=None): gdal.SetConfigOption("OGR_SQLITE_SYNCHRONOUS", "OFF") gdal.SetConfigOption("GDAL_HTTP_UNSAFESSL", "YES") gdal.SetConfigOption("GDAL_HTTP_USERAGENT", settings.value("http_user_agent", plugin_name())) def error_handler(err, err_no, msg): if err >= gdal.CE_Warning: QgsMessageLog.logMessage("{} {}: {}".format(err, err_no, msg), plugin_name()) if append_to_db is None: dest = self.databaseWidget.datasource_name() if dest == "" and self.databaseWidget.format() == "SQLite": with tempfile.NamedTemporaryFile(suffix=".sqlite") as tmp: dest = tmp.name QgsMessageLog.logMessage("Temp SQLITE: {}".format(dest), plugin_name()) if dest.startswith("PG:"): schema = self.databaseWidget.schema() else: schema = None db_format = self.databaseWidget.format() params = self.import_params(dest) else: schema = append_to_schema db_format = "PostgreSQL" if append_to_db.startswith( "PG:") else "SQLite" params = self.import_params(append_to_db) # force append params["accessMode"] = "append" try: QApplication.setOverrideCursor(Qt.WaitCursor) gdal.PushErrorHandler(error_handler) self.translate(params) if append_to_db is None: import_in_qgis(dest, db_format, schema) except InputError as e: e.show() except RuntimeError as e: QMessageBox.warning(None, plugin_name(), e.args[0]) finally: QApplication.restoreOverrideCursor() gdal.PopErrorHandler()
def load_settings(self): self.featureLimitBox.setValue(int(settings.value('default_maxfeatures'))) self.set_import_method(settings.value('default_import_method')) self.gmlasConfigLineEdit.setText(settings.value('default_gmlas_config')) self.languageLineEdit.setText(settings.value('default_language')) self.set_db_type(settings.value('default_db_type')) self.set_access_mode(settings.value('default_access_mode')) self.httpUserAgentEdit.setText(settings.value('http_user_agent', plugin_name()))
def do_load(self, append_to_db = None, append_to_schema = None): gdal.SetConfigOption("OGR_SQLITE_SYNCHRONOUS", "OFF") gdal.SetConfigOption('GDAL_HTTP_UNSAFESSL', 'YES') gdal.SetConfigOption('GDAL_HTTP_USERAGENT', settings.value('http_user_agent', plugin_name())) def error_handler(err, err_no, msg): if err >= gdal.CE_Warning: QgsMessageLog.logMessage("{} {}: {}".format(err, err_no, msg), plugin_name()) if append_to_db is None: dest = self.databaseWidget.datasource_name() if dest == '' and self.databaseWidget.format() == "SQLite": with tempfile.NamedTemporaryFile(suffix='.sqlite') as tmp: dest = tmp.name QgsMessageLog.logMessage("Temp SQLITE: {}".format(dest), plugin_name()) if dest.startswith('PG:'): schema = self.databaseWidget.schema() else: schema = None db_format = self.databaseWidget.format() params = self.import_params(dest) else: schema = append_to_schema db_format = "PostgreSQL" if append_to_db.startswith("PG:") else "SQLite" params = self.import_params(append_to_db) # force append params["accessMode"] = "append" try: QApplication.setOverrideCursor(Qt.WaitCursor) gdal.PushErrorHandler(error_handler) self.translate(params) if append_to_db is None: import_in_qgis(dest, db_format, schema) except InputError as e: e.show() except RuntimeError as e: QMessageBox.warning(None, plugin_name(), e.args[0]) finally: QApplication.restoreOverrideCursor() gdal.PopErrorHandler()
def on_convertButton_clicked(self): gdal.SetConfigOption("OGR_SQLITE_SYNCHRONOUS", "OFF") gdal.SetConfigOption('GDAL_HTTP_UNSAFESSL', 'YES') try: QApplication.setOverrideCursor(Qt.WaitCursor) self.translate(self.import_params()) except InputError as e: e.show() except RuntimeError as e: QMessageBox.warning(None, plugin_name(), e.args[0]) finally: QApplication.restoreOverrideCursor()
def on_loadLayersBtn_clicked(self): source = self.databaseWidget.datasource_name() if source.startswith('PG'): schema = self.databaseWidget.schema() else: schema = None try: QApplication.setOverrideCursor(Qt.WaitCursor) import_in_qgis(source, self.databaseWidget.format(), schema) except RuntimeError as e: QMessageBox.warning(None, plugin_name(), e.args[0]) finally: QApplication.restoreOverrideCursor()
def schema(self, create=False): schema = self.pgsqlSchemaBox.currentText() if not create: return schema #if self.pgsqlSchemaBox.currentIndex() == -1: schemas = [schema[1] for schema in self._pgsql_db.list_schemas()] if not schema in schemas: res = QMessageBox.question( self, plugin_name(), self.tr('Create schema "{}" ?').format(schema)) if res != QMessageBox.Yes: raise InputError() self._pgsql_db.create_schema(schema) return schema
def _sync_get(url): global __network_manager if __network_manager is None: __network_manager = QNetworkAccessManager() __network_manager.setProxy(QgsNetworkAccessManager.instance().proxy()) pause = QEventLoop() req = QNetworkRequest(url) req.setRawHeader(b"Accept", b"application/xml") req.setRawHeader(b"Accept-Language", bytes(settings.value("default_language", "fr"), "utf8")) req.setRawHeader(b"User-Agent", bytes(settings.value('http_user_agent', plugin_name()), "utf8")) reply = __network_manager.get(req) reply.finished.connect(pause.quit) is_ok = [True] def onError(self): is_ok[0] = False pause.quit() reply.error.connect(onError) pause.exec_() return reply, is_ok[0]
def _sync_get(url): global __network_manager if __network_manager is None: __network_manager = QNetworkAccessManager() __network_manager.setProxy(QgsNetworkAccessManager.instance().proxy()) pause = QEventLoop() req = QNetworkRequest(url) req.setRawHeader(b"Accept", b"application/xml") req.setRawHeader(b"Accept-Language", bytes(settings.value("default_language", "fr"), "utf8")) req.setRawHeader( b"User-Agent", bytes(settings.value("http_user_agent", plugin_name()), "utf8")) reply = __network_manager.get(req) reply.finished.connect(pause.quit) is_ok = [True] def onError(self): is_ok[0] = False pause.quit() reply.error.connect(onError) pause.exec_() return reply, is_ok[0]
def error_handler(err, err_no, msg): if err >= gdal.CE_Warning: QgsMessageLog.logMessage("{} {}: {}".format(err, err_no, msg), plugin_name())
def gmlas_datasource(self): gmlasconf = self.gmlas_config() datasourceFile = self.gml_path() if datasourceFile == '': raise InputError(self.tr("You must select a input file or URL")) isXsd = datasourceFile.endswith(".xsd") isUrl = datasourceFile.startswith("http") swapCoordinates = self.swapCoordinatesCombo.currentText() driverConnection = "" openOptions = ['EXPOSE_METADATA_LAYERS=YES', 'CONFIG_FILE={}'.format(gmlasconf)] openOptions.append('SWAP_COORDINATES={}'.format(swapCoordinates)) if isXsd: driverConnection = "GMLAS:" openOptions.append('XSD={}'.format(datasourceFile)) elif isUrl: driverConnection = "GMLAS:/vsicurl_streaming/{}".format(datasourceFile) else: driverConnection = "GMLAS:{}".format(datasourceFile) gdal.SetConfigOption('GDAL_HTTP_UNSAFESSL', 'YES') gdal.SetConfigOption('GDAL_HTTP_USERAGENT', settings.value('http_user_agent', plugin_name())) with qgis_proxy_settings(): return gdal.OpenEx(driverConnection, open_options=openOptions)
# -*- coding: utf-8 -*- import os from qgis.PyQt.QtCore import QSettings from gml_application_schema_toolbox import name as plugin_name DEFAULT_GMLAS_CONFIG = os.path.realpath(os.path.join( os.path.dirname(__file__), "..", "conf", "gmlasconf.xml")) defaults = { "default_maxfeatures": 100, "wfs2_services": [], "default_wfs2_service": None, "default_import_method": "gmlas", "default_gmlas_config": DEFAULT_GMLAS_CONFIG, "default_language": "en", "default_db_type": "SQLite", "default_access_mode": None } settings = QSettings() settings.beginGroup(plugin_name()) for key, value in defaults.items(): if not settings.contains(key): settings.setValue(key, value)
import os from qgis.PyQt.QtCore import QSettings from gml_application_schema_toolbox import name as plugin_name DEFAULT_GMLAS_CONFIG = os.path.realpath( os.path.join(os.path.dirname(__file__), "..", "conf", "gmlasconf.xml")) defaults = { "default_maxfeatures": 100, "wfs2_services": [], "default_wfs2_service": None, "default_import_method": "gmlas", "default_gmlas_config": DEFAULT_GMLAS_CONFIG, "default_language": "en", "default_db_type": "SQLite", "default_access_mode": None, } settings = QSettings() settings.beginGroup(plugin_name()) for key, value in defaults.items(): if not settings.contains(key): settings.setValue(key, value)
def error_handler(err, err_no, msg): if err >= gdal.CE_Warning: QgsMessageLog.logMessage("{} {}: {}".format(err, err_no, msg), plugin_name())
def show(self): if self.message is None: return QMessageBox.warning(self.parent, plugin_name(), self.message)
def show(self): if self.message == None: return QMessageBox.warning(self.parent, plugin_name(), self.message)