OptionExcel.py 28 KB

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