def check(self, iData, iFieldName): isSuccess = True emptys = [] for item in iData: if len(item[iFieldName]) == 0: isSuccess = False if item.has_key('id'): emptys.append(item['id']) else: emptys.append(item) if not isSuccess: logger.error('空白项 %s 出现在\'%s\'列' % (Util.value2pystr(emptys), iFieldName)) return isSuccess
def check(self, iData, iFieldName): isSuccess = True errors = [] for item in iData: if len(item[iFieldName]) == 0: continue try: self._scriptEnv.execute(item[iFieldName], Util.DUMMY_LOCAL) except: isSuccess = False errors.append(item[iFieldName]) if not isSuccess: logger.error('错误脚本 %s 出现在\'%s\'列' % (Util.value2pystr(errors), iFieldName)) return isSuccess
def check(self, iData, iFieldName): isSuccess = True dup = set() for item in iData: values = item[iFieldName] for value in values: if not value: continue if value not in self.refValues: dup.add(value) isSuccess = False if not isSuccess: logger.error('引用项 %s 出现在\'%s\'列,在\'%s\'表\'%s\'列中没有找到' % (Util.value2pystr(dup), iFieldName, self.tableName, self.refIdName)) return isSuccess
def check(self, iData, iFieldName): isSuccess = True errors = [] for item in iData: if len(item[iFieldName]) == 0: continue try: self._pattern.parseString(item[iFieldName], True) except ParseException as e: logger.error('匹配规则 %s 异常: %s' % (self.reg, str(e))) isSuccess = False errors.append(item[iFieldName]) if not isSuccess: logger.error('不符合规则 %s 的内容 %s 出现在\'%s\'列' % (self.reg, Util.value2pystr(errors), iFieldName)) return isSuccess
def check(self, iData, iFieldName): isSuccess = True unique = set() dup = set() for item in iData: if item[iFieldName] in unique: isSuccess = False if item.has_key('id'): dup.add(item['id']) else: dup.add(item[iFieldName]) else: unique.add(item[iFieldName]) if not isSuccess: logger.error('重复的项 %s 出现在\'%s\'列' % (Util.value2pystr(list(dup)), iFieldName)) return isSuccess
def transform(self, inputDir, outputDir): files = [] inputDir = inputDir.rstrip(os.sep) for fileName in os.listdir(inputDir): if fileName.lower().endswith('.csv'): files.append(inputDir + os.sep + fileName) files.sort() #read logger.info("读取csv开始...") for f in files: if sys.platform == 'win32': logger.info("读取csv", f.decode('GBK').encode('UTF-8')) else: logger.info("读取csv", f) data = CsvReader(f).readData() if data is None: logger.error("读取csv失败!") return False if not data[Util.CONST_DATA_KEY]: exportName, head, rawData = self._transformData(data) exportData = self.exportDatas.setdefault( exportName, [[], [], []]) else: exportName, head, rawData = self._transformConstData(data) exportData = self.exportConstDatas.setdefault( exportName, [[], [], []]) exportData[0].append(head) exportData[1].append(rawData) exportData[2].append(head[Util.FILE_IDENTIFY]) if not Util.TABLE_CACHE.has_key(head[Util.FILE_IDENTIFY]): Util.TABLE_CACHE[head[Util.FILE_IDENTIFY]] = ( head, rawData, ) else: logger.error("存在重复数据表", head[Util.FILE_IDENTIFY]) return False logger.info("读取csv完成!") #check logger.info("检查数据表开始...") isSuccess = True for exportName, exportData in self.exportDatas.iteritems(): logger.info("检查数据表", Util.value2pystr(exportData[2])) ruleManager = RuleManager() ruleManager.createRules(exportData[0], exportData[2]) if not ruleManager.checkFields(exportData[1]): logger.error("数据错误!") isSuccess = False if isSuccess: logger.info("检查数据表完成:全部正确!") else: logger.error("检查数据表完成:发生错误!") return False #write code logger.info("导出代码开始...") for exportName, exportData in self.exportDatas.iteritems(): logger.info("导出代码", exportName) ret = DataWriter(exportData[0], exportData[1], outputDir, exportName).writeFile() if not ret: logger.error("导出代码失败!") return False for exportName, exportData in self.exportConstDatas.iteritems(): ret = ConstDataWriter(exportData[0], exportData[1], outputDir, exportName).writeFile() if not ret: logger.error("导出代码失败!") return False logger.info("导出代码完成!") #write char set # logger.info("导出字符集开始...") # for charName, charSet in Util.CHAR_SET_MAP.iteritems(): # if not charSet: # continue # content = "" # for char in sorted(charSet): # char = char.encode('utf-8') # if char and char != ' ': # content += char # if content: # Writer(outputDir, charName).writeChar(content) # logger.info("导出字符集完成!") return True
def wrapper(subjuct, curpos, cap): datas = [{'id': cap}] res = checkRule.check(datas, 'id') if not res: raise ParseException, 'check_ID ' + Util.value2pystr(cap)