E5XML/XMLStreamReaderBase.py

changeset 577
ef42a81128ca
parent 576
ad8fdac5aff5
child 578
a0ecb2c68208
equal deleted inserted replaced
576:ad8fdac5aff5 577:ef42a81128ca
9 9
10 import pickle 10 import pickle
11 import base64 11 import base64
12 12
13 from PyQt4.QtCore import QXmlStreamReader, QCoreApplication 13 from PyQt4.QtCore import QXmlStreamReader, QCoreApplication
14
15 from E5Gui import E5MessageBox
14 16
15 class XMLStreamReaderBase(QXmlStreamReader): 17 class XMLStreamReaderBase(QXmlStreamReader):
16 """ 18 """
17 Class implementing a base class for all of eric5s XML stream readers. 19 Class implementing a base class for all of eric5s XML stream readers.
18 """ 20 """
32 Public method to decode newlines and paragraph breaks. 34 Public method to decode newlines and paragraph breaks.
33 35
34 @param text text to decode (string) 36 @param text text to decode (string)
35 """ 37 """
36 return text.replace(self.NEWPARA, "\n\n").replace(self.NEWLINE, "\n") 38 return text.replace(self.NEWPARA, "\n\n").replace(self.NEWLINE, "\n")
39
40 def showErrorMessage(self):
41 """
42 Public method to show an error message.
43 """
44 if self.hasError():
45 msg = QCoreApplication.translate("XMLStreamReaderBase",
46 "<p>XML parse error in file <b>{0}</b>, line {1}, column {2}<p>"
47 "<p>Error: {3}").format(self.device.fileName(),
48 self.lineNumber(), self.columnNumber(), self.errorString())
49 E5MessageBox.warning(None,
50 self.trUtf8("XML parse error"),
51 self.trUtf8(msg))
52
37 53
38 def _skipUnknownElement(self): 54 def _skipUnknownElement(self):
39 """ 55 """
40 Protected method to skip over all unknown elements. 56 Protected method to skip over all unknown elements.
41 """ 57 """
86 [int(b) for b in self.readElementText().split(",")]) 102 [int(b) for b in self.readElementText().split(",")])
87 val = by 103 val = by
88 elif self.name() == "tuple": 104 elif self.name() == "tuple":
89 val = self.__readTuple() 105 val = self.__readTuple()
90 return val 106 return val
107 elif self.name() == "list":
108 val = self.__readList()
109 return val
110 elif self.name() == "dict":
111 val = self.__readDict()
112 return val
113 elif self.name() == "set":
114 val = self.__readSet()
115 return val
116 elif self.name() == "frozenset":
117 val = self.__readFrozenset()
118 return val
119 elif self.name() == "pickle":
120 encoding = self.attributes().value("encoding")
121 if encoding != "base64":
122 self.raiseError(QCoreApplication.translate(
123 "XMLStreamReaderBase",
124 "Pickle data encoding '{0}' is not supported.")\
125 .format(encoding))
126 continue
127 b64 = self.readElementText()
128 pic = base64.b64decode(b64.encode("ASCII"))
129 val = pickle.loads(pic)
91 else: 130 else:
92 self._skipUnknownElement() 131 self._skipUnknownElement()
93 except ValueError as err: 132 except ValueError as err:
94 self.raiseError(str(err)) 133 self.raiseError(str(err))
134 continue
95 135
96 if self.isEndElement(): 136 if self.isEndElement():
97 if self.name() in ["tuple"]: 137 if self.name() in ["tuple", "list", "dict", "set", "frozenset"]:
98 return None 138 return None
99 else: 139 else:
100 return val 140 return val
101 141
102 def __readTuple(self): 142 def __readTuple(self):
110 val = self._readBasics() 150 val = self._readBasics()
111 if self.isEndElement() and self.name() == "tuple" and val is None: 151 if self.isEndElement() and self.name() == "tuple" and val is None:
112 return tuple(l) 152 return tuple(l)
113 else: 153 else:
114 l.append(val) 154 l.append(val)
155
156 def __readList(self):
157 """
158 Private method to read a Python list.
159
160 @return Python list
161 """
162 l = []
163 while not self.atEnd():
164 val = self._readBasics()
165 if self.isEndElement() and self.name() == "list" and val is None:
166 return l
167 else:
168 l.append(val)
169
170 def __readDict(self):
171 """
172 Private method to read a Python dictionary.
173
174 @return Python dictionary
175 """
176 d = {}
177 while not self.atEnd():
178 self.readNext()
179 if self.isStartElement():
180 if self.name() == "key":
181 key = self._readBasics()
182 elif self.name() == "value":
183 d[key] = self._readBasics()
184 if self.isEndElement() and self.name() == "dict":
185 self.readNext()
186
187 if self.isEndElement() and self.name() == "dict":
188 return d
189
190 def __readSet(self):
191 """
192 Private method to read a Python set.
193
194 @return Python set
195 """
196 l = []
197 while not self.atEnd():
198 val = self._readBasics()
199 if self.isEndElement() and self.name() == "set" and val is None:
200 return set(l)
201 else:
202 l.append(val)
203
204 def __readFrozenset(self):
205 """
206 Private method to read a Python set.
207
208 @return Python set
209 """
210 l = []
211 while not self.atEnd():
212 val = self._readBasics()
213 if self.isEndElement() and self.name() == "frozenset" and val is None:
214 return frozenset(l)
215 else:
216 l.append(val)

eric ide

mercurial