Files
chipsec-chipsec/chipsec_tools/log_parser/chipsec_parser.py
Dan Scott e1cd66554e Add typehints to chipsec_tools folder
Signed-off-by: Dan Scott <dan.scott@intel.com>
2023-08-04 16:14:20 -07:00

41 lines
1.2 KiB
Python

from lxml import etree
from typing import Any, Dict, List, Tuple
def parse_testsuite(tree: etree) -> Dict[Any, Any]:
st = tree.xpath('//testsuites/testsuite')
assert(len(st) == 1),"more than one test-suite in XML file"
st = st[0]
res = {}
res.update(st.attrib)
res.update(dict([(x.attrib['name'], x.attrib['value']) for x in st.iterfind('.//properties/property')]))
return res
def parse_test_cases(tree: etree) -> List[Dict[Any, Any]]:
st = tree.xpath('//testsuites/testsuite')[0]
entries = []
for case in st.iterfind('.//testcase'):
res = {}
res.update(case.attrib)
res['pass'] = case.xpath('.//pass')[0].attrib['type']
res['out'] = case.xpath('.//system-out')[0].text
if res['out'] is not None:
res['out'] = res['out']
else:
res['out'] = ""
entries.append(res)
return entries
def parse_chipsec_xml(fdlike: str) -> Tuple[Dict[Any, Any], List[Any]]:
if isinstance(fdlike,str):
fd = open(fdlike, 'rb')
else:
fd = fdlike
tree = etree.parse(fd)
suite_data = parse_testsuite(tree)
cases_data = parse_test_cases(tree)
return (suite_data, cases_data)