Exemple #1
0
    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))
Exemple #2
0
    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 ) )
Exemple #4
0
    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))