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())
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
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())