eric7/WebBrowser/UserAgent/UserAgentReader.py

Sun, 16 May 2021 20:07:24 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 16 May 2021 20:07:24 +0200
branch
eric7
changeset 8318
962bce857696
parent 8312
800c432b34c8
child 8556
766e1566cb74
permissions
-rw-r--r--

Replaced all imports of PyQt5 to PyQt6 and started to replace code using obsoleted methods and adapt to the PyQt6 enum usage.

# -*- coding: utf-8 -*-

# Copyright (c) 2012 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
#


"""
Module implementing a class to read user agent data files.
"""

from PyQt6.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