Thu, 09 Sep 2010 19:52:19 +0200
Finished the XML stream reader for basic Python data types.
574
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1 | # -*- coding: utf-8 -*- |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
3 | # Copyright (c) 2010 Detlev Offenbach <detlev@die-offenbachs.de> |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4 | # |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | """ |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7 | Module implementing a base class for all of eric5s XML stream writers. |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8 | """ |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
10 | import pickle |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11 | import base64 |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12 | |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13 | from PyQt4.QtCore import QXmlStreamReader, QCoreApplication |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14 | |
577
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
15 | from E5Gui import E5MessageBox |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
16 | |
574
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17 | class XMLStreamReaderBase(QXmlStreamReader): |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18 | """ |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | Class implementing a base class for all of eric5s XML stream readers. |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20 | """ |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21 | def __init__(self, device): |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22 | """ |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23 | Constructor |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24 | |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25 | @param device reference to the I/O device to read from (QIODevice) |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26 | """ |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27 | QXmlStreamReader.__init__(self, device) |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29 | self.NEWPARA = chr(0x2029) |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30 | self.NEWLINE = chr(0x2028) |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32 | def decodedNewLines(self, text): |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33 | """ |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34 | Public method to decode newlines and paragraph breaks. |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35 | |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36 | @param text text to decode (string) |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37 | """ |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38 | return text.replace(self.NEWPARA, "\n\n").replace(self.NEWLINE, "\n") |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39 | |
577
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
40 | def showErrorMessage(self): |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
41 | """ |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
42 | Public method to show an error message. |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
43 | """ |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
44 | if self.hasError(): |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
45 | msg = QCoreApplication.translate("XMLStreamReaderBase", |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
46 | "<p>XML parse error in file <b>{0}</b>, line {1}, column {2}<p>" |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
47 | "<p>Error: {3}").format(self.device.fileName(), |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
48 | self.lineNumber(), self.columnNumber(), self.errorString()) |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
49 | E5MessageBox.warning(None, |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
50 | self.trUtf8("XML parse error"), |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
51 | self.trUtf8(msg)) |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
52 | |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
53 | |
574
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54 | def _skipUnknownElement(self): |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55 | """ |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56 | Protected method to skip over all unknown elements. |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57 | """ |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58 | if not self.isStartElement(): |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59 | return |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60 | |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61 | while not self.atEnd(): |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62 | self.readNext() |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63 | if self.isEndElement(): |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64 | break |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65 | |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66 | if self.isStartElement(): |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67 | self._skipUnknownElement() |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69 | def _readBasics(self): |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70 | """ |
575
5a008db344ea
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
574
diff
changeset
|
71 | Protected method to read an object of a basic Python type. |
574
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72 | |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73 | @return Python object read |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74 | """ |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75 | while not self.atEnd(): |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76 | self.readNext() |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77 | if self.isStartElement(): |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78 | try: |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79 | if self.name() == "none": |
576
ad8fdac5aff5
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
575
diff
changeset
|
80 | val = None |
574
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81 | elif self.name() == "int": |
576
ad8fdac5aff5
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
575
diff
changeset
|
82 | val = int(self.readElementText()) |
574
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83 | elif self.name() == "bool": |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84 | b = self.readElementText() |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
85 | if b == "True": |
576
ad8fdac5aff5
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
575
diff
changeset
|
86 | val = True |
574
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87 | else: |
576
ad8fdac5aff5
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
575
diff
changeset
|
88 | val = False |
574
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89 | elif self.name() == "float": |
576
ad8fdac5aff5
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
575
diff
changeset
|
90 | val = float(self.readElementText()) |
574
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91 | elif self.name() == "complex": |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92 | real, imag = self.readElementText().split() |
576
ad8fdac5aff5
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
575
diff
changeset
|
93 | val = float(real) + float(imag)*1j |
574
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94 | elif self.name() == "string": |
576
ad8fdac5aff5
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
575
diff
changeset
|
95 | val = self.readElementText() |
574
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96 | elif self.name() == "bytes": |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97 | by = bytes( |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98 | [int(b) for b in self.readElementText().split(",")]) |
576
ad8fdac5aff5
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
575
diff
changeset
|
99 | val = by |
574
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
100 | elif self.name() == "bytearray": |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
101 | by = bytearray( |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
102 | [int(b) for b in self.readElementText().split(",")]) |
576
ad8fdac5aff5
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
575
diff
changeset
|
103 | val = by |
575
5a008db344ea
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
574
diff
changeset
|
104 | elif self.name() == "tuple": |
5a008db344ea
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
574
diff
changeset
|
105 | val = self.__readTuple() |
576
ad8fdac5aff5
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
575
diff
changeset
|
106 | return val |
577
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
107 | elif self.name() == "list": |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
108 | val = self.__readList() |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
109 | return val |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
110 | elif self.name() == "dict": |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
111 | val = self.__readDict() |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
112 | return val |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
113 | elif self.name() == "set": |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
114 | val = self.__readSet() |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
115 | return val |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
116 | elif self.name() == "frozenset": |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
117 | val = self.__readFrozenset() |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
118 | return val |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
119 | elif self.name() == "pickle": |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
120 | encoding = self.attributes().value("encoding") |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
121 | if encoding != "base64": |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
122 | self.raiseError(QCoreApplication.translate( |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
123 | "XMLStreamReaderBase", |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
124 | "Pickle data encoding '{0}' is not supported.")\ |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
125 | .format(encoding)) |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
126 | continue |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
127 | b64 = self.readElementText() |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
128 | pic = base64.b64decode(b64.encode("ASCII")) |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
129 | val = pickle.loads(pic) |
574
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
130 | else: |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
131 | self._skipUnknownElement() |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
132 | except ValueError as err: |
c45f896e4c66
Started implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
133 | self.raiseError(str(err)) |
577
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
134 | continue |
575
5a008db344ea
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
574
diff
changeset
|
135 | |
5a008db344ea
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
574
diff
changeset
|
136 | if self.isEndElement(): |
577
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
137 | if self.name() in ["tuple", "list", "dict", "set", "frozenset"]: |
576
ad8fdac5aff5
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
575
diff
changeset
|
138 | return None |
ad8fdac5aff5
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
575
diff
changeset
|
139 | else: |
ad8fdac5aff5
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
575
diff
changeset
|
140 | return val |
575
5a008db344ea
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
574
diff
changeset
|
141 | |
5a008db344ea
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
574
diff
changeset
|
142 | def __readTuple(self): |
5a008db344ea
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
574
diff
changeset
|
143 | """ |
5a008db344ea
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
574
diff
changeset
|
144 | Private method to read a Python tuple. |
5a008db344ea
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
574
diff
changeset
|
145 | |
5a008db344ea
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
574
diff
changeset
|
146 | @return Python tuple |
5a008db344ea
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
574
diff
changeset
|
147 | """ |
5a008db344ea
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
574
diff
changeset
|
148 | l = [] |
5a008db344ea
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
574
diff
changeset
|
149 | while not self.atEnd(): |
5a008db344ea
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
574
diff
changeset
|
150 | val = self._readBasics() |
576
ad8fdac5aff5
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
575
diff
changeset
|
151 | if self.isEndElement() and self.name() == "tuple" and val is None: |
575
5a008db344ea
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
574
diff
changeset
|
152 | return tuple(l) |
5a008db344ea
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
574
diff
changeset
|
153 | else: |
5a008db344ea
Continued implementing the XMLStreamReaderBase class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
574
diff
changeset
|
154 | l.append(val) |
577
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
155 | |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
156 | def __readList(self): |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
157 | """ |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
158 | Private method to read a Python list. |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
159 | |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
160 | @return Python list |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
161 | """ |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
162 | l = [] |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
163 | while not self.atEnd(): |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
164 | val = self._readBasics() |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
165 | if self.isEndElement() and self.name() == "list" and val is None: |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
166 | return l |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
167 | else: |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
168 | l.append(val) |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
169 | |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
170 | def __readDict(self): |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
171 | """ |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
172 | Private method to read a Python dictionary. |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
173 | |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
174 | @return Python dictionary |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
175 | """ |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
176 | d = {} |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
177 | while not self.atEnd(): |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
178 | self.readNext() |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
179 | if self.isStartElement(): |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
180 | if self.name() == "key": |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
181 | key = self._readBasics() |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
182 | elif self.name() == "value": |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
183 | d[key] = self._readBasics() |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
184 | if self.isEndElement() and self.name() == "dict": |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
185 | self.readNext() |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
186 | |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
187 | if self.isEndElement() and self.name() == "dict": |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
188 | return d |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
189 | |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
190 | def __readSet(self): |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
191 | """ |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
192 | Private method to read a Python set. |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
193 | |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
194 | @return Python set |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
195 | """ |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
196 | l = [] |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
197 | while not self.atEnd(): |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
198 | val = self._readBasics() |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
199 | if self.isEndElement() and self.name() == "set" and val is None: |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
200 | return set(l) |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
201 | else: |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
202 | l.append(val) |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
203 | |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
204 | def __readFrozenset(self): |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
205 | """ |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
206 | Private method to read a Python set. |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
207 | |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
208 | @return Python set |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
209 | """ |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
210 | l = [] |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
211 | while not self.atEnd(): |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
212 | val = self._readBasics() |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
213 | if self.isEndElement() and self.name() == "frozenset" and val is None: |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
214 | return frozenset(l) |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
215 | else: |
ef42a81128ca
Finished the XML stream reader for basic Python data types.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
576
diff
changeset
|
216 | l.append(val) |