Date
1 - 3 of 3
[PATCH 1/2] config_tools: format vitio input in configurator
Kunhui Li
This patch formats virtio input entry as "Device name: xxx, Device physical path: xxx".
Tracked-On: #6691 Signed-off-by: Kunhui-Li <kunhuix.li@...> --- misc/config_tools/configurator/pyodide/loadBoard.py | 12 ++++++++++-- misc/config_tools/schema/VMtypes.xsd | 3 ++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/misc/config_tools/configurator/pyodide/loadBoard.py b/misc/config_tools/configurator/pyodide/loadBoard.py index 48bb02715..035c89fa2 100644 --- a/misc/config_tools/configurator/pyodide/loadBoard.py +++ b/misc/config_tools/configurator/pyodide/loadBoard.py @@ -2,6 +2,7 @@ __package__ = 'configurator.pyodide' import json +import logging from copy import deepcopy import elementpath @@ -20,7 +21,11 @@ def get_dynamic_scenario(board): board_xml = etree.fromstring(board) def get_enum(source, options, obj_type): - elements = [str(x) for x in elementpath.select(source, options) if x] + if options == "//inputs/input": + inputs_etree = [x for x in elementpath.select(source, options) if x is not None] + elements = [f"Device name: {str(elementpath.select(i, './name/text()')[0])}, Device physical path: {str(elementpath.select(i, './phys/text()')[0])}" for i in inputs_etree] + else: + elements = [str(x) for x in elementpath.select(source, options) if x] elements = list(set(elements)) if not elements: elements = [''] @@ -42,7 +47,10 @@ def get_dynamic_scenario(board): # get enum data enum = function(source, selector, obj_type) if sorted_func: - enum = sorted(enum, key=eval(sorted_func)) + try: + enum = sorted(enum, key=eval(sorted_func)) + except IndexError as e: + logging.warning(e) return enum def dynamic_enum_apply(obj): diff --git a/misc/config_tools/schema/VMtypes.xsd b/misc/config_tools/schema/VMtypes.xsd index 302e152b6..8fe381caa 100644 --- a/misc/config_tools/schema/VMtypes.xsd +++ b/misc/config_tools/schema/VMtypes.xsd @@ -395,7 +395,8 @@ device file when user config it as virtio serial port, which can be read and wri <xs:complexType name="VirtioInputConfiguration"> <xs:sequence> <xs:element name="backend_device_file" type="xs:string" minOccurs="0"> - <xs:annotation acrn:title="Backend device file" acrn:widget-options="'placeholder': '/dev/input/eventX'"> + <xs:annotation acrn:title="Backend device file" acrn:widget-options="'placeholder': '/dev/input/eventX'" acrn:options="//inputs/input" + acrn:options-sorted-by="lambda s: (s.split('Device name: ')[1].split(', Device physical path')[0], s.split('Device physical path: ')[1])"> <xs:documentation>Specifying backend device in service vm with device description.</xs:documentation> </xs:annotation> </xs:element> -- 2.25.1 |
|
Junjie Mao
Kunhui-Li <kunhuix.li@...> writes:
This patch formats virtio input entry as "Device name: xxx, Device physical path: xxx".This file contains the general logic to extract enum values from annotations and is not where item-specific logic should be placed. XPATH 2.0 already supports functions like string-join and for-expressions. You should be able to express what you need using a single XPATH. elements = list(set(elements))Why do you need catch this exception? -- Best Regards Junjie Mao return enum |
|
Kunhui Li
toggle quoted message
Show quoted text
-----Original Message-----Will update. Because the "IndexError" will be raise if the //input/name and //input/phys data is not found in board xml file, then user will fail to import board xml.elements = list(set(elements))Why do you need catch this exception? May I can remove this because it is unnecessary if we use XPATH to parse data. -- |
|