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
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
    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()
Ejemplo n.º 7
0
    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()
Ejemplo n.º 12
0
 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]
Ejemplo n.º 15
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)
Ejemplo n.º 18
0
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())
Ejemplo n.º 20
0
 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)