eric6/E5XML/MultiProjectReader.py

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

eric ide

mercurial