Explorar o código

临时修改。

scbc.sat2 %!s(int64=5) %!d(string=hai) anos
pai
achega
e65e98c0bb

+ 146 - 0
ssat_sdk/MenuTree3/ExtraData.py

@@ -0,0 +1,146 @@
+# -*- coding:utf-8 -*-
+
+"""
+注:私有变量和函数,前面加双下划线(不要在后面也加双下划线);
+"""
+
+import os
+import sys
+# 自动化sdk头;
+from ssat_sdk.sat_environment import getMenuTree3SelectedProjectCfgPath
+from ssat_sdk.sat_environment import getMenuTreeSelectedChannel
+from ssat_sdk.MenuTree3.BaseLog import CBaseLog
+
+
+# 外部数据,禁止外部修改;
+class CExtraData(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(u"menu tree路径(%s)无效,加载失败!" % self.menuTreeDir)
+            return
+        # endif
+
+        self.log(u"menu tree路径存在:%s" % self.menuTreeDir)
+        # 2、加载配置文件路径;
+        self.configPath = os.path.join(self.menuTreeDir, "menutree.ini")
+        if not os.path.exists(self.configPath):
+            self.error(u"配置文件不存在:%s" % self.configPath)
+        else:
+            self.log(u"配置文件存在:%s" % self.configPath)
+
+        # 3、加载默认excel文件路径;
+        self.defaultExcelPath = os.path.join(self.menuTreeDir, "menutree.xls")
+        if not os.path.exists(self.defaultExcelPath):
+            self.info(u"默认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(u"默认menu tree excel文件存在:%s" % self.defaultExcelPath)
+        else:
+            self.error(u"默认menu tree excel文件不存在:%s" % self.defaultExcelPath)
+
+        # 4、加载tv excel文件;
+        channel = getMenuTreeSelectedChannel()
+        if not channel or str(channel) == "":
+            self.tvExcelPath = self.defaultExcelPath
+            self.warn(u"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(u"默认menu tree excel文件存在:%s" % self.tvExcelPath)
+            else:
+                self.error(u"默认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(u"eventkey_code文件不存在:%s" % self.enterKeyExcelPath)
+            self.enterKeyExcelPath = os.path.join(self.menuTreeDir, "eventkey_code.xlsx")
+
+        # 二次判断是否存在;
+        if os.path.exists(self.enterKeyExcelPath):
+            self.log(u"eventkey_code文件存在:%s" % self.enterKeyExcelPath)
+        else:
+            self.error(u"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
+
+
+if __name__ == "__main__":
+    exdata = CExtraData()
+    if exdata.status is False:
+        print u"加载数据失败"
+    print u"[==============================================]"
+    print u"config配置文件路径            ", exdata.configPath
+    print u"menutree路径                  ", exdata.menuTreeDir
+    print u"默认excel路径                 ", exdata.defaultExcelPath
+    print u"tv表格路径                    ", exdata.tvExcelPath
+    print u"enterkey表格路径              ", exdata.enterKeyExcelPath
+    print u"所有表格列表                  ", exdata.listAppExcelPath
+    print u"加载状态                      ", exdata.status
+    print u"[==============================================]"
+
+

+ 100 - 0
ssat_sdk/MenuTree3/OptionExcel.py

@@ -0,0 +1,100 @@
+# -*- coding:utf-8 -*-
+import os
+from collections import OrderedDict
+from UIT_PathManage import UITPathManage
+from ssat_sdk.MenuTree3.BaseLog import CBaseLog
+from ssat_sdk.MenuTree3.TExcelParser import CExcelParser
+from ssat_sdk.utils.string_util import strToList
+
+from xlsConst import xlsConst as xlsc
+
+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.__exData = exData
+        self.__pathParams = CPathParams()
+        self.__valueParams = CValueParams()
+        self.__dialogParams = CDialogParams()
+
+    # 加载已知表格;
+    def loadExcel(self):
+        pass
+
+    # 加载其他表格;
+    def addExcel(self, xlsPath):
+        pass
+
+
+if __name__ == "__main__":
+    pass

+ 21 - 123
ssat_sdk/MenuTree3/TExcelParser.py

@@ -6,17 +6,13 @@ import json
 # 字典不排序;
 from collections import OrderedDict
 from xlwt import XFStyle, Pattern
-from UIT_treeConstant import TreeConst
-from UIT_log import info,debug,error
+from xlsConst import xlsConst as xlsc
+from BaseLog import CBaseLog
 
-INFO =True
-DEBUG =True
-ERROR = True
 
-class CExcelParser():
-    cls = "CExcelParser"
-    def __init__(self, xls_path=None,UITree=None):
-        self.UITree = UITree
+class CExcelParser(CBaseLog):
+    def __init__(self, xls_path=None, optionExcel=None):
+        self.__optionExcel = optionExcel
         if type(xls_path) == str:
             xls_path = xls_path.decode('utf-8')
         self.xls_path = xls_path
@@ -37,24 +33,11 @@ class CExcelParser():
         for sh_name in wb.sheet_names():
             sheet = wb.sheet_by_name(sh_name)
             self.parse_excel(sheet, False)
-
-        # print "self.valueParams.values:", self.valueParams.values, type(self.valueParams.values)
-        # print "self.pathParams.paths:", self.pathParams.paths, type(self.pathParams.paths)
-
-        # try:
-        #     print json.dumps(self.pathParams.paths)
-        #     print '\r\n'
-        #     print json.dumps(self.valueParams.values)
-        #     print '\r\n'
-        #     # print self.pathParams.paths,'\r\n', self.valueParams.values
-        # except Exception, e:
-        #     print e
-
     # endfun
 
     def parse_excel(self, sheet, bpath=True):
         pKeys = sheet.row_values(0)
-        info(self.cls,"parse_excel","params sheet %s keys: %s"%(sheet.name,str(pKeys)),INFO)
+        self.info(u"params sheet %s keys: %s"%(sheet.name,str(pKeys)))
         parentName = None
         if u"Value" == sheet.name:
             for i in range(1, sheet.nrows):
@@ -64,20 +47,20 @@ class CExcelParser():
                 for index in range(oneRow.__len__()):
                     item = oneRow[index]
                     rowDict[pKeys[index]] = item
-                if rowDict[TreeConst.Value_Name] is None or rowDict[TreeConst.Value_Name].__len__() < 1:
+                if rowDict[xlsc.value_name] is None or rowDict[xlsc.value_name].__len__() < 1:
                     if parentName is None:
-                        error(self.cls, "parse_excel", "Level %s error row %s:" % (sheet.name, str(oneRow)), ERROR)
+                        self.error(u"Level %s error row %s:" % (sheet.name, str(oneRow)))
                         break
                     else:
-                        rowDict[TreeConst.Value_Name] = parentName
-                        self.UITree.valueParams.addOption(rowDict)
-                elif rowDict[TreeConst.Value_Name].__len__() > 0:
-                    parentName = rowDict[TreeConst.Value_Name]
-                    self.UITree.valueParams.addParent(rowDict)
+                        rowDict[xlsc.value_name] = parentName
+                        self.__optionExcel.valueParams.addOption(rowDict)
+                elif rowDict[xlsc.value_name].__len__() > 0:
+                    parentName = rowDict[xlsc.value_name]
+                    self.__optionExcel.valueParams.addParent(rowDict)
         elif "Dialog" == sheet.name:
-            self.parsePath(sheet, pKeys, self.UITree.dialogParams)
+            self.parsePath(sheet, pKeys, self.__optionExcel.dialogParams)
         else:  # 路径;
-            self.parsePath(sheet,pKeys, self.UITree.pathParams)
+            self.parsePath(sheet,pKeys, self.__optionExcel.pathParams)
 
 
     def parsePath(self, sheet,pKeys, treeParams):
@@ -89,15 +72,15 @@ class CExcelParser():
             for index in range(oneRow.__len__()):
                 item = oneRow[index]
                 rowDict[pKeys[index]] = item
-            if rowDict[TreeConst.Parent_Name] is None or rowDict[TreeConst.Parent_Name].__len__() < 1:
+            if rowDict[xlsc.parent] is None or rowDict[xlsc.parent].__len__() < 1:
                 if parentName is None:
-                    error(self.cls, "parse_excel", "Level %s error row %s:" % (sheet.name, str(oneRow)), ERROR)
+                    self.error(u"Level %s error row %s:" % (sheet.name, str(oneRow)))
                     break
                 else:
-                    rowDict[TreeConst.Parent_Name] = parentName
+                    rowDict[xlsc.parent] = parentName
                     treeParams.addOption(sheet.name, rowDict)
-            elif rowDict[TreeConst.FLevel_Params[0]].__len__() > 0:
-                parentName = rowDict[TreeConst.Parent_Name]
+            elif rowDict[xlsc.FLevel_Params[0]].__len__() > 0:
+                parentName = rowDict[xlsc.parent]
                 treeParams.addParent(sheet.name, rowDict)
 
     # endfun
@@ -229,89 +212,4 @@ class CExcelParser():
 
 
 if __name__ == "__main__":
-    # path = r'E:\svn\SAT\项目资料\第四期-推广使用和画面检测\06-设计文档\01-蓝图设计\UiTree3.0方案\MenuTree_MS6586_EU.xls'
-    # path = r'E:\SAT\resource\MenuTree\MS3663\DVB-T2 panasonic\MenuTree.xls'
-    # path = r'E:/SAT/resource\MenuTree\MS6586\ATSC\MenuTree.xls'
-    path = r'E:\SAT\resource\MenuTree\MS6586\ATSC\MenuTree_DVBT.xls'
-    # path = r'E:\MenuTree.xls'
-    # path = r'E:\SAT\resource\MenuTree\6586\MS6586_ATSC\MenuTree.xls'
-    # path = getMenuTree3SelectedProjectCfgPath() + '\\MenuTree.xls'
-    parser = CExcelParser(path)
-    parser.read_excel()
-    dataDict = parser.get_parent_ocr_dict("network")
-    print "dataDict:", dataDict, type(dataDict)
-    # parent = "source"
-    # option = "atv"
-    # parser.getOptionTextList(parent, option)
-    # value_name = "source"
-    # value = "atv"
-    # parser.getValueTextList(value_name, value)
-    # SubValueList1 = parser.getSubValueList("source")
-    # SubValueList2 = parser.getSubValueList("backlight")
-    # parent = "picture"
-    # parent = "manual_tuning"
-    # parser.getSubOptionList(parent)
-    # optionList = []
-    # paths = parser.pathParams.paths
-    #
-    # for level in paths:
-    #     if paths[level].has_key(parent):
-    #         optionDictList = paths[level][parent]["value"]
-    #         for optionDict in optionDictList:
-    #             optionList.append(optionDict["option"])
-    # print "optionList:", optionList, type(optionList)
-
-    # print parser.get_value("source", "")
-    # checkOptionPathExcelData = parser.getCheckOptionPathExcelData()
-    # print "checkOptionPathExcelData:", checkOptionPathExcelData
-    # repeatOptionList = parser.getRepeatOptionList()
-    # isSaveExcelTrue = parser.saveExcelData(checkOptionPathExcelData, repeatOptionList,
-    #                                        r'E:\MenuTree_Check_Option_Result.xls')
-    # path = r'E:\SAT\resource\MenuTree\6586\MS6586_ATSC\MenuTree.xls'
-    # path = getMenuTree3SelectedProjectCfgPath() + '\\MenuTree.xls'
-
-    # print "isSaveExcelTrue:", isSaveExcelTrue
-    # valueSheetOptionList = parser.getValueSheetOptionList()
-
-    # repeatValueName_ValueSheet = parser.getRepeatValueName_ValueSheet()
-    # repeatOption_otherSheet = parser.getRepeatOption_otherSheet()
-
-    # optionPath, optionPathResult = parser.checkOptionPath("picture_preset11")
-    # print "optionPath:", optionPath, type(optionPath)
-    # print "optionPathResult:", optionPathResult, type(optionPathResult)
-    # optionPath, optionPathResult = parser.checkOptionPath("instant_power_on")
-    # print "optionPath:", optionPath, type(optionPath)
-    # print "optionPathResult:", optionPathResult, type(optionPathResult)
-
-    # path_params = parser.get_option_paths("picture_preset")
-    # print "path_params:", path_params, type(path_params)
-
-    # print "path_params[0][0]:",path_params[0][0]
-    # print parser.get_option_paths('picture')
-    # print parser.get_option('picture')
-    # print parser.get_value('backlight',10)
-    # print parser.get_parent_ocr_dict('source_hdmi1')
-    # print parser.get_parent_ocr_list('channel')
-    # print parser.get_parent_ocr_dict('channel')
-    # print parser.get_parent_ocr_dict('other_setting')
-    # print parser.get_parent_ocr_list('5khz')
-    # print parser.get_parent_ocr_dict('picture_preset', True)
-    # print parser.get_pair_values('picture_preset', False)
-    # print parser.get_pair_values('source')
-    # print parser.get_ocr_list('Second','picture','picture_preset')
-    # vp, pp = parser.get_menu_paths("auto_volume_control", "off")
-    # print vp
-    # vp, pp = parser.get_menu_paths("picture_preset", "dynamic")
-    # print vp
-    # pp = parser.get_option_paths('picture_preset')
-    # print pp.__len__(), pp[g_level[0]]
-    # print "\r\nvp:", vp, type(vp)
-    # print "\r\npp:", pp, type(pp)
-    # # print json.dumps(pp)
-    # revpp = reversed(pp)
-    # for item in revpp:
-    #     print item, pp[item]
-
-    # print 'value:\r\n'
-    # print vp
-    # # print "revpp:", revpp, type(revpp)
+    pass

+ 3 - 0
ssat_sdk/MenuTree3/TMenu.py

@@ -66,6 +66,9 @@ class CTMenu():
     def currentTime(self):
         return time.strftime('_%Y-%m-%d_%H_%M_%S', time.localtime(time.time()))
 
+    '''
+    对应OptionConfig中的getThresholdDict和__getICONConfig
+    '''
     def get_ocr_list(self, level, option):
         # OCR识别参数字典   默认值为:百度中英文免费类型
         ini_path = os.path.join(getMenuTree3SelectedProjectCfgPath(), "menutree.ini")

+ 0 - 1
ssat_sdk/MenuTree3/UIT_tree.py

@@ -41,7 +41,6 @@ class CPathParams():
         else:
             error(self.cls, "addOption", "Level %s not exist." % (level), ERROR)
 
-
 class CValueParams():
     cls = "CValueParams"
     def __init__(self):

+ 22 - 0
ssat_sdk/MenuTree3/xlsConst.py

@@ -0,0 +1,22 @@
+# -*- coding:utf-8 -*-
+import os, sys, time
+
+class xlsConst():
+    G_LEVEL = ['First', 'Second', 'Third', 'Fourth', 'Fifth', 'Sixth', 'Seventh', 'Eighth', 'Ninth', 'Tenth',
+               'Eleventh', 'Twelfth']
+    parent = u'parent'
+    shortcut_key = u'shortcut_key'
+    toparent_key = u'toparent_key'
+    layout = u'layout'
+    option = u'option'
+    option_for_ocr = u'option_for_ocr'
+    move_key = u'move_key'
+    enter_key = u'enter_key'
+    others = u'others'
+    value_name = u'value_name'
+    value = u'value'
+    value_for_ocr = u'value_for_ocr'
+    FLevel_Params=[parent, shortcut_key, toparent_key, layout, option, option_for_ocr, move_key, enter_key, others]
+    NLevel_Params=[parent, toparent_key, layout, option, option_for_ocr, move_key, enter_key, others]
+    VLevel_Params=[value_name, value, value_for_ocr, move_key, enter_key, others]
+    DLevel_Params = NLevel_Params