def serverInfo( self ): settings = QSettings() key = "/CSWClient/" + self.cmbConnections.currentText() self.catalogUrl = str( settings.value( key + "/url" ).toString() ) try: QApplication.setOverrideCursor( QCursor( Qt.WaitCursor ) ) self.catalog = csw( self.catalogUrl ) QApplication.restoreOverrideCursor() except urllib2.HTTPError: QApplication.restoreOverrideCursor() print "CSWClient HTTP error:", sys.exc_info()[ 0 ], sys.exc_info()[ 1 ], sys.exc_info()[ 2 ] QMessageBox.warning( self, self.tr( "Connection error" ), self.tr( "Error connecting to server %1:\n%2" ) .arg( self.cmbConnections.currentText() ) .arg( str( sys.exc_info()[ 1 ] ) ) ) return except ExpatError: QApplication.restoreOverrideCursor() print "CSWClient parse error:", sys.exc_info()[ 0 ], sys.exc_info()[ 1 ], sys.exc_info()[ 2 ] QMessageBox.warning( self, self.tr( "Parse error" ), self.tr( "Error parsing server response:\n%1" ) .arg( str( sys.exc_info()[ 1 ] ) ) ) return except: QApplication.restoreOverrideCursor() print "CSWClient unexpected error:", sys.exc_info()[ 0 ], sys.exc_info()[ 1 ], sys.exc_info()[ 2 ] QMessageBox.warning( self, self.tr( "Error" ), self.tr( "Error connecting to server %1:\n%2" ) .arg( self.cmbConnections.currentText() ) .arg( str( sys.exc_info()[ 1 ] ) ) ) return if self.catalog.exceptionreport: print self.catalog.exceptionreport.exceptions QMessageBox.warning( self, self.tr( "Connection error" ), self.tr( "Error connecting to server %1:\n%2: %3" ) .arg( self.cmbConnections.currentText() ) .arg( self.catalog.exceptionreport.exceptions[ 0 ][ "exceptionCode" ]) .arg( self.catalog.exceptionreport.exceptions[ 0 ][ "ExceptionText" ] ) ) return if self.catalog: self.btnCapabilities.setEnabled( True ) metadata = utils.serverMetadata( self.catalog ) myStyle = QgsApplication.reportStyleSheet() self.textMetadata.clear() self.textMetadata.document().setDefaultStyleSheet( myStyle ) self.textMetadata.setHtml( metadata )
def showMetadata( self ): if not self.treeRecords.selectedItems(): return item = self.treeRecords.currentItem() if not item: return recordId = str( item.text( 2 ) ) try: QApplication.setOverrideCursor( QCursor( Qt.WaitCursor ) ) cat = csw( self.catalogUrl ) except urllib2.HTTPError: QApplication.restoreOverrideCursor() print "CSWClient HTTP error:", sys.exc_info()[ 0 ], sys.exc_info()[ 1 ], sys.exc_info()[ 2 ] QMessageBox.warning( self, self.tr( "Connection error" ), self.tr( "Error connecting to server:\n%1" ) .arg( str( sys.exc_info()[ 1 ] ) ) ) return except ExpatError: QApplication.restoreOverrideCursor() print "CSWClient parse error:", sys.exc_info()[ 0 ], sys.exc_info()[ 1 ], sys.exc_info()[ 2 ] QMessageBox.warning( self, self.tr( "Parse error" ), self.tr( "Error parsing server response:\n%1" ) .arg( str( sys.exc_info()[ 1 ] ) ) ) return except: QApplication.restoreOverrideCursor() print "CSWClient unexpected error:", sys.exc_info()[ 0 ], sys.exc_info()[ 1 ], sys.exc_info()[ 2 ] QMessageBox.warning( self, self.tr( "Error" ), self.tr( "Error connecting to server:\n%1" ) .arg( str( sys.exc_info()[ 1 ] ) ) ) return try: cat.getrecordbyid( [ self.catalog.records[ recordId ].identifier ] ) except: QApplication.restoreOverrideCursor() print "CSWClient unexpected error:", sys.exc_info()[ 0 ], sys.exc_info()[ 1 ], sys.exc_info()[ 2 ] QMessageBox.warning( self, self.tr( "GetRecords error" ), self.tr( "Error getting server response:\n%1" ) .arg( str( sys.exc_info()[ 1 ] ) ) ) return QApplication.restoreOverrideCursor() if cat.exceptionreport: print cat.exceptionreport.exceptions QMessageBox.warning( self, self.tr( "Metadata request error" ), self.tr( "Can't get metadata for record %1:\n%2: %3" ) .arg( recordId ) .arg( cat.exceptionreport.exceptions[ 0 ][ "exceptionCode" ]) .arg( cat.exceptionreport.exceptions[ 0 ][ "ExceptionText" ] ) ) return metadata = utils.recordMetadata( cat.records[ recordId ] ) myStyle = QgsApplication.reportStyleSheet() dlg = CSWResponseDialog() dlg.textXml.document().setDefaultStyleSheet( myStyle ) dlg.textXml.setHtml( metadata ) dlg.exec_()
def startSearch( self ): self.catalog = None self.bbox = None self.keywords = None # clear all fields and disable buttons self.lblResults.setText( self.tr( "" ) ) self.treeRecords.clear() self.textAbstract.clear() self.leDataUrl.clear() self.btnAddToWms.setEnabled( False ) self.btnOpenUrl.setEnabled( False ) self.btnMetadata.setEnabled( False ) self.btnShowXml.setEnabled( False ) self.btnFirst.setEnabled( False ) self.btnPrev.setEnabled( False ) self.btnNext.setEnabled( False ) self.btnLast.setEnabled( False ) # save some settings settings = QSettings() settings.setValue( "/CSWClient/returnRecords", self.spnRecords.cleanText() ) # start position and number of records to return self.startFrom = 0 self.maxRecords = self.spnRecords.value() # bbox minX = self.leWest.text() minY = self.leSouth.text() maxX = self.leEast.text() maxY = self.leNorth.text() self.bbox = [ minX, minY, maxX, maxY ] # keywords if self.leKeywords.text().isEmpty(): self.keywords = [] else: self.keywords = self.leKeywords.text().split( "," ) # build request try: QApplication.setOverrideCursor( QCursor( Qt.WaitCursor ) ) self.catalog = csw( self.catalogUrl ) except urllib2.HTTPError: QApplication.restoreOverrideCursor() print "CSWClient HTTP error:", sys.exc_info()[ 0 ], sys.exc_info()[ 1 ], sys.exc_info()[ 2 ] QMessageBox.warning( self, self.tr( "Connection error" ), self.tr( "Error connecting to server:\n%1" ) .arg( str( sys.exc_info()[ 1 ] ) ) ) return except ExpatError: QApplication.restoreOverrideCursor() print "CSWClient parse error:", sys.exc_info()[ 0 ], sys.exc_info()[ 1 ], sys.exc_info()[ 2 ] QMessageBox.warning( self, self.tr( "Parse error" ), self.tr( "Error parsing server response:\n%1" ) .arg( str( sys.exc_info()[ 1 ] ) ) ) return except: QApplication.restoreOverrideCursor() print "CSWClient unexpected error:", sys.exc_info()[ 0 ], sys.exc_info()[ 1 ], sys.exc_info()[ 2 ] QMessageBox.warning( self, self.tr( "Error" ), self.tr( "Error connecting to server:\n%1" ) .arg( str( sys.exc_info()[ 1 ] ) ) ) return # TODO: allow users to select resources types to find. qtype = "service", "dataset"... try: self.catalog.getrecords( qtype = None, keywords = self.keywords, bbox = self.bbox, sortby = None, maxrecords = self.maxRecords ) except: QApplication.restoreOverrideCursor() print "CSWClient unexpected error:", sys.exc_info()[ 0 ], sys.exc_info()[ 1 ], sys.exc_info()[ 2 ] QMessageBox.warning( self, self.tr( "GetRecords error" ), self.tr( "Error getting server response:\n%1" ) .arg( str( sys.exc_info()[ 1 ] ) ) ) return QApplication.restoreOverrideCursor() if self.catalog.exceptionreport: print self.catalog.exceptionreport.exceptions QMessageBox.warning( self, self.tr( "Error" ), self.tr( "CSW exception %1:\n%2" ) .arg( self.catalog.exceptionreport.exceptions[ 0 ][ "exceptionCode" ]) .arg( self.catalog.exceptionreport.exceptions[ 0 ][ "ExceptionText" ] ) ) return if not self.catalog.results: print "There are no results" QMessageBox.information( self, self.tr( "Search" ), self.tr( "There are no records in server response." ) ) return if self.catalog.results[ "matches" ] == 0: QMessageBox.information( self, self.tr( "Search" ), self.tr( "There are no records matching your criteria." ) ) self.lblResults.setText( self.tr( "Nothing found" ) ) return self.displayResults()