Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
 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
Ejemplo n.º 4
0
 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
Ejemplo n.º 5
0
 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
Ejemplo n.º 6
0
 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
Ejemplo n.º 7
0
 def wrapper(subjuct, curpos, cap):
     datas = [{'id': cap}]
     res = checkRule.check(datas, 'id')
     if not res:
         raise ParseException, 'check_ID ' + Util.value2pystr(cap)