1#!/usr/bin/env python3 2__package__ = 'configurator.pyodide' 3 4from .pyodide import convert_result, nuc11_board, nuc11_scenario 5 6import re 7from lxml import etree 8from defusedxml.lxml import fromstring 9 10 11class GenerateSchema: 12 13 def __init__(self, board, scenario): 14 parser = etree.XMLParser(remove_blank_text=True) 15 self.board_etree = fromstring(board, parser) 16 self.scenario = scenario 17 18 @property 19 def pcis(self): 20 line = self.board_etree.xpath('/acrn-config/PCI_DEVICE/text()')[0] 21 cnt = [] 22 for line in line.replace('\t', '').split('\n'): 23 re_cpi = re.compile(r'^([0-9A-Fa-f]{1,2}:[0-1][0-9A-Fa-f]\.[0-7].*)\(') 24 ret_ = re_cpi.search(line) 25 if ret_: 26 ret = ret_.group(1).strip() 27 if re.search(r'^00:00.0', ret): # omit 00:00.0 28 continue 29 cnt.append(ret) 30 return cnt 31 32 @property 33 def schemas(self): 34 return self.scenario 35 36 def update(self): 37 return sorted(list(set(self.pcis) - set(self.schemas))) 38 39 40def updateSchema(board, scenario): 41 return convert_result(GenerateSchema(board, scenario).update()) 42 43 44main = updateSchema 45 46 47def test(): 48 main(nuc11_board, nuc11_scenario) 49 50 51if __name__ == '__main__': 52 test() 53