OptionExcel.py 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822
  1. # -*- coding:utf-8 -*-
  2. import os, json
  3. from collections import OrderedDict
  4. from UIT_PathManage import UITPathManage
  5. from TExcelParser import CExcelParser
  6. from ssat_sdk.utils.string_util import strToList
  7. from xlsConst import xlsConst as xlsc
  8. from BaseLog import CBaseLog
  9. from ExtraData import CExtraData
  10. def parseMoveKey(keyStr):
  11. return strToList(keyStr, ";")
  12. g_level = ['First', 'Second', 'Third', 'Fourth', 'Fifth', 'Sixth',
  13. 'Seventh', 'Eighth', 'Ninth', 'Tenth', 'Eleventh', 'Twelfth']
  14. class CPathParams(CBaseLog):
  15. def __init__(self):
  16. CBaseLog.__init__(self)
  17. self.paths = OrderedDict()
  18. def addParent(self, level, pDict):
  19. if level not in self.paths:
  20. self.paths[level] = {}
  21. # endif
  22. pDict["value"] = []
  23. pDict[xlsc.move_key] = parseMoveKey(pDict[xlsc.move_key])
  24. if pDict[xlsc.parent] in self.paths:
  25. self.error("Parent %s conflict." % (pDict[xlsc.parent]))
  26. self.paths[level][pDict[xlsc.parent]] = pDict
  27. def addOption(self, level, pDict):
  28. if level in self.paths:
  29. if pDict[xlsc.parent] in self.paths[level]:
  30. if pDict[xlsc.option].__len__() > 0:
  31. self.paths[level][pDict[xlsc.parent]]["value"].append(pDict)
  32. else:
  33. self.error("Parent %s not exist." % (pDict[xlsc.parent]))
  34. else:
  35. self.error("Level %s not exist." % level)
  36. class CValueParams(CBaseLog):
  37. def __init__(self):
  38. CBaseLog.__init__(self)
  39. self.values = OrderedDict()
  40. def addParent(self, pDict):
  41. if pDict[xlsc.value_name] in self.values:
  42. self.error("Parent %s conflict." % (pDict[xlsc.value_name]))
  43. pDict["value"] = []
  44. pDict[xlsc.move_key] = parseMoveKey(pDict[xlsc.move_key])
  45. self.values[pDict[xlsc.value_name]] = pDict
  46. def addOption(self, pDict):
  47. if pDict[xlsc.value_name] in self.values:
  48. if pDict[xlsc.value].__len__() > 0:
  49. self.values[pDict[xlsc.value_name]]["value"].append(pDict)
  50. else:
  51. self.error("Parent %s not exist." % (pDict[xlsc.value_name]))
  52. class CDialogParams(CBaseLog):
  53. def __init__(self):
  54. CBaseLog.__init__(self)
  55. self.dialogs = OrderedDict()
  56. def addParent(self, level, pDict):
  57. # endif
  58. if pDict[xlsc.parent] in self.dialogs:
  59. self.error("Parent %s conflict." % (pDict[xlsc.parent]))
  60. pDict["value"] = []
  61. pDict[xlsc.move_key] = parseMoveKey(pDict[xlsc.move_key])
  62. self.dialogs[pDict[xlsc.parent]] = pDict
  63. def addOption(self, level, pDict):
  64. if pDict[xlsc.parent] in self.dialogs:
  65. if pDict[xlsc.option].__len__() > 0:
  66. self.dialogs[pDict[xlsc.parent]]["value"].append(pDict)
  67. else:
  68. self.error("Parent %s not exist." % pDict[xlsc.parent])
  69. # 注意:所有不对外暴露的变量和函数需要私有化,以明确哪些接口和参数是对外的。
  70. # 这样便于后期维护时,根据对外的变量和函数来做处理。
  71. class COptionExcel(CBaseLog):
  72. def __init__(self, exData):
  73. CBaseLog.__init__(self)
  74. self.__excelParse = CExcelParser(self)
  75. self.__exData = exData
  76. self.__pathParams = CPathParams()
  77. self.__valueParams = CValueParams()
  78. self.__dialogParams = CDialogParams()
  79. # 加载excel;
  80. self.loadExcel()
  81. @property
  82. def pathParams(self):
  83. return self.__pathParams
  84. @property
  85. def valueParams(self):
  86. return self.__valueParams
  87. @property
  88. def dialogParams(self):
  89. return self.__dialogParams
  90. # 加载已知表格;
  91. def loadExcel(self):
  92. self.info(u"加载excel表")
  93. if self.__exData.listExcelPath.__len__() == 0:
  94. self.error(u"没有任何excel表格可加载")
  95. for xls in self.__exData.listExcelPath:
  96. self.info(u"当前加载:%s" % xls)
  97. self.__excelParse.read_excel(xls)
  98. # 加载其他表格;
  99. def addExcel(self, xlsPath):
  100. self.__excelParse.read_excel(xlsPath)
  101. '''
  102. 函数:获取指定option下的所有子项名称(option作为parent,获取该父项下的所有option字段)
  103. 参数:optionName 作为parent的option;
  104. 返回:该option作为父节点的所有子option名称数组;
  105. 示例:['picture_preset', 'brightness', 'backlight']
  106. 测试:通过。 对应UIT_tree.py中的getSubOptionList。
  107. '''
  108. def getOptionAllChildItemName(self, optionName):
  109. optionList = []
  110. paths = self.__pathParams.paths
  111. for level in paths:
  112. if optionName in paths[level]:
  113. optionDictList = paths[level][optionName]["value"]
  114. for optionDict in optionDictList:
  115. optionList.append(optionDict["option"])
  116. return optionList
  117. '''
  118. 函数:获取指定option/value_name下的所有子项(option/value)的ocr值, 1d表示One-dimensional(一维数组);
  119. 参数:
  120. optionName 指定的option节点(也可以是value name);
  121. isOption 是否为路径节点,True路径节点,False为value表的value name节点;
  122. 返回:数组
  123. 示例:
  124. [
  125. ['suboption1 ocr', 'ocr2', 'ocr3'],
  126. ['suboption2 ocr'],
  127. ['suboption3 orc']
  128. ]
  129. 测试:通过。UIT_tree中的x
  130. '''
  131. def getOptionAllChildItemTextList1d(self, optionName, isOption=True):
  132. if type(optionName) == str:
  133. optionName = unicode(optionName)
  134. list_ocr = []
  135. # 路径表或值表;
  136. if isOption is True:
  137. found = False
  138. for lev in self.__pathParams.paths:
  139. for parent in self.__pathParams.paths[lev]:
  140. if parent.lower() == optionName.lower():
  141. found = True
  142. for item in self.__pathParams.paths[lev][optionName]["value"]:
  143. list_ocr.extend(item['option_for_ocr'].split(';'))
  144. break
  145. # endif
  146. # endfor
  147. if found is True:
  148. break
  149. # endfor
  150. else:
  151. if optionName in self.__valueParams.values:
  152. self.info(u"找到%s的value表数据" % optionName)
  153. for item in self.__valueParams.values[optionName]["value"]:
  154. list_ocr.extend(item['value_for_ocr'].split(';'))
  155. else:
  156. self.error(u"没有找到%s的value表数据" % optionName)
  157. # endif
  158. return list_ocr
  159. '''
  160. 函数:获取指定option/value_name下的所有子项(option/value)的ocr值,2d表示Two-dimensional(二维数组);
  161. 参数:
  162. optionName 指定的option节点(也可以是value name);
  163. isOption 是否为路径节点,True路径节点,False为value表的value name节点;
  164. 返回:字典
  165. 示例:
  166. [
  167. ['suboption1 ocr', 'ocr2', 'ocr3'],
  168. ['suboption2 ocr'],
  169. ['suboption3 orc']
  170. ]
  171. 测试:通过。对应UIT_tree中的get_ocr_list
  172. '''
  173. def getOptionAllChildItemTextList2d(self, optionName, isOption=True):
  174. if type(optionName) == str:
  175. optionName = unicode(optionName)
  176. list_ocr = []
  177. # 路径表或值表;
  178. if isOption is True:
  179. found = False
  180. for lev in self.__pathParams.paths:
  181. for parent in self.__pathParams.paths[lev]:
  182. if parent.lower() == optionName.lower():
  183. found = True
  184. for item in self.__pathParams.paths[lev][optionName]["value"]:
  185. list_ocr.append(item['option_for_ocr'].split(';'))
  186. break
  187. # endif
  188. # endfor
  189. if found is True:
  190. break
  191. # endfor
  192. else:
  193. if optionName in self.__valueParams.values:
  194. self.info(u"找到%s的value表数据" % optionName)
  195. for item in self.__valueParams.values[optionName]["value"]:
  196. list_ocr.append(item['value_for_ocr'].split(';'))
  197. else:
  198. self.error(u"没有找到%s的value表数据" % optionName)
  199. # endif
  200. return list_ocr
  201. '''
  202. 函数:获取指定option/value_name下的所有子项(option/value)的ocr键对值;
  203. 参数:
  204. optionName 指定的option节点(也可以是value name);
  205. isOption 是否为路径节点,True路径节点,False为value表的value name节点;
  206. 返回:数组
  207. 示例:
  208. optionName = option
  209. isOption = True
  210. 返回:
  211. [
  212. {'childoption1': 'childoption1 for ocr'},
  213. {'childoption2': 'childoption2 for ocr'},
  214. {'childoption3': 'childoption3 for ocr'},
  215. ]
  216. 测试:通过。对应UIT_tree中的get_pair_values
  217. '''
  218. def getOptionAllChildItemMap(self, optionName, isOption=True):
  219. if type(optionName) == str:
  220. optionName = unicode(optionName)
  221. pairs = []
  222. # 路径表或值表;
  223. if isOption is True:
  224. found = False
  225. for lev in self.__pathParams.paths:
  226. for item in self.__pathParams.paths[lev]:
  227. if item.lower() == optionName.lower():
  228. found = True
  229. for item in self.__pathParams.paths[lev][optionName]["value"]:
  230. pairs.append({item['option']: item['option_for_ocr'].split(';')})
  231. break
  232. # endif
  233. # endfor
  234. if found is True:
  235. break
  236. # endfor
  237. else:
  238. if optionName in self.__valueParams.values:
  239. for item in self.__valueParams.values[optionName]["value"]:
  240. pairs.append({item['value']: item['value_for_ocr'].split(';')})
  241. # endif
  242. return pairs
  243. '''
  244. 函数:获取指定option/value_name下的所有兄弟项(相同parent)的ocr键对值;
  245. 参数:
  246. optionName 指定的option节点(也可以是value name);
  247. isOption 是否为路径节点,True路径节点,False为value表的value name节点;
  248. 返回:数组
  249. 示例:
  250. [
  251. {'sibling option1': 'sibling option1 for ocr'},
  252. {'sibling option2': 'sibling option2 for ocr'}
  253. ]
  254. 测试:。
  255. '''
  256. def getOptionAllSiblingItemMap(self, optionName, isOption=True):
  257. pass
  258. '''
  259. 函数:获取指定option/value_name下的所有兄弟项(包括自己,相同parent)的 ocr:option 字典值;
  260. 参数:
  261. optionName 指定的option节点(也可以是value name);
  262. isOption 是否为路径节点,True路径节点,False为value表的value name节点;
  263. 注:value表中的option实际并没有兄弟项,取的是该option(value name)所有value项
  264. 返回:字典
  265. 示例:
  266. {
  267. 'sibling option1_ocr': 'sibling option1',
  268. 'sibling option2_ocr': 'sibling option2',
  269. 'sibling option3_ocr': 'sibling option3',
  270. }
  271. 测试:通过。对应UIT_tree中的get_parent_ocr_dict
  272. '''
  273. def getOptionAllSiblingItemDict(self, optionName, isOption=True):
  274. # 编码转换;
  275. if type(optionName) == str:
  276. optionName = unicode(optionName)
  277. found = False
  278. dict_ocr = {}
  279. list_ocr = []
  280. if isOption is True:
  281. # 首先,字典不排序,需要倒序;
  282. paths = reversed(self.__pathParams.paths)
  283. for level in paths:
  284. for parent in self.__pathParams.paths[level]:
  285. for vals in self.__pathParams.paths[level][parent]["value"]:
  286. if vals['option'].lower() == optionName.lower():
  287. found = True
  288. break
  289. # endfor
  290. # 找到退出;
  291. if found is True:
  292. break
  293. # endfor
  294. # 找到退出;
  295. if found is True:
  296. break
  297. # 遍历value列表;
  298. if found is True:
  299. for val in self.__pathParams.paths[level][parent]["value"]:
  300. list_ocr = val['option_for_ocr'].split(';')
  301. for ocr in list_ocr:
  302. dict_ocr[ocr.lower()] = val['option']
  303. else:
  304. if optionName in self.__valueParams.values:
  305. for val in self.__valueParams.values[optionName]["value"]:
  306. list_ocr = val['value_for_ocr'].split(';')
  307. for ocr in list_ocr:
  308. dict_ocr[ocr.lower()] = val['value']
  309. print 'unsorted=', dict_ocr
  310. # 按长度排序;
  311. list_ocr = sorted(dict_ocr.keys(), key=lambda key: len(key), reverse=True)
  312. dict_reuslt = OrderedDict()
  313. for ocr in list_ocr:
  314. dict_reuslt[ocr] = dict_ocr[ocr]
  315. # 返回结果;
  316. return dict_reuslt
  317. '''
  318. 函数:获取指定option所有兄弟项(相同parent)的ocr值, 1d表示One-dimensional(一维数组);
  319. 参数:
  320. optionName 指定的option节点(也可以是value name);
  321. isOption 是否为路径节点,True路径节点,False为value表的value name节点;
  322. 返回:数组
  323. 示例:
  324. [
  325. ['option1 ocr', 'ocr2', 'ocr3'],
  326. ['option2 ocr'],
  327. ['option3 orc']
  328. ]
  329. 测试:通过。对应UIT_tree中的get_parent_ocr_list
  330. '''
  331. def getOptionAllSiblingItemTextList1d(self, optionName):
  332. # 编码转换;
  333. if type(optionName) == str:
  334. optionName = unicode(optionName)
  335. found = False
  336. list_ocr = []
  337. # 首先,字典不排序,需要倒序;
  338. paths = reversed(self.__pathParams.paths)
  339. for level in paths:
  340. for parent in self.__pathParams.paths[level]:
  341. for vals in self.__pathParams.paths[level][parent]["value"]:
  342. if vals['option'].lower() == optionName.lower():
  343. found = True
  344. break
  345. # endfor
  346. # 找到退出;
  347. if found is True:
  348. break
  349. # endfor
  350. # 找到退出;
  351. if found is True:
  352. break
  353. # endfor
  354. # 遍历value列表;
  355. if found is True:
  356. for val in self.__pathParams.paths[level][parent]["value"]:
  357. list_ocr.extend(val['option_for_ocr'].split(';'))
  358. # 按长度排序;
  359. list_ocr.sort(key=lambda i: len(i), reverse=True)
  360. # 返回结果;
  361. return list_ocr
  362. def getOptionAllSiblingItemTextList2d(self, optionName):
  363. # 编码转换;
  364. if type(optionName) == str:
  365. optionName = unicode(optionName)
  366. found = False
  367. list_ocr = []
  368. # 首先,字典不排序,需要倒序;
  369. paths = reversed(self.__pathParams.paths)
  370. for level in paths:
  371. for parent in self.__pathParams.paths[level]:
  372. for vals in self.__pathParams.paths[level][parent]["value"]:
  373. if vals['option'].lower() == optionName.lower():
  374. found = True
  375. break
  376. # endfor
  377. # 找到退出;
  378. if found is True:
  379. break
  380. # endfor
  381. # 找到退出;
  382. if found is True:
  383. break
  384. # endfor
  385. # 遍历value列表;
  386. if found is True:
  387. for val in self.__pathParams.paths[level][parent]["value"]:
  388. list_ocr.append(val['option_for_ocr'].split(';'))
  389. # 按长度排序;
  390. list_ocr.sort(key=lambda i: len(i), reverse=True)
  391. # 返回结果;
  392. return list_ocr
  393. '''
  394. 函数:获取指定option的ocr文本描述,以list返回
  395. 参数:optionName 要返回文本描述的option节点
  396. 返回:数据
  397. 示例:optionName = 'picture_reset'时,返回['picture reset', 'plcture reset']
  398. 测试:通过。对应UIT_tree.py中的getOptionTextList、get_option_ocr(这两个函数返回值一样,参数不一样而已)。
  399. '''
  400. def getOptionText(self, optionName):
  401. # 编码转换;
  402. if type(optionName) == str:
  403. optionName = unicode(optionName)
  404. found = False
  405. list_ocr = []
  406. # 首先,字典不排序,需要倒序;
  407. paths = reversed(self.__pathParams.paths)
  408. for level in paths:
  409. for parent in self.__pathParams.paths[level]:
  410. for vals in self.__pathParams.paths[level][parent]["value"]:
  411. if vals['option'].lower() == optionName.lower():
  412. list_ocr = vals['option_for_ocr'].split(';')
  413. found = True
  414. break
  415. # endfor
  416. # 找到退出;
  417. if found is True:
  418. break
  419. # endfor
  420. # 找到退出;
  421. if found is True:
  422. break
  423. # endfor
  424. # 返回结果;
  425. return list_ocr
  426. '''
  427. 函数:获取指定option的value表详细数据,如果参数value未指定具体值则获取全部valueName的详细数据;
  428. 参数:
  429. optionName 指定的value表中的option(即value name)名称
  430. value 要获取的值名称,如果空则获取全部值
  431. 返回:自定义的字典
  432. 示例:
  433. {
  434. "option":"option名称",
  435. "values":[option在value表中的所有value字段],
  436. "value_for_ocr":[option在value表中所有value_for_ocr字段],
  437. "enter_key":"",
  438. "move_key":"",
  439. "others":"",
  440. }
  441. 测试:通过。对应UIT_tree中的get_value
  442. '''
  443. def getOptionValueInfo(self, optionName, value=""):
  444. # 编码转换;
  445. if type(optionName) == str:
  446. optionName = unicode(optionName)
  447. # option/value name是否在value表中的;
  448. if optionName not in self.__valueParams.values:
  449. return []
  450. optValues = self.__valueParams.values[optionName]["value"]
  451. valueList = []
  452. valueOcrList = []
  453. for item in optValues:
  454. valueList.append(item["value"])
  455. valueOcrList.append(item["value_for_ocr"])
  456. vp = {
  457. "option": optionName,
  458. "value": valueList,
  459. "value_for_ocr": valueOcrList,
  460. "enter_key": self.__valueParams.values[optionName]["enter_key"],
  461. "move_key": self.__valueParams.values[optionName]["move_key"],
  462. "back_key": "", # 预留
  463. "others": self.__valueParams.values[optionName]['others']
  464. }
  465. # 找到value对应的ocr;
  466. if value != "":
  467. vp["value"] = value
  468. for item in self.__valueParams.values[optionName]["value"]:
  469. if "range(" in item["value"]:
  470. vp["value_for_ocr"] = item["value_for_ocr"].split(';')
  471. break
  472. elif item["value"].lower() == value.lower():
  473. vp["value_for_ocr"] = item["value_for_ocr"].split(';')
  474. break
  475. # endfor
  476. # endif
  477. # 返回结果;
  478. return vp
  479. '''
  480. 函数:获取value表中的指定option(value name)的value的文本内容;
  481. 参数:
  482. optionName 指定value中的option(value name)
  483. value 指定option的value字段名称;
  484. 返回:数组
  485. 示例:
  486. 测试:通过。对应UIT_tree中的getValueTextList。
  487. '''
  488. def getOptionValueText(self, optionName, value=""):
  489. valueTextList = []
  490. if optionName in self.__valueParams.values:
  491. valueDictList = self.valueParams.values[optionName]["value"]
  492. for valueDict in valueDictList:
  493. if value == "":
  494. value_for_ocr = valueDict["value_for_ocr"]
  495. valueTextList.append(value_for_ocr.split(';'))
  496. elif valueDict["value"] == value:
  497. value_for_ocr = valueDict["value_for_ocr"]
  498. valueTextList = value_for_ocr.split(';')
  499. break
  500. #endif
  501. #endfor
  502. #endif
  503. # 返回结果;
  504. return valueTextList
  505. '''
  506. 函数:获取指定option的详细信息;
  507. 参数:
  508. optionName 指定的路径表中的option名称
  509. 返回:字典
  510. 示例:
  511. {
  512. "layers":"第几层",
  513. "level":"",
  514. "parent":"",
  515. "first_parent": "",
  516. "enter_key":"",
  517. "move_key":"",
  518. "others":"",
  519. "option_move_key":"",
  520. "option_enter_key":"",
  521. "option_others":"",
  522. "option_ocr":[],
  523. }
  524. 测试:通过。对应UIT_tree中的get_option
  525. '''
  526. def getOptionInfo(self, optionName, paths=None):
  527. # 编码转换;
  528. if type(optionName) == str:
  529. option = unicode(optionName)
  530. found = False
  531. dict_option = {}
  532. if paths is None:
  533. # 首先,字典不排序,需要倒序;
  534. paths = reversed(self.__pathParams.paths)
  535. for level in paths:
  536. for parent in self.__pathParams.paths[level]:
  537. for vals in self.__pathParams.paths[level][parent]["value"]:
  538. if vals['option'].lower() == option.lower():
  539. if dict_option.__len__() == 0:
  540. found = True
  541. dict_option['level'] = level
  542. dict_option['parent'] = parent
  543. dict_option['others'] = self.__pathParams.paths[level][parent]['others']
  544. dict_option['enter_key'] = self.__pathParams.paths[level][parent]['enter_key']
  545. dict_option['move_key'] = self.__pathParams.paths[level][parent]['move_key']
  546. dict_option['back_key'] = '' # 预留;
  547. dict_option['option_ocr'] = vals['option_for_ocr'].split(';')
  548. dict_option['option_move_key'] = vals['move_key']
  549. dict_option['option_enter_key'] = vals['enter_key']
  550. dict_option['option_others'] = vals['others']
  551. dict_option['layers'] = g_level.index(level)
  552. option = parent
  553. break
  554. # endfor
  555. # endfor
  556. # endfor
  557. if found is True:
  558. # first层次的parent名称;
  559. dict_option['first_parent'] = option
  560. else:
  561. for level in paths:
  562. if paths[level]['option'] == optionName.lower():
  563. found = True
  564. dict_option['layers'] = g_level.index(level)
  565. dict_option['first_parent'] = paths['First']['parent']
  566. dict_option['level'] = level
  567. dict_option['parent'] = paths[level]['parent']
  568. dict_option['others'] = paths[level]['others']
  569. dict_option['enter_key'] = paths[level]['enter_key']
  570. dict_option['move_key'] = paths[level]['move_key']
  571. dict_option['back_key'] = '' # 预留;
  572. dict_option['option_ocr'] = paths[level]['option_for_ocr'] # 已经是list了。
  573. dict_option['option_move_key'] = paths[level]['move_key']
  574. dict_option['option_enter_key'] = paths[level]['enter_key']
  575. dict_option['option_others'] = paths[level]['others']
  576. break
  577. #endif
  578. #endfor
  579. #endif
  580. # 返回结果;
  581. return found, dict_option
  582. '''
  583. 函数:获取指定的option在value表中的所有value字段;
  584. 参数:
  585. optionName 指定value表中的option(value name)名称。
  586. 返回:数组
  587. 示例:
  588. 测试:通过。对应UIT_tree中的getSubValueList
  589. '''
  590. def getOptionAllValueName(self, optionName):
  591. valueList = []
  592. if self.valueParams.values.has_key(optionName):
  593. valueDictList = self.valueParams.values[optionName]["value"]
  594. for valueDict in valueDictList:
  595. valueList.append(valueDict["value"])
  596. # print "valueList:", valueList, type(valueList)
  597. if valueList.__len__() == 1 and "range(" in valueList[0]:
  598. value_for_ocr_low = str(valueList[0]).lower()
  599. str_num = value_for_ocr_low.replace("range", "")
  600. list_num = eval(str_num)
  601. min_num = list_num[0]
  602. max_num = list_num[1]
  603. return [min_num, max_num]
  604. return valueList
  605. '''
  606. 函数:获取指定option的路径。
  607. 参数:
  608. 返回:
  609. 示例:
  610. 测试:。
  611. '''
  612. def getOptionPaths(self, optionName):
  613. # pp必须不排序;
  614. pp = OrderedDict()
  615. # 首先,字典不排序,需要倒序;
  616. paths = reversed(self.__pathParams.paths)
  617. for level in paths:
  618. found = False
  619. for parent in self.__pathParams.paths[level]:
  620. # print parent,self.pathParams.paths[level][parent],'\r\n'
  621. for item in self.__pathParams.paths[level][parent]["value"]:
  622. # print item
  623. if item["option"].lower() == optionName.lower():
  624. pp[level] = {
  625. "parent": parent,
  626. "move_key": self.__pathParams.paths[level][parent][xlsc.move_key],
  627. "enter_key": self.__pathParams.paths[level][parent][xlsc.enter_key],
  628. "others": self.__pathParams.paths[level][parent][xlsc.others],
  629. "option": item[xlsc.option],
  630. "option_for_ocr": item[xlsc.option_for_ocr].split(';'),
  631. "option_move_key": item[xlsc.move_key],
  632. "option_enter_key": item[xlsc.enter_key],
  633. "option_others": item[xlsc.others]
  634. }
  635. optionName = parent
  636. found = True
  637. break
  638. if found:
  639. break
  640. else:
  641. if parent == optionName:
  642. for item in self.__pathParams.paths[level][parent]["value"]:
  643. # print item
  644. if item["option"].lower() == optionName.lower():
  645. pp[level] = {
  646. "parent": parent,
  647. "move_key": self.__pathParams.paths[level][parent][xlsc.move_key],
  648. "enter_key": self.__pathParams.paths[level][parent][xlsc.enter_key],
  649. "others": self.__pathParams.paths[level][parent][xlsc.others],
  650. "option": item[xlsc.option],
  651. "option_for_ocr": item[xlsc.option_for_ocr].split(';'),
  652. "option_move_key": item[xlsc.move_key],
  653. "option_enter_key": item[xlsc.enter_key],
  654. "option_others": item[xlsc.others]
  655. }
  656. optionName = parent
  657. found = True
  658. break
  659. # endif
  660. # endfor
  661. break
  662. # endif
  663. # endfor
  664. # endfor
  665. # 需要对path倒序使用;
  666. # dict_pp = OrderedDict()
  667. # # 逆序路径key;
  668. # revpp = reversed(pp)
  669. # for path in revpp:
  670. # 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']}
  671. # # 返回逆序后的结果;
  672. # return dict_pp
  673. return pp
  674. '''
  675. 函数:
  676. 参数:
  677. 返回:
  678. 示例:
  679. 测试:通过。
  680. '''
  681. def getOptionPathsAndValue(self, optionName, value):
  682. if value.__len__() == 0:
  683. self.error('value空,执行退出')
  684. return {}, OrderedDict()
  685. vp = self.getOptionValueInfo(optionName, value)
  686. pp = self.getOptionPaths(optionName)
  687. return vp, pp
  688. '''
  689. 函数:
  690. 参数:
  691. 返回:
  692. 示例:
  693. 测试:通过。
  694. '''
  695. def checkOptionPaths(self, optionNameOrPaths):
  696. optionPathResult = "Fail"
  697. path_params = optionNameOrPaths
  698. if type(optionNameOrPaths) == str:
  699. path_params = self.getOptionPaths(optionNameOrPaths)
  700. # 如果传入的option不存在则直接返回
  701. if path_params.__len__() <= 0:
  702. optionPathResult = "NoExit"
  703. optionPath = u"表格中不存在到达Option: %s 的路径" % str(optionNameOrPaths)
  704. return optionPath, optionPathResult
  705. else:
  706. optionPath = str(path_params)
  707. # 逆序路径key;
  708. revpp = reversed(path_params)
  709. level_count = 0
  710. for level in revpp:
  711. if str(level) == str(g_level[level_count]):
  712. level_count = level_count + 1
  713. else:
  714. # 如果执行路径不是按照First、Second......执行则返回执行出错
  715. return optionPath, optionPathResult
  716. optionPathResult = "Pass"
  717. return optionPath, optionPathResult
  718. if __name__ == "__main__":
  719. exData = CExtraData()
  720. opxls = COptionExcel(exData)
  721. # print json.dumps(opxls.pathParams.paths)
  722. # print "getOptionAllChildItemName", opxls.getOptionAllChildItemName('picture')
  723. # print "getOptionAllChildItemTextList1d", opxls.getOptionAllChildItemTextList1d('picture')
  724. # print "getOptionAllChildItemTextList2d", opxls.getOptionAllChildItemTextList2d('picture')
  725. # print "getOptionAllChildItemMap", opxls.getOptionAllChildItemMap('picture')
  726. # print "getOptionAllSiblingItemMap", opxls.getOptionAllSiblingItemMap('picture')
  727. # print u"getOptionAllSiblingItemDict", opxls.getOptionAllSiblingItemDict('picture')
  728. # print u"getOptionAllSiblingItemTextList1d", opxls.getOptionAllSiblingItemTextList1d('picture')
  729. # print u"getOptionText", opxls.getOptionText('picture')
  730. # print "getOptionValueInfo", opxls.getOptionValueInfo('picture')
  731. # print "getOptionValueText", opxls.getOptionValueText('picture', 'sharpness')
  732. print "getOptionValueText", opxls.getOptionValueText('picture_preset', 'movie')
  733. # print "getOptionInfo", opxls.getOptionInfo('sharpness')
  734. # print "getOptionAllValueName", opxls.getOptionAllValueName('r_gain')
  735. ##########################################
  736. # paths = opxls.getOptionPaths('sharpness')
  737. # print "getOptionPaths", paths
  738. # print "checkOptionPaths", opxls.checkOptionPaths('sharpness')
  739. # print "checkOptionPaths", opxls.checkOptionPaths(opxls.getOptionPaths('sharpness'))
  740. # print "getOptionPathsAndValue", opxls.getOptionPathsAndValue('picture', 'sharpness')