eric7/WebBrowser/UserAgent/UserAgentReader.py

branch
eric7
changeset 8312
800c432b34c8
parent 8218
7c09585bd960
child 8318
962bce857696
diff -r 4e8b98454baa -r 800c432b34c8 eric7/WebBrowser/UserAgent/UserAgentReader.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/WebBrowser/UserAgent/UserAgentReader.py	Sat May 15 18:45:04 2021 +0200
@@ -0,0 +1,97 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2012 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+
+"""
+Module implementing a class to read user agent data files.
+"""
+
+from PyQt5.QtCore import QXmlStreamReader, QIODevice, QFile, QCoreApplication
+
+
+class UserAgentReader(QXmlStreamReader):
+    """
+    Class implementing a reader object for user agent data files.
+    """
+    def __init__(self):
+        """
+        Constructor
+        """
+        super().__init__()
+    
+    def read(self, fileNameOrDevice):
+        """
+        Public method to read a user agent file.
+        
+        @param fileNameOrDevice name of the file to read (string)
+            or reference to the device to read (QIODevice)
+        @return dictionary with user agent data (host as key, agent string as
+            value)
+        """
+        self.__agents = {}
+        
+        if isinstance(fileNameOrDevice, QIODevice):
+            self.setDevice(fileNameOrDevice)
+        else:
+            f = QFile(fileNameOrDevice)
+            if not f.exists():
+                return self.__agents
+            f.open(QFile.ReadOnly)
+            self.setDevice(f)
+        
+        while not self.atEnd():
+            self.readNext()
+            if self.isStartElement():
+                version = self.attributes().value("version")
+                if (
+                    self.name() == "UserAgents" and
+                    (not version or version == "1.0")
+                ):
+                    self.__readUserAgents()
+                else:
+                    self.raiseError(QCoreApplication.translate(
+                        "UserAgentReader",
+                        "The file is not a UserAgents version 1.0 file."))
+        
+        return self.__agents
+    
+    def __readUserAgents(self):
+        """
+        Private method to read the user agents data.
+        """
+        if not self.isStartElement() and self.name() != "UserAgents":
+            return
+        
+        while not self.atEnd():
+            self.readNext()
+            if self.isEndElement():
+                if self.name() == "UserAgent":
+                    continue
+                else:
+                    break
+            
+            if self.isStartElement():
+                if self.name() == "UserAgent":
+                    attributes = self.attributes()
+                    host = attributes.value("host")
+                    agent = attributes.value("agent")
+                    self.__agents[host] = agent
+                else:
+                    self.__skipUnknownElement()
+    
+    def __skipUnknownElement(self):
+        """
+        Private method to skip over all unknown elements.
+        """
+        if not self.isStartElement():
+            return
+        
+        while not self.atEnd():
+            self.readNext()
+            if self.isEndElement():
+                break
+            
+            if self.isStartElement():
+                self.__skipUnknownElement()

eric ide

mercurial