def getPublishTask(self, parent):
        self.storeMetadata()
        self.storeFieldsToPublish()

        toPublish = self._toPublish()

        if self.tabOnOffline.currentIndex() == 0:
            if self.comboGeodataServer.currentIndex() != 0:
                geodataServer = geodataServers()[
                    self.comboGeodataServer.currentText()]
            else:
                geodataServer = None

            if self.comboMetadataServer.currentIndex() != 0:
                metadataServer = metadataServers()[
                    self.comboMetadataServer.currentText()]
            else:
                metadataServer = None

            onlySymbology = self.chkOnlySymbology.checkState() == Qt.Checked

            return PublishTask(toPublish, self.fieldsToPublish, onlySymbology,
                               geodataServer, metadataServer, parent)
        else:
            return ExportTask(self.txtExportFolder.text(), toPublish,
                              self.fieldsToPublish,
                              self.chkExportData.isChecked(),
                              self.chkExportMetadata.isChecked(),
                              self.chkExportSymbology.isChecked())
Exemple #2
0
    def validateBeforePublication(self, to_publish):
        names = []
        errors = set()
        for i in range(self.listLayers.count()):
            item = self.listLayers.item(i)
            widget = self.listLayers.itemWidget(item)
            if widget.checked():
                name = widget.name()
                for c in "?&=#":
                    if c in name:
                        errors.add("Unsupported character in layer name: " + c)
                if name in names:
                    errors.add("Several layers with the same name")
                names.append(name)
        if self.comboGeodataServer.currentIndex() != 0:
            geodata_server = geodataServers()[
                self.comboGeodataServer.currentText()]
            geodata_server.validateGeodataBeforePublication(
                errors, to_publish,
                self.chkOnlySymbology.checkState() == Qt.Checked)

        if self.comboMetadataServer.currentIndex() != 0:
            metadata_server = metadataServers()[
                self.comboMetadataServer.currentText()]
            metadata_server.validateMetadataBeforePublication(errors)

        if errors:
            html = f"<p><b>Cannot publish data.</b></p>"
            issues = "".join(f"<li>{e}</li>" for e in errors)
            if issues:
                html += f"<p>The following issues were found:<ul>{issues}</ul></p>"
            self.showHtmlMessage("Publish", html)
            return False
        else:
            return True
Exemple #3
0
 def isMetadataOnServer(self, layer):
     try:
         server = metadataServers()[self.comboMetadataServer.currentText()]
         uuid = uuidForLayer(self.layerFromName(layer))
         return server.metadataExists(uuid)
     except:
         return False
    def validateBeforePublication(self, toPublish):
        names = []
        errors = set()
        for i in range(self.listLayers.count()):
            item = self.listLayers.item(i)
            widget = self.listLayers.itemWidget(item)
            if widget.checked():
                name = widget.name()
                for c in "?&=#":
                    if c in name:
                        errors.add("Unsupported character in layer name: " + c)
                if name in names:
                    errors.add("Several layers with the same name")
                names.append(name)
        if self.comboGeodataServer.currentIndex() != 0:
            geodataServer = geodataServers()[
                self.comboGeodataServer.currentText()]
            geodataServer.validateGeodataBeforePublication(errors, toPublish)

        if self.comboMetadataServer.currentIndex() != 0:
            metadataServer = metadataServers()[
                self.comboMetadataServer.currentText()]
            metadataServer.validateMetadataBeforePublication(errors)

        if errors:
            txt = '''<p><b>Cannot publish data.</b></p>
                    <p>The following issues were found:<p><ul><li>%s</li></ul>
                    ''' % "</li><li>".join(errors)
            dlg = QgsMessageOutput.createMessageOutput()
            dlg.setTitle("Publish")
            dlg.setMessage(txt, QgsMessageOutput.MessageHtml)
            dlg.showMessage()
            return False
        else:
            return True
    def getPublishTask(self, parent):
        if self.comboGeodataServer.currentIndex() != 0:
            geodataServer = geodataServers()[
                self.comboGeodataServer.currentText()]
        else:
            geodataServer = None

        if self.comboMetadataServer.currentIndex() != 0:
            metadataServer = metadataServers()[
                self.comboMetadataServer.currentText()]
        else:
            metadataServer = None

        self.storeMetadata()
        self.storeFieldsToPublish()

        toPublish = []
        for i in range(self.listLayers.count()):
            item = self.listLayers.item(i)
            widget = self.listLayers.itemWidget(item)
            if widget.checked():
                name = widget.name()
                toPublish.append(name)

        onlySymbology = self.chkOnlySymbology.checkState() == Qt.Checked

        return PublishTask(toPublish, self.fieldsToPublish, onlySymbology,
                           geodataServer, metadataServer, parent)
 def updateLayerIsMetadataPublished(self, name, value):
     self.isMetadataPublished[name] = value
     for i in range(self.listLayers.count()):
         item = self.listLayers.item(i)
         widget = self.listLayers.itemWidget(item)
         if widget.name() == name:
             server = metadataServers()[
                 self.comboMetadataServer.currentText()] if value else None
             widget.setMetadataPublished(server)
    def updateLayersPublicationStatus(self, data=True, metadata=True):
        canPublish = True
        if data:
            try:
                dataServer = geodataServers()[
                    self.comboGeodataServer.currentText()]
                if dataServer.testConnection():
                    self.comboGeodataServer.setStyleSheet("QComboBox { }")
                else:
                    self.comboGeodataServer.setStyleSheet(
                        "QComboBox { border: 2px solid red; }")
                    dataServer = None
                    canPublish = False
            except KeyError:
                self.comboGeodataServer.setStyleSheet("QComboBox { }")
                dataServer = None

        if metadata:
            try:
                metadataServer = metadataServers()[
                    self.comboMetadataServer.currentText()]
                if metadataServer.testConnection():
                    self.comboMetadataServer.setStyleSheet("QComboBox { }")
                else:
                    self.comboMetadataServer.setStyleSheet(
                        "QComboBox { border: 2px solid red; }")
                    metadataServer = None
                    canPublish = False
            except KeyError:
                self.comboMetadataServer.setStyleSheet("QComboBox { }")
                metadataServer = None

        for i in range(self.listLayers.count()):
            item = self.listLayers.item(i)
            widget = self.listLayers.itemWidget(item)
            name = widget.name()
            if data:
                server = None
                if dataServer:
                    self.isDataPublished[name] = self.isDataOnServer(name)
                    server = dataServer if self.isDataPublished[name] else None
                widget.setDataPublished(server)
            if metadata:
                server = None
                if metadataServer:
                    self.isMetadataPublished[name] = self.isMetadataOnServer(
                        name)
                    server = metadataServer if self.isMetadataPublished[
                        name] else None
                widget.setMetadataPublished(server)

        canPublish = canPublish and self.listLayers.count()
        self.btnPublish.setEnabled(canPublish)
        self.btnPublishOnBackground.setEnabled(canPublish)
 def isMetadataOnServer(self, layer):
     try:
         server = metadataServers()[self.comboMetadataServer.currentText()]
         self.comboMetadataServer.setStyleSheet("QComboBox {}")
         uuid = uuidForLayer(self.layerFromName(layer))
         return server.metadataExists(uuid)
     except KeyError:
         self.comboMetadataServer.setStyleSheet("QComboBox {}")
         return False
     except:
         self.comboMetadataServer.setStyleSheet(
             "QComboBox { border: 2px solid red; }")
 def updateLayersPublicationStatus(self, data=True, metadata=True):
     for i in range(self.listLayers.count()):
         item = self.listLayers.item(i)
         widget = self.listLayers.itemWidget(item)
         name = widget.name()
         if data:
             self.isDataPublished[name] = self.isDataOnServer(name)
             server = geodataServers()[self.comboGeodataServer.currentText(
             )] if self.isDataPublished[name] else None
             widget.setDataPublished(server)
         if metadata:
             self.isMetadataPublished[name] = self.isMetadataOnServer(name)
             server = metadataServers()[
                 self.comboMetadataServer.currentText(
                 )] if self.isMetadataPublished[name] else None
             widget.setMetadataPublished(server)
 def metadataServerChanged(self):
     self.updateLayersPublicationStatus(False, True)
     try:
         profile = metadataServers()[
             self.comboMetadataServer.currentText()].profile
     except KeyError:
         profile = GeonetworkServer.PROFILE_DEFAULT
     if profile == GeonetworkServer.PROFILE_DEFAULT:
         if self.tabWidgetMetadata.count() == 3:
             self.tabWidgetMetadata.removeTab(1)
             self.tabWidgetMetadata.removeTab(1)
     else:
         if self.tabWidgetMetadata.count() == 1:
             title = "Dutch geography" if profile == GeonetworkServer.PROFILE_DUTCH else "INSPIRE"
             self.tabWidgetMetadata.addTab(self.tabInspire, title)
             self.tabWidgetMetadata.addTab(self.tabTemporal,
                                           self.tr("Temporal"))
         self.comboStatus.setVisible(
             profile == GeonetworkServer.PROFILE_DUTCH)
 def updateServers(self):
     #TODO: do not call updateLayersPublicationStatus if not really needed
     self.comboGeodataServer.currentIndexChanged.disconnect(
         self.geodataServerChanged)
     self.comboMetadataServer.currentIndexChanged.disconnect(
         self.metadataServerChanged)
     self.populatecomboMetadataServer()
     current = self.comboGeodataServer.currentText()
     self.populatecomboGeodataServer()
     if current in geodataServers().keys():
         self.comboGeodataServer.setCurrentText(current)
     current = self.comboMetadataServer.currentText()
     self.populatecomboMetadataServer()
     if current in metadataServers().keys():
         self.comboMetadataServer.setCurrentText(current)
     self.updateLayersPublicationStatus()
     self.comboGeodataServer.currentIndexChanged.connect(
         self.geodataServerChanged)
     self.comboMetadataServer.currentIndexChanged.connect(
         self.metadataServerChanged)
 def viewMetadata(self, name):
     server = metadataServers()[self.comboMetadataServer.currentText()]
     layer = self.layerFromName(name)
     uuid = uuidForLayer(layer)
     server.openMetadata(uuid)
 def unpublishMetadata(self, name):
     server = metadataServers()[self.comboMetadataServer.currentText()]
     uuid = uuidForLayer(self.layerFromName(name))
     server.deleteMetadata(uuid)
     self.updateLayerIsMetadataPublished(name, False)
 def populatecomboMetadataServer(self):
     self.comboMetadataServer.clear()
     self.comboMetadataServer.addItem(self.tr("Do not publish metadata"))
     self.comboMetadataServer.addItems(metadataServers().keys())