# -*- coding:utf-8 -*- from TData import CTData from UIT_tree import UITTree from UIT_treeConstant import TreeConst from ssat_sdk.utils.string_util import strcmp from UIT_log import error,info,debug import os, sys, time from collections import OrderedDict DEBUG = True INFO = True ERROR = True g_level = TreeConst.G_LEVEL class UITPathManage(): def __init__(self, uitData): self.uitData = uitData self.valueParams = self.uitData.UITree.valueParams self.pathParams = self.uitData.UITree.pathParams def get_menu_paths(self, option, value): if type(option) == str: option = unicode(option) if type(value) == str: value = unicode(value) # pp必须不排序; vp, pp = {}, OrderedDict() if option in self.valueParams.values: vp = {"option": option, "value": value, "enter_key": self.valueParams.values[option]["enter_key"], "move_key": self.valueParams.values[option]["move_key"]} # 找到value对应的ocr; for item in self.valueParams.values[option]["value"]: if "range(" in item["value"]: vp["value_for_ocr"] = item["value_for_ocr"].split(';') break elif item["value"].lower() == value.lower(): vp["value_for_ocr"] = item["value_for_ocr"].split(';') break # 首先,字典不排序,需要倒序; paths = reversed(self.pathParams.paths) for level in paths: found = False for parent in self.pathParams.paths[level]: # print parent,self.pathParams.paths[level][parent],'\r\n' for item in self.pathParams.paths[level][parent]["value"]: # print item if item["option"].lower() == option.lower(): pp[level] = { "parent": parent, "move_key": self.pathParams.paths[level][parent][TreeConst.Option_MoveKey], "enter_key": self.pathParams.paths[level][parent][TreeConst.Option_EnterKey], "others": self.pathParams.paths[level][parent][TreeConst.Option_Others], "option": item[TreeConst.Option_Name], "option_for_ocr": item[TreeConst.Option_ForOCR].split(';'), "option_move_key": item[TreeConst.Option_MoveKey], "option_enter_key": item[TreeConst.Option_EnterKey], "option_others": item[TreeConst.Option_Others] } option = parent found = True break if found: break else: if parent == option: for item in self.pathParams.paths[level][parent]["value"]: # print item if item["option"].lower() == value.lower(): pp[level] = { "parent": parent, "move_key": self.pathParams.paths[level][parent][TreeConst.Option_MoveKey], "enter_key": self.pathParams.paths[level][parent][TreeConst.Option_EnterKey], "others": self.pathParams.paths[level][parent][TreeConst.Option_Others], "option": item["option"], "option_for_ocr": item["option_for_ocr"].split(';'), "option_move_key": item[TreeConst.Option_MoveKey], "option_enter_key": item[TreeConst.Option_EnterKey], "option_others": item[TreeConst.Option_Others] } option = parent found = True break # endif # endfor break # endif # 需要对path倒序使用; return vp, pp def get_option_paths(self, option): # pp必须不排序; pp = OrderedDict() # 首先,字典不排序,需要倒序; paths = reversed(self.pathParams.paths) for level in paths: found = False for parent in self.pathParams.paths[level]: # print parent,self.pathParams.paths[level][parent],'\r\n' for item in self.pathParams.paths[level][parent]["value"]: # print item if item["option"].lower() == option.lower(): pp[level] = { "parent": parent, "move_key": self.pathParams.paths[level][parent][TreeConst.Option_MoveKey], "enter_key": self.pathParams.paths[level][parent][TreeConst.Option_EnterKey], "others": self.pathParams.paths[level][parent][TreeConst.Option_Others], "option": item[TreeConst.Option_Name], "option_for_ocr": item[TreeConst.Option_ForOCR].split(';'), "option_move_key": item[TreeConst.Option_MoveKey], "option_enter_key": item[TreeConst.Option_EnterKey], "option_others": item[TreeConst.Option_Others] } option = parent found = True break if found: break else: if parent == option: for item in self.pathParams.paths[level][parent]["value"]: # print item if item["option"].lower() == option.lower(): pp[level] = { "parent": parent, "move_key": self.pathParams.paths[level][parent][TreeConst.Option_MoveKey], "enter_key": self.pathParams.paths[level][parent][TreeConst.Option_EnterKey], "others": self.pathParams.paths[level][parent][TreeConst.Option_Others], "option": item[TreeConst.Option_Name], "option_for_ocr": item[TreeConst.Option_ForOCR].split(';'), "option_move_key": item[TreeConst.Option_MoveKey], "option_enter_key": item[TreeConst.Option_EnterKey], "option_others": item[TreeConst.Option_Others] } option = parent found = True break # endif # endfor break # endif # endfor # endfor # 需要对path倒序使用; # dict_pp = OrderedDict() # # 逆序路径key; # revpp = reversed(pp) # for path in revpp: # dict_pp[path] = {"parent": pp[path]['parent'],"move_key": pp[path]['move_key'],"enter_key": pp[path]['enter_key'],"others":pp[path]['others'],"option": pp[path]['option'],"option_for_ocr": pp[path]['option_for_ocr']} # # 返回逆序后的结果; # return dict_pp return pp def checkOptionPath(self, optionName): optionPath = "" optionPathResult = "Fail" path_params = self.get_option_paths(optionName) # 如果传入的option不存在则直接返回 if path_params.__len__() <= 0: optionPathResult = "NoExit" optionPath = u"表格中不存在到达Option: %s 的路径" % str(optionName) return optionPath, optionPathResult else: optionPath = str(path_params) # 逆序路径key; revpp = reversed(path_params) level_count = 0 for level in revpp: if str(level) == str(g_level[level_count]): level_count = level_count + 1 else: # 如果执行路径不是按照First、Second......执行则返回执行出错 return optionPath, optionPathResult optionPathResult = "Pass" return optionPath, optionPathResult def checkRunOptionPath(self, path_params): optionPathResult = "Fail" # 如果传入的option不存在则直接返回 if path_params.__len__() <= 0: optionPathResult = "NoExit" return optionPathResult else: optionPath = str(path_params) # 逆序路径key; revpp = reversed(path_params) level_count = 0 for level in revpp: if str(level) == str(g_level[level_count]): level_count = level_count + 1 else: # 如果执行路径不是按照First、Second......执行则返回执行出错 return optionPathResult optionPathResult = "Pass" return optionPathResult if __name__ == "__main__": uiData = CTData() pathManage = UITPathManage(uiData) vp,pp = pathManage.get_menu_paths("hdmi1","hdmi1") vp,pp = pathManage.get_menu_paths("dynamic_contrast","on") print "vp:", vp print "pp:",pp chkPP=pathManage.checkRunOptionPath(pp) print "check pp:",chkPP pp = pathManage.get_option_paths("dynamic_contrast") print "pp:",pp chkPP = pathManage.checkRunOptionPath(pp) print "check pp:",chkPP optionPath, optionPathResult = pathManage.checkOptionPath("dynamic_contrast") print "optionPath:",optionPath print "optionPathResult:", optionPathResult