def _preProcess(self): head, rawData = Util.TABLE_CACHE.get(self.tableName, ( None, None, )) if head and rawData: keyType = None for i in xrange(len(head[Util.FIELD_NAME_KEY])): if head[Util.FIELD_NAME_KEY][i] == self.refIdName: keyType = head[Util.TYPE_KEY][i] if not keyType: return False for item in rawData: value = item[self.refIdName] if not value: continue try: value = Util.getValueByType(keyType, value) except ValueError: return False if isinstance(value, list) or isinstance(value, tuple): self.refValues.extend([str(v) for v in value]) else: self.refValues.append(str(value)) self.refValues = set(self.refValues) return True return False
def _preProcess(self, iItems, iKeys, iKeyTypes, iPrimeKeys, iMergeRules): processedData = [] for item in iItems: itemFilters = {} for key, value in item.iteritems(): if key in iKeys: if value or key in iPrimeKeys: try: itemFilters[key] = Util.getValueByType(iKeyTypes[key], value) except ValueError: logger.error('在导出过程中遇到不正确类型,在%s列的%s值' % (key, value)) return None for mergeRule in iMergeRules: ret = mergeRule.merge(item, iKeyTypes) if ret: itemFilters[mergeRule.name] = ret self.outputComment[mergeRule.name] = mergeRule.reg if itemFilters: processedData.append(itemFilters) return processedData
def _processRawData(self, iItems): clientData = [] serverData = [] for item in iItems: key = item[0] if not key: continue selector = item[4].lower() if 'c' not in selector and 's' not in selector: logger.error('%s行常量填写有误' % key) return None try: value = Util.getValueByType(item[2].upper(), item[3]) except ValueError: logger.error('在导出过程中遇到不正确类型,在%s行的%s值' % (key, item[3])) return None if 'c' in selector: clientData.append((key, value, item[1])) pass if 's' in selector: serverData.append((key, value, item[1])) return clientData, serverData
def _merge(self, iItem, iKeyTypes, iTree): if len(iTree) == 4 and iTree[2] == ':': return self._merge(iItem, iKeyTypes, iTree[3]) elif len(iTree) >= 1 and (iTree[0] == '#list' or iTree[0] == '#tuple' or iTree[0] == '#dict'): isValid = False obList = [] obDict = {} for index, treeItem in enumerate(iTree[1:]): if (index+1) % 2 == 0 and iTree[0] == '#dict': continue if isinstance(treeItem, list): ob = self._merge(iItem, iKeyTypes, treeItem) if ob[1]: if iTree[0] == '#list' or iTree[0] == '#tuple': isValid = True obList.append(ob[0]) elif iTree[0] == '#dict': if isinstance(iTree[index+2], list): mergerdValue = self._merge(iItem, iKeyTypes, iTree[index+2]) if mergerdValue[1]: isValid = True obDict[ob[0]] = mergerdValue[0] else: ob2 = iItem.get(iTree[index+2], None) if ob2 is None: raise ParseException, "--> 在导入合并中,不存在%s列" % iTree[index+2] try: isValid = True obKey = ob[0] columnName = iTree[index+2] ob = ob2 obDict[obKey] = Util.getValueByType(iKeyTypes[columnName], ob) except ValueError: raise ParseException, "在导入合并中遇到不正确类型,在%s列的%s值" % (columnName, ob) else: ob = iItem.get(treeItem, None) if ob is None: raise ParseException, "--> 在导入合并中,不存在%s列" % treeItem try: if iTree[0] == '#list': #忽略空元素 if ob: isValid = True columnName = treeItem obList.append(Util.getValueByType(iKeyTypes[columnName], ob)) elif iTree[0] == '#tuple': #不忽略空元素 isValid = True columnName = treeItem obList.append(Util.getValueByType(iKeyTypes[columnName], ob)) elif iTree[0] == '#dict': #忽略空元素 if ob: if isinstance(iTree[index+2], list): mergerdValue = self._merge(iItem, iKeyTypes, iTree[index+2]) if mergerdValue[1]: isValid = True columnName = treeItem obDict[Util.getValueByType(iKeyTypes[columnName], ob)] = mergerdValue[0] else: ob2 = iItem.get(iTree[index+2], None) if ob2 is None: raise ParseException, "--> 在导入合并中,不存在%s列" % iTree[index+2] isValid = True columnName = treeItem obKey = Util.getValueByType(iKeyTypes[columnName], ob) columnName = iTree[index+2] ob = ob2 obDict[obKey] = Util.getValueByType(iKeyTypes[columnName], ob) except ValueError: raise ParseException, "在导入合并中遇到不正确类型,在%s列的%s值" % (columnName, ob) if iTree[0] == '#list': instance = obList elif iTree[0] == '#tuple': instance = tuple(obList) elif iTree[0] == '#dict': instance = obDict return (instance, isValid)