OptionExcel.py 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794
  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. 注:value表中的option实际并没有兄弟项,取的是该option(value name)所有value项
  260. 返回:字典
  261. 示例:
  262. {
  263. 'sibling option1_ocr': 'sibling option1',
  264. 'sibling option2_ocr': 'sibling option2',
  265. 'sibling option3_ocr': 'sibling option3',
  266. }
  267. 测试:通过。对应UIT_tree中的get_parent_ocr_dict
  268. '''
  269. def getOptionAllSiblingItemDict(self, optionName, isOption=True):
  270. # 编码转换;
  271. if type(optionName) == str:
  272. optionName = unicode(optionName)
  273. found = False
  274. dict_ocr = {}
  275. list_ocr = []
  276. if isOption is True:
  277. # 首先,字典不排序,需要倒序;
  278. paths = reversed(self.__pathParams.paths)
  279. for level in paths:
  280. for parent in self.__pathParams.paths[level]:
  281. for vals in self.__pathParams.paths[level][parent]["value"]:
  282. if vals['option'].lower() == optionName.lower():
  283. found = True
  284. break
  285. # endfor
  286. # 找到退出;
  287. if found is True:
  288. break
  289. # endfor
  290. # 找到退出;
  291. if found is True:
  292. break
  293. # 遍历value列表;
  294. if found is True:
  295. for val in self.__pathParams.paths[level][parent]["value"]:
  296. list_ocr = val['option_for_ocr'].split(';')
  297. for ocr in list_ocr:
  298. dict_ocr[ocr.lower()] = val['option']
  299. else:
  300. if optionName in self.__valueParams.values:
  301. for val in self.__valueParams.values[optionName]["value"]:
  302. list_ocr = val['value_for_ocr'].split(';')
  303. for ocr in list_ocr:
  304. dict_ocr[ocr.lower()] = val['value']
  305. print 'unsorted=', dict_ocr
  306. # 按长度排序;
  307. list_ocr = sorted(dict_ocr.keys(), key=lambda key: len(key), reverse=True)
  308. dict_reuslt = OrderedDict()
  309. for ocr in list_ocr:
  310. dict_reuslt[ocr] = dict_ocr[ocr]
  311. # 返回结果;
  312. return dict_reuslt
  313. '''
  314. 函数:获取指定option所有兄弟项(相同parent)的ocr值, 1d表示One-dimensional(一维数组);
  315. 参数:
  316. optionName 指定的option节点(也可以是value name);
  317. isOption 是否为路径节点,True路径节点,False为value表的value name节点;
  318. 返回:数组
  319. 示例:
  320. [
  321. ['option1 ocr', 'ocr2', 'ocr3'],
  322. ['option2 ocr'],
  323. ['option3 orc']
  324. ]
  325. 测试:通过。对应UIT_tree中的get_parent_ocr_list
  326. '''
  327. def getOptionAllSiblingItemTextList1d(self, optionName):
  328. # 编码转换;
  329. if type(optionName) == str:
  330. optionName = unicode(optionName)
  331. found = False
  332. list_ocr = []
  333. # 首先,字典不排序,需要倒序;
  334. paths = reversed(self.__pathParams.paths)
  335. for level in paths:
  336. for parent in self.__pathParams.paths[level]:
  337. for vals in self.__pathParams.paths[level][parent]["value"]:
  338. if vals['option'].lower() == optionName.lower():
  339. found = True
  340. break
  341. # endfor
  342. # 找到退出;
  343. if found is True:
  344. break
  345. # endfor
  346. # 找到退出;
  347. if found is True:
  348. break
  349. # endfor
  350. # 遍历value列表;
  351. if found is True:
  352. for val in self.__pathParams.paths[level][parent]["value"]:
  353. list_ocr.extend(val['option_for_ocr'].split(';'))
  354. # 按长度排序;
  355. list_ocr.sort(key=lambda i: len(i), reverse=True)
  356. # 返回结果;
  357. return list_ocr
  358. def getOptionAllSiblingItemTextList2d(self, optionName):
  359. # 编码转换;
  360. if type(optionName) == str:
  361. optionName = unicode(optionName)
  362. found = False
  363. list_ocr = []
  364. # 首先,字典不排序,需要倒序;
  365. paths = reversed(self.__pathParams.paths)
  366. for level in paths:
  367. for parent in self.__pathParams.paths[level]:
  368. for vals in self.__pathParams.paths[level][parent]["value"]:
  369. if vals['option'].lower() == optionName.lower():
  370. found = True
  371. break
  372. # endfor
  373. # 找到退出;
  374. if found is True:
  375. break
  376. # endfor
  377. # 找到退出;
  378. if found is True:
  379. break
  380. # endfor
  381. # 遍历value列表;
  382. if found is True:
  383. for val in self.__pathParams.paths[level][parent]["value"]:
  384. list_ocr.append(val['option_for_ocr'].split(';'))
  385. # 按长度排序;
  386. list_ocr.sort(key=lambda i: len(i), reverse=True)
  387. # 返回结果;
  388. return list_ocr
  389. '''
  390. 函数:获取指定option的ocr文本描述,以list返回
  391. 参数:optionName 要返回文本描述的option节点
  392. 返回:数据
  393. 示例:optionName = 'picture_reset'时,返回['picture reset', 'plcture reset']
  394. 测试:通过。对应UIT_tree.py中的getOptionTextList、get_option_ocr(这两个函数返回值一样,参数不一样而已)。
  395. '''
  396. def getOptionText(self, optionName):
  397. # 编码转换;
  398. if type(optionName) == str:
  399. optionName = unicode(optionName)
  400. found = False
  401. list_ocr = []
  402. # 首先,字典不排序,需要倒序;
  403. paths = reversed(self.__pathParams.paths)
  404. for level in paths:
  405. for parent in self.__pathParams.paths[level]:
  406. for vals in self.__pathParams.paths[level][parent]["value"]:
  407. if vals['option'].lower() == optionName.lower():
  408. list_ocr = vals['option_for_ocr'].split(';')
  409. found = True
  410. break
  411. # endfor
  412. # 找到退出;
  413. if found is True:
  414. break
  415. # endfor
  416. # 找到退出;
  417. if found is True:
  418. break
  419. # endfor
  420. # 返回结果;
  421. return list_ocr
  422. '''
  423. 函数:获取指定option的value表详细数据,如果参数value未指定具体值则获取全部valueName的详细数据;
  424. 参数:
  425. optionName 指定的value表中的option(即value name)名称
  426. value 要获取的值名称,如果空则获取全部值
  427. 返回:自定义的字典
  428. 示例:
  429. {
  430. "option":"option名称",
  431. "values":[option在value表中的所有value字段],
  432. "value_for_ocr":[option在value表中所有value_for_ocr字段],
  433. "enter_key":"",
  434. "move_key":"",
  435. "others":"",
  436. }
  437. 测试:通过。对应UIT_tree中的get_value
  438. '''
  439. def getOptionValueInfo(self, optionName, value=""):
  440. # 编码转换;
  441. if type(optionName) == str:
  442. optionName = unicode(optionName)
  443. # option/value name是否在value表中的;
  444. if optionName not in self.__valueParams.values:
  445. return []
  446. optValues = self.__valueParams.values[optionName]["value"]
  447. valueList = []
  448. valueOcrList = []
  449. for item in optValues:
  450. valueList.append(item["value"])
  451. valueOcrList.append(item["value_for_ocr"])
  452. vp = {
  453. "option": optionName,
  454. "value": valueList,
  455. "value_for_ocr": valueOcrList,
  456. "enter_key": self.__valueParams.values[optionName]["enter_key"],
  457. "move_key": self.__valueParams.values[optionName]["move_key"],
  458. "others": self.__valueParams.values[optionName]['others']
  459. }
  460. # 找到value对应的ocr;
  461. if value != "":
  462. vp["value"] = value
  463. for item in self.__valueParams.values[optionName]["value"]:
  464. if "range(" in item["value"]:
  465. vp["value_for_ocr"] = item["value_for_ocr"].split(';')
  466. break
  467. elif item["value"].lower() == value.lower():
  468. vp["value_for_ocr"] = item["value_for_ocr"].split(';')
  469. break
  470. # endfor
  471. # endif
  472. # 返回结果;
  473. return vp
  474. '''
  475. 函数:获取value表中的指定option(value name)的value的文本内容;
  476. 参数:
  477. optionName 指定value中的option(value name)
  478. value 指定option的value字段名称;
  479. 返回:数组
  480. 示例:
  481. 测试:通过。对应UIT_tree中的getValueTextList。
  482. '''
  483. def getOptionValueText(self, optionName, value=""):
  484. valueTextList = []
  485. if optionName in self.__valueParams.values:
  486. valueDictList = self.valueParams.values[optionName]["value"]
  487. for valueDict in valueDictList:
  488. if value == "":
  489. value_for_ocr = valueDict["value_for_ocr"]
  490. valueTextList = value_for_ocr.split(';')
  491. elif valueDict["value"] == value:
  492. value_for_ocr = valueDict["value_for_ocr"]
  493. valueTextList = value_for_ocr.split(';')
  494. break
  495. #endif
  496. #endfor
  497. #endif
  498. # 返回结果;
  499. return valueTextList
  500. '''
  501. 函数:获取指定option的详细信息;
  502. 参数:
  503. optionName 指定的路径表中的option名称
  504. 返回:字典
  505. 示例:
  506. {
  507. "layers":"第几层",
  508. "level":"",
  509. "parent":"",
  510. "first_parent": "",
  511. "enter_key":"",
  512. "move_key":"",
  513. "others":"",
  514. "option_move_key":"",
  515. "option_enter_key":"",
  516. "option_others":"",
  517. "option_ocr":[],
  518. }
  519. 测试:通过。对应UIT_tree中的get_option
  520. '''
  521. def getOptionInfo(self, optionName):
  522. # 编码转换;
  523. if type(optionName) == str:
  524. option = unicode(optionName)
  525. found = False
  526. layers = 0
  527. dict_option = {}
  528. # 首先,字典不排序,需要倒序;
  529. paths = reversed(self.__pathParams.paths)
  530. for level in paths:
  531. for parent in self.__pathParams.paths[level]:
  532. for vals in self.__pathParams.paths[level][parent]["value"]:
  533. if vals['option'].lower() == option.lower():
  534. if dict_option.__len__() == 0:
  535. found = True
  536. dict_option['level'] = level
  537. dict_option['parent'] = parent
  538. dict_option['others'] = self.__pathParams.paths[level][parent]['others']
  539. dict_option['enter_key'] = self.__pathParams.paths[level][parent]['enter_key']
  540. dict_option['move_key'] = self.__pathParams.paths[level][parent]['move_key']
  541. dict_option['option_ocr'] = vals['option_for_ocr'].split(';')
  542. dict_option['option_move_key'] = vals['move_key']
  543. dict_option['option_enter_key'] = vals['enter_key']
  544. dict_option['option_others'] = vals['others']
  545. option = parent
  546. layers += 1 # 层数;
  547. break
  548. # endfor
  549. # endfor
  550. # endfor
  551. if found is True:
  552. dict_option['layers'] = layers
  553. # first层次的parent名称;
  554. dict_option['first_parent'] = option
  555. # 返回结果;
  556. return found, dict_option
  557. '''
  558. 函数:获取指定的option在value表中的所有value字段;
  559. 参数:
  560. optionName 指定value表中的option(value name)名称。
  561. 返回:数组
  562. 示例:
  563. 测试:通过。对应UIT_tree中的getSubValueList
  564. '''
  565. def getOptionAllValueName(self, optionName):
  566. valueList = []
  567. if self.valueParams.values.has_key(optionName):
  568. valueDictList = self.valueParams.values[optionName]["value"]
  569. for valueDict in valueDictList:
  570. valueList.append(valueDict["value"])
  571. # print "valueList:", valueList, type(valueList)
  572. if valueList.__len__() == 1 and "range(" in valueList[0]:
  573. value_for_ocr_low = str(valueList[0]).lower()
  574. str_num = value_for_ocr_low.replace("range", "")
  575. list_num = eval(str_num)
  576. min_num = list_num[0]
  577. max_num = list_num[1]
  578. return [min_num, max_num]
  579. return valueList
  580. '''
  581. 函数:获取指定option的路径。
  582. 参数:
  583. 返回:
  584. 示例:
  585. 测试:。
  586. '''
  587. def getOptionPaths(self, optionName):
  588. # pp必须不排序;
  589. pp = OrderedDict()
  590. # 首先,字典不排序,需要倒序;
  591. paths = reversed(self.__pathParams.paths)
  592. for level in paths:
  593. found = False
  594. for parent in self.__pathParams.paths[level]:
  595. # print parent,self.pathParams.paths[level][parent],'\r\n'
  596. for item in self.__pathParams.paths[level][parent]["value"]:
  597. # print item
  598. if item["option"].lower() == optionName.lower():
  599. pp[level] = {
  600. "parent": parent,
  601. "move_key": self.__pathParams.paths[level][parent][xlsc.move_key],
  602. "enter_key": self.__pathParams.paths[level][parent][xlsc.enter_key],
  603. "others": self.__pathParams.paths[level][parent][xlsc.others],
  604. "option": item[xlsc.option],
  605. "option_for_ocr": item[xlsc.option_for_ocr].split(';'),
  606. "option_move_key": item[xlsc.move_key],
  607. "option_enter_key": item[xlsc.enter_key],
  608. "option_others": item[xlsc.others]
  609. }
  610. optionName = parent
  611. found = True
  612. break
  613. if found:
  614. break
  615. else:
  616. if parent == optionName:
  617. for item in self.__pathParams.paths[level][parent]["value"]:
  618. # print item
  619. if item["option"].lower() == optionName.lower():
  620. pp[level] = {
  621. "parent": parent,
  622. "move_key": self.__pathParams.paths[level][parent][xlsc.move_key],
  623. "enter_key": self.__pathParams.paths[level][parent][xlsc.enter_key],
  624. "others": self.__pathParams.paths[level][parent][xlsc.others],
  625. "option": item[xlsc.option],
  626. "option_for_ocr": item[xlsc.option_for_ocr].split(';'),
  627. "option_move_key": item[xlsc.move_key],
  628. "option_enter_key": item[xlsc.enter_key],
  629. "option_others": item[xlsc.others]
  630. }
  631. optionName = parent
  632. found = True
  633. break
  634. # endif
  635. # endfor
  636. break
  637. # endif
  638. # endfor
  639. # endfor
  640. # 需要对path倒序使用;
  641. # dict_pp = OrderedDict()
  642. # # 逆序路径key;
  643. # revpp = reversed(pp)
  644. # for path in revpp:
  645. # 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']}
  646. # # 返回逆序后的结果;
  647. # return dict_pp
  648. return pp
  649. '''
  650. 函数:
  651. 参数:
  652. 返回:
  653. 示例:
  654. 测试:通过。
  655. '''
  656. def getOptionPathsAndValue(self, optionName, value):
  657. if value.__len__() == 0:
  658. self.error('value空,执行退出')
  659. return {}, OrderedDict()
  660. vp = self.getOptionValueInfo(optionName, value)
  661. pp = self.getOptionPaths(optionName)
  662. return vp, pp
  663. '''
  664. 函数:
  665. 参数:
  666. 返回:
  667. 示例:
  668. 测试:通过。
  669. '''
  670. def checkOptionPaths(self, optionNameOrPaths):
  671. optionPathResult = "Fail"
  672. path_params = optionNameOrPaths
  673. if type(optionNameOrPaths) == str:
  674. path_params = self.getOptionPaths(optionNameOrPaths)
  675. # 如果传入的option不存在则直接返回
  676. if path_params.__len__() <= 0:
  677. optionPathResult = "NoExit"
  678. optionPath = u"表格中不存在到达Option: %s 的路径" % str(optionNameOrPaths)
  679. return optionPath, optionPathResult
  680. else:
  681. optionPath = str(path_params)
  682. # 逆序路径key;
  683. revpp = reversed(path_params)
  684. level_count = 0
  685. for level in revpp:
  686. if str(level) == str(g_level[level_count]):
  687. level_count = level_count + 1
  688. else:
  689. # 如果执行路径不是按照First、Second......执行则返回执行出错
  690. return optionPath, optionPathResult
  691. optionPathResult = "Pass"
  692. return optionPath, optionPathResult
  693. if __name__ == "__main__":
  694. exData = CExtraData()
  695. opxls = COptionExcel(exData)
  696. # print json.dumps(opxls.pathParams.paths)
  697. # print "getOptionAllChildItemName", opxls.getOptionAllChildItemName('picture')
  698. # print "getOptionAllChildItemTextList1d", opxls.getOptionAllChildItemTextList1d('picture')
  699. # print "getOptionAllChildItemTextList2d", opxls.getOptionAllChildItemTextList2d('picture')
  700. # print "getOptionAllChildItemMap", opxls.getOptionAllChildItemMap('picture')
  701. # print "getOptionAllSiblingItemMap", opxls.getOptionAllSiblingItemMap('picture')
  702. # print u"getOptionAllSiblingItemDict", opxls.getOptionAllSiblingItemDict('picture')
  703. # print u"getOptionAllSiblingItemTextList1d", opxls.getOptionAllSiblingItemTextList1d('picture')
  704. # print u"getOptionText", opxls.getOptionText('picture')
  705. # print "getOptionValueInfo", opxls.getOptionValueInfo('picture')
  706. # print "getOptionValueText", opxls.getOptionValueText('picture', 'sharpness')
  707. # print "getOptionInfo", opxls.getOptionInfo('picture_reset')
  708. # print "getOptionAllValueName", opxls.getOptionAllValueName('r_gain')
  709. ##########################################
  710. # print "getOptionPaths", opxls.getOptionPaths('sharpness')
  711. # print "checkOptionPaths", opxls.checkOptionPaths('sharpness')
  712. # print "checkOptionPaths", opxls.checkOptionPaths(opxls.getOptionPaths('sharpness'))
  713. print "getOptionPathsAndValue", opxls.getOptionPathsAndValue('picture', 'sharpness')