class QueryDisplay(QObject): def __init__(self, datapath, querypath): super(QueryDisplay,self).__init__() self.datapath = datapath self.querypath = querypath self.view = QWebView() self.queryimpl = QXmlQuery(QXmlQuery.XQuery10) @pyqtSlot() def update(self, watchdog_event=None): self.queryimpl.setFocus(QUrl.fromLocalFile(self.datapath)) self.queryimpl.setQuery(QUrl.fromLocalFile(self.querypath)) self.view.setHtml(self.queryimpl.evaluateToString())
def errorHandler(self, resultXML): if resultXML: qDebug(resultXML) query = QXmlQuery(QXmlQuery.XSLT20) xslFile = QFile(":/plugins/wps/exception.xsl") xslFile.open(QIODevice.ReadOnly) bRead = query.setFocus(resultXML) query.setQuery(xslFile) exceptionHtml = query.evaluateToString() if exceptionHtml is None: qDebug("Empty result from exception.xsl") exceptionHtml = resultXML self._errorResultCallback(exceptionHtml) xslFile.close() return False
def search(self): ''' Search for elements in dom corresponding to primitive searched by user ''' if not hasattr(self,"primitive"): QtGui.QMessageBox.warning(self, "Nothing to search for", "Select a primitive first before pressing ok.") return predicateList = "" for attribute in self.primitive.nextAttribute(): if attribute.getValue(): #Add Predicate predicateList = predicateList+("[@"+attribute.name+"='"+str(attribute.value)+"']") #buildx path of the query xpath = "//"+self.primitive.name+predicateList #Once predicate is built #Make XQuery dependencyQuery = QXmlQuery() parsedXML = QtCore.QString() newTextStream = QtCore.QTextStream(parsedXML) #Parent is top object, asks for its node self.parent.domDocs["main"].save(newTextStream,2) #Proceded XQuery queryBuffer = QtCore.QBuffer() queryBuffer.setData(parsedXML.toUtf8()) queryBuffer.open(QtCore.QIODevice.ReadOnly) dependencyQuery.bindVariable("varSerializedXML", queryBuffer) query= "for $x in doc($varSerializedXML)"+xpath+"/ancestor::Process[@label]/@label return string(data($x))" dependencyQuery.setQuery(query) dependencies = QtCore.QStringList() dependencyQuery.evaluateTo(dependencies) if not len(list(dependencies)): QtGui.QMessageBox.warning(self, "Primitive not found", "Couldn't find a match for selected criterion") return treatmentModel = BaseTreatmentsModel() processList = list(set(dependencies)) for process in processList: process = str(process) if not processList.index(process): #First Process gotta create tree editor tree = treatmentModel.getTreatmentsDict()[process] editor = MainEditorWindow(tree.toElement().elementsByTagName("PrimitiveTree").item(0).firstChild(),self.parent,process) editor.setWindowModality(QtCore.Qt.WindowModal) editor.tabWidget_2.currentWidget().primitive.propagateHighlighting(self.primitive) continue tree = treatmentModel.getTreatmentsDict()[process] newTreeView = MedTreeView(tree.toElement().elementsByTagName("PrimitiveTree").item(0).firstChild(),editor) editor.tabWidget_2.addTab(newTreeView,process) newTreeView.primitive.propagateHighlighting(self.primitive) editor.exec_()
def getHtml(self, md): xsltFile = QFile(self.xsltFilePath) xsltFile.open(QIODevice.ReadOnly) xslt = unicode(xsltFile.readAll()) xsltFile.close() qry = QXmlQuery(QXmlQuery.XSLT20) '''self.handler = ErrorHandler() qry.setMessageHandler(self.handler)''' qry.setFocus(md) qry.setQuery(xslt) return qry.evaluateToString()
def compute(self): """ compute() -> None Render the XML tree and display it on the spreadsheet """ xml = self.get_input('XML').name xsl = self.get_input('XSL').name query = QXmlQuery(QXmlQuery.XSLT20) query.setFocus(QUrl.fromLocalFile(os.path.join(os.getcwd(), xml))) query.setQuery(QUrl.fromLocalFile(os.path.join(os.getcwd(), xsl))) html = query.evaluateToString() # gets a unicode object if html is None: raise ModuleError(self, "Error applying XSL") self.displayAndWait(RichTextCellWidget, (html, ))
def save(self, serialized, filepath=None): if filepath == None: if self.loadedpath == None: raise Error("Cannot guess filepath, no onload event was triggered") else: filepath = self.loadedpath f = open(filepath, 'w') savefilter = QXmlQuery(QXmlQuery.XQuery10) savefilter.setFocus(serialized) savefilter.setQuery(QUrl(os.path.realpath(self.savefilterpath))) result = savefilter.evaluateToString() result = result.toUtf8() f.write(result) f.close() return filepath
def compute(self): """ compute() -> None Render the XML tree and display it on the spreadsheet """ xml = self.getInputFromPort('XML').name xsl = self.getInputFromPort('XSL').name query = QXmlQuery(QXmlQuery.XSLT20) query.setFocus(QUrl.fromLocalFile(os.path.join(os.getcwd(), xml))) query.setQuery(QUrl.fromLocalFile(os.path.join(os.getcwd(), xsl))) html = query.evaluateToString() self.cellWidget = self.displayAndWait(RichTextCellWidget, (html,))
def compute(self): """ compute() -> None Render the XML tree and display it on the spreadsheet """ xml = self.get_input('XML').name xsl = self.get_input('XSL').name query = QXmlQuery(QXmlQuery.XSLT20) query.setFocus(QUrl.fromLocalFile(os.path.join(os.getcwd(), xml))) query.setQuery(QUrl.fromLocalFile(os.path.join(os.getcwd(), xsl))) html = query.evaluateToString() # gets a unicode object if html is None: raise ModuleError(self, "Error applying XSL") self.displayAndWait(RichTextCellWidget, (html,))
def xmlbuffer(self): queryimpl = QXmlQuery(QXmlQuery.XQuery10) #merge params from xquerynames and query path arguments params = copy.deepcopy(self.xquerynames) for name,value in self._queryparams.iteritems(): params.append([name,value]) #push values into external variable names in xquery for item in params: if len(item)==3 : # item has namespace (name,value,namespace) = item qname = QXmlName(queryimpl.namePool(), name, namespace) else: (name,value) = item qname = QXmlName(queryimpl.namePool(), name) qvalue = QXmlItem(value) queryimpl.bindVariable(qname,qvalue) #bind focus if available if(self.focuspath != None): queryimpl.setFocus(QUrl.fromLocalFile(self.focuspath)) queryimpl.setQuery(self.querysource) buf = QBuffer() buf.open(QBuffer.ReadWrite) queryimpl.evaluateTo(buf) buf.close() data = buf.data() return data
def __init__(self, datapath, querypath): super(QueryDisplay,self).__init__() self.datapath = datapath self.querypath = querypath self.view = QWebView() self.queryimpl = QXmlQuery(QXmlQuery.XQuery10)