def doParseResultset(self): data = self.doParseXMLData() self.errorcode = self.doGetXMLElement(data, 'error').getAttribute('code') node = self.doGetXMLElement(data, 'product') self.product = self.doGetXMLAttributes(node) node = self.doGetXMLElement(data, 'datasource') self.database = self.doGetXMLAttributes(node) node = self.doGetXMLElement(data, 'metadata') for subnode in self.doGetXMLElements(node, 'field-definition'): fieldData = self.doGetXMLAttributes(subnode) self.metadata[fieldData['name']] = fieldData self.fieldNames.append(fieldData['name']) node = self.doGetXMLElement(data, 'resultset') for record in self.doGetXMLElements(node, 'record'): recordDict = dict() for column in self.doGetXMLElements(record, 'field'): fieldname = self.doGetXMLAttribute(column, 'name') try: recordDict[fieldname] = self.doGetXMLElement( column, 'data').getData() except: recordDict[fieldname] = ''.encode('UTF-8') # it means there are no data for this column!!! # -> and it's not possible to modify it later #recordDict[fieldname] = None if fieldname.find('::') != -1: subfield = fieldname[:fieldname.find('::')] subname = fieldname[fieldname.find('::') + 2:] if not recordDict.has_key(subfield): recordDict[subfield] = dict() recordDict[subfield][subname] = recordDict[fieldname] del (recordDict[fieldname]) recordDict['RECORDID'] = int( re.sub('[^\d+]', '', self.doGetXMLAttribute(record, 'record-id'))) recordDict['MODID'] = int(self.doGetXMLAttribute(record, 'mod-id')) for subnode in self.doGetXMLElements(record, 'relatedset'): subnodename = subnode.getAttribute('table') if (subnode.getAttribute('count') ) > 0 and not recordDict.has_key(subnodename): recordDict[subnodename] = [] for subrecord in self.doGetXMLElements(subnode, 'record'): subrecordDict = dict() for subcolumn in self.doGetXMLElements(subrecord, 'field'): fieldname = self.doGetXMLAttribute(subcolumn, 'name') if fieldname.startswith(subnodename): fieldname = fieldname[len(subnodename) + 2:] try: subrecordDict[fieldname] = self.doGetXMLElement( subcolumn, 'data').getData() except: subrecordDict[fieldname] = ''.encode('UTF-8') if fieldname.find('::') != -1: subfield = fieldname[:fieldname.find('::')] subname = fieldname[fieldname.find('::') + 2:] if not subrecordDict.has_key(subfield): subrecordDict[subfield] = dict() subrecordDict[subfield][subname] = subrecordDict[ fieldname] del (subrecordDict[fieldname]) subrecordDict['RECORDID'] = int( self.doGetXMLAttribute(subrecord, 'record-id')) subrecordDict['MODID'] = int( self.doGetXMLAttribute(subrecord, 'mod-id')) done = False for rec in recordDict[subnodename]: if rec['RECORDID'] == subrecordDict['RECORDID']: #rec.update(subrecordDict) for sub in subrecordDict: if sub in ['RECORDID', 'MODID']: pass elif rec.has_key(sub) and type( rec[sub]) == dict: rec[sub].update(subrecordDict[sub]) else: rec[sub] = subrecordDict[sub] done = True if not done: recordDict[subnodename].append(subrecordDict) self.resultset.append(makeFMData(recordDict))
def doParseResultset(self): data = self.doParseXMLData() self.errorcode = self.doGetXMLElement(data, "error").getAttribute("code") node = self.doGetXMLElement(data, "product") self.product = self.doGetXMLAttributes(node) node = self.doGetXMLElement(data, "datasource") self.database = self.doGetXMLAttributes(node) node = self.doGetXMLElement(data, "metadata") for subnode in self.doGetXMLElements(node, "field-definition"): fieldData = self.doGetXMLAttributes(subnode) self.metadata[fieldData["name"]] = fieldData self.fieldNames.append(fieldData["name"]) node = self.doGetXMLElement(data, "resultset") for record in self.doGetXMLElements(node, "record"): recordDict = dict() for column in self.doGetXMLElements(record, "field"): fieldname = self.doGetXMLAttribute(column, "name") try: recordDict[fieldname] = self.doGetXMLElement(column, "data").getData() except: recordDict[fieldname] = "".encode("UTF-8") # it means there are no data for this column!!! # -> and it's not possible to modify it later # recordDict[fieldname] = None if fieldname.find("::") != -1: subfield = fieldname[: fieldname.find("::")] subname = fieldname[fieldname.find("::") + 2 :] if not recordDict.has_key(subfield): recordDict[subfield] = dict() recordDict[subfield][subname] = recordDict[fieldname] del (recordDict[fieldname]) recordDict["RECORDID"] = int(re.sub("[^\d+]", "", self.doGetXMLAttribute(record, "record-id"))) recordDict["MODID"] = int(self.doGetXMLAttribute(record, "mod-id")) for subnode in self.doGetXMLElements(record, "relatedset"): subnodename = subnode.getAttribute("table") if (subnode.getAttribute("count")) > 0 and not recordDict.has_key(subnodename): recordDict[subnodename] = [] for subrecord in self.doGetXMLElements(subnode, "record"): subrecordDict = dict() for subcolumn in self.doGetXMLElements(subrecord, "field"): fieldname = self.doGetXMLAttribute(subcolumn, "name") if fieldname.startswith(subnodename): fieldname = fieldname[len(subnodename) + 2 :] try: subrecordDict[fieldname] = self.doGetXMLElement(subcolumn, "data").getData() except: subrecordDict[fieldname] = "".encode("UTF-8") if fieldname.find("::") != -1: subfield = fieldname[: fieldname.find("::")] subname = fieldname[fieldname.find("::") + 2 :] if not subrecordDict.has_key(subfield): subrecordDict[subfield] = dict() subrecordDict[subfield][subname] = subrecordDict[fieldname] del (subrecordDict[fieldname]) subrecordDict["RECORDID"] = int(self.doGetXMLAttribute(subrecord, "record-id")) subrecordDict["MODID"] = int(self.doGetXMLAttribute(subrecord, "mod-id")) done = False for rec in recordDict[subnodename]: if rec["RECORDID"] == subrecordDict["RECORDID"]: # rec.update(subrecordDict) for sub in subrecordDict: if sub in ["RECORDID", "MODID"]: pass elif rec.has_key(sub) and type(rec[sub]) == dict: rec[sub].update(subrecordDict[sub]) else: rec[sub] = subrecordDict[sub] done = True if not done: recordDict[subnodename].append(subrecordDict) self.resultset.append(makeFMData(recordDict))
def doParseResultset( self ): data = self.doParseXMLData() self.errorcode = self.doGetXMLElement( data, 'error' ).getAttribute('code') node = self.doGetXMLElement( data, 'product' ) self.product = self.doGetXMLAttributes( node ) node = self.doGetXMLElement( data, 'datasource' ) self.database = self.doGetXMLAttributes( node ) node = self.doGetXMLElement( data, 'metadata' ) for subnode in self.doGetXMLElements( node, 'field-definition' ): fieldData = self.doGetXMLAttributes( subnode ) self.metadata[fieldData['name']] = fieldData self.fieldNames.append( fieldData['name'] ) node = self.doGetXMLElement( data, 'resultset' ) for record in self.doGetXMLElements( node, 'record' ): recordDict = dict() for column in self.doGetXMLElements( record, 'field' ): fieldname = self.doGetXMLAttribute( column, 'name') try: recordDict[ fieldname ] = self.doGetXMLElement( column, 'data' ).getData() except: recordDict[ fieldname ] = ''.encode( 'UTF-8' ) # it means there are no data for this column!!! # -> and it's not possible to modify it later #recordDict[ fieldname ] = None if fieldname.find('::') != -1: subfield = fieldname[:fieldname.find('::')] subname = fieldname[fieldname.find('::')+2:] if not recordDict.has_key( subfield ): recordDict[ subfield ] = dict() recordDict[ subfield ][ subname ] = recordDict[ fieldname ] del(recordDict[ fieldname ]) recordDict['RECORDID'] = int( self.doGetXMLAttribute( record, 'record-id' ) ) recordDict['MODID'] = int( self.doGetXMLAttribute( record, 'mod-id' ) ) for subnode in self.doGetXMLElements( record, 'relatedset' ): subnodename = subnode.getAttribute('table') if (subnode.getAttribute('count')) > 0 and not recordDict.has_key(subnodename): recordDict[subnodename] = [] for subrecord in self.doGetXMLElements( subnode, 'record' ): subrecordDict = dict() for subcolumn in self.doGetXMLElements( subrecord, 'field' ): fieldname = self.doGetXMLAttribute( subcolumn, 'name' ) if fieldname.startswith(subnodename): fieldname = fieldname[len(subnodename)+2:] try: subrecordDict[ fieldname ] = self.doGetXMLElement( subcolumn, 'data' ).getData() except: subrecordDict[ fieldname ] = ''.encode( 'UTF-8' ) ### if fieldname.find('::') != -1: subfield = fieldname[:fieldname.find('::')] subname = fieldname[fieldname.find('::')+2:] if not subrecordDict.has_key( subfield ): subrecordDict[ subfield ] = dict() subrecordDict[ subfield ][ subname ] = subrecordDict[ fieldname ] del(subrecordDict[ fieldname ]) ### subrecordDict['RECORDID'] = int( self.doGetXMLAttribute( subrecord, 'record-id' ) ) subrecordDict['MODID'] = int( self.doGetXMLAttribute( subrecord, 'mod-id' ) ) done = False for rec in recordDict[subnodename]: if rec['RECORDID'] == subrecordDict['RECORDID']: #rec.update( subrecordDict ) for sub in subrecordDict: if sub in ['RECORDID','MODID']: pass elif rec.has_key(sub) and type(rec[sub])==dict: rec[sub].update(subrecordDict[sub]) else: rec[sub] = subrecordDict[sub] done = True if not done: recordDict[subnodename].append( subrecordDict ) self.resultset.append( makeFMData( recordDict ) )
def doParseResultset(self): data = self.doParseXMLData() self.errorcode = self.doGetXMLElement(data, 'error').getAttribute('code') node = self.doGetXMLElement(data, 'product') self.product = self.doGetXMLAttributes(node) node = self.doGetXMLElement(data, 'datasource') self.database = self.doGetXMLAttributes(node) node = self.doGetXMLElement(data, 'metadata') for subnode in self.doGetXMLElements(node, 'field-definition'): fieldData = self.doGetXMLAttributes(subnode) self.metadata[fieldData['name']] = fieldData self.fieldNames.append(fieldData['name']) if not self.caster.is_initialized: self.caster.initialize( meta=self.metadata, timeformats=self.database, ) node = self.doGetXMLElement(data, 'resultset') for record in self.doGetXMLElements(node, 'record'): recordDict = dict() for column in self.doGetXMLElements(record, 'field'): fieldname = self.doGetXMLAttribute(column, 'name') # some layout do returns fields with no names... if not fieldname: continue type_caster = self.caster[fieldname] data = '' if self.caster.multivalues[fieldname] == 1: data = type_caster( self.doGetXMLElement(column, 'data').getData()) else: data = [] for n in self.doGetXMLElements(column, 'data'): data.append(type_caster(n.getData())) recordDict[fieldname] = data # try: # data = self.doGetXMLElement(column, 'data').getData() # self.caster[fieldname](data) # recordDict[fieldname] = self.caster[fieldname](data) # except Exception as e: # raise e # recordDict[fieldname] = ''.encode('UTF-8') # # it means there are no data for this column!!! # # -> and it's not possible to modify it later # #recordDict[fieldname] = None if fieldname.find('::') != -1: subfield = fieldname[:fieldname.find('::')] subname = fieldname[fieldname.find('::') + 2:] if not recordDict.has_key(subfield): recordDict[subfield] = dict() recordDict[subfield][subname] = recordDict[fieldname] del (recordDict[fieldname]) recordDict['RECORDID'] = int( re.sub('[^\d+]', '', self.doGetXMLAttribute(record, 'record-id'))) recordDict['MODID'] = int(self.doGetXMLAttribute(record, 'mod-id')) for subnode in self.doGetXMLElements(record, 'relatedset'): subnodename = subnode.getAttribute('table') if (subnode.getAttribute('count') ) > 0 and not recordDict.has_key(subnodename): recordDict[subnodename] = [] for subrecord in self.doGetXMLElements(subnode, 'record'): subrecordDict = dict() for subcolumn in self.doGetXMLElements(subrecord, 'field'): fieldname = self.doGetXMLAttribute(subcolumn, 'name') if fieldname.startswith(subnodename): fieldname = fieldname[len(subnodename) + 2:] try: subrecordDict[fieldname] = self.doGetXMLElement( subcolumn, 'data').getData() except: subrecordDict[fieldname] = ''.encode('UTF-8') if fieldname.find('::') != -1: subfield = fieldname[:fieldname.find('::')] subname = fieldname[fieldname.find('::') + 2:] if not subrecordDict.has_key(subfield): subrecordDict[subfield] = dict() subrecordDict[subfield][subname] = subrecordDict[ fieldname] del (subrecordDict[fieldname]) subrecordDict['RECORDID'] = int( self.doGetXMLAttribute(subrecord, 'record-id')) subrecordDict['MODID'] = int( self.doGetXMLAttribute(subrecord, 'mod-id')) done = False for rec in recordDict[subnodename]: if rec['RECORDID'] == subrecordDict['RECORDID']: #rec.update(subrecordDict) for sub in subrecordDict: if sub in ['RECORDID', 'MODID']: pass elif rec.has_key(sub) and type( rec[sub]) == dict: rec[sub].update(subrecordDict[sub]) else: rec[sub] = subrecordDict[sub] done = True if not done: recordDict[subnodename].append(subrecordDict) self.resultset.append(makeFMData(recordDict))