144 def decodeResult(self):
145 from xml.dom.minidom import parseString
146 import base64, zlib, curses.ascii, re
147
148 dom = parseString(self.result)
149 dataList = dom.getElementsByTagName("data")
150 keepalives = 0
151 result = []
152
153
154 for data in dataList:
155 for node in data.childNodes:
156
157 if node.nodeName == "keepalive":
158
159 keepalives += 1
160 continue
161
162 if node.data.strip() == "":
163 continue
164 if keepalives > 0:
165 print (keepalives, "keepalives received\n")
166 keepalives = 0
167
168 row = base64.decodebytes(node.data.encode())
169 if self.retrieveZiplevel != "":
170 row = zlib.decompress(row).decode("ISO-8859-1")
171
172
173 if sys.version_info[0] < 3:
174 row = row.encode('ascii', 'xmlcharrefreplace')
175
176 endFirstRow = row.find('\x07')
177 firstRow = row[:endFirstRow]
178 for c in firstRow:
179 if curses.ascii.isctrl(c):
180 firstRow = firstRow.replace(c, ' ')
181 fields = [x for i,x in enumerate(firstRow.split()) if i%2==0]
182 types = [x for i,x in enumerate(firstRow.split()) if i%2==1]
183 ptypes = []
184 for _f,t in zip(fields, types):
185 if t.startswith("NUMBER"):
186 if _f in ["HPR_VALUE", "L1CI_GLOBAL_JET_SCALE", "L1CI_GLOBAL_EM_SCALE"]:
187 ptypes.append(float)
188 else:
189 ptypes.append(int)
190 else:
191 ptypes.append(str)
192
193
194 log.debug("Fields : %r", fields)
195 log.debug("DB Types : %r", types)
196 log.debug("Python Types: %r", ptypes)
197
198 row = row[endFirstRow+1:]
199
200 row_h = row.rstrip('\x07')
201
202 if 'BLOB' in types:
203 row_h = re.sub("^.*?{","{",row_h)
204
205 row_h = row_h.replace("\x07\x06",'.nNn.\x06')
206
207
208
209
210
211 pattern = re.compile("\x06\x00\x00..",flags=re.S)
212 row_h = pattern.sub('.xXx.',row_h)
213 row_h = row_h.replace("\x86", '.xXx.')
214
215 row_h = row_h.split('.nNn.')
216 row_h = [r.split('.xXx.') for r in row_h]
217
218 result = []
219 for r in row_h:
220 if r[0]=='': r[0:1]=[]
221 r = tuple([t(v) for t,v in zip(ptypes,r)])
222 result.append( r )
223
224 self.result = result
225
226
227