# -*- coding:utf-8 -*- import os from collections import OrderedDict from UIT_PathManage import UITPathManage from TExcelParser import CExcelParser from ssat_sdk.utils.string_util import strToList from xlsConst import xlsConst as xlsc from BaseLog import CBaseLog from ExtraData import CExtraData def parseMoveKey(keyStr): return strToList(keyStr, ";") g_level = ['First', 'Second', 'Third', 'Fourth', 'Fifth', 'Sixth', 'Seventh', 'Eighth', 'Ninth', 'Tenth', 'Eleventh', 'Twelfth'] class CPathParams(CBaseLog): def __init__(self): self.paths = OrderedDict() def addParent(self, level, pDict): if level not in self.paths: self.paths[level] = {} # endif pDict["value"] = [] pDict[xlsc.move_key] = parseMoveKey(pDict[xlsc.move_key]) if pDict[xlsc.parent] in self.paths: self.error("Parent %s conflict." % (pDict[xlsc.parent])) self.paths[level][pDict[xlsc.parent]] = pDict def addOption(self, level, pDict): if level in self.paths: if pDict[xlsc.parent] in self.paths[level]: if pDict[xlsc.option].__len__() > 0: self.paths[level][pDict[xlsc.parent]]["value"].append(pDict) else: self.error("Parent %s not exist." % (pDict[xlsc.parent])) else: self.error("Level %s not exist." % (level)) class CValueParams(CBaseLog): def __init__(self): self.values = OrderedDict() def addParent(self, pDict): if pDict[xlsc.value_name] in self.values: self.error("Parent %s conflict." % (pDict[xlsc.value_name])) pDict["value"] = [] pDict[xlsc.move_key] = parseMoveKey(pDict[xlsc.move_key]) self.values[pDict[xlsc.value_name]] = pDict def addOption(self, pDict): if pDict[xlsc.value_name] in self.values: if pDict[xlsc.value].__len__() > 0: self.values[pDict[xlsc.value_name]]["value"].append(pDict) else: self.error("Parent %s not exist." % (pDict[xlsc.value_name])) class CDialogParams(CBaseLog): def __init__(self): self.dialogs = OrderedDict() def addParent(self, level, pDict): # endif if pDict[xlsc.parent] in self.dialogs: self.error("Parent %s conflict." % (pDict[xlsc.parent])) pDict["value"] = [] pDict[xlsc.move_key] = parseMoveKey(pDict[xlsc.move_key]) self.dialogs[pDict[xlsc.parent]] = pDict def addOption(self, level, pDict): if pDict[xlsc.parent] in self.dialogs: if pDict[xlsc.option].__len__() > 0: self.dialogs[pDict[xlsc.parent]]["value"].append(pDict) else: self.error("Parent %s not exist." % pDict[xlsc.parent]) # 注意:所有不对外暴露的变量和函数需要私有化,以明确哪些接口和参数是对外的。 # 这样便于后期维护时,根据对外的变量和函数来做处理。 class COptionExcel(CBaseLog): def __init__(self, exData): self.__excelParse = CExcelParser(self) self.__exData = exData self.__pathParams = CPathParams() self.__valueParams = CValueParams() self.__dialogParams = CDialogParams() # 加载excel; self.loadExcel() @property def pathParams(self): return self.__pathParams @property def valueParams(self): return self.__valueParams @property def dialogParams(self): return self.__dialogParams # 加载已知表格; def loadExcel(self): self.info(u"加载excel表") if self.__exData.listExcelPath.__len__() == 0: self.error(u"没有任何excel表格可加载") for xls in self.__exData.listExcelPath: self.info(u"当前加载:%s" % xls) self.__excelParse.read_excel(xls) # 加载其他表格; def addExcel(self, xlsPath): self.__excelParse.read_excel(xlsPath) # 获取指定option/value_name下的所有子项(option/value)的ocr键对值; # 示例:[{'suboption1': 'suboption1 ocr'}, {'suboption2': 'suboption2 ocr'}] def getOptionSubitemMap(self, optionName, isOption = True): if type(optionName) == str: optionName = unicode(optionName) pairs = [] # 路径表或值表; if isOption is True: found = False for lev in self.__pathParams.paths: for item in self.__pathParams.paths[lev]: if item.lower() == optionName.lower(): found = True for item in self.__pathParams.paths[lev][optionName]["value"]: pairs.append({item['option']: item['option_for_ocr'].split(';')}) break #endif #endfor if found is True: break #endfor else: if optionName in self.__valueParams.values: for item in self.__valueParams.values[optionName]["value"]: pairs.append({item['value']: item['value_for_ocr'].split(';')}) #endif return pairs # 获取指定option/value_name下的所有子项(option/value)的ocr值; # 示例:[['suboption1 ocr', 'ocr2', 'ocr3'],['suboption2 ocr'], ['suboption3 orc']] def getOptionSubItemOcrList(self, optionName, isOption = True): if type(optionName) == str: optionName = unicode(optionName) list_ocr = [] # 路径表或值表; if isOption is True: found = False for lev in self.__pathParams.paths: for item in self.__pathParams.paths[lev]: if item.lower() == optionName.lower(): found = True for item in self.__pathParams.paths[lev][optionName]["value"]: if optionName.lower() != item['option'].lower(): list_ocr.append(item['option_for_ocr'].split(';')) break #endif #endfor if found is True: break #endfor else: if optionName in self.__valueParams.values: for item in self.__valueParams.values[optionName]["value"]: list_ocr.append(item['value_for_ocr'].split(';')) # endif return list_ocr def getOption if __name__ == "__main__": exData = CExtraData() opxls = COptionExcel(exData) # print opxls.pathParams.paths print u"getOptionMap", opxls.getOptionSubitemMap('picture') print u"getOptionSubItemOcrList", opxls.getOptionSubItemOcrList('picture', False)