Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
 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
Ejemplo n.º 4
0
    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)