eric7/EricXML/MultiProjectReader.py

branch
eric7
changeset 8351
7d13e08ddb3f
parent 8318
962bce857696
child 8881
54e42bc2437a
equal deleted inserted replaced
8350:74a3b2a6a944 8351:7d13e08ddb3f
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2010 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a class for reading an XML multi project file.
8 """
9
10 import os
11
12 from .Config import multiProjectFileFormatVersion
13 from .XMLStreamReaderBase import XMLStreamReaderBase
14
15 import Utilities
16
17
18 class MultiProjectReader(XMLStreamReaderBase):
19 """
20 Class for reading an XML multi project file.
21 """
22 supportedVersions = ["4.2", "5.0", "5.1"]
23
24 def __init__(self, device, multiProject):
25 """
26 Constructor
27
28 @param device reference to the I/O device to read from (QIODevice)
29 @param multiProject Reference to the multi project object to store the
30 information into.
31 """
32 XMLStreamReaderBase.__init__(self, device)
33
34 self.multiProject = multiProject
35 self.path = os.path.dirname(device.fileName())
36
37 self.version = ""
38
39 def readXML(self):
40 """
41 Public method to read and parse the XML document.
42 """
43 while not self.atEnd():
44 self.readNext()
45 if self.isStartElement():
46 if self.name() == "MultiProject":
47 self.version = self.attribute(
48 "version",
49 multiProjectFileFormatVersion)
50 if self.version not in self.supportedVersions:
51 self.raiseUnsupportedFormatVersion(self.version)
52 elif self.name() == "Description":
53 self.multiProject.description = self.readElementText()
54 elif self.name() == "Projects":
55 self.__readProjects()
56 else:
57 self.raiseUnexpectedStartTag(self.name())
58
59 self.showErrorMessage()
60
61 def __readProjects(self):
62 """
63 Private method to read the project infos.
64 """
65 while not self.atEnd():
66 self.readNext()
67 if self.isEndElement() and self.name() == "Projects":
68 break
69
70 if self.isStartElement():
71 if self.name() == "Project":
72 self.__readProject()
73 else:
74 self.raiseUnexpectedStartTag(self.name())
75
76 def __readProject(self):
77 """
78 Private method to read the project info.
79 """
80 project = {}
81
82 project["master"] = self.toBool(self.attribute("isMaster", "False"))
83 uid = self.attribute("uid", "")
84 if uid:
85 project["uid"] = uid
86 else:
87 # upgrade from pre 5.1 format
88 from PyQt6.QtCore import QUuid
89 project["uid"] = QUuid.createUuid().toString()
90
91 while not self.atEnd():
92 self.readNext()
93 if self.isEndElement() and self.name() == "Project":
94 if 'category' not in project:
95 # upgrade from 4.2 format
96 project["category"] = ""
97 self.multiProject.addProject(project)
98 break
99
100 if self.isStartElement():
101 if self.name() == "ProjectName":
102 project["name"] = self.readElementText()
103 elif self.name() == "ProjectFile":
104 project["file"] = Utilities.absoluteUniversalPath(
105 self.readElementText(), self.path)
106 elif self.name() == "ProjectDescription":
107 project["description"] = self.readElementText()
108 elif self.name() == "ProjectCategory":
109 project["category"] = self.readElementText()
110 else:
111 self.raiseUnexpectedStartTag(self.name())

eric ide

mercurial