diff -r e9e7eca7efee -r bf71ee032bb4 src/eric7/WebBrowser/Bookmarks/XbelReader.py --- a/src/eric7/WebBrowser/Bookmarks/XbelReader.py Wed Jul 13 11:16:20 2022 +0200 +++ b/src/eric7/WebBrowser/Bookmarks/XbelReader.py Wed Jul 13 14:55:47 2022 +0200 @@ -8,8 +8,14 @@ """ from PyQt6.QtCore import ( - QXmlStreamReader, QXmlStreamEntityResolver, QIODevice, QFile, - QCoreApplication, QXmlStreamNamespaceDeclaration, QDateTime, Qt + QXmlStreamReader, + QXmlStreamEntityResolver, + QIODevice, + QFile, + QCoreApplication, + QXmlStreamNamespaceDeclaration, + QDateTime, + Qt, ) from .BookmarkNode import BookmarkNode @@ -19,10 +25,11 @@ """ Class implementing an XML entity resolver for bookmark files. """ + def resolveUndeclaredEntity(self, entity): """ Public method to resolve undeclared entities. - + @param entity entity to be resolved (string) @return resolved entity (string) """ @@ -35,19 +42,20 @@ """ Class implementing a reader object for XBEL bookmark files. """ + def __init__(self): """ Constructor """ super().__init__() - + self.__resolver = XmlEntityResolver() self.setEntityResolver(self.__resolver) - + def read(self, fileNameOrDevice): """ Public method to read an XBEL bookmark file. - + @param fileNameOrDevice name of the file to read (string) or reference to the device to read (QIODevice) @return reference to the root node (BookmarkNode) @@ -60,38 +68,37 @@ return BookmarkNode(BookmarkNode.Root) f.open(QIODevice.OpenModeFlag.ReadOnly) self.setDevice(f) - + root = BookmarkNode(BookmarkNode.Root) while not self.atEnd(): self.readNext() if self.isStartElement(): version = self.attributes().value("version") - if ( - self.name() == "xbel" and - (not version or version == "1.0") - ): + if self.name() == "xbel" and (not version or version == "1.0"): self.__readXBEL(root) else: - self.raiseError(QCoreApplication.translate( - "XbelReader", - "The file is not an XBEL version 1.0 file.")) - + self.raiseError( + QCoreApplication.translate( + "XbelReader", "The file is not an XBEL version 1.0 file." + ) + ) + return root - + def __readXBEL(self, node): """ Private method to read and parse the XBEL file. - + @param node reference to the node to attach to (BookmarkNode) """ if not self.isStartElement() and self.name() != "xbel": return - + while not self.atEnd(): self.readNext() if self.isEndElement(): break - + if self.isStartElement(): if self.name() == "folder": self.__readFolder(node) @@ -101,26 +108,27 @@ self.__readSeparator(node) else: self.__skipUnknownElement() - + def __readFolder(self, node): """ Private method to read and parse a folder subtree. - + @param node reference to the node to attach to (BookmarkNode) """ if not self.isStartElement() and self.name() != "folder": return - + folder = BookmarkNode(BookmarkNode.Folder, node) folder.expanded = self.attributes().value("folded") == "no" folder.added = QDateTime.fromString( - self.attributes().value("added"), Qt.DateFormat.ISODate) - + self.attributes().value("added"), Qt.DateFormat.ISODate + ) + while not self.atEnd(): self.readNext() if self.isEndElement(): break - + if self.isStartElement(): if self.name() == "title": self.__readTitle(folder) @@ -136,81 +144,85 @@ self.__readInfo() else: self.__skipUnknownElement() - + def __readTitle(self, node): """ Private method to read the title element. - + @param node reference to the bookmark node title belongs to (BookmarkNode) """ if not self.isStartElement() and self.name() != "title": return - + node.title = self.readElementText() - + def __readDescription(self, node): """ Private method to read the desc element. - + @param node reference to the bookmark node desc belongs to (BookmarkNode) """ if not self.isStartElement() and self.name() != "desc": return - + node.desc = self.readElementText() - + def __readSeparator(self, node): """ Private method to read a separator element. - + @param node reference to the bookmark node the separator belongs to (BookmarkNode) """ sep = BookmarkNode(BookmarkNode.Separator, node) sep.added = QDateTime.fromString( - self.attributes().value("added"), Qt.DateFormat.ISODate) - + self.attributes().value("added"), Qt.DateFormat.ISODate + ) + # empty elements have a start and end element while not self.atEnd(): self.readNext() if self.isEndElement(): break - + if self.isStartElement(): if self.name() == "info": self.__readInfo() else: self.__skipUnknownElement() - + def __readBookmarkNode(self, node): """ Private method to read and parse a bookmark subtree. - + @param node reference to the node to attach to (BookmarkNode) """ if not self.isStartElement() and self.name() != "bookmark": return - + bookmark = BookmarkNode(BookmarkNode.Bookmark, node) bookmark.url = self.attributes().value("href") bookmark.added = QDateTime.fromString( - self.attributes().value("added"), Qt.DateFormat.ISODate) + self.attributes().value("added"), Qt.DateFormat.ISODate + ) bookmark.modified = QDateTime.fromString( - self.attributes().value("modified"), Qt.DateFormat.ISODate) + self.attributes().value("modified"), Qt.DateFormat.ISODate + ) bookmark.visited = QDateTime.fromString( - self.attributes().value("visited"), Qt.DateFormat.ISODate) + self.attributes().value("visited"), Qt.DateFormat.ISODate + ) try: bookmark.visitCount = int(self.attributes().value("visitCount")) except ValueError: bookmark.visitCount = 0 - + while not self.atEnd(): self.readNext() if self.isEndElement(): break - + if self.isStartElement(): if self.name() == "title": self.__readTitle(bookmark) @@ -220,19 +232,19 @@ self.__readInfo() else: self.__skipUnknownElement() - + if not bookmark.title: - bookmark.title = QCoreApplication.translate( - "XbelReader", "Unknown title") - + bookmark.title = QCoreApplication.translate("XbelReader", "Unknown title") + def __readInfo(self): """ Private method to read and parse an info subtree. """ - self.addExtraNamespaceDeclaration(QXmlStreamNamespaceDeclaration( - "bookmark", "http://www.python.org")) + self.addExtraNamespaceDeclaration( + QXmlStreamNamespaceDeclaration("bookmark", "http://www.python.org") + ) self.skipCurrentElement() - + def __skipUnknownElement(self): """ Private method to skip over all unknown elements.