# -*- coding:utf-8 -*- """ 注:私有变量和函数,前面加双下划线(不要在后面也加双下划线); """ import os import sys import time # 使用inspect模块动态获取当前运行的函数名 import inspect # 日期头文件; from datetime import datetime # 自动化sdk头; from ssat_sdk.sat_environment import getMenuTree3SelectedPExcelPath from ssat_sdk.sat_environment import getMenuTree3SelectedProjectCfgPath from ssat_sdk.sat_environment import getMenuTree3SelectedTvExcelPath from ssat_sdk.sat_environment import getMenuTreeSelectedChannel # 获取运行函数名; def get_fun_name(): return inspect.stack()[2][3] # 日志基类; class CBaseLog: def __init__(self): pass def __printlog(self, msg): # 时间/内容; print("%s %s") % (datetime.now().strftime('%Y-%m-%d %H:%M:%S'), msg) def debug(self, msg): # 类型/类名:函数/内容 log_str = "【DEBUG】<%s::%s> %s" % (self.__class__.__name__, get_fun_name(), msg) self.__printlog(log_str) def info(self, msg): # 类型/类名:函数/内容 log_str = "【INFO】<%s::%s> %s" % (self.__class__.__name__, get_fun_name(), msg) self.__printlog(log_str) def warn(self, msg): # 类型/类名:函数/内容 log_str = "【WARN】<%s::%s> %s" % (self.__class__.__name__, get_fun_name(), msg) self.__printlog(log_str) def error(self, msg): # 类型/类名:函数/内容 log_str = "【ERROR】<%s::%s> %s" % (self.__class__.__name__, get_fun_name(), msg) self.__printlog(log_str) def log(self, msg): # 类型/类名/内容 log_str = "【LOG】<%s::%s> %s" % (self.__class__.__name__, get_fun_name(), msg) self.__printlog(log_str) # 外部数据 class CXData(CBaseLog): def __init__(self): # 配置文件路径; self.__configPath = "" # menu tree资源目录(包含了Excel文件路径); self.__menuTreeDir = "" # 默认的excel路径; self.__defaultExcelPath = "" # tv excel路径; self.__tvExcelPath = "" # enter key excel路径; self.__enterKeyExcelPath = "" # menu tree低下的xls或xlsx文件集; self.__listAppExcelPath = [] # 数据状态(只要menuTreeDir和defaultExcelPath有效即为True); self.__status = False # 加载数据; self.loadData() # 装载数据; def loadData(self): # 1、加载menu tree 路径; self.menuTreeDir = getMenuTree3SelectedProjectCfgPath() if not os.path.isdir(self.menuTreeDir): self.error("menu tree路径(%s)无效,加载失败!" % self.menuTreeDir) return # endif self.log("menu tree路径存在:%s" % self.menuTreeDir) # 2、加载配置文件路径; self.configPath = os.path.join(self.menuTreeDir, "menutree.ini") if not os.path.exists(self.configPath): self.error("配置文件不存在:%s" % self.configPath) else: self.log("配置文件存在:%s" % self.configPath) # 3、加载默认excel文件路径; self.defaultExcelPath = os.path.join(self.menuTreeDir, "menutree.xls") if not os.path.exists(self.defaultExcelPath): self.info("默认menu tree excel文件不存在:%s" % self.defaultExcelPath) self.defaultExcelPath = os.path.join(self.menuTreeDir, "menutree.xlsx") # 二次判断是否存在; if os.path.exists(self.defaultExcelPath): self.status = True self.log("默认menu tree excel文件存在:%s" % self.defaultExcelPath) else: self.error("默认menu tree excel文件不存在:%s" % self.defaultExcelPath) # 4、加载tv excel文件; channel = getMenuTreeSelectedChannel() if not channel or str(channel) == "": self.tvExcelPath = self.defaultExcelPath self.warn("tv表格不存在,使用默认excel=%s" % self.tvExcelPath) else: self.tvExcelPath = os.path.join(self.menuTreeDir, "menuTree_" + channel + ".xls") if not os.path.exists(self.tvExcelPath): self.tvExcelPath = os.path.join(self.menuTreeDir, "menuTree_" + channel + ".xlsx") # 二次判断是否存在; if os.path.exists(self.tvExcelPath): self.log("默认menu tree excel文件存在:%s" % self.tvExcelPath) else: self.error("默认menu tree excel文件不存在:%s" % self.tvExcelPath) # 5、加载默认excel文件路径; self.enterKeyExcelPath = os.path.join(self.menuTreeDir, "eventkey_code.xls") if not os.path.exists(self.enterKeyExcelPath): self.info("eventkey_code文件不存在:%s" % self.enterKeyExcelPath) self.enterKeyExcelPath = os.path.join(self.menuTreeDir, "eventkey_code.xlsx") # 二次判断是否存在; if os.path.exists(self.enterKeyExcelPath): self.log("eventkey_code文件存在:%s" % self.enterKeyExcelPath) else: self.error( "eventkey_code文件不存在:%s" % self.enterKeyExcelPath) # 6、加载UITree开头的所有xls或xlsx fileList = os.listdir(self.menuTreeDir) self.listAppExcelPath.append(self.defaultExcelPath) if self.defaultExcelPath != self.tvExcelPath: self.listAppExcelPath.append(self.tvExcelPath) for filePath in fileList: if filePath.lower().startswith("uitree") and ( filePath.lower().endswith(".xls") or filePath.lower().endswith(".xlsx")): self.listAppExcelPath.append(os.path.join(self.menuTreeDir, filePath)) @property def configPath(self): return self.__configPath @property def menuTreeDir(self): return self.__menuTreeDir @property def defaultExcelPath(self): return self.__defaultExcelPath @property def tvExcelPath(self): return self.__tvExcelPath @property def enterKeyExcelPath(self): return self.__enterKeyExcelPath @property def listAppExcelPath(self): return self.__listAppExcelPath @property def status(self): return self.__status # 内部数据; class CMetaData(CBaseLog): def __init__(self, xdata): pass def loadConfig(self): xdata.ConfigPath def LoadExcel(self): pass def getOptionConfig(self, pos): pass def getOptionValue(self, pos): pass def getOptionName(self, pos): pass def getOptionOthers(self, pos): pass def getOptionEnterKey(self, pos): pass def getOptionMoveKey(self, pos): pass def getOptionShortCutKey(self, pos): pass def getOptionBackKey(self, pos): pass def getOptionLayout(self, pos): pass # Option数据逻辑类; class COptionDataLogic(CBaseLog): def __init__(self, xdata): # 路径位置索引; self.__pos = 0 if xdata is None: self.error(get_fun_name(), "xdata对象空") # 获取当前option名称; def getOptionName(self): pass # 获取当前option的xls中的others字段; def getOptionOthers(self, optionName): pass def getOptionConfig(self, optionName): pass def getOptionMoveKey(self, optionName): pass def getOptionBackKey(self, optionName): pass def getOptionEnterKey(self, optionName): pass # 获取option的ocr文本; def getOptionText(self, optionName): pass # 获取当前option的子项(子option名称集合) def getOptionSubItems(self, optionName): pass def getOptionParentName(self, optionName): pass def getOptionShortCutKey(self, optionName): pass # Option定位逻辑类; class COptionFocusLogic(CBaseLog): def __init__(self): pass # Option的文字识别逻辑类; class COptionOCRLogic(CBaseLog): def __init__(self): pass # Option的动作逻辑类 class COptionActionLogic(CBaseLog): # 目标节点名称, 目标节点设置值 def __init__(self, tagOptionName, tagOptionSetValue): # 私有变量:节点位置,默认根结点(0) self.__pos = 0 # 节点路径; self.__paths = None # 加载节点数据; self.__LoadOptionData() def __LoadOptionData(self): pass # 是否在第一节点(根结点) def IsOnFirstOption(self): pass # 调用根节点快捷键(中间节点不需要快捷键;); def CallFirstOptionShortCutKey(self): pass # 调用当前结点的toparent_key; def CallCurOptionBackKey(self): pass # 是否聚集到当前(self.__pos)节点; def IsOnCurOption(self): pass # 从当前节点开始向后移动; def Move2NextOption(self): pass # 从当前节点开始向前返回; def Move2PrevOption(self): pass # 获取当前Option名称; def GetCurOptionName(self): pass # 获取当前Option配置; def GetCurOptoinConfig(self): pass # 获取当前Option表信息; def GetCurOptionExcelInfo(self): pass class CTest(CBaseLog): def __init__(self): pass def Log(self): self.info("fff", "cccc") if __name__ == "__main__": xdata = CXData() #optdatalogic = COptionDataLogic(None)