E5XML/MultiProjectReader.py

changeset 602
2f32aef5cc67
child 605
9c7527ecbf6e
equal deleted inserted replaced
600:ed2589a25982 602:2f32aef5cc67
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2010 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 .Config import multiProjectFileFormatVersion
11 from .XMLStreamReaderBase import XMLStreamReaderBase
12
13 import Utilities
14
15 class MultiProjectReader(XMLStreamReaderBase):
16 """
17 Class for reading an XML multi project file.
18 """
19 supportedVersions = ["4.2"]
20
21 def __init__(self, device, multiProject):
22 """
23 Constructor
24
25 @param device reference to the I/O device to read from (QIODevice)
26 @param multiProject Reference to the multi project object to store the
27 information into.
28 """
29 XMLStreamReaderBase.__init__(self, device)
30
31 self.multiProject = multiProject
32
33 self.version = ""
34
35 def readXML(self):
36 """
37 Public method to read and parse the XML document.
38 """
39 while not self.atEnd():
40 self.readNext()
41 if self.isStartElement():
42 if self.name() == "MultiProject":
43 self.version = self.attribute("version",
44 multiProjectFileFormatVersion)
45 if self.version not in self.supportedVersions:
46 self.raiseUnsupportedFormatVersion(self.version)
47 elif self.name() == "Description":
48 self.multiProject.description = self.decodedNewLines(
49 self.readElementText())
50 elif self.name() == "Projects":
51 self.__readProjects()
52 else:
53 self.raiseUnexpectedStartTag(self.name())
54
55 self.showErrorMessage()
56
57 def __readProjects(self):
58 """
59 Private method to read the project infos.
60 """
61 while not self.atEnd():
62 self.readNext()
63 if self.isEndElement() and self.name() == "Task":
64 break
65
66 if self.isStartElement():
67 if self.name() == "Project":
68 self.__readProject()
69 else:
70 self.raiseUnexpectedStartTag(self.name())
71
72 def __readProject(self):
73 """
74 Private method to read the project info.
75 """
76 project = {}
77
78 project["master"] = self.toBool(self.attribute("isMaster", "False"))
79
80 while not self.atEnd():
81 self.readNext()
82 if self.isEndElement() and self.name() == "Project":
83 self.multiProject.projects.append(project)
84 break
85
86 if self.isStartElement():
87 if self.name() == "ProjectName":
88 project["name"] = self.readElementText()
89 elif self.name() == "ProjectFile":
90 project["file"] = Utilities.toNativeSeparators(self.readElementText())
91 elif self.name() == "ProjectDescription":
92 project["description"] = self.decodedNewLines(self.readElementText())
93 else:
94 self.raiseUnexpectedStartTag(self.name())

eric ide

mercurial