--- a/src/eric7/WebBrowser/OpenSearch/OpenSearchReader.py Wed Jul 13 11:16:20 2022 +0200 +++ b/src/eric7/WebBrowser/OpenSearch/OpenSearchReader.py Wed Jul 13 14:55:47 2022 +0200 @@ -14,119 +14,116 @@ """ Class implementing a reader for open search engine descriptions. """ + def read(self, device): """ Public method to read the description. - + @param device device to read the description from (QIODevice) @return search engine object (OpenSearchEngine) """ self.clear() - + if not device.isOpen(): device.open(QIODevice.OpenModeFlag.ReadOnly) - + self.setDevice(device) return self.__read() - + def __read(self): """ Private method to read and parse the description. - + @return search engine object (OpenSearchEngine) """ from .OpenSearchEngine import OpenSearchEngine + engine = OpenSearchEngine() - + while not self.isStartElement() and not self.atEnd(): self.readNext() - + if ( - self.name() != "OpenSearchDescription" or - self.namespaceUri() != "http://a9.com/-/spec/opensearch/1.1/" + self.name() != "OpenSearchDescription" + or self.namespaceUri() != "http://a9.com/-/spec/opensearch/1.1/" ): - self.raiseError(QCoreApplication.translate( - "OpenSearchReader", - "The file is not an OpenSearch 1.1 file.")) + self.raiseError( + QCoreApplication.translate( + "OpenSearchReader", "The file is not an OpenSearch 1.1 file." + ) + ) return engine - + while not self.atEnd(): self.readNext() - + if not self.isStartElement(): continue - + if self.name() == "ShortName": engine.setName(self.readElementText()) - + elif self.name() == "Description": engine.setDescription(self.readElementText()) - + elif self.name() == "Url": type_ = self.attributes().value("type") url = self.attributes().value("template") method = self.attributes().value("method") - + if ( - type_ == "application/x-suggestions+json" and - engine.suggestionsUrlTemplate() - ): - continue - - if ( - (not type_ or - type_ in ("text/html", "application/xhtml+xml")) and - engine.searchUrlTemplate() + type_ == "application/x-suggestions+json" + and engine.suggestionsUrlTemplate() ): continue - + + if ( + not type_ or type_ in ("text/html", "application/xhtml+xml") + ) and engine.searchUrlTemplate(): + continue + if not url: continue - + parameters = [] - + self.readNext() - + while not (self.isEndElement() and self.name() == "Url"): - if ( - not self.isStartElement() or - (self.name() != "Param" and - self.name() != "Parameter") + if not self.isStartElement() or ( + self.name() != "Param" and self.name() != "Parameter" ): self.readNext() continue - + key = self.attributes().value("name") value = self.attributes().value("value") - + if key and value: parameters.append((key, value)) - + while not self.isEndElement(): self.readNext() - + if type_ == "application/x-suggestions+json": engine.setSuggestionsUrlTemplate(url) engine.setSuggestionsParameters(parameters) engine.setSuggestionsMethod(method) - elif ( - not type_ or - type_ in ("text/html", "application/xhtml+xml") - ): + elif not type_ or type_ in ("text/html", "application/xhtml+xml"): engine.setSearchUrlTemplate(url) engine.setSearchParameters(parameters) engine.setSearchMethod(method) - + elif self.name() == "Image": engine.setImageUrl(self.readElementText()) - + if ( - engine.name() and - engine.description() and - engine.suggestionsUrlTemplate() and - engine.searchUrlTemplate() and - engine.imageUrl() + engine.name() + and engine.description() + and engine.suggestionsUrlTemplate() + and engine.searchUrlTemplate() + and engine.imageUrl() ): break - + return engine