From 0a4e7485887412237b4c0373f0e652587c90ffd8 Mon Sep 17 00:00:00 2001 From: Sakshay Mahna Date: Wed, 20 Aug 2025 17:11:24 +0530 Subject: [PATCH 1/9] Add xml runner --- parser/entrypoint/common.py | 48 +++++++++++++ parser/entrypoint/parser_runner.py | 87 ++---------------------- parser/entrypoint/python_runner.py | 89 +++++++++++++++++++++++++ parser/entrypoint/xml_runner.py | 45 +++++++++++++ parser/parser/dispatcher.py | 20 ++++++ parser/parser/registry.py | 23 +++++-- parser/tests/test_cases/node_tests.yaml | 12 ++++ 7 files changed, 237 insertions(+), 87 deletions(-) create mode 100644 parser/entrypoint/common.py create mode 100644 parser/entrypoint/python_runner.py create mode 100644 parser/entrypoint/xml_runner.py diff --git a/parser/entrypoint/common.py b/parser/entrypoint/common.py new file mode 100644 index 0000000..0019bdd --- /dev/null +++ b/parser/entrypoint/common.py @@ -0,0 +1,48 @@ +# Copyright (c) 2025 Kodo Robotics +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from typing import List +from parser.context import ParseContext +import xml.etree.ElementTree as ET + +def build_result(filepath: str, context: ParseContext, parsed: List): + """ + Shape the final response uniformly. + """ + return { + "file": filepath, + "parsed": parsed, + "used_launch_config": sorted(context.introspection.used_launch_configs), + "declared_arguments": sorted(context.introspection.declared_launch_args.keys()), + "undeclared_launch_configurations": sorted( + context.introspection.get_undeclared_launch_configs() + ), + "environment_variables": context.introspection.get_environment_variables(), + "python_expressions": context.introspection.get_python_expressions(), + "composable_containers": context.get_composable_node_groups(), + "additional_components": context.introspection.get_registered_entities(), + } + +def detect_format_from_content(code: str) -> str: + """ + Return 'xml' if it parses as XML with root; otherwise 'python'. + """ + try: + root = ET.fromstring(code) + if root.tag.split('}')[-1] == "launch": + return "xml" + except ET.ParseError: + pass + return "python" + diff --git a/parser/entrypoint/parser_runner.py b/parser/entrypoint/parser_runner.py index 8b86d0e..dd547c2 100644 --- a/parser/entrypoint/parser_runner.py +++ b/parser/entrypoint/parser_runner.py @@ -12,89 +12,16 @@ # See the License for the specific language governing permissions and # limitations under the License. -import ast - -from parser.context import ParseContext -from parser.parser.utils.ast_utils import collect_function_defs -from parser.resolution.resolution_engine import ResolutionEngine - +from parser.entrypoint.common import detect_format_from_content +from parser.entrypoint.python_runner import parse_python_launch_file +from parser.entrypoint.xml_runner import parse_xml_launch_file def parse_launch_file(filepath: str) -> dict: - """ - Entrypoint: parses a launch file and returns structured output - Detects LaunchDescription([...]) or ld.add_action(...) usage. - """ with open(filepath, "r", encoding="utf-8") as f: code = f.read() - tree = ast.parse(code, filename=filepath) - - # Set up shared context and resolution engine - context = ParseContext() - context.current_file = filepath - engine = ResolutionEngine(context) - context.engine = engine - - parsed = [] - - collect_function_defs(tree.body, context) - - # Simulate top-level execution - for node in tree.body: - if isinstance(node, ast.Assign): - engine.resolve(node) - - elif isinstance(node, ast.Expr): - engine.resolve(node) - - # Now extract and run generate_launch_description - main_fn = context.lookup_function("generate_launch_description") - if not main_fn: - raise ValueError("No generate_launch_description() function found.") - - parsed.extend(_parse_launch_function_body(main_fn.body, context, engine)) - - return { - "file": filepath, - "parsed": parsed, - "used_launch_config": sorted(context.introspection.used_launch_configs), - "declared_arguments": sorted(context.introspection.declared_launch_args.keys()), - "undeclared_launch_configurations": sorted( - context.introspection.get_undeclared_launch_configs() - ), - "environment_variables": context.introspection.get_environment_variables(), - "python_expressions": context.introspection.get_python_expressions(), - "composable_containers": context.get_composable_node_groups(), - "additional_components": context.introspection.get_registered_entities(), - } - - -def _parse_launch_function_body( - body: list[ast.stmt], context: ParseContext, engine: ResolutionEngine -) -> list: - parsed = [] - for stmt in body: - if isinstance(stmt, ast.Assign): - engine.resolve(stmt) - - elif isinstance(stmt, ast.If): - engine.resolve(stmt) - - elif isinstance(stmt, ast.Expr): - func_name = context.get_func_name(stmt.value.func) - if func_name.endswith("add_action"): - arg = stmt.value.args[0] - result = engine.resolve(arg) - if result: - parsed.append(result) - else: - engine.resolve(stmt) - - elif isinstance(stmt, ast.Return) and isinstance(stmt.value, ast.Call): - resolved = engine.resolve(stmt.value) - if isinstance(resolved, list): - parsed.extend(resolved) - elif resolved is not None: - parsed.append(resolved) + kind = detect_format_from_content(code) - return parsed + if kind == "xml": + return parse_xml_launch_file(filepath) + return parse_python_launch_file(filepath) diff --git a/parser/entrypoint/python_runner.py b/parser/entrypoint/python_runner.py new file mode 100644 index 0000000..ee4f6e9 --- /dev/null +++ b/parser/entrypoint/python_runner.py @@ -0,0 +1,89 @@ +# Copyright (c) 2025 Kodo Robotics +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import ast + +from parser.context import ParseContext +from parser.entrypoint.common import build_result +from parser.parser.utils.ast_utils import collect_function_defs +from parser.resolution.resolution_engine import ResolutionEngine + + +def parse_python_launch_file(filepath: str) -> dict: + """ + Entrypoint: parses a launch file and returns structured output + Detects LaunchDescription([...]) or ld.add_action(...) usage. + """ + with open(filepath, "r", encoding="utf-8") as f: + code = f.read() + + tree = ast.parse(code, filename=filepath) + + # Set up shared context and resolution engine + context = ParseContext() + context.current_file = filepath + engine = ResolutionEngine(context) + context.engine = engine + + parsed = [] + + collect_function_defs(tree.body, context) + + # Simulate top-level execution + for node in tree.body: + if isinstance(node, ast.Assign): + engine.resolve(node) + + elif isinstance(node, ast.Expr): + engine.resolve(node) + + # Now extract and run generate_launch_description + main_fn = context.lookup_function("generate_launch_description") + if not main_fn: + raise ValueError("No generate_launch_description() function found.") + + parsed.extend(_parse_launch_function_body(main_fn.body, context, engine)) + + return build_result(filepath, context, parsed) + + +def _parse_launch_function_body( + body: list[ast.stmt], context: ParseContext, engine: ResolutionEngine +) -> list: + parsed = [] + for stmt in body: + if isinstance(stmt, ast.Assign): + engine.resolve(stmt) + + elif isinstance(stmt, ast.If): + engine.resolve(stmt) + + elif isinstance(stmt, ast.Expr): + func_name = context.get_func_name(stmt.value.func) + if func_name.endswith("add_action"): + arg = stmt.value.args[0] + result = engine.resolve(arg) + if result: + parsed.append(result) + else: + engine.resolve(stmt) + + elif isinstance(stmt, ast.Return) and isinstance(stmt.value, ast.Call): + resolved = engine.resolve(stmt.value) + if isinstance(resolved, list): + parsed.extend(resolved) + elif resolved is not None: + parsed.append(resolved) + + return parsed \ No newline at end of file diff --git a/parser/entrypoint/xml_runner.py b/parser/entrypoint/xml_runner.py new file mode 100644 index 0000000..b0f950b --- /dev/null +++ b/parser/entrypoint/xml_runner.py @@ -0,0 +1,45 @@ +# Copyright (c) 2025 Kodo Robotics +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from xml.etree import ElementTree as ET + +from parser.context import ParseContext +from parser.entrypoint.common import build_result +from parser.parser.dispatcher import dispatch_element + + +def parse_xml_launch_file(filepath: str) -> dict: + """ + Entrypoint: parses a launch file and returns structured output + Detects + """ + root = ET.parse(filepath).getroot() + tag = _strip_ns(root.tag) + if tag != "launch": + raise ValueError(f"Expected as root tag, found <{tag}") + + # Set up shared context + context = ParseContext() + context.current_file = filepath + + parsed = [] + for child in list(root): + result = dispatch_element(child, context) + parsed.append(result) + + return build_result(filepath, parsed) + + +def _strip_ns(tag: str) -> str: + return tag.split('}')[-1] \ No newline at end of file diff --git a/parser/parser/dispatcher.py b/parser/parser/dispatcher.py index 04af22e..452cbdc 100644 --- a/parser/parser/dispatcher.py +++ b/parser/parser/dispatcher.py @@ -13,6 +13,7 @@ # limitations under the License. import ast +from xml.etree import ElementTree as ET from parser.context import ParseContext from parser.parser.loader import register_builtin_handlers @@ -37,3 +38,22 @@ def dispatch_call(node: ast.Call, context: ParseContext) -> dict: raise ValueError(f"Unrecognized launch construct: '{func_name}'") return handler(node, context) + +def dispatch_element(el: ET.Element, context: ParseContext) -> dict: + """ + Dispatch a launch construct (XML element) to its registered handler. + + - Uses the raw tag name ('node', 'include', 'group') + - Looks up the handler in registry + - Delegates to handler + """ + tag = _strip_ns(el.tag) + handler = get_handler(tag) + + if not handler: + raise ValueError(f"Unrecognized XML launch construct: <{tag}>") + + return handler(el, context) + +def _strip_ns(tag: str) -> str: + return tag.split('}')[-1] diff --git a/parser/parser/registry.py b/parser/parser/registry.py index ebbf753..87032ed 100644 --- a/parser/parser/registry.py +++ b/parser/parser/registry.py @@ -12,23 +12,32 @@ # See the License for the specific language governing permissions and # limitations under the License. -import ast import warnings -from typing import Callable, Dict, Optional +from typing import Any, Callable, Dict, Optional from parser.context import ParseContext +# Handler signature: accepts a construct (AST Call, XML Element etc.) + context +Handler = Callable[[Any, "ParseContext"], Optional[dict]] + # Registry dictionary for known launch constructs -_HANDLER_REGISTRY: Dict[str, Callable[[ast.Call, "ParseContext"], Optional[dict]]] = {} +_HANDLER_REGISTRY: Dict[str, Handler] = {} def register_handler(*names: str): """ Decorator to register a handler for a given launch construct. - Example: @register_handler("Node") registers a handler for launch_ros.actions.Node. + + For Python-based launch: + @register_handler("Node", "launch_ros.actions.Node") + + For XML-based launch: + @register_handler("node) + + You can register multiple aliases pointing to the same handler. """ - def decorator(func: Callable[[ast.Call, "ParseContext"], Optional[dict]]): + def decorator(func: Handler): for name in names: if name in _HANDLER_REGISTRY: warnings.warn(f"Overwriting existing handler for '{name}'") @@ -38,14 +47,14 @@ def decorator(func: Callable[[ast.Call, "ParseContext"], Optional[dict]]): return decorator -def get_handler(name: str) -> Optional[Callable[[ast.Call, "ParseContext"], Optional[dict]]]: +def get_handler(name: str) -> Optional[Handler]: """ Retrieve the handler for a given construct, or None if unregistered """ return _HANDLER_REGISTRY.get(name) -def all_registered() -> Dict[str, Callable]: +def all_registered() -> Dict[str, Handler]: """ Return the complete handler map (useful for debugging or listing). """ diff --git a/parser/tests/test_cases/node_tests.yaml b/parser/tests/test_cases/node_tests.yaml index 05237cc..7d6e5e4 100644 --- a/parser/tests/test_cases/node_tests.yaml +++ b/parser/tests/test_cases/node_tests.yaml @@ -13,6 +13,18 @@ tests: nodes: - package: my_pkg executable: my_node + + - name: minimal_node_xml + description: Node with just package and executable (XML) + input: | + + + + + expected: + nodes: + - package: my_pkg + executable: my_node - name: node_with_fields description: Node with name, output, parameters and remapping From 58cfee2a1c633ed3e842940a1e8d94871138d419 Mon Sep 17 00:00:00 2001 From: Sakshay Mahna Date: Wed, 20 Aug 2025 20:08:05 +0530 Subject: [PATCH 2/9] Add node xml tests --- parser/entrypoint/common.py | 11 ++--- parser/entrypoint/xml_runner.py | 7 +-- parser/parser/dispatcher.py | 6 +-- parser/parser/loader.py | 1 + parser/parser/utils/xml_utils.py | 16 +++++++ parser/parser/xml_handlers/__init__.py | 13 ++++++ parser/parser/xml_handlers/node_handler.py | 35 +++++++++++++++ parser/tests/test_cases/node_tests.yaml | 12 ------ parser/tests/test_cases/node_xml_tests.yaml | 48 +++++++++++++++++++++ parser/tests/test_from_yaml.py | 23 ++++++---- parser/tests/test_helpers.py | 4 +- 11 files changed, 137 insertions(+), 39 deletions(-) create mode 100644 parser/parser/utils/xml_utils.py create mode 100644 parser/parser/xml_handlers/__init__.py create mode 100644 parser/parser/xml_handlers/node_handler.py create mode 100644 parser/tests/test_cases/node_xml_tests.yaml diff --git a/parser/entrypoint/common.py b/parser/entrypoint/common.py index 0019bdd..d05bd82 100644 --- a/parser/entrypoint/common.py +++ b/parser/entrypoint/common.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import io from typing import List from parser.context import ParseContext import xml.etree.ElementTree as ET @@ -38,11 +39,7 @@ def detect_format_from_content(code: str) -> str: """ Return 'xml' if it parses as XML with root; otherwise 'python'. """ - try: - root = ET.fromstring(code) - if root.tag.split('}')[-1] == "launch": - return "xml" - except ET.ParseError: - pass + head = code.lstrip().lower() + if head.startswith(" dict: @@ -25,7 +26,7 @@ def parse_xml_launch_file(filepath: str) -> dict: Detects """ root = ET.parse(filepath).getroot() - tag = _strip_ns(root.tag) + tag = strip_ns(root.tag) if tag != "launch": raise ValueError(f"Expected as root tag, found <{tag}") @@ -39,7 +40,3 @@ def parse_xml_launch_file(filepath: str) -> dict: parsed.append(result) return build_result(filepath, parsed) - - -def _strip_ns(tag: str) -> str: - return tag.split('}')[-1] \ No newline at end of file diff --git a/parser/parser/dispatcher.py b/parser/parser/dispatcher.py index 452cbdc..1f39d4e 100644 --- a/parser/parser/dispatcher.py +++ b/parser/parser/dispatcher.py @@ -19,6 +19,7 @@ from parser.parser.loader import register_builtin_handlers from parser.parser.registry import get_handler from parser.resolution.utils import get_func_name +from parser.utils.xml_utils import strip_ns register_builtin_handlers() @@ -47,13 +48,10 @@ def dispatch_element(el: ET.Element, context: ParseContext) -> dict: - Looks up the handler in registry - Delegates to handler """ - tag = _strip_ns(el.tag) + tag = strip_ns(el.tag) handler = get_handler(tag) if not handler: raise ValueError(f"Unrecognized XML launch construct: <{tag}>") return handler(el, context) - -def _strip_ns(tag: str) -> str: - return tag.split('}')[-1] diff --git a/parser/parser/loader.py b/parser/parser/loader.py index 4e49c1d..4ff5710 100644 --- a/parser/parser/loader.py +++ b/parser/parser/loader.py @@ -26,3 +26,4 @@ def register_builtin_handlers(): package_dir = os.path.dirname(parser.parser.handlers.__file__) for _, module_name, _ in pkgutil.iter_modules([package_dir]): importlib.import_module(f"parser.parser.handlers.{module_name}") + importlib.import_module(f"parser.parser.xml_handlers.{module_name}") diff --git a/parser/parser/utils/xml_utils.py b/parser/parser/utils/xml_utils.py new file mode 100644 index 0000000..0f7986d --- /dev/null +++ b/parser/parser/utils/xml_utils.py @@ -0,0 +1,16 @@ +# Copyright (c) 2025 Kodo Robotics +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +def strip_ns(tag: str) -> str: + return tag.split('}')[-1] \ No newline at end of file diff --git a/parser/parser/xml_handlers/__init__.py b/parser/parser/xml_handlers/__init__.py new file mode 100644 index 0000000..396960c --- /dev/null +++ b/parser/parser/xml_handlers/__init__.py @@ -0,0 +1,13 @@ +# Copyright (c) 2025 Kodo Robotics +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/parser/parser/xml_handlers/node_handler.py b/parser/parser/xml_handlers/node_handler.py new file mode 100644 index 0000000..909d700 --- /dev/null +++ b/parser/parser/xml_handlers/node_handler.py @@ -0,0 +1,35 @@ +# Copyright (c) 2025 Kodo Robotics +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from xml.etree.ElementTree import ET + +from parser.context import ParseContext +from parser.parser.registry import register_handler +from parser.parser.utils.xml_utils import dispatch_xml + + +@register_handler("node") +def handle_node(node: ast.Call, context: ParseContext) -> dict: + """ + Handle a launch_ros Node(...) + Adds namespace context if not explicitly passed. + """ + kwargs = resolve_call_kwargs(node, context.engine) + + if "namespace" not in kwargs: + ns = context.current_namespace() + if ns: + kwargs["namespace"] = ns + + return {"type": "Node", **kwargs} diff --git a/parser/tests/test_cases/node_tests.yaml b/parser/tests/test_cases/node_tests.yaml index 7d6e5e4..05237cc 100644 --- a/parser/tests/test_cases/node_tests.yaml +++ b/parser/tests/test_cases/node_tests.yaml @@ -13,18 +13,6 @@ tests: nodes: - package: my_pkg executable: my_node - - - name: minimal_node_xml - description: Node with just package and executable (XML) - input: | - - - - - expected: - nodes: - - package: my_pkg - executable: my_node - name: node_with_fields description: Node with name, output, parameters and remapping diff --git a/parser/tests/test_cases/node_xml_tests.yaml b/parser/tests/test_cases/node_xml_tests.yaml new file mode 100644 index 0000000..88ce12e --- /dev/null +++ b/parser/tests/test_cases/node_xml_tests.yaml @@ -0,0 +1,48 @@ +tests: + - name: minimal_node_xml + description: Node with just package and executable (XML) + input: | + + + + + expected: + nodes: + - package: my_pkg + executable: my_node + + - name: node_with_fields_xml + description: Node with name, output, parameters and remapping (XML) + input: | + + + + + + + + expected: + nodes: + - package: demo_nodes + executable: talker + name: talker_node + output: screen + parameters: + - use_sim_time: "${LaunchConfiguration:use_sim_time}" + remappings: + - ['/input', '/robot1/input'] + + - name: multiple_nodes_xml + description: Two nodes declared directly under + input: | + + + + + + expected: + nodes: + - package: demo + executable: a + - package: demo + executable: b \ No newline at end of file diff --git a/parser/tests/test_from_yaml.py b/parser/tests/test_from_yaml.py index b50d7da..8dc1be3 100644 --- a/parser/tests/test_from_yaml.py +++ b/parser/tests/test_from_yaml.py @@ -23,13 +23,18 @@ @pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/node_tests.yaml")) def test_node_parsing(code, expected): - result = parse_launch_string(code) + result = parse_launch_string(code, suffix=".py") + assert result.get("nodes") == expected.get("nodes") + +@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/node_xml_tests.yaml")) +def test_node_parsing(code, expected): + result = parse_launch_string(code, suffix=".xml") assert result.get("nodes") == expected.get("nodes") @pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/launch_config_tests.yaml")) def test_launch_configuration_parsing(code, expected): - result = parse_launch_string(code) + result = parse_launch_string(code, suffix=".py") for key in [ "nodes", "arguments", @@ -44,14 +49,14 @@ def test_launch_configuration_parsing(code, expected): @pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/group_action_tests.yaml")) def test_group_action_parsing(code, expected): - result = parse_launch_string(code) + result = parse_launch_string(code, suffix=".py") for key in ["nodes", "arguments", "includes", "groups", "launch_argument_usages"]: assert result.get(key, []) == expected.get(key, []) @pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/include_launch_tests.yaml")) def test_include_launch_parsing(code, expected): - result = parse_launch_string(code) + result = parse_launch_string(code, suffix=".py") for key in [ "arguments", "includes", @@ -63,7 +68,7 @@ def test_include_launch_parsing(code, expected): @pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/opaque_function_tests.yaml")) def test_opaque_functions_parsing(code, expected): - result = parse_launch_string(code) + result = parse_launch_string(code, suffix=".py") for key in [ "arguments", "opaque_functions", @@ -75,7 +80,7 @@ def test_opaque_functions_parsing(code, expected): @pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/condition_tests.yaml")) def test_conditions_parsing(code, expected): - result = parse_launch_string(code) + result = parse_launch_string(code, suffix=".py") for key in [ "arguments", "nodes", @@ -88,7 +93,7 @@ def test_conditions_parsing(code, expected): @pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/composable_node_tests.yaml")) def test_composable_nodes_parsing(code, expected): - result = parse_launch_string(code) + result = parse_launch_string(code, suffix=".py") for key in [ "arguments", "composable_nodes", @@ -101,7 +106,7 @@ def test_composable_nodes_parsing(code, expected): @pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/event_handler_tests.yaml")) def test_event_handlers_parsing(code, expected): - result = parse_launch_string(code) + result = parse_launch_string(code, suffix=".py") for key in ["nodes", "event_handlers"]: assert result.get(key, []) == expected.get(key, []) @@ -111,6 +116,6 @@ def test_event_handlers_parsing(code, expected): load_custom_handler_tests("test_cases/custom_handlers_tests.yaml", "test_handlers"), ) def test_custom_handlers_parsing(code, expected): - result = parse_launch_string(code) + result = parse_launch_string(code, suffix=".py") for key in ["arguments", "nodes", "launch_argument_usages", "custom_components"]: assert result.get(key, []) == expected.get(key, []) diff --git a/parser/tests/test_helpers.py b/parser/tests/test_helpers.py index 3ebbd8d..5b7de88 100644 --- a/parser/tests/test_helpers.py +++ b/parser/tests/test_helpers.py @@ -40,8 +40,8 @@ def load_custom_handler_tests(file_path, handler_directory): return load_yaml_tests(file_path) -def parse_launch_string(code: str) -> dict: - with tempfile.NamedTemporaryFile("w", suffix=".py", delete=False) as tmp: +def parse_launch_string(code: str, suffix) -> dict: + with tempfile.NamedTemporaryFile("w", suffix=suffix, delete=False) as tmp: tmp.write(code) tmp.flush() return parse_and_format_launch_file(tmp.name) From 47abaa51af396981aab978f2fd6f30e0b9510835 Mon Sep 17 00:00:00 2001 From: Sakshay Mahna Date: Wed, 20 Aug 2025 20:54:35 +0530 Subject: [PATCH 3/9] Reorganize python and xml --- parser/entrypoint/python_runner.py | 2 +- parser/entrypoint/user_interface.py | 2 +- parser/entrypoint/xml_runner.py | 4 +- parser/introspection/tracker.py | 2 +- .../parser/{handlers => python}/__init__.py | 0 parser/parser/{ => python}/dispatcher.py | 20 +--------- .../{utils => python/handlers}/__init__.py | 0 .../{ => python}/handlers/command_handler.py | 0 .../composable_node_container_handler.py | 2 +- .../handlers/composable_node_handler.py | 0 .../handlers/condition_handler.py | 0 .../declare_launch_argument_handler.py | 0 .../handlers/environment_variable_handler.py | 0 .../{ => python}/handlers/equals_handler.py | 0 .../{ => python}/handlers/find_executable.py | 0 .../handlers/find_package_share.py | 0 .../{ => python}/handlers/group_handler.py | 2 +- .../{ => python}/handlers/include_handler.py | 0 .../handlers/launch_configuration_handler.py | 0 .../handlers/launch_description_handler.py | 2 +- .../{ => python}/handlers/launch_sources.py | 0 .../handlers/load_composable_nodes_handler.py | 2 +- .../{ => python}/handlers/node_handler.py | 0 .../handlers/on_process_exit_handler.py | 0 .../handlers/on_process_start_handler.py | 0 .../handlers/opaque_function_handler.py | 4 +- .../handlers/parameter_file_handler.py | 0 .../parser/{ => python}/handlers/path_join.py | 0 .../{ => python}/handlers/perform_handler.py | 0 .../handlers/push_ros_namespace_handler.py | 0 .../handlers/python_expression_handler.py | 0 .../handlers/register_event_handler.py | 0 .../set_environment_variable_handler.py | 0 .../handlers/set_parameter_handler.py | 0 .../handlers/timer_action_handler.py | 2 +- parser/parser/python/loader.py | 28 ++++++++++++++ parser/parser/{ => python}/user_handler.py | 0 .../{utils/ast_utils.py => python/utils.py} | 0 parser/parser/{utils/common.py => utils.py} | 0 .../parser/{xml_handlers => xml}/__init__.py | 0 parser/parser/xml/dispatcher.py | 38 +++++++++++++++++++ .../symbolic.py => xml/handlers/__init__.py} | 7 ---- .../handlers}/node_handler.py | 2 +- parser/parser/{ => xml}/loader.py | 7 ++-- .../{utils/xml_utils.py => xml/utils.py} | 0 parser/resolution/resolvers/call.py | 2 +- .../custom_handlers/rewritten_yaml_handler.py | 2 +- parser/tests/test_from_yaml.py | 8 ++-- .../custom_launch_thing_handler.py | 2 +- .../tests/test_handlers/my_launch_handler.py | 2 +- 50 files changed, 91 insertions(+), 51 deletions(-) rename parser/parser/{handlers => python}/__init__.py (100%) rename parser/parser/{ => python}/dispatcher.py (67%) rename parser/parser/{utils => python/handlers}/__init__.py (100%) rename parser/parser/{ => python}/handlers/command_handler.py (100%) rename parser/parser/{ => python}/handlers/composable_node_container_handler.py (96%) rename parser/parser/{ => python}/handlers/composable_node_handler.py (100%) rename parser/parser/{ => python}/handlers/condition_handler.py (100%) rename parser/parser/{ => python}/handlers/declare_launch_argument_handler.py (100%) rename parser/parser/{ => python}/handlers/environment_variable_handler.py (100%) rename parser/parser/{ => python}/handlers/equals_handler.py (100%) rename parser/parser/{ => python}/handlers/find_executable.py (100%) rename parser/parser/{ => python}/handlers/find_package_share.py (100%) rename parser/parser/{ => python}/handlers/group_handler.py (96%) rename parser/parser/{ => python}/handlers/include_handler.py (100%) rename parser/parser/{ => python}/handlers/launch_configuration_handler.py (100%) rename parser/parser/{ => python}/handlers/launch_description_handler.py (95%) rename parser/parser/{ => python}/handlers/launch_sources.py (100%) rename parser/parser/{ => python}/handlers/load_composable_nodes_handler.py (96%) rename parser/parser/{ => python}/handlers/node_handler.py (100%) rename parser/parser/{ => python}/handlers/on_process_exit_handler.py (100%) rename parser/parser/{ => python}/handlers/on_process_start_handler.py (100%) rename parser/parser/{ => python}/handlers/opaque_function_handler.py (95%) rename parser/parser/{ => python}/handlers/parameter_file_handler.py (100%) rename parser/parser/{ => python}/handlers/path_join.py (100%) rename parser/parser/{ => python}/handlers/perform_handler.py (100%) rename parser/parser/{ => python}/handlers/push_ros_namespace_handler.py (100%) rename parser/parser/{ => python}/handlers/python_expression_handler.py (100%) rename parser/parser/{ => python}/handlers/register_event_handler.py (100%) rename parser/parser/{ => python}/handlers/set_environment_variable_handler.py (100%) rename parser/parser/{ => python}/handlers/set_parameter_handler.py (100%) rename parser/parser/{ => python}/handlers/timer_action_handler.py (95%) create mode 100644 parser/parser/python/loader.py rename parser/parser/{ => python}/user_handler.py (100%) rename parser/parser/{utils/ast_utils.py => python/utils.py} (100%) rename parser/parser/{utils/common.py => utils.py} (100%) rename parser/parser/{xml_handlers => xml}/__init__.py (100%) create mode 100644 parser/parser/xml/dispatcher.py rename parser/parser/{utils/symbolic.py => xml/handlers/__init__.py} (75%) rename parser/parser/{xml_handlers => xml/handlers}/node_handler.py (95%) rename parser/parser/{ => xml}/loader.py (78%) rename parser/parser/{utils/xml_utils.py => xml/utils.py} (100%) diff --git a/parser/entrypoint/python_runner.py b/parser/entrypoint/python_runner.py index ee4f6e9..3c16299 100644 --- a/parser/entrypoint/python_runner.py +++ b/parser/entrypoint/python_runner.py @@ -16,7 +16,7 @@ from parser.context import ParseContext from parser.entrypoint.common import build_result -from parser.parser.utils.ast_utils import collect_function_defs +from parser.parser.python.utils import collect_function_defs from parser.resolution.resolution_engine import ResolutionEngine diff --git a/parser/entrypoint/user_interface.py b/parser/entrypoint/user_interface.py index b576620..8660fff 100644 --- a/parser/entrypoint/user_interface.py +++ b/parser/entrypoint/user_interface.py @@ -21,7 +21,7 @@ collect_python_variable_usages, ) from parser.parser.postprocessing import simplify_launch_configurations -from parser.parser.utils.common import group_entities_by_type +from parser.parser.utils import group_entities_by_type def parse_and_format_launch_file(filepath: str) -> dict: diff --git a/parser/entrypoint/xml_runner.py b/parser/entrypoint/xml_runner.py index 9a99efd..57005e0 100644 --- a/parser/entrypoint/xml_runner.py +++ b/parser/entrypoint/xml_runner.py @@ -16,8 +16,8 @@ from parser.context import ParseContext from parser.entrypoint.common import build_result -from parser.parser.dispatcher import dispatch_element -from parser.utils.xml_utils import strip_ns +from parser.parser.xml.dispatcher import dispatch_element +from parser.parser.xml.utils import strip_ns def parse_xml_launch_file(filepath: str) -> dict: diff --git a/parser/introspection/tracker.py b/parser/introspection/tracker.py index af61248..140a1ce 100644 --- a/parser/introspection/tracker.py +++ b/parser/introspection/tracker.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from parser.parser.utils.common import compute_entity_key +from parser.parser.utils import compute_entity_key class IntrospectionTracker: diff --git a/parser/parser/handlers/__init__.py b/parser/parser/python/__init__.py similarity index 100% rename from parser/parser/handlers/__init__.py rename to parser/parser/python/__init__.py diff --git a/parser/parser/dispatcher.py b/parser/parser/python/dispatcher.py similarity index 67% rename from parser/parser/dispatcher.py rename to parser/parser/python/dispatcher.py index 1f39d4e..2052da0 100644 --- a/parser/parser/dispatcher.py +++ b/parser/parser/python/dispatcher.py @@ -13,13 +13,11 @@ # limitations under the License. import ast -from xml.etree import ElementTree as ET from parser.context import ParseContext -from parser.parser.loader import register_builtin_handlers +from parser.parser.python.loader import register_builtin_handlers from parser.parser.registry import get_handler from parser.resolution.utils import get_func_name -from parser.utils.xml_utils import strip_ns register_builtin_handlers() @@ -39,19 +37,3 @@ def dispatch_call(node: ast.Call, context: ParseContext) -> dict: raise ValueError(f"Unrecognized launch construct: '{func_name}'") return handler(node, context) - -def dispatch_element(el: ET.Element, context: ParseContext) -> dict: - """ - Dispatch a launch construct (XML element) to its registered handler. - - - Uses the raw tag name ('node', 'include', 'group') - - Looks up the handler in registry - - Delegates to handler - """ - tag = strip_ns(el.tag) - handler = get_handler(tag) - - if not handler: - raise ValueError(f"Unrecognized XML launch construct: <{tag}>") - - return handler(el, context) diff --git a/parser/parser/utils/__init__.py b/parser/parser/python/handlers/__init__.py similarity index 100% rename from parser/parser/utils/__init__.py rename to parser/parser/python/handlers/__init__.py diff --git a/parser/parser/handlers/command_handler.py b/parser/parser/python/handlers/command_handler.py similarity index 100% rename from parser/parser/handlers/command_handler.py rename to parser/parser/python/handlers/command_handler.py diff --git a/parser/parser/handlers/composable_node_container_handler.py b/parser/parser/python/handlers/composable_node_container_handler.py similarity index 96% rename from parser/parser/handlers/composable_node_container_handler.py rename to parser/parser/python/handlers/composable_node_container_handler.py index c7b1738..7eee8f5 100644 --- a/parser/parser/handlers/composable_node_container_handler.py +++ b/parser/parser/python/handlers/composable_node_container_handler.py @@ -16,7 +16,7 @@ from parser.context import ParseContext from parser.parser.registry import register_handler -from parser.parser.utils.common import flatten_once, group_entities_by_type +from parser.parser.utils import flatten_once, group_entities_by_type from parser.resolution.utils import resolve_call_signature diff --git a/parser/parser/handlers/composable_node_handler.py b/parser/parser/python/handlers/composable_node_handler.py similarity index 100% rename from parser/parser/handlers/composable_node_handler.py rename to parser/parser/python/handlers/composable_node_handler.py diff --git a/parser/parser/handlers/condition_handler.py b/parser/parser/python/handlers/condition_handler.py similarity index 100% rename from parser/parser/handlers/condition_handler.py rename to parser/parser/python/handlers/condition_handler.py diff --git a/parser/parser/handlers/declare_launch_argument_handler.py b/parser/parser/python/handlers/declare_launch_argument_handler.py similarity index 100% rename from parser/parser/handlers/declare_launch_argument_handler.py rename to parser/parser/python/handlers/declare_launch_argument_handler.py diff --git a/parser/parser/handlers/environment_variable_handler.py b/parser/parser/python/handlers/environment_variable_handler.py similarity index 100% rename from parser/parser/handlers/environment_variable_handler.py rename to parser/parser/python/handlers/environment_variable_handler.py diff --git a/parser/parser/handlers/equals_handler.py b/parser/parser/python/handlers/equals_handler.py similarity index 100% rename from parser/parser/handlers/equals_handler.py rename to parser/parser/python/handlers/equals_handler.py diff --git a/parser/parser/handlers/find_executable.py b/parser/parser/python/handlers/find_executable.py similarity index 100% rename from parser/parser/handlers/find_executable.py rename to parser/parser/python/handlers/find_executable.py diff --git a/parser/parser/handlers/find_package_share.py b/parser/parser/python/handlers/find_package_share.py similarity index 100% rename from parser/parser/handlers/find_package_share.py rename to parser/parser/python/handlers/find_package_share.py diff --git a/parser/parser/handlers/group_handler.py b/parser/parser/python/handlers/group_handler.py similarity index 96% rename from parser/parser/handlers/group_handler.py rename to parser/parser/python/handlers/group_handler.py index d535f7a..b811090 100644 --- a/parser/parser/handlers/group_handler.py +++ b/parser/parser/python/handlers/group_handler.py @@ -16,7 +16,7 @@ from parser.context import ParseContext from parser.parser.registry import register_handler -from parser.parser.utils.common import flatten_once, group_entities_by_type +from parser.parser.utils import flatten_once, group_entities_by_type from parser.resolution.utils import resolve_call_signature diff --git a/parser/parser/handlers/include_handler.py b/parser/parser/python/handlers/include_handler.py similarity index 100% rename from parser/parser/handlers/include_handler.py rename to parser/parser/python/handlers/include_handler.py diff --git a/parser/parser/handlers/launch_configuration_handler.py b/parser/parser/python/handlers/launch_configuration_handler.py similarity index 100% rename from parser/parser/handlers/launch_configuration_handler.py rename to parser/parser/python/handlers/launch_configuration_handler.py diff --git a/parser/parser/handlers/launch_description_handler.py b/parser/parser/python/handlers/launch_description_handler.py similarity index 95% rename from parser/parser/handlers/launch_description_handler.py rename to parser/parser/python/handlers/launch_description_handler.py index 29c51ca..411a7d7 100644 --- a/parser/parser/handlers/launch_description_handler.py +++ b/parser/parser/python/handlers/launch_description_handler.py @@ -16,7 +16,7 @@ from parser.context import ParseContext from parser.parser.registry import register_handler -from parser.parser.utils.common import flatten_once +from parser.parser.utils import flatten_once from parser.resolution.utils import resolve_call_signature diff --git a/parser/parser/handlers/launch_sources.py b/parser/parser/python/handlers/launch_sources.py similarity index 100% rename from parser/parser/handlers/launch_sources.py rename to parser/parser/python/handlers/launch_sources.py diff --git a/parser/parser/handlers/load_composable_nodes_handler.py b/parser/parser/python/handlers/load_composable_nodes_handler.py similarity index 96% rename from parser/parser/handlers/load_composable_nodes_handler.py rename to parser/parser/python/handlers/load_composable_nodes_handler.py index 8bf32b5..3a6c9bc 100644 --- a/parser/parser/handlers/load_composable_nodes_handler.py +++ b/parser/parser/python/handlers/load_composable_nodes_handler.py @@ -17,7 +17,7 @@ from parser.context import ParseContext from parser.parser.postprocessing import simplify_launch_configurations from parser.parser.registry import register_handler -from parser.parser.utils.common import flatten_once, group_entities_by_type +from parser.parser.utils import flatten_once, group_entities_by_type from parser.resolution.utils import resolve_call_signature diff --git a/parser/parser/handlers/node_handler.py b/parser/parser/python/handlers/node_handler.py similarity index 100% rename from parser/parser/handlers/node_handler.py rename to parser/parser/python/handlers/node_handler.py diff --git a/parser/parser/handlers/on_process_exit_handler.py b/parser/parser/python/handlers/on_process_exit_handler.py similarity index 100% rename from parser/parser/handlers/on_process_exit_handler.py rename to parser/parser/python/handlers/on_process_exit_handler.py diff --git a/parser/parser/handlers/on_process_start_handler.py b/parser/parser/python/handlers/on_process_start_handler.py similarity index 100% rename from parser/parser/handlers/on_process_start_handler.py rename to parser/parser/python/handlers/on_process_start_handler.py diff --git a/parser/parser/handlers/opaque_function_handler.py b/parser/parser/python/handlers/opaque_function_handler.py similarity index 95% rename from parser/parser/handlers/opaque_function_handler.py rename to parser/parser/python/handlers/opaque_function_handler.py index 4ad1487..a6eafcb 100644 --- a/parser/parser/handlers/opaque_function_handler.py +++ b/parser/parser/python/handlers/opaque_function_handler.py @@ -17,8 +17,8 @@ from parser.context import ParseContext from parser.parser.postprocessing import simplify_launch_configurations from parser.parser.registry import register_handler -from parser.parser.utils.ast_utils import extract_opaque_function -from parser.parser.utils.common import group_entities_by_type +from parser.parser.python.utils import extract_opaque_function +from parser.parser.utils import group_entities_by_type from parser.resolution.resolution_engine import ResolutionEngine from parser.resolution.utils import bind_function_args, resolve_call_signature diff --git a/parser/parser/handlers/parameter_file_handler.py b/parser/parser/python/handlers/parameter_file_handler.py similarity index 100% rename from parser/parser/handlers/parameter_file_handler.py rename to parser/parser/python/handlers/parameter_file_handler.py diff --git a/parser/parser/handlers/path_join.py b/parser/parser/python/handlers/path_join.py similarity index 100% rename from parser/parser/handlers/path_join.py rename to parser/parser/python/handlers/path_join.py diff --git a/parser/parser/handlers/perform_handler.py b/parser/parser/python/handlers/perform_handler.py similarity index 100% rename from parser/parser/handlers/perform_handler.py rename to parser/parser/python/handlers/perform_handler.py diff --git a/parser/parser/handlers/push_ros_namespace_handler.py b/parser/parser/python/handlers/push_ros_namespace_handler.py similarity index 100% rename from parser/parser/handlers/push_ros_namespace_handler.py rename to parser/parser/python/handlers/push_ros_namespace_handler.py diff --git a/parser/parser/handlers/python_expression_handler.py b/parser/parser/python/handlers/python_expression_handler.py similarity index 100% rename from parser/parser/handlers/python_expression_handler.py rename to parser/parser/python/handlers/python_expression_handler.py diff --git a/parser/parser/handlers/register_event_handler.py b/parser/parser/python/handlers/register_event_handler.py similarity index 100% rename from parser/parser/handlers/register_event_handler.py rename to parser/parser/python/handlers/register_event_handler.py diff --git a/parser/parser/handlers/set_environment_variable_handler.py b/parser/parser/python/handlers/set_environment_variable_handler.py similarity index 100% rename from parser/parser/handlers/set_environment_variable_handler.py rename to parser/parser/python/handlers/set_environment_variable_handler.py diff --git a/parser/parser/handlers/set_parameter_handler.py b/parser/parser/python/handlers/set_parameter_handler.py similarity index 100% rename from parser/parser/handlers/set_parameter_handler.py rename to parser/parser/python/handlers/set_parameter_handler.py diff --git a/parser/parser/handlers/timer_action_handler.py b/parser/parser/python/handlers/timer_action_handler.py similarity index 95% rename from parser/parser/handlers/timer_action_handler.py rename to parser/parser/python/handlers/timer_action_handler.py index d10e972..467e524 100644 --- a/parser/parser/handlers/timer_action_handler.py +++ b/parser/parser/python/handlers/timer_action_handler.py @@ -16,7 +16,7 @@ from parser.context import ParseContext from parser.parser.registry import register_handler -from parser.parser.utils.common import flatten_once, group_entities_by_type +from parser.parser.utils import flatten_once, group_entities_by_type from parser.resolution.utils import resolve_call_signature diff --git a/parser/parser/python/loader.py b/parser/parser/python/loader.py new file mode 100644 index 0000000..1208f93 --- /dev/null +++ b/parser/parser/python/loader.py @@ -0,0 +1,28 @@ +# Copyright (c) 2025 Kodo Robotics +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import importlib +import os +import pkgutil + + +def register_builtin_handlers(): + """ + Auto import all modules in parsers.handlers to trigger @register_handler decorators. + """ + import parser.parser.python.handlers + + package_dir = os.path.dirname(parser.parser.python.handlers.__file__) + for _, module_name, _ in pkgutil.iter_modules([package_dir]): + importlib.import_module(f"parser.parser.python.handlers.{module_name}") diff --git a/parser/parser/user_handler.py b/parser/parser/python/user_handler.py similarity index 100% rename from parser/parser/user_handler.py rename to parser/parser/python/user_handler.py diff --git a/parser/parser/utils/ast_utils.py b/parser/parser/python/utils.py similarity index 100% rename from parser/parser/utils/ast_utils.py rename to parser/parser/python/utils.py diff --git a/parser/parser/utils/common.py b/parser/parser/utils.py similarity index 100% rename from parser/parser/utils/common.py rename to parser/parser/utils.py diff --git a/parser/parser/xml_handlers/__init__.py b/parser/parser/xml/__init__.py similarity index 100% rename from parser/parser/xml_handlers/__init__.py rename to parser/parser/xml/__init__.py diff --git a/parser/parser/xml/dispatcher.py b/parser/parser/xml/dispatcher.py new file mode 100644 index 0000000..cd6ccd1 --- /dev/null +++ b/parser/parser/xml/dispatcher.py @@ -0,0 +1,38 @@ +# Copyright (c) 2025 Kodo Robotics +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from xml.etree import ElementTree as ET + +from parser.context import ParseContext +from parser.parser.registry import get_handler +from parser.parser.xml.loader import register_builtin_handlers +from parser.parser.xml.utils import strip_ns + +# register_builtin_handlers() + +def dispatch_element(el: ET.Element, context: ParseContext) -> dict: + """ + Dispatch a launch construct (XML element) to its registered handler. + + - Uses the raw tag name ('node', 'include', 'group') + - Looks up the handler in registry + - Delegates to handler + """ + tag = strip_ns(el.tag) + handler = get_handler(tag) + + if not handler: + raise ValueError(f"Unrecognized XML launch construct: <{tag}>") + + return handler(el, context) \ No newline at end of file diff --git a/parser/parser/utils/symbolic.py b/parser/parser/xml/handlers/__init__.py similarity index 75% rename from parser/parser/utils/symbolic.py rename to parser/parser/xml/handlers/__init__.py index 742fc73..396960c 100644 --- a/parser/parser/utils/symbolic.py +++ b/parser/parser/xml/handlers/__init__.py @@ -11,10 +11,3 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - - -def is_symbolic(value): - """ - Determines if a value is symbolic (non-concrete) object from the resolution engine. - """ - return isinstance(value, dict) and "type" in value diff --git a/parser/parser/xml_handlers/node_handler.py b/parser/parser/xml/handlers/node_handler.py similarity index 95% rename from parser/parser/xml_handlers/node_handler.py rename to parser/parser/xml/handlers/node_handler.py index 909d700..2e8871a 100644 --- a/parser/parser/xml_handlers/node_handler.py +++ b/parser/parser/xml/handlers/node_handler.py @@ -16,7 +16,7 @@ from parser.context import ParseContext from parser.parser.registry import register_handler -from parser.parser.utils.xml_utils import dispatch_xml +from parser.parser.xml.utils import dispatch_xml @register_handler("node") diff --git a/parser/parser/loader.py b/parser/parser/xml/loader.py similarity index 78% rename from parser/parser/loader.py rename to parser/parser/xml/loader.py index 4ff5710..9d616db 100644 --- a/parser/parser/loader.py +++ b/parser/parser/xml/loader.py @@ -21,9 +21,8 @@ def register_builtin_handlers(): """ Auto import all modules in parsers.handlers to trigger @register_handler decorators. """ - import parser.parser.handlers + import parser.parser.xml.handlers - package_dir = os.path.dirname(parser.parser.handlers.__file__) + package_dir = os.path.dirname(parser.parser.xml.handlers.__file__) for _, module_name, _ in pkgutil.iter_modules([package_dir]): - importlib.import_module(f"parser.parser.handlers.{module_name}") - importlib.import_module(f"parser.parser.xml_handlers.{module_name}") + importlib.import_module(f"parser.parser.xml.handlers.{module_name}") diff --git a/parser/parser/utils/xml_utils.py b/parser/parser/xml/utils.py similarity index 100% rename from parser/parser/utils/xml_utils.py rename to parser/parser/xml/utils.py diff --git a/parser/resolution/resolvers/call.py b/parser/resolution/resolvers/call.py index 4c6657c..6be2f24 100644 --- a/parser/resolution/resolvers/call.py +++ b/parser/resolution/resolvers/call.py @@ -15,7 +15,7 @@ import ast import warnings -from parser.parser.dispatcher import dispatch_call +from parser.parser.python.dispatcher import dispatch_call from parser.parser.postprocessing import simplify_launch_configurations from parser.resolution.resolution_registry import register_resolver diff --git a/parser/tests/real_cases/launch_files/custom_handlers/rewritten_yaml_handler.py b/parser/tests/real_cases/launch_files/custom_handlers/rewritten_yaml_handler.py index ac09e4d..d569ed3 100644 --- a/parser/tests/real_cases/launch_files/custom_handlers/rewritten_yaml_handler.py +++ b/parser/tests/real_cases/launch_files/custom_handlers/rewritten_yaml_handler.py @@ -13,7 +13,7 @@ # limitations under the License. from parser.parser.postprocessing import simplify_launch_configurations -from parser.parser.user_handler import register_user_handler +from parser.parser.python.user_handler import register_user_handler from parser.resolution.utils import resolve_call_kwargs diff --git a/parser/tests/test_from_yaml.py b/parser/tests/test_from_yaml.py index 8dc1be3..b35f44d 100644 --- a/parser/tests/test_from_yaml.py +++ b/parser/tests/test_from_yaml.py @@ -26,10 +26,10 @@ def test_node_parsing(code, expected): result = parse_launch_string(code, suffix=".py") assert result.get("nodes") == expected.get("nodes") -@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/node_xml_tests.yaml")) -def test_node_parsing(code, expected): - result = parse_launch_string(code, suffix=".xml") - assert result.get("nodes") == expected.get("nodes") +# @pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/node_xml_tests.yaml")) +# def test_node_parsing(code, expected): +# result = parse_launch_string(code, suffix=".xml") +# assert result.get("nodes") == expected.get("nodes") @pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/launch_config_tests.yaml")) diff --git a/parser/tests/test_handlers/custom_launch_thing_handler.py b/parser/tests/test_handlers/custom_launch_thing_handler.py index eae4cca..92f008d 100644 --- a/parser/tests/test_handlers/custom_launch_thing_handler.py +++ b/parser/tests/test_handlers/custom_launch_thing_handler.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from parser.parser.user_handler import register_user_handler +from parser.parser.python.user_handler import register_user_handler @register_user_handler("MyCustomLaunchThing") diff --git a/parser/tests/test_handlers/my_launch_handler.py b/parser/tests/test_handlers/my_launch_handler.py index c057cbe..dce223a 100644 --- a/parser/tests/test_handlers/my_launch_handler.py +++ b/parser/tests/test_handlers/my_launch_handler.py @@ -13,7 +13,7 @@ # limitations under the License. from parser.parser.postprocessing import simplify_launch_configurations -from parser.parser.user_handler import register_user_handler +from parser.parser.python.user_handler import register_user_handler from parser.resolution.utils import resolve_call_signature From fe746ab0396ecbd563f2d24b3750415e8dde74ce Mon Sep 17 00:00:00 2001 From: Sakshay Mahna Date: Thu, 21 Aug 2025 18:51:44 +0530 Subject: [PATCH 4/9] Add support for node in xml --- parser/entrypoint/xml_runner.py | 2 +- parser/parser/xml/attribute_mapping.py | 18 +++++ parser/parser/xml/dispatcher.py | 19 +++++- parser/parser/xml/handlers/node_handler.py | 17 +++-- parser/parser/xml/handlers/param_handler.py | 30 +++++++++ parser/parser/xml/handlers/remap_handler.py | 31 +++++++++ parser/parser/xml/handlers/var_handler.py | 27 ++++++++ parser/parser/xml/utils.py | 65 ++++++++++++++++++- parser/tests/test_cases/node_xml_tests.yaml | 4 ++ ..._from_yaml.py => test_from_yaml_python.py} | 6 -- parser/tests/test_from_yaml_xml.py | 28 ++++++++ 11 files changed, 230 insertions(+), 17 deletions(-) create mode 100644 parser/parser/xml/attribute_mapping.py create mode 100644 parser/parser/xml/handlers/param_handler.py create mode 100644 parser/parser/xml/handlers/remap_handler.py create mode 100644 parser/parser/xml/handlers/var_handler.py rename parser/tests/{test_from_yaml.py => test_from_yaml_python.py} (94%) create mode 100644 parser/tests/test_from_yaml_xml.py diff --git a/parser/entrypoint/xml_runner.py b/parser/entrypoint/xml_runner.py index 57005e0..1fec547 100644 --- a/parser/entrypoint/xml_runner.py +++ b/parser/entrypoint/xml_runner.py @@ -39,4 +39,4 @@ def parse_xml_launch_file(filepath: str) -> dict: result = dispatch_element(child, context) parsed.append(result) - return build_result(filepath, parsed) + return build_result(filepath, context, parsed) diff --git a/parser/parser/xml/attribute_mapping.py b/parser/parser/xml/attribute_mapping.py new file mode 100644 index 0000000..e4e1abf --- /dev/null +++ b/parser/parser/xml/attribute_mapping.py @@ -0,0 +1,18 @@ +# Copyright (c) 2025 Kodo Robotics +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +XML_KEY_MAP = { + "pkg": "package", + "exec": "executable" +} \ No newline at end of file diff --git a/parser/parser/xml/dispatcher.py b/parser/parser/xml/dispatcher.py index cd6ccd1..4b20281 100644 --- a/parser/parser/xml/dispatcher.py +++ b/parser/parser/xml/dispatcher.py @@ -19,7 +19,7 @@ from parser.parser.xml.loader import register_builtin_handlers from parser.parser.xml.utils import strip_ns -# register_builtin_handlers() +register_builtin_handlers() def dispatch_element(el: ET.Element, context: ParseContext) -> dict: """ @@ -35,4 +35,19 @@ def dispatch_element(el: ET.Element, context: ParseContext) -> dict: if not handler: raise ValueError(f"Unrecognized XML launch construct: <{tag}>") - return handler(el, context) \ No newline at end of file + return handler(el, context) + +def dispatch_substitution(expr: str, context: ParseContext): + expr = expr.strip() + if not expr: + return None + + parts = expr.split(maxsplit=1) + key = parts[0] + arg = parts[1] if len(parts) > 1 else "" + + handler = get_handler(key) + if not handler: + return f"${{{expr}}}" + + return handler(arg, context) \ No newline at end of file diff --git a/parser/parser/xml/handlers/node_handler.py b/parser/parser/xml/handlers/node_handler.py index 2e8871a..3475f55 100644 --- a/parser/parser/xml/handlers/node_handler.py +++ b/parser/parser/xml/handlers/node_handler.py @@ -12,24 +12,27 @@ # See the License for the specific language governing permissions and # limitations under the License. -from xml.etree.ElementTree import ET +from xml.etree import ElementTree as ET from parser.context import ParseContext from parser.parser.registry import register_handler -from parser.parser.xml.utils import dispatch_xml +from parser.parser.xml.utils import normalize_keys, process_parameters, resolve_children @register_handler("node") -def handle_node(node: ast.Call, context: ParseContext) -> dict: +def handle_node(element: ET.Element, context: ParseContext) -> dict: """ - Handle a launch_ros Node(...) - Adds namespace context if not explicitly passed. + Handle an XML tag. + Processes attributes and child tags (param, remap and env). """ - kwargs = resolve_call_kwargs(node, context.engine) + kwargs = {} + kwargs.update(process_parameters(element, context)) + kwargs.update(resolve_children(element, context)) if "namespace" not in kwargs: ns = context.current_namespace() if ns: kwargs["namespace"] = ns - return {"type": "Node", **kwargs} + norm_kwargs = normalize_keys(kwargs) + return {"type": "Node", **norm_kwargs} diff --git a/parser/parser/xml/handlers/param_handler.py b/parser/parser/xml/handlers/param_handler.py new file mode 100644 index 0000000..6a42c10 --- /dev/null +++ b/parser/parser/xml/handlers/param_handler.py @@ -0,0 +1,30 @@ +# Copyright (c) 2025 Kodo Robotics +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from xml.etree import ElementTree as ET + +from parser.context import ParseContext +from parser.parser.registry import register_handler +from parser.parser.xml.utils import normalize_keys, process_parameters, resolve_children + + +@register_handler("param") +def handle_param(element: ET.Element, context: ParseContext) -> dict: + """ + Handle tag. + Converts XML attributes (name, value) into a key-value dictionary entry. + """ + kwargs = {} + kwargs.update(process_parameters(element, context)) + return {"parameters": {kwargs["name"]: kwargs["value"]}} diff --git a/parser/parser/xml/handlers/remap_handler.py b/parser/parser/xml/handlers/remap_handler.py new file mode 100644 index 0000000..528e761 --- /dev/null +++ b/parser/parser/xml/handlers/remap_handler.py @@ -0,0 +1,31 @@ +# Copyright (c) 2025 Kodo Robotics +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from xml.etree import ElementTree as ET + +from parser.context import ParseContext +from parser.parser.registry import register_handler +from parser.parser.xml.utils import process_parameters + + +@register_handler("remap") +def handle_remap(element: ET.Element, context: ParseContext) -> dict: + """ + Handle an tag. + Converts into ["a", "b"] + """ + kwargs = {} + kwargs.update(process_parameters(element, context)) + + return {"remappings": [kwargs["from"], kwargs["to"]]} diff --git a/parser/parser/xml/handlers/var_handler.py b/parser/parser/xml/handlers/var_handler.py new file mode 100644 index 0000000..2ae29fc --- /dev/null +++ b/parser/parser/xml/handlers/var_handler.py @@ -0,0 +1,27 @@ +# Copyright (c) 2025 Kodo Robotics +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from xml.etree import ElementTree as ET + +from parser.context import ParseContext +from parser.parser.registry import register_handler +from parser.parser.xml.utils import process_parameters + +@register_handler("var") +def handle_var(name: str, context: ParseContext) -> dict: + """ + Handle $(var) substitution + """ + context.introspection.track_launch_config_usage(name) + return {"type": "LaunchConfiguration", "name": name} diff --git a/parser/parser/xml/utils.py b/parser/parser/xml/utils.py index 0f7986d..f673b0d 100644 --- a/parser/parser/xml/utils.py +++ b/parser/parser/xml/utils.py @@ -12,5 +12,68 @@ # See the License for the specific language governing permissions and # limitations under the License. +from xml.etree import ElementTree as ET + +from parser.context import ParseContext +from parser.parser.xml.attribute_mapping import XML_KEY_MAP + def strip_ns(tag: str) -> str: - return tag.split('}')[-1] \ No newline at end of file + return tag.split('}')[-1] + +def normalize_keys(attrs: dict) -> dict: + """ + Normalize XML attribute keys to unified schema keys. + """ + normalized = {} + for key, value in attrs.items(): + norm_key = XML_KEY_MAP.get(key, key) + normalized[norm_key] = value + return normalized + +def process_parameters(element: ET.Element, context: ParseContext): + """ + Process the parameter values from given XML tag. + """ + kwargs = {} + for key, value in element.attrib.items(): + kwargs[key] = _process_value(value, context) + + return kwargs + +def resolve_children(element: ET.Element, context: ParseContext): + """ + Recursively resolve children of a launch XML element. + Returns a dict of accumulated keyword arguments (parameters, remaps, envs). + """ + from parser.parser.xml.dispatcher import dispatch_element + + results = {} + for child in element: + parsed = dispatch_element(child, context) + if not parsed: + continue + + # Merge child results in results dict + for key, value in parsed.items(): + if key in results: + results[key] = [results[key], value] + else: + results[key] = value + + return results + +def _process_value(value: str, context: ParseContext): + """ + Process an attribute or text value. + If it contains $(), delegate to substitution handlers. + Otherwise, return as plain string. + """ + from parser.parser.xml.dispatcher import dispatch_substitution + + if value is None: + return None + value = value.strip() + if value.startswith("$(") and value.endswith(")"): + expr = value[2:-1] + return dispatch_substitution(expr, context) + return value \ No newline at end of file diff --git a/parser/tests/test_cases/node_xml_tests.yaml b/parser/tests/test_cases/node_xml_tests.yaml index 88ce12e..095822f 100644 --- a/parser/tests/test_cases/node_xml_tests.yaml +++ b/parser/tests/test_cases/node_xml_tests.yaml @@ -18,7 +18,9 @@ tests: + + expected: @@ -29,8 +31,10 @@ tests: output: screen parameters: - use_sim_time: "${LaunchConfiguration:use_sim_time}" + - use_remapping: "true" remappings: - ['/input', '/robot1/input'] + - ['/output', '/robot1/output'] - name: multiple_nodes_xml description: Two nodes declared directly under diff --git a/parser/tests/test_from_yaml.py b/parser/tests/test_from_yaml_python.py similarity index 94% rename from parser/tests/test_from_yaml.py rename to parser/tests/test_from_yaml_python.py index b35f44d..6a3b743 100644 --- a/parser/tests/test_from_yaml.py +++ b/parser/tests/test_from_yaml_python.py @@ -26,12 +26,6 @@ def test_node_parsing(code, expected): result = parse_launch_string(code, suffix=".py") assert result.get("nodes") == expected.get("nodes") -# @pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/node_xml_tests.yaml")) -# def test_node_parsing(code, expected): -# result = parse_launch_string(code, suffix=".xml") -# assert result.get("nodes") == expected.get("nodes") - - @pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/launch_config_tests.yaml")) def test_launch_configuration_parsing(code, expected): result = parse_launch_string(code, suffix=".py") diff --git a/parser/tests/test_from_yaml_xml.py b/parser/tests/test_from_yaml_xml.py new file mode 100644 index 0000000..d246401 --- /dev/null +++ b/parser/tests/test_from_yaml_xml.py @@ -0,0 +1,28 @@ +# Copyright (c) 2025 Kodo Robotics +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import pytest + +from parser.tests.test_helpers import ( + load_custom_handler_tests, + load_yaml_tests, + parse_launch_string, +) + +@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/node_xml_tests.yaml")) +def test_node_parsing(code, expected): + result = parse_launch_string(code, suffix=".xml") + print(result) + print(expected) + assert result.get("nodes") == expected.get("nodes") From bdf0083be035e3df6fbf039a1f6dd172561b867a Mon Sep 17 00:00:00 2001 From: Sakshay Mahna Date: Sat, 23 Aug 2025 08:18:07 +0530 Subject: [PATCH 5/9] Add support for Launch Configurations --- parser/parser/xml/handlers/arg_handler.py | 41 +++++ .../parser/xml/handlers/condition_handler.py | 33 ++++ parser/parser/xml/handlers/group_handler.py | 65 ++++++++ parser/parser/xml/handlers/include_handler.py | 52 ++++++ parser/parser/xml/handlers/node_handler.py | 27 +++- parser/parser/xml/handlers/param_handler.py | 8 +- .../push_ros_namespace_handler.py} | 22 ++- parser/parser/xml/handlers/remap_handler.py | 6 +- parser/parser/xml/handlers/var_handler.py | 1 - parser/parser/xml/utils.py | 19 +-- .../{ => python}/composable_node_tests.yaml | 0 .../{ => python}/condition_tests.yaml | 0 .../{ => python}/custom_handlers_tests.yaml | 0 .../{ => python}/event_handler_tests.yaml | 0 .../{ => python}/group_action_tests.yaml | 0 .../{ => python}/include_launch_tests.yaml | 0 .../{ => python}/launch_config_tests.yaml | 0 .../test_cases/{ => python}/node_tests.yaml | 0 .../{ => python}/opaque_function_tests.yaml | 0 .../{ => python}/recursive_include_tests.yaml | 0 .../test_cases/xml/launch_config_tests.yaml | 152 ++++++++++++++++++ .../node_tests.yaml} | 0 parser/tests/test_from_yaml_python.py | 18 +-- parser/tests/test_from_yaml_xml.py | 18 ++- 24 files changed, 424 insertions(+), 38 deletions(-) create mode 100644 parser/parser/xml/handlers/arg_handler.py create mode 100644 parser/parser/xml/handlers/condition_handler.py create mode 100644 parser/parser/xml/handlers/group_handler.py create mode 100644 parser/parser/xml/handlers/include_handler.py rename parser/parser/xml/{attribute_mapping.py => handlers/push_ros_namespace_handler.py} (50%) rename parser/tests/test_cases/{ => python}/composable_node_tests.yaml (100%) rename parser/tests/test_cases/{ => python}/condition_tests.yaml (100%) rename parser/tests/test_cases/{ => python}/custom_handlers_tests.yaml (100%) rename parser/tests/test_cases/{ => python}/event_handler_tests.yaml (100%) rename parser/tests/test_cases/{ => python}/group_action_tests.yaml (100%) rename parser/tests/test_cases/{ => python}/include_launch_tests.yaml (100%) rename parser/tests/test_cases/{ => python}/launch_config_tests.yaml (100%) rename parser/tests/test_cases/{ => python}/node_tests.yaml (100%) rename parser/tests/test_cases/{ => python}/opaque_function_tests.yaml (100%) rename parser/tests/test_cases/{ => python}/recursive_include_tests.yaml (100%) create mode 100644 parser/tests/test_cases/xml/launch_config_tests.yaml rename parser/tests/test_cases/{node_xml_tests.yaml => xml/node_tests.yaml} (100%) diff --git a/parser/parser/xml/handlers/arg_handler.py b/parser/parser/xml/handlers/arg_handler.py new file mode 100644 index 0000000..a16516a --- /dev/null +++ b/parser/parser/xml/handlers/arg_handler.py @@ -0,0 +1,41 @@ +# Copyright (c) 2025 Kodo Robotics +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from xml.etree import ElementTree as ET + +from parser.context import ParseContext +from parser.parser.registry import register_handler +from parser.parser.xml.utils import normalize_keys, resolve_parameters + +@register_handler("arg") +def handle_arg(element: ET.Element, context: ParseContext) -> dict: + """ + Handle an XML tag. + - Tracks the declared argument in introspection + """ + kwargs = {} + kwargs.update(resolve_parameters(element, context)) + + # Detect if arg is used inside include tag + arg_value = kwargs.get("value", None) + if arg_value: + return {"type": "LaunchArguments", "value": {kwargs["name"]: kwargs["value"]}} + + # Track for introspection + arg_name = kwargs.get("name") + if arg_name: + context.introspection.track_launch_arg_declaration(arg_name, kwargs) + + norm_kwargs = normalize_keys(kwargs, {"default": "default_value"}) + return {"type": "DeclareLaunchArgument", **norm_kwargs} diff --git a/parser/parser/xml/handlers/condition_handler.py b/parser/parser/xml/handlers/condition_handler.py new file mode 100644 index 0000000..97671d2 --- /dev/null +++ b/parser/parser/xml/handlers/condition_handler.py @@ -0,0 +1,33 @@ +# Copyright (c) 2025 Kodo Robotics +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from parser.parser.postprocessing import simplify_launch_configurations + +def handle_condition(kwargs: dict): + if "if" in kwargs: + _handle_if_condition(kwargs) + elif "unless" in kwargs: + _handle_unless_condition(kwargs) + + return + +def _handle_if_condition(kwargs: dict): + expression = simplify_launch_configurations(kwargs["if"]) + kwargs.pop("if", None) + kwargs["condition"] = f"${{IfCondition:{expression}}}" + +def _handle_unless_condition(kwargs: dict): + expression = simplify_launch_configurations(kwargs["unless"]) + kwargs.pop("unless", None) + kwargs["condition"] = f"${{UnlessCondition:{expression}}}" \ No newline at end of file diff --git a/parser/parser/xml/handlers/group_handler.py b/parser/parser/xml/handlers/group_handler.py new file mode 100644 index 0000000..99f2e81 --- /dev/null +++ b/parser/parser/xml/handlers/group_handler.py @@ -0,0 +1,65 @@ +# Copyright (c) 2025 Kodo Robotics +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from xml.etree import ElementTree as ET + +from parser.context import ParseContext +from parser.parser.registry import register_handler +from parser.parser.utils import flatten_once, group_entities_by_type +from parser.parser.xml.handlers.condition_handler import handle_condition +from parser.parser.xml.utils import resolve_parameters, resolve_children + +@register_handler("group") +def handle_group(element: ET.Element, context: ParseContext) -> dict: + """ + Handle an XML tag. + Processes attributes and child tags (param, remap and env). + """ + kwargs = {} + kwargs.update(resolve_parameters(element, context)) + handle_condition(kwargs) + + # Resolve 'actions' under group + raw_expr = resolve_children(element, context) + resolved_flat = flatten_once(raw_expr) + + namespace = None + parameters = [] + actions = [] + for item in resolved_flat: + if isinstance(item, dict) and item.get("type") == "PushROSNamespace": + namespace = item.get("namespace") + context.push_namespace(namespace) + elif isinstance(item, dict) and item.get("type") == "SetParameter": + parameters.append({item.get("name"): item.get("value")}) + else: + actions.append(item) + + grouped = group_entities_by_type(actions) + + if namespace: + context.pop_namespace() + + result = { + "type": "GroupAction", + **kwargs, + "actions": grouped, + } + + if namespace: + result["namespace"] = namespace + if parameters: + result["parameters"] = parameters + + return result diff --git a/parser/parser/xml/handlers/include_handler.py b/parser/parser/xml/handlers/include_handler.py new file mode 100644 index 0000000..51490cb --- /dev/null +++ b/parser/parser/xml/handlers/include_handler.py @@ -0,0 +1,52 @@ +# Copyright (c) 2025 Kodo Robotics +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from xml.etree import ElementTree as ET + +from parser.context import ParseContext +from parser.parser.registry import register_handler +from parser.parser.xml.handlers.condition_handler import handle_condition +from parser.parser.xml.utils import resolve_parameters, resolve_children + +@register_handler("include") +def handle_include(element: ET.Element, context: ParseContext) -> dict: + """ + Handle an XML tag. + Processes attributes and child tags (arg). + """ + kwargs = {} + kwargs.update(resolve_parameters(element, context)) + handle_condition(kwargs) + + launch_source = kwargs.get("file") + condition = kwargs.get("condition", None) + + # Extract launch arguments + launch_args = {} + children = resolve_children(element, context) + for child in children: + if child["type"] == "LaunchArguments": + launch_args.update(child["value"]) + + result = { + "type": "IncludeLaunchDescription", + "launch_description_source": launch_source, + "launch_arguments": launch_args, + "included": {}, + } + + if condition: + result["condition"] = condition + + return result diff --git a/parser/parser/xml/handlers/node_handler.py b/parser/parser/xml/handlers/node_handler.py index 3475f55..8ac318c 100644 --- a/parser/parser/xml/handlers/node_handler.py +++ b/parser/parser/xml/handlers/node_handler.py @@ -16,7 +16,8 @@ from parser.context import ParseContext from parser.parser.registry import register_handler -from parser.parser.xml.utils import normalize_keys, process_parameters, resolve_children +from parser.parser.xml.handlers.condition_handler import handle_condition +from parser.parser.xml.utils import normalize_keys, resolve_parameters, resolve_children @register_handler("node") @@ -26,13 +27,31 @@ def handle_node(element: ET.Element, context: ParseContext) -> dict: Processes attributes and child tags (param, remap and env). """ kwargs = {} - kwargs.update(process_parameters(element, context)) - kwargs.update(resolve_children(element, context)) + kwargs.update(resolve_parameters(element, context)) + handle_condition(kwargs) + # Resolve remapping and parameters + remappings = [] + parameters = [] + children = resolve_children(element, context) + for child in children: + if child["type"] == "Remapping": + remappings.append(child["value"]) + elif child["type"] == "SetParameter": + parameters.append({child["name"]: child["value"]}) + + if len(remappings) > 0: + kwargs["remappings"] = remappings + if len(parameters) > 0: + kwargs["parameters"] = parameters + + # Resolve namespace if "namespace" not in kwargs: ns = context.current_namespace() if ns: kwargs["namespace"] = ns - norm_kwargs = normalize_keys(kwargs) + norm_kwargs = normalize_keys( + kwargs, {"pkg": "package", "exec": "executable"} + ) return {"type": "Node", **norm_kwargs} diff --git a/parser/parser/xml/handlers/param_handler.py b/parser/parser/xml/handlers/param_handler.py index 6a42c10..35b0774 100644 --- a/parser/parser/xml/handlers/param_handler.py +++ b/parser/parser/xml/handlers/param_handler.py @@ -16,7 +16,7 @@ from parser.context import ParseContext from parser.parser.registry import register_handler -from parser.parser.xml.utils import normalize_keys, process_parameters, resolve_children +from parser.parser.xml.utils import resolve_parameters @register_handler("param") @@ -26,5 +26,7 @@ def handle_param(element: ET.Element, context: ParseContext) -> dict: Converts XML attributes (name, value) into a key-value dictionary entry. """ kwargs = {} - kwargs.update(process_parameters(element, context)) - return {"parameters": {kwargs["name"]: kwargs["value"]}} + kwargs.update(resolve_parameters(element, context)) + + name, value = kwargs["name"], kwargs["value"] + return {"type": "SetParameter", "name": name, "value": value} diff --git a/parser/parser/xml/attribute_mapping.py b/parser/parser/xml/handlers/push_ros_namespace_handler.py similarity index 50% rename from parser/parser/xml/attribute_mapping.py rename to parser/parser/xml/handlers/push_ros_namespace_handler.py index e4e1abf..16700e9 100644 --- a/parser/parser/xml/attribute_mapping.py +++ b/parser/parser/xml/handlers/push_ros_namespace_handler.py @@ -12,7 +12,21 @@ # See the License for the specific language governing permissions and # limitations under the License. -XML_KEY_MAP = { - "pkg": "package", - "exec": "executable" -} \ No newline at end of file +from xml.etree import ElementTree as ET + +from parser.context import ParseContext +from parser.parser.registry import register_handler +from parser.parser.xml.utils import resolve_parameters + + +@register_handler("push-ros-namespace") +def handle_node(element: ET.Element, context: ParseContext) -> dict: + """ + Handle an XML tag. + Processes attributes and child tags (param, remap and env). + """ + kwargs = {} + kwargs.update(resolve_parameters(element, context)) + + ns = kwargs.get("namespace") + return {"type": "PushROSNamespace", "namespace": ns} diff --git a/parser/parser/xml/handlers/remap_handler.py b/parser/parser/xml/handlers/remap_handler.py index 528e761..4dfab96 100644 --- a/parser/parser/xml/handlers/remap_handler.py +++ b/parser/parser/xml/handlers/remap_handler.py @@ -16,7 +16,7 @@ from parser.context import ParseContext from parser.parser.registry import register_handler -from parser.parser.xml.utils import process_parameters +from parser.parser.xml.utils import resolve_parameters @register_handler("remap") @@ -26,6 +26,6 @@ def handle_remap(element: ET.Element, context: ParseContext) -> dict: Converts into ["a", "b"] """ kwargs = {} - kwargs.update(process_parameters(element, context)) + kwargs.update(resolve_parameters(element, context)) - return {"remappings": [kwargs["from"], kwargs["to"]]} + return {"type": "Remapping", "value": [kwargs["from"], kwargs["to"]]} diff --git a/parser/parser/xml/handlers/var_handler.py b/parser/parser/xml/handlers/var_handler.py index 2ae29fc..a487bc5 100644 --- a/parser/parser/xml/handlers/var_handler.py +++ b/parser/parser/xml/handlers/var_handler.py @@ -16,7 +16,6 @@ from parser.context import ParseContext from parser.parser.registry import register_handler -from parser.parser.xml.utils import process_parameters @register_handler("var") def handle_var(name: str, context: ParseContext) -> dict: diff --git a/parser/parser/xml/utils.py b/parser/parser/xml/utils.py index f673b0d..9705038 100644 --- a/parser/parser/xml/utils.py +++ b/parser/parser/xml/utils.py @@ -15,22 +15,21 @@ from xml.etree import ElementTree as ET from parser.context import ParseContext -from parser.parser.xml.attribute_mapping import XML_KEY_MAP def strip_ns(tag: str) -> str: return tag.split('}')[-1] -def normalize_keys(attrs: dict) -> dict: +def normalize_keys(attrs: dict, key_map: dict) -> dict: """ Normalize XML attribute keys to unified schema keys. """ normalized = {} for key, value in attrs.items(): - norm_key = XML_KEY_MAP.get(key, key) + norm_key = key_map.get(key, key) normalized[norm_key] = value return normalized -def process_parameters(element: ET.Element, context: ParseContext): +def resolve_parameters(element: ET.Element, context: ParseContext): """ Process the parameter values from given XML tag. """ @@ -43,22 +42,16 @@ def process_parameters(element: ET.Element, context: ParseContext): def resolve_children(element: ET.Element, context: ParseContext): """ Recursively resolve children of a launch XML element. - Returns a dict of accumulated keyword arguments (parameters, remaps, envs). + Returns a list of accumulated resolved children. """ from parser.parser.xml.dispatcher import dispatch_element - results = {} + results = [] for child in element: parsed = dispatch_element(child, context) if not parsed: continue - - # Merge child results in results dict - for key, value in parsed.items(): - if key in results: - results[key] = [results[key], value] - else: - results[key] = value + results.append(parsed) return results diff --git a/parser/tests/test_cases/composable_node_tests.yaml b/parser/tests/test_cases/python/composable_node_tests.yaml similarity index 100% rename from parser/tests/test_cases/composable_node_tests.yaml rename to parser/tests/test_cases/python/composable_node_tests.yaml diff --git a/parser/tests/test_cases/condition_tests.yaml b/parser/tests/test_cases/python/condition_tests.yaml similarity index 100% rename from parser/tests/test_cases/condition_tests.yaml rename to parser/tests/test_cases/python/condition_tests.yaml diff --git a/parser/tests/test_cases/custom_handlers_tests.yaml b/parser/tests/test_cases/python/custom_handlers_tests.yaml similarity index 100% rename from parser/tests/test_cases/custom_handlers_tests.yaml rename to parser/tests/test_cases/python/custom_handlers_tests.yaml diff --git a/parser/tests/test_cases/event_handler_tests.yaml b/parser/tests/test_cases/python/event_handler_tests.yaml similarity index 100% rename from parser/tests/test_cases/event_handler_tests.yaml rename to parser/tests/test_cases/python/event_handler_tests.yaml diff --git a/parser/tests/test_cases/group_action_tests.yaml b/parser/tests/test_cases/python/group_action_tests.yaml similarity index 100% rename from parser/tests/test_cases/group_action_tests.yaml rename to parser/tests/test_cases/python/group_action_tests.yaml diff --git a/parser/tests/test_cases/include_launch_tests.yaml b/parser/tests/test_cases/python/include_launch_tests.yaml similarity index 100% rename from parser/tests/test_cases/include_launch_tests.yaml rename to parser/tests/test_cases/python/include_launch_tests.yaml diff --git a/parser/tests/test_cases/launch_config_tests.yaml b/parser/tests/test_cases/python/launch_config_tests.yaml similarity index 100% rename from parser/tests/test_cases/launch_config_tests.yaml rename to parser/tests/test_cases/python/launch_config_tests.yaml diff --git a/parser/tests/test_cases/node_tests.yaml b/parser/tests/test_cases/python/node_tests.yaml similarity index 100% rename from parser/tests/test_cases/node_tests.yaml rename to parser/tests/test_cases/python/node_tests.yaml diff --git a/parser/tests/test_cases/opaque_function_tests.yaml b/parser/tests/test_cases/python/opaque_function_tests.yaml similarity index 100% rename from parser/tests/test_cases/opaque_function_tests.yaml rename to parser/tests/test_cases/python/opaque_function_tests.yaml diff --git a/parser/tests/test_cases/recursive_include_tests.yaml b/parser/tests/test_cases/python/recursive_include_tests.yaml similarity index 100% rename from parser/tests/test_cases/recursive_include_tests.yaml rename to parser/tests/test_cases/python/recursive_include_tests.yaml diff --git a/parser/tests/test_cases/xml/launch_config_tests.yaml b/parser/tests/test_cases/xml/launch_config_tests.yaml new file mode 100644 index 0000000..136f9b0 --- /dev/null +++ b/parser/tests/test_cases/xml/launch_config_tests.yaml @@ -0,0 +1,152 @@ +tests: + - name: declared_argument_basic_xml + description: Declare an argument only + input: | + + + + + expected: + arguments: + - name: robot_name + default_value: turtle + description: The robot's name + launch_argument_usages: [] + undeclared_launch_configurations: [] + + - name: node_parameter_usage_xml + description: Use LaunchConfiguration in Node parameter + input: | + + + + + + + + expected: + arguments: + - name: use_sim_time + default_value: 'true' + nodes: + - package: demo + executable: run + parameters: + - use_sim_time: "${LaunchConfiguration:use_sim_time}" + launch_argument_usages: + - argument: use_sim_time + path: nodes[0].parameters[0].use_sim_time + undeclared_launch_configurations: [] + + - name: include_with_launch_arguments_xml + description: Use LaunchConfiguration in Include arguments + input: | + + + + + + + + expected: + arguments: + - name: map_file + default_value: maps/map.yaml + includes: + - launch_description_source: sub_launch.py + launch_arguments: + map: "${LaunchConfiguration:map_file}" + included: {} + launch_argument_usages: + - argument: map_file + path: includes[0].launch_arguments.map + undeclared_launch_configurations: [] + + - name: push_ros_namespace_from_config_xml + description: LaunchConfiguration used in PushROSNamespace inside Group + input: | + + + + + + + + + expected: + arguments: + - name: robot_namespace + default_value: robot1 + groups: + - namespace: "${LaunchConfiguration:robot_namespace}" + actions: + nodes: + - package: demo + executable: x + launch_argument_usages: + - argument: robot_namespace + path: groups[0].namespace + undeclared_launch_configurations: [] + + - name: set_parameter_with_config_xml + description: Use LaunchConfiguration in SetParameter value + input: | + + + + + + expected: + arguments: + - name: mode + default_value: auto + parameters: + - name: mode + value: "${LaunchConfiguration:mode}" + launch_argument_usages: + - argument: mode + path: parameters[0].value + undeclared_launch_configurations: [] + + - name: condition_with_config_xml + description: Use LaunchConfiguration inside IfCondition + input: | + + + + + + expected: + arguments: + - name: enable + default_value: 'true' + nodes: + - package: demo + executable: cond_node + condition: "${IfCondition:${LaunchConfiguration:enable}}" + launch_argument_usages: + - argument: enable + path: nodes[0].condition + undeclared_launch_configurations: [] + + - name: undeclared_config_error_xml + description: LaunchConfiguration used without declaration + input: | + + + + + + + expected: + arguments: [] + nodes: + - package: demo + executable: missing + parameters: + - param: "${LaunchConfiguration:not_declared}" + launch_argument_usages: + - argument: not_declared + path: nodes[0].parameters[0].param + undeclared_launch_configurations: + - not_declared \ No newline at end of file diff --git a/parser/tests/test_cases/node_xml_tests.yaml b/parser/tests/test_cases/xml/node_tests.yaml similarity index 100% rename from parser/tests/test_cases/node_xml_tests.yaml rename to parser/tests/test_cases/xml/node_tests.yaml diff --git a/parser/tests/test_from_yaml_python.py b/parser/tests/test_from_yaml_python.py index 6a3b743..dde0677 100644 --- a/parser/tests/test_from_yaml_python.py +++ b/parser/tests/test_from_yaml_python.py @@ -21,12 +21,12 @@ ) -@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/node_tests.yaml")) +@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/python/node_tests.yaml")) def test_node_parsing(code, expected): result = parse_launch_string(code, suffix=".py") assert result.get("nodes") == expected.get("nodes") -@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/launch_config_tests.yaml")) +@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/python/launch_config_tests.yaml")) def test_launch_configuration_parsing(code, expected): result = parse_launch_string(code, suffix=".py") for key in [ @@ -41,14 +41,14 @@ def test_launch_configuration_parsing(code, expected): assert result.get(key, []) == expected.get(key, []) -@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/group_action_tests.yaml")) +@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/python/group_action_tests.yaml")) def test_group_action_parsing(code, expected): result = parse_launch_string(code, suffix=".py") for key in ["nodes", "arguments", "includes", "groups", "launch_argument_usages"]: assert result.get(key, []) == expected.get(key, []) -@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/include_launch_tests.yaml")) +@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/python/include_launch_tests.yaml")) def test_include_launch_parsing(code, expected): result = parse_launch_string(code, suffix=".py") for key in [ @@ -60,7 +60,7 @@ def test_include_launch_parsing(code, expected): assert result.get(key, []) == expected.get(key, []) -@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/opaque_function_tests.yaml")) +@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/python/opaque_function_tests.yaml")) def test_opaque_functions_parsing(code, expected): result = parse_launch_string(code, suffix=".py") for key in [ @@ -72,7 +72,7 @@ def test_opaque_functions_parsing(code, expected): assert result.get(key, []) == expected.get(key, []) -@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/condition_tests.yaml")) +@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/python/condition_tests.yaml")) def test_conditions_parsing(code, expected): result = parse_launch_string(code, suffix=".py") for key in [ @@ -85,7 +85,7 @@ def test_conditions_parsing(code, expected): assert result.get(key, []) == expected.get(key, []) -@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/composable_node_tests.yaml")) +@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/python/composable_node_tests.yaml")) def test_composable_nodes_parsing(code, expected): result = parse_launch_string(code, suffix=".py") for key in [ @@ -98,7 +98,7 @@ def test_composable_nodes_parsing(code, expected): assert result.get(key, []) == expected.get(key, []) -@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/event_handler_tests.yaml")) +@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/python/event_handler_tests.yaml")) def test_event_handlers_parsing(code, expected): result = parse_launch_string(code, suffix=".py") for key in ["nodes", "event_handlers"]: @@ -107,7 +107,7 @@ def test_event_handlers_parsing(code, expected): @pytest.mark.parametrize( "code,expected", - load_custom_handler_tests("test_cases/custom_handlers_tests.yaml", "test_handlers"), + load_custom_handler_tests("test_cases/python/custom_handlers_tests.yaml", "test_handlers"), ) def test_custom_handlers_parsing(code, expected): result = parse_launch_string(code, suffix=".py") diff --git a/parser/tests/test_from_yaml_xml.py b/parser/tests/test_from_yaml_xml.py index d246401..5b97a0f 100644 --- a/parser/tests/test_from_yaml_xml.py +++ b/parser/tests/test_from_yaml_xml.py @@ -20,9 +20,25 @@ parse_launch_string, ) -@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/node_xml_tests.yaml")) +@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/xml/node_tests.yaml")) def test_node_parsing(code, expected): result = parse_launch_string(code, suffix=".xml") print(result) print(expected) assert result.get("nodes") == expected.get("nodes") + +@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/xml/launch_config_tests.yaml")) +def test_launch_configuration_parsing(code, expected): + result = parse_launch_string(code, suffix=".xml") + print(result) + print(expected) + for key in [ + "nodes", + "arguments", + "includes", + "groups", + "parameters", + "launch_argument_usages", + "undeclared_launch_configurations", + ]: + assert result.get(key, []) == expected.get(key, []) \ No newline at end of file From 77c8c050ef6a281c2cd9cff21d7ff1767812c91d Mon Sep 17 00:00:00 2001 From: Sakshay Mahna Date: Sat, 23 Aug 2025 13:48:51 +0530 Subject: [PATCH 6/9] Add include, group and condition tests --- parser/parser/xml/handlers/eval_handler.py | 23 ++++++ .../xml/handlers/find_pkg_share_handler.py | 23 ++++++ parser/parser/xml/handlers/var_handler.py | 2 - parser/parser/xml/utils.py | 22 ++++++ .../tests/test_cases/xml/condition_tests.yaml | 54 +++++++++++++ .../test_cases/xml/group_action_tests.yaml | 77 +++++++++++++++++++ .../test_cases/xml/include_launch_tests.yaml | 50 ++++++++++++ parser/tests/test_from_yaml_xml.py | 33 ++++++++ 8 files changed, 282 insertions(+), 2 deletions(-) create mode 100644 parser/parser/xml/handlers/eval_handler.py create mode 100644 parser/parser/xml/handlers/find_pkg_share_handler.py create mode 100644 parser/tests/test_cases/xml/condition_tests.yaml create mode 100644 parser/tests/test_cases/xml/group_action_tests.yaml create mode 100644 parser/tests/test_cases/xml/include_launch_tests.yaml diff --git a/parser/parser/xml/handlers/eval_handler.py b/parser/parser/xml/handlers/eval_handler.py new file mode 100644 index 0000000..905cdb1 --- /dev/null +++ b/parser/parser/xml/handlers/eval_handler.py @@ -0,0 +1,23 @@ +# Copyright (c) 2025 Kodo Robotics +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from parser.context import ParseContext +from parser.parser.registry import register_handler + +@register_handler("eval") +def handle_find_package_share(name: str, context: ParseContext) -> dict: + """ + Handle $(eval) substitution + """ + return f"${{PythonExpression:{str(name)}}}" diff --git a/parser/parser/xml/handlers/find_pkg_share_handler.py b/parser/parser/xml/handlers/find_pkg_share_handler.py new file mode 100644 index 0000000..933ec4f --- /dev/null +++ b/parser/parser/xml/handlers/find_pkg_share_handler.py @@ -0,0 +1,23 @@ +# Copyright (c) 2025 Kodo Robotics +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from parser.context import ParseContext +from parser.parser.registry import register_handler + +@register_handler("find-pkg-share") +def handle_find_package_share(name: str, context: ParseContext) -> dict: + """ + Handle $(find-pkg-share) substitution + """ + return {"type": "FindPackageShare", "package": str(name)} diff --git a/parser/parser/xml/handlers/var_handler.py b/parser/parser/xml/handlers/var_handler.py index a487bc5..d899625 100644 --- a/parser/parser/xml/handlers/var_handler.py +++ b/parser/parser/xml/handlers/var_handler.py @@ -12,8 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -from xml.etree import ElementTree as ET - from parser.context import ParseContext from parser.parser.registry import register_handler diff --git a/parser/parser/xml/utils.py b/parser/parser/xml/utils.py index 9705038..46590d4 100644 --- a/parser/parser/xml/utils.py +++ b/parser/parser/xml/utils.py @@ -12,9 +12,11 @@ # See the License for the specific language governing permissions and # limitations under the License. +import re from xml.etree import ElementTree as ET from parser.context import ParseContext +from parser.parser.postprocessing import simplify_launch_configurations def strip_ns(tag: str) -> str: return tag.split('}')[-1] @@ -62,10 +64,30 @@ def _process_value(value: str, context: ParseContext): Otherwise, return as plain string. """ from parser.parser.xml.dispatcher import dispatch_substitution + SUBST_PATTERN = re.compile(r"\$\(([^)]+)\)") if value is None: return None value = value.strip() + if not value: + return value + + out = [] + last = 0 + for match in SUBST_PATTERN.finditer(value): + start, end = match.span() + if start > last: + out.append(value[last:start]) + expr = match.group(1).strip() + subst = dispatch_substitution(expr, context) + out.append(simplify_launch_configurations(subst)) + last = end + + if last < len(value): + out.append(value[last:]) + + return "".join(out) + if value.startswith("$(") and value.endswith(")"): expr = value[2:-1] return dispatch_substitution(expr, context) diff --git a/parser/tests/test_cases/xml/condition_tests.yaml b/parser/tests/test_cases/xml/condition_tests.yaml new file mode 100644 index 0000000..0d65da5 --- /dev/null +++ b/parser/tests/test_cases/xml/condition_tests.yaml @@ -0,0 +1,54 @@ +tests: + - name: node_with_if_condition_xml + input: | + + + + + + expected: + arguments: + - name: enable_talker + nodes: + - package: demo_pkg + executable: talker + condition: ${IfCondition:${LaunchConfiguration:enable_talker}} + launch_argument_usages: + - argument: enable_talker + path: nodes[0].condition + undeclared_launch_configurations: [] + + - name: node_with_unless_condition_constant_xml + input: | + + + + + expected: + nodes: + - package: demo_pkg + executable: listener + condition: ${UnlessCondition:${PythonExpression:False}} + + - name: group_with_condition_and_node_xml + input: | + + + + + + + + expected: + arguments: + - name: launch_group + groups: + - condition: ${IfCondition:${LaunchConfiguration:launch_group}} + actions: + nodes: + - package: demo_pkg + executable: child_node + launch_argument_usages: + - argument: launch_group + path: groups[0].condition + undeclared_launch_configurations: [] \ No newline at end of file diff --git a/parser/tests/test_cases/xml/group_action_tests.yaml b/parser/tests/test_cases/xml/group_action_tests.yaml new file mode 100644 index 0000000..3d98fcd --- /dev/null +++ b/parser/tests/test_cases/xml/group_action_tests.yaml @@ -0,0 +1,77 @@ +tests: + - name: basic_group_with_node_xml + description: A group with a single node child + input: | + + + + + + + expected: + groups: + - actions: + nodes: + - package: demo + executable: basic + + - name: group_with_namespace_xml + description: Group with PushROSNamespace + input: | + + + + + + + + expected: + groups: + - namespace: robot1 + actions: + nodes: + - package: demo + executable: ns_node + + - name: group_with_multiple_nodes_xml + description: Group with mutiple child nodes + input: | + + + + + + + + expected: + groups: + - actions: + nodes: + - package: demo + executable: a + - package: demo + executable: b + + - name: nested_groups_xml + description: Nested groups with namespace and node + input: | + + + + + + + + + + + expected: + groups: + - namespace: outer_ns + actions: + groups: + - namespace: inner_ns + actions: + nodes: + - package: demo + executable: deep \ No newline at end of file diff --git a/parser/tests/test_cases/xml/include_launch_tests.yaml b/parser/tests/test_cases/xml/include_launch_tests.yaml new file mode 100644 index 0000000..bc9f211 --- /dev/null +++ b/parser/tests/test_cases/xml/include_launch_tests.yaml @@ -0,0 +1,50 @@ +tests: + - name: include_literal_file_xml + description: with direct string file path + input: | + + + + + expected: + includes: + - launch_description_source: sub_launch.py + launch_arguments: {} + included: {} + + - name: include_with_launch_arguments_xml + description: with forwarded arguments using LaunchConfiguration + input: | + + + + + + + + expected: + arguments: + - name: map_file + default_value: map.yaml + includes: + - launch_description_source: mapper_launch.py + launch_arguments: + map: "${LaunchConfiguration:map_file}" + included: {} + launch_argument_usages: + - argument: map_file + path: includes[0].launch_arguments.map + undeclared_launch_configurations: [] + + - name: include_with_find_pkg_share_xml + description: Uses find-pkg-share to locate a launch file + input: | + + + + + expected: + includes: + - launch_description_source: "${FindPackageShare:demo_pkg}/launch/sub_launch.py" + launch_arguments: {} + included: {} \ No newline at end of file diff --git a/parser/tests/test_from_yaml_xml.py b/parser/tests/test_from_yaml_xml.py index 5b97a0f..36dad3e 100644 --- a/parser/tests/test_from_yaml_xml.py +++ b/parser/tests/test_from_yaml_xml.py @@ -40,5 +40,38 @@ def test_launch_configuration_parsing(code, expected): "parameters", "launch_argument_usages", "undeclared_launch_configurations", + ]: + assert result.get(key, []) == expected.get(key, []) + +@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/xml/group_action_tests.yaml")) +def test_group_action_parsing(code, expected): + result = parse_launch_string(code, suffix=".xml") + for key in ["nodes", "arguments", "includes", "groups", "launch_argument_usages"]: + assert result.get(key, []) == expected.get(key, []) + +@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/xml/include_launch_tests.yaml")) +def test_include_launch_parsing(code, expected): + result = parse_launch_string(code, suffix=".xml") + print(result) + print(expected) + for key in [ + "arguments", + "includes", + "launch_argument_usages", + "undeclared_launch_configurations", + ]: + assert result.get(key, []) == expected.get(key, []) + +@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/xml/condition_tests.yaml")) +def test_conditions_parsing(code, expected): + result = parse_launch_string(code, suffix=".xml") + print(expected) + print(result) + for key in [ + "arguments", + "nodes", + "groups", + "launch_argument_usages", + "undeclared_launch_configurations", ]: assert result.get(key, []) == expected.get(key, []) \ No newline at end of file From aa2bfd48cc65840bcd70363e34efff0ebd4573fd Mon Sep 17 00:00:00 2001 From: Sakshay Mahna Date: Sat, 23 Aug 2025 16:17:25 +0530 Subject: [PATCH 7/9] Add Autoware Real Test File --- parser/parser/xml/dispatcher.py | 2 +- parser/parser/xml/handlers/env_handler.py | 43 ++ parser/parser/xml/handlers/eval_handler.py | 2 +- .../xml/handlers/find_pkg_share_handler.py | 2 +- parser/parser/xml/handlers/node_handler.py | 9 +- parser/parser/xml/handlers/var_handler.py | 2 +- parser/tests/output_helper_script.py | 2 +- .../expected_outputs/autoware.launch.xml.json | 506 ++++++++++++++++++ .../launch_files/autoware.launch.xml | 158 ++++++ .../tests/test_cases/python/node_tests.yaml | 21 + .../test_cases/xml/launch_config_tests.yaml | 8 +- parser/tests/test_cases/xml/node_tests.yaml | 24 +- parser/tests/test_from_yaml_xml.py | 10 +- parser/tests/test_real_launch_files.py | 3 +- webview/components/renderGroup.js | 3 +- webview/components/renderNode.js | 25 +- .../autoware-launch-xml-json-final-linux.png | Bin 0 -> 180907 bytes .../autoware-launch-xml-json-linux.png | Bin 0 -> 192678 bytes 18 files changed, 783 insertions(+), 37 deletions(-) create mode 100644 parser/parser/xml/handlers/env_handler.py create mode 100644 parser/tests/real_cases/expected_outputs/autoware.launch.xml.json create mode 100644 parser/tests/real_cases/launch_files/autoware.launch.xml create mode 100644 webview/tests/__screenshots__/interaction.spec.js-snapshots/autoware-launch-xml-json-final-linux.png create mode 100644 webview/tests/__screenshots__/visual.spec.js-snapshots/autoware-launch-xml-json-linux.png diff --git a/parser/parser/xml/dispatcher.py b/parser/parser/xml/dispatcher.py index 4b20281..77e0761 100644 --- a/parser/parser/xml/dispatcher.py +++ b/parser/parser/xml/dispatcher.py @@ -46,7 +46,7 @@ def dispatch_substitution(expr: str, context: ParseContext): key = parts[0] arg = parts[1] if len(parts) > 1 else "" - handler = get_handler(key) + handler = get_handler(f"subst:{key}") if not handler: return f"${{{expr}}}" diff --git a/parser/parser/xml/handlers/env_handler.py b/parser/parser/xml/handlers/env_handler.py new file mode 100644 index 0000000..3b017f2 --- /dev/null +++ b/parser/parser/xml/handlers/env_handler.py @@ -0,0 +1,43 @@ +# Copyright (c) 2025 Kodo Robotics +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from xml.etree import ElementTree as ET + +from parser.context import ParseContext +from parser.parser.registry import register_handler +from parser.parser.xml.utils import resolve_parameters + +@register_handler("env") +def handle_environment_variable(element: ET.Element, context: ParseContext): + """ + Handle tag. + Converts XML attributes (name, value) into a key-value dictionary entry. + """ + kwargs = {} + kwargs.update(resolve_parameters(element, context)) + + name, value = kwargs["name"], kwargs["value"] + + # Track environment variable usage + context.introspection.track_environment_variable(kwargs["name"], kwargs) + + return {"type": "EnvironmentVariable", "name": name, "value": value} + + +@register_handler("subst:env") +def handle_environment_variable_substitution(name: str, context: ParseContext) -> dict: + """ + Handle $(eval) substitution + """ + return {"type": "EnvironmentVariable", "name": name} diff --git a/parser/parser/xml/handlers/eval_handler.py b/parser/parser/xml/handlers/eval_handler.py index 905cdb1..f1d424e 100644 --- a/parser/parser/xml/handlers/eval_handler.py +++ b/parser/parser/xml/handlers/eval_handler.py @@ -15,7 +15,7 @@ from parser.context import ParseContext from parser.parser.registry import register_handler -@register_handler("eval") +@register_handler("subst:eval") def handle_find_package_share(name: str, context: ParseContext) -> dict: """ Handle $(eval) substitution diff --git a/parser/parser/xml/handlers/find_pkg_share_handler.py b/parser/parser/xml/handlers/find_pkg_share_handler.py index 933ec4f..e79323c 100644 --- a/parser/parser/xml/handlers/find_pkg_share_handler.py +++ b/parser/parser/xml/handlers/find_pkg_share_handler.py @@ -15,7 +15,7 @@ from parser.context import ParseContext from parser.parser.registry import register_handler -@register_handler("find-pkg-share") +@register_handler("subst:find-pkg-share") def handle_find_package_share(name: str, context: ParseContext) -> dict: """ Handle $(find-pkg-share) substitution diff --git a/parser/parser/xml/handlers/node_handler.py b/parser/parser/xml/handlers/node_handler.py index 8ac318c..1f8dfe4 100644 --- a/parser/parser/xml/handlers/node_handler.py +++ b/parser/parser/xml/handlers/node_handler.py @@ -31,19 +31,22 @@ def handle_node(element: ET.Element, context: ParseContext) -> dict: handle_condition(kwargs) # Resolve remapping and parameters - remappings = [] - parameters = [] + remappings = []; parameters = {}; environment_vars = {} children = resolve_children(element, context) for child in children: if child["type"] == "Remapping": remappings.append(child["value"]) elif child["type"] == "SetParameter": - parameters.append({child["name"]: child["value"]}) + parameters.update({child["name"]: child["value"]}) + elif child["type"] == "EnvironmentVariable": + environment_vars.update({child["name"]: child["value"]}) if len(remappings) > 0: kwargs["remappings"] = remappings if len(parameters) > 0: kwargs["parameters"] = parameters + if len(environment_vars) > 0: + kwargs["env"] = environment_vars # Resolve namespace if "namespace" not in kwargs: diff --git a/parser/parser/xml/handlers/var_handler.py b/parser/parser/xml/handlers/var_handler.py index d899625..3e15c2f 100644 --- a/parser/parser/xml/handlers/var_handler.py +++ b/parser/parser/xml/handlers/var_handler.py @@ -15,7 +15,7 @@ from parser.context import ParseContext from parser.parser.registry import register_handler -@register_handler("var") +@register_handler("subst:var") def handle_var(name: str, context: ParseContext) -> dict: """ Handle $(var) substitution diff --git a/parser/tests/output_helper_script.py b/parser/tests/output_helper_script.py index f071448..8702169 100644 --- a/parser/tests/output_helper_script.py +++ b/parser/tests/output_helper_script.py @@ -25,7 +25,7 @@ load_user_handlers_from_directory(PLUGIN_DIR) for fname in os.listdir(INPUT_DIR): - if fname.endswith(".py"): + if fname.endswith(".py") or fname.endswith('.xml'): input_path = os.path.join(INPUT_DIR, fname) result = parse_and_format_launch_file(input_path) diff --git a/parser/tests/real_cases/expected_outputs/autoware.launch.xml.json b/parser/tests/real_cases/expected_outputs/autoware.launch.xml.json new file mode 100644 index 0000000..5057276 --- /dev/null +++ b/parser/tests/real_cases/expected_outputs/autoware.launch.xml.json @@ -0,0 +1,506 @@ +{ + "arguments": [ + { + "name": "vehicle_model", + "default_value": "sample_vehicle", + "description": "vehicle model name" + }, + { + "name": "sensor_model", + "default_value": "sample_sensor_kit", + "description": "sensor model name" + }, + { + "name": "pointcloud_container_name", + "default_value": "pointcloud_container" + }, + { + "name": "data_path", + "default_value": "${EnvironmentVariable:HOME}/autoware_data", + "description": "packages data and artifacts directory path" + }, + { + "name": "planning_module_preset", + "default_value": "default", + "description": "planning module preset" + }, + { + "name": "control_module_preset", + "default_value": "default", + "description": "control module preset" + }, + { + "name": "launch_vehicle", + "default_value": "true", + "description": "launch vehicle" + }, + { + "name": "launch_system", + "default_value": "true", + "description": "launch system" + }, + { + "name": "launch_map", + "default_value": "true", + "description": "launch map" + }, + { + "name": "launch_sensing", + "default_value": "true", + "description": "launch sensing" + }, + { + "name": "launch_sensing_driver", + "default_value": "true", + "description": "launch sensing driver" + }, + { + "name": "launch_localization", + "default_value": "true", + "description": "launch localization" + }, + { + "name": "launch_perception", + "default_value": "true", + "description": "launch perception" + }, + { + "name": "launch_planning", + "default_value": "true", + "description": "launch planning" + }, + { + "name": "launch_control", + "default_value": "true", + "description": "launch control" + }, + { + "name": "launch_api", + "default_value": "true", + "description": "launch api" + }, + { + "name": "use_sim_time", + "default_value": "false", + "description": "use_sim_time" + }, + { + "name": "vehicle_id", + "default_value": "${EnvironmentVariable:VEHICLE_ID default}", + "description": "vehicle specific ID" + }, + { + "name": "launch_vehicle_interface", + "default_value": "true", + "description": "launch vehicle interface" + }, + { + "name": "check_external_emergency_heartbeat", + "default_value": "false" + }, + { + "name": "lanelet2_map_file", + "default_value": "lanelet2_map.osm", + "description": "lanelet2 map file name" + }, + { + "name": "pointcloud_map_file", + "default_value": "pointcloud_map.pcd", + "description": "pointcloud map file name" + }, + { + "name": "system_run_mode", + "default_value": "online", + "description": "run mode in system" + }, + { + "name": "launch_system_monitor", + "default_value": "true", + "description": "launch system monitor" + }, + { + "name": "launch_dummy_diag_publisher", + "default_value": "false", + "description": "launch dummy diag publisher" + }, + { + "name": "diagnostic_graph_aggregator_graph_path", + "default_value": "${FindPackageShare:autoware_launch}/config/system/diagnostics/autoware-main.yaml", + "description": "diagnostic graph config" + }, + { + "name": "rviz", + "default_value": "true", + "description": "launch rviz" + }, + { + "name": "rviz_config_name", + "default_value": "autoware.rviz", + "description": "rviz config name" + }, + { + "name": "rviz_config", + "default_value": "${FindPackageShare:autoware_launch}/rviz/${LaunchConfiguration:rviz_config_name}", + "description": "rviz config path" + }, + { + "name": "rviz_respawn", + "default_value": "true" + }, + { + "name": "perception_mode", + "default_value": "lidar", + "description": "select perception mode. camera_lidar_radar_fusion, camera_lidar_fusion, lidar_radar_fusion, lidar, radar" + }, + { + "name": "traffic_light_recognition/use_high_accuracy_detection", + "default_value": "true", + "description": "enable to use high accuracy detection for traffic light recognition" + }, + { + "name": "enable_all_modules_auto_mode", + "default_value": "false", + "description": "enable all module's auto mode" + }, + { + "name": "is_simulation", + "default_value": "false", + "description": "Autoware's behavior will change depending on whether this is a simulation or not." + } + ], + "groups": [ + { + "scoped": "false", + "actions": { + "includes": [ + { + "launch_description_source": "${FindPackageShare:autoware_global_parameter_loader}/launch/global_params.launch.py", + "launch_arguments": { + "use_sim_time": "${LaunchConfiguration:use_sim_time}", + "vehicle_model": "${LaunchConfiguration:vehicle_model}" + }, + "included": {} + } + ] + } + }, + { + "condition": "${IfCondition:${LaunchConfiguration:launch_vehicle}}", + "actions": { + "includes": [ + { + "launch_description_source": "${FindPackageShare:tier4_vehicle_launch}/launch/vehicle.launch.xml", + "launch_arguments": { + "vehicle_model": "${LaunchConfiguration:vehicle_model}", + "sensor_model": "${LaunchConfiguration:sensor_model}", + "vehicle_id": "${LaunchConfiguration:vehicle_id}", + "launch_vehicle_interface": "${LaunchConfiguration:launch_vehicle_interface}", + "config_dir": "${FindPackageShare:$(var sensor_model}_description)/config", + "raw_vehicle_cmd_converter_param_path": "${FindPackageShare:autoware_launch}/config/vehicle/raw_vehicle_cmd_converter/raw_vehicle_cmd_converter.param.yaml" + }, + "included": {} + } + ] + } + }, + { + "condition": "${IfCondition:${LaunchConfiguration:launch_system}}", + "actions": { + "includes": [ + { + "launch_description_source": "${FindPackageShare:autoware_launch}/launch/components/tier4_system_component.launch.xml", + "launch_arguments": {}, + "included": {} + } + ] + } + }, + { + "condition": "${IfCondition:${LaunchConfiguration:launch_map}}", + "actions": { + "includes": [ + { + "launch_description_source": "${FindPackageShare:autoware_launch}/launch/components/tier4_map_component.launch.xml", + "launch_arguments": {}, + "included": {} + } + ] + } + }, + { + "condition": "${IfCondition:${LaunchConfiguration:launch_sensing}}", + "actions": { + "includes": [ + { + "launch_description_source": "${FindPackageShare:autoware_launch}/launch/components/tier4_sensing_component.launch.xml", + "launch_arguments": { + "pointcloud_container_name": "${LaunchConfiguration:pointcloud_container_name}" + }, + "included": {} + } + ] + } + }, + { + "condition": "${IfCondition:${LaunchConfiguration:launch_localization}}", + "actions": { + "includes": [ + { + "launch_description_source": "${FindPackageShare:autoware_launch}/launch/components/tier4_localization_component.launch.xml", + "launch_arguments": {}, + "included": {} + } + ] + } + }, + { + "condition": "${IfCondition:${LaunchConfiguration:launch_perception}}", + "actions": { + "includes": [ + { + "launch_description_source": "${FindPackageShare:autoware_launch}/launch/components/tier4_perception_component.launch.xml", + "launch_arguments": { + "data_path": "${LaunchConfiguration:data_path}", + "pointcloud_container_name": "${LaunchConfiguration:pointcloud_container_name}" + }, + "included": {} + } + ] + } + }, + { + "condition": "${IfCondition:${LaunchConfiguration:launch_planning}}", + "actions": { + "includes": [ + { + "launch_description_source": "${FindPackageShare:autoware_launch}/launch/components/tier4_planning_component.launch.xml", + "launch_arguments": { + "module_preset": "${LaunchConfiguration:planning_module_preset}", + "enable_all_modules_auto_mode": "${LaunchConfiguration:enable_all_modules_auto_mode}", + "is_simulation": "${LaunchConfiguration:is_simulation}", + "use_sim_time": "${LaunchConfiguration:use_sim_time}", + "vehicle_model": "${LaunchConfiguration:vehicle_model}" + }, + "included": {} + } + ], + "nodes": [ + { + "package": "topic_tools", + "executable": "relay", + "name": "trajectory_relay", + "parameters": { + "input_topic": "/planning/trajectory", + "output_topic": "/planning/scenario_planning/trajectory" + } + } + ] + } + }, + { + "condition": "${IfCondition:${LaunchConfiguration:launch_control}}", + "actions": { + "includes": [ + { + "launch_description_source": "${FindPackageShare:autoware_launch}/launch/components/tier4_control_component.launch.xml", + "launch_arguments": { + "module_preset": "${LaunchConfiguration:control_module_preset}", + "use_sim_time": "${LaunchConfiguration:use_sim_time}", + "vehicle_model": "${LaunchConfiguration:vehicle_model}" + }, + "included": {} + } + ] + } + }, + { + "condition": "${IfCondition:${LaunchConfiguration:launch_api}}", + "actions": { + "includes": [ + { + "launch_description_source": "${FindPackageShare:autoware_launch}/launch/components/tier4_autoware_api_component.launch.xml", + "launch_arguments": { + "use_sim_time": "${LaunchConfiguration:use_sim_time}", + "vehicle_model": "${LaunchConfiguration:vehicle_model}" + }, + "included": {} + } + ] + } + }, + { + "actions": { + "nodes": [ + { + "package": "rviz2", + "executable": "rviz2", + "name": "rviz2", + "output": "screen", + "args": "-d ${LaunchConfiguration:rviz_config} -s ${FindPackageShare:autoware_launch}/rviz/image/autoware.png", + "respawn": "${LaunchConfiguration:rviz_respawn}", + "condition": "${IfCondition:${LaunchConfiguration:rviz}}", + "env": { + "QT_QPA_PLATFORMTHEME": "qt5ct" + } + } + ] + } + } + ], + "includes": [ + { + "launch_description_source": "${FindPackageShare:autoware_launch}/launch/pointcloud_container.launch.py", + "launch_arguments": { + "use_multithread": "true", + "container_name": "${LaunchConfiguration:pointcloud_container_name}" + }, + "included": {} + } + ], + "launch_argument_usages": [ + { + "argument": "rviz_config_name", + "path": "arguments[28].default_value" + }, + { + "argument": "pointcloud_container_name", + "path": "includes[0].launch_arguments.container_name" + }, + { + "argument": "use_sim_time", + "path": "groups[0].actions.includes[0].launch_arguments.use_sim_time" + }, + { + "argument": "vehicle_model", + "path": "groups[0].actions.includes[0].launch_arguments.vehicle_model" + }, + { + "argument": "launch_vehicle", + "path": "groups[1].condition" + }, + { + "argument": "vehicle_model", + "path": "groups[1].actions.includes[0].launch_arguments.vehicle_model" + }, + { + "argument": "sensor_model", + "path": "groups[1].actions.includes[0].launch_arguments.sensor_model" + }, + { + "argument": "vehicle_id", + "path": "groups[1].actions.includes[0].launch_arguments.vehicle_id" + }, + { + "argument": "launch_vehicle_interface", + "path": "groups[1].actions.includes[0].launch_arguments.launch_vehicle_interface" + }, + { + "argument": "launch_system", + "path": "groups[2].condition" + }, + { + "argument": "launch_map", + "path": "groups[3].condition" + }, + { + "argument": "launch_sensing", + "path": "groups[4].condition" + }, + { + "argument": "pointcloud_container_name", + "path": "groups[4].actions.includes[0].launch_arguments.pointcloud_container_name" + }, + { + "argument": "launch_localization", + "path": "groups[5].condition" + }, + { + "argument": "launch_perception", + "path": "groups[6].condition" + }, + { + "argument": "data_path", + "path": "groups[6].actions.includes[0].launch_arguments.data_path" + }, + { + "argument": "pointcloud_container_name", + "path": "groups[6].actions.includes[0].launch_arguments.pointcloud_container_name" + }, + { + "argument": "launch_planning", + "path": "groups[7].condition" + }, + { + "argument": "planning_module_preset", + "path": "groups[7].actions.includes[0].launch_arguments.module_preset" + }, + { + "argument": "enable_all_modules_auto_mode", + "path": "groups[7].actions.includes[0].launch_arguments.enable_all_modules_auto_mode" + }, + { + "argument": "is_simulation", + "path": "groups[7].actions.includes[0].launch_arguments.is_simulation" + }, + { + "argument": "use_sim_time", + "path": "groups[7].actions.includes[0].launch_arguments.use_sim_time" + }, + { + "argument": "vehicle_model", + "path": "groups[7].actions.includes[0].launch_arguments.vehicle_model" + }, + { + "argument": "launch_control", + "path": "groups[8].condition" + }, + { + "argument": "control_module_preset", + "path": "groups[8].actions.includes[0].launch_arguments.module_preset" + }, + { + "argument": "use_sim_time", + "path": "groups[8].actions.includes[0].launch_arguments.use_sim_time" + }, + { + "argument": "vehicle_model", + "path": "groups[8].actions.includes[0].launch_arguments.vehicle_model" + }, + { + "argument": "launch_api", + "path": "groups[9].condition" + }, + { + "argument": "use_sim_time", + "path": "groups[9].actions.includes[0].launch_arguments.use_sim_time" + }, + { + "argument": "vehicle_model", + "path": "groups[9].actions.includes[0].launch_arguments.vehicle_model" + }, + { + "argument": "rviz_config", + "path": "groups[10].actions.nodes[0].args" + }, + { + "argument": "rviz_respawn", + "path": "groups[10].actions.nodes[0].respawn" + }, + { + "argument": "rviz", + "path": "groups[10].actions.nodes[0].condition" + } + ], + "environment_variables": [ + { + "name": "QT_QPA_PLATFORMTHEME", + "value": "qt5ct" + } + ], + "environment_variable_usages": [ + { + "argument": "HOME", + "path": "arguments[3].default_value" + } + ] +} \ No newline at end of file diff --git a/parser/tests/real_cases/launch_files/autoware.launch.xml b/parser/tests/real_cases/launch_files/autoware.launch.xml new file mode 100644 index 0000000..538c430 --- /dev/null +++ b/parser/tests/real_cases/launch_files/autoware.launch.xml @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/parser/tests/test_cases/python/node_tests.yaml b/parser/tests/test_cases/python/node_tests.yaml index 05237cc..fd9617a 100644 --- a/parser/tests/test_cases/python/node_tests.yaml +++ b/parser/tests/test_cases/python/node_tests.yaml @@ -114,3 +114,24 @@ tests: executable: robot_node parameters: - robot_description: "${Command:['xacro', 'robot.urdf.xacro']}" + + - name: node_with_environment_variable + input: | + from launch import LaunchDescription + from launch_ros.actions import Node + + def generate_launch_description(): + return LaunchDescription([ + Node( + package="demo_pkg", + executable="talker", + env={"RCUTILS_LOG_LEVEL": "debug", "CUSTOM": "42"} + ) + ]) + expected: + nodes: + - package: demo_pkg + executable: talker + env: + RCUTILS_LOG_LEVEL: debug + CUSTOM: "42" \ No newline at end of file diff --git a/parser/tests/test_cases/xml/launch_config_tests.yaml b/parser/tests/test_cases/xml/launch_config_tests.yaml index 136f9b0..4eca65c 100644 --- a/parser/tests/test_cases/xml/launch_config_tests.yaml +++ b/parser/tests/test_cases/xml/launch_config_tests.yaml @@ -32,10 +32,10 @@ tests: - package: demo executable: run parameters: - - use_sim_time: "${LaunchConfiguration:use_sim_time}" + use_sim_time: "${LaunchConfiguration:use_sim_time}" launch_argument_usages: - argument: use_sim_time - path: nodes[0].parameters[0].use_sim_time + path: nodes[0].parameters.use_sim_time undeclared_launch_configurations: [] - name: include_with_launch_arguments_xml @@ -144,9 +144,9 @@ tests: - package: demo executable: missing parameters: - - param: "${LaunchConfiguration:not_declared}" + param: "${LaunchConfiguration:not_declared}" launch_argument_usages: - argument: not_declared - path: nodes[0].parameters[0].param + path: nodes[0].parameters.param undeclared_launch_configurations: - not_declared \ No newline at end of file diff --git a/parser/tests/test_cases/xml/node_tests.yaml b/parser/tests/test_cases/xml/node_tests.yaml index 095822f..9464005 100644 --- a/parser/tests/test_cases/xml/node_tests.yaml +++ b/parser/tests/test_cases/xml/node_tests.yaml @@ -30,8 +30,8 @@ tests: name: talker_node output: screen parameters: - - use_sim_time: "${LaunchConfiguration:use_sim_time}" - - use_remapping: "true" + use_sim_time: "${LaunchConfiguration:use_sim_time}" + use_remapping: "true" remappings: - ['/input', '/robot1/input'] - ['/output', '/robot1/output'] @@ -49,4 +49,22 @@ tests: - package: demo executable: a - package: demo - executable: b \ No newline at end of file + executable: b + + - name: node_with_environment_variable_xml + description: Node with Environment Variables + input: | + + + + + + + + expected: + nodes: + - package: demo_pkg + executable: talker + env: + RCUTILS_LOG_LEVEL: debug + CUSTOM: "42" diff --git a/parser/tests/test_from_yaml_xml.py b/parser/tests/test_from_yaml_xml.py index 36dad3e..368a4cb 100644 --- a/parser/tests/test_from_yaml_xml.py +++ b/parser/tests/test_from_yaml_xml.py @@ -14,17 +14,11 @@ import pytest -from parser.tests.test_helpers import ( - load_custom_handler_tests, - load_yaml_tests, - parse_launch_string, -) +from parser.tests.test_helpers import load_yaml_tests, parse_launch_string @pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/xml/node_tests.yaml")) def test_node_parsing(code, expected): result = parse_launch_string(code, suffix=".xml") - print(result) - print(expected) assert result.get("nodes") == expected.get("nodes") @pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/xml/launch_config_tests.yaml")) @@ -65,8 +59,6 @@ def test_include_launch_parsing(code, expected): @pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/xml/condition_tests.yaml")) def test_conditions_parsing(code, expected): result = parse_launch_string(code, suffix=".xml") - print(expected) - print(result) for key in [ "arguments", "nodes", diff --git a/parser/tests/test_real_launch_files.py b/parser/tests/test_real_launch_files.py index 6a9a841..69dcdfb 100644 --- a/parser/tests/test_real_launch_files.py +++ b/parser/tests/test_real_launch_files.py @@ -26,7 +26,8 @@ PLUGIN_DIR = os.path.join(BASE_DIR, "real_cases/launch_files/custom_handlers") -@pytest.mark.parametrize("filename", [f for f in os.listdir(INPUT_DIR) if f.endswith(".py")]) +@pytest.mark.parametrize("filename", [f for f in os.listdir(INPUT_DIR) + if f.endswith(".py") or f.endswith(".xml")]) def test_real_launch_file_snapshot(filename): input_path = os.path.join(INPUT_DIR, filename) output_path = os.path.join(OUTPUT_DIR, f"{filename}.json") diff --git a/webview/components/renderGroup.js b/webview/components/renderGroup.js index 2c4bbb0..785e64e 100644 --- a/webview/components/renderGroup.js +++ b/webview/components/renderGroup.js @@ -47,7 +47,8 @@ export function renderGroup(group, options = {}) { const metaSections = [ { key: 'namespace', icon: '🧭', label: 'Namespace', value: ns }, { key: 'condition', icon: '❓', label: 'Condition', value: group.condition }, - { key: 'parameters', icon: '⚙️', label: 'Params', value: group.parameters } + { key: 'parameters', icon: '⚙️', label: 'Params', value: group.parameters }, + { key: 'scoped', icon: '🌍', label: 'Scoped', value: group.scoped } ]; metaSections.forEach(({ key, icon, label, value }) => { diff --git a/webview/components/renderNode.js b/webview/components/renderNode.js index 62f8323..cf53415 100644 --- a/webview/components/renderNode.js +++ b/webview/components/renderNode.js @@ -44,17 +44,20 @@ function renderNode(node, options) { block.appendChild(renderSection('executable', '▶️', 'Executable', node.executable, renderOptions)); block.appendChild(renderSection('output', '🖥️', 'Output', node.output || '—', renderOptions)); - if (node.condition) { - block.appendChild(renderSection('condition', '❓', 'Condition', node.condition, renderOptions)); - } - - if (node.parameters?.length > 0) { - block.appendChild(renderSection('parameters', '⚙️', 'Params', node.parameters, renderOptions)); - } - - if (node.arguments?.length > 0) { - block.appendChild(renderSection('arguments', '💬', 'Args', node.arguments, renderOptions)); - } + // Render additional sections + const metaSections = [ + { key: 'condition', icon: '❓', label: 'Condition', value: node.condition }, + { key: 'parameters', icon: '⚙️', label: 'Params', value: node.parameters }, + { key: 'arguments', icon: '💬', label: 'Args', value: node.arguments }, + { key: 'env', icon: '🌍', label: 'Environment Variables', value: node.env } + ]; + + metaSections.forEach(({ key, icon, label, value }) => { + if (value) { + const section = renderSection(key, icon, label, value, renderOptions); + block.appendChild(section); + } + }); return block; } diff --git a/webview/tests/__screenshots__/interaction.spec.js-snapshots/autoware-launch-xml-json-final-linux.png b/webview/tests/__screenshots__/interaction.spec.js-snapshots/autoware-launch-xml-json-final-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..9691d83e354e86e694418d5c8a3ee4bd8f804efe GIT binary patch literal 180907 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 JIU@Q#{{iG#ky!u$ literal 0 HcmV?d00001 diff --git a/webview/tests/__screenshots__/visual.spec.js-snapshots/autoware-launch-xml-json-linux.png b/webview/tests/__screenshots__/visual.spec.js-snapshots/autoware-launch-xml-json-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..9f551b7f8b509abc32d25b38ac4faf5f4b7596d4 GIT binary patch literal 192678 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
  • nSXAkN5C)*OZnSyl;G5h4*Rh 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%0D*Gp)3K&xbHWrdR@TQCeQ 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 @VQek<`v=?z>2iL{bZ#Nb-< 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 z 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

    I65AtN^;f~?w7S%XfsGf>?JQba~E z9j;QE*3u8+M0ACl{~mn&BTg7C;s4E9?6q1wG0T&qfd|%wV+U#Fh8HwZJ*tm;v^1bY zkKf)N;(j!EsHS1UI8$q>ZEdvtpl&;dEkZg|Zrb_B0qZmh3I>xf-%Gho<PM^Ny(A zvkgT9%16AOE1po|a@NS;*Zf@%F=P2#Xf_Wcaa^yQ9o2jq3p+LlzrO-&*8Zrgx9&KU zGJbk7zw-A)D9@m~rUgUro~Y(&%;19u)6eoxBW6!)RX6K4D<{WY*BskiHhlsOsW%`< zbMftg+7yYAq4=j$+92!9I?AtdOL*f%JW3@`!^G!;s|h^u+qWUxn+%J${a7?wu9Gzv ztxly77g;DDReb=eS47LsUj~$|!)&LtfR68VJ-ZdjCjEM0y=oLpt&coboyulX27Yol zY|50>olVqn?Ns&}%C1aq*5QW=IB7)oE;xn>kw;`;Z3#Vo?{Leyp4K zZ2kEg87o~~Ev3j~jL}<-sG0*E_OqRkHln`;({x$=praod)r1gjH^mODG@{Q^b891s zw1?9oS|PNf^b4}1)bEG?%*YlBH;d3xXf1;ID%|@WnVF*8M`7*8!?AQC!I?Xa&y6kj zU1sHtn1}Pscy#tgX5CHtaeBTSah4lrJDzk%&fK_uxkOgB>3}SuXrr=vUee&t5{@)d zP~8)G%g26}lH-?k8nQ-1Y*ID>lg?~8IF7nFI}^ZlSTQtJp2#gkRh{Nxt6N$Sde$FY z|C{xcc&&zMmXZ{M;l#$v$3eH7;bJ#}Jb=9rzNyIN_J57VkmW_zAPge5IJlXanX4m? z2``~IHkw*o!^=hc_gk*t?=!MxuJJhkFN4d$Xu*?{k|xZ~-aOP1)DsgSvWqP{#;2&Q$49z|@4Q4S7RzqQWa*uaRp^%VQ>>gH>gBTQ?769UJz3>h5t zYhEwmzGWA#dW);HMOc@a#<;Pni%!9hiS5r%(UjDC;|j!e58h!GKl9;zbAnL}Nm zN7Ae1DaXugy-_Bn*DAemClH^E5kH$RNdim-Q$N0 zGo*I?`QE_Wk&rJ&Lmb&l<;Y{>Ymjv=5^%i1-y+KM85zI|_5ZW>`yi81m)iVoDo@^U zD;l+LJMA0gQMKjmPCB&jH-1nc$YAaEt+IgJ1YldByVvzgj$*+;gFW&CiT@zyrqy5J z({DONyoVnBa%Fg6c9ig9=`*=_-IrX+F2BK*h_9{8XCD;<+%NQwDP{{$yXc@I$O3 zB{c(zuZ$g?GyXH=!DVkdI(uxa*uVULZMgi znuR7U$5BqQ-lm3rp55B+OBUuH=bE(*6r0Jh0{1uGX}KnazxsZ$<`n4Y+^v506-#(z zlXfbTWza^9oF1Lq8fhxb!YDLRUz@2f7A0RC-?=_EIK1ZJ;p=30>)^-EAzXwIJWtZU zgkqmAqv3sL*_doiZ4=3q{kC1-oBN7QZhrW9m-jABlAbwx z=i>X4H}WdVl${@B3`Uru!nZhfLU6+wE^+dWNAvfpDP+nNO1-T#MchH0sCxS8{!<)k zLv&9aPOHWr>nE=Lk#dncqcIG6>Eflf>~?8|uAmJUv~!`@qC4ufHf5H_1Bt$^j`OZ_ z$tfP6AJ?3Gm1A%yE)y{rA9ZiVP#N#7MffHU0vnQyrqKS}10EM9K7Y_jm2H}|mZ}J`i+~thXwYjKfR>v`A6mkJ z+>{{S=YPzx?0rd{ad%9=w!OJ4k*@<+60!KfAst=x4@Vj4>>$iGE)t9u9QjTR-I@0T z@+4LAPb7E4wE0#P2BqZlLNMq#gU|(r$S|6I8h7(Hc@|bJdd;PW=4W;bkh+z2KWMV_ zP?9~?`fS~Kn?7|aJK+m=V&?)ZxAiKPhx#4&|Gv}HG;{v9Iin@%bZ|y?-q2(&QbN=* z(YmMlebL^MhhMdm@WTHKpU{hyzD>EKvbbIo8FsshHxY%!jICBA?lLe?5@^H^7D(4F zESbweI=9e}4^tfXyvvYmXvBxvWqr~GavSNkgD?p51(4|C?}h2`pm|3h=y)yz)_m;!c9~%fIOT zuEeUSX8!u@eli&0=isZA88=WY!TKgvW%Ve~gNlb@^<>AX|#p^G}(R3D{eNhp8(${uJK{2g;g(v)>6^S6cr?)TRUmq1H z9w)v3fA;SE%Bz-)~0_3iJEz4iTzy8N9TU(c*ezH9qhZGBwjlZ(gQ-Su*+Uu?YY z&nNfmPx!wtuh#$mZO;4e=hWu;mVfSw_w~fsmH#+>zvuCjORbxKp0TZ-e^Pu~dC6YG zKULAy&o3SNQyl;6SpUBNZ_h@{&jTI}cKz3{iO$!T9a9Fn^v=b<|F6GUnfZH->$oSM_0j_qA~bM|NH>G#Xl)_B$= z2T3skC!Hi1xg(e(r=Z@rGr(z&uH56`~6 z&L_<7Tgds&g{`Hrt>1I9WaT2~&04wcy{>BEG?kC;-@oknGks?3(~|p-W9{opt?UmU z-FPbbc9i{=#n~l`j7&C_Jh|Ds-`cAB*`uJkN%Q{!uQ{*ozPaN)KQL9ccphN7cEIQD zMeUQHPM+jnCwET&+UrO&)6Fxkum1Bv{(6|z?aA-|<~;gv@T>pc{hyy6yczsl{C`!| z!=3(X*RNX=DZ)El{B!30Uk|6AmwU1L+NS&RvsW*_`L*@S{Nk;9;-+?8EK-%7yJpRm zMSBW*q@{hlgYbcSaH9J?YZm%v+)87}8oq0Dx zLqrLfOlGZ!(Ys%GhfgPgcT2pyPrRhg-pY#1J+tejh_}V^~?NQL+nY^xx2Fr31q&^I z?tXda&mCKpfq|_cz$A9Trcmbp!-(wi-$}r7q&8w|mWk=)E!($0%{K+9-~p-doCMq$ zkRBOsdgZ;~G2M%8yyi~P|H44|?vO$PqpvCtFp(ClX8|U728Jdz;E)(Fv6(Q!(mY5M zR9XQkg$yQek?AN5?7sn>I19Lfih;r5!jRD#H77L^SO73EEZhXo(;zN!{`-~>RQmt_ iy0-#cKn5GA`^e0oCjZ3N&6?E$WQ?b)pUXO@geCxI(wpW0 literal 0 HcmV?d00001 From 268eb7b9f3ed5e0b3a17308c2d935a4ecf99b4dd Mon Sep 17 00:00:00 2001 From: Sakshay Mahna Date: Sat, 23 Aug 2025 16:19:55 +0530 Subject: [PATCH 8/9] Update to version 0.2.0 --- CHANGELOG | 9 +++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index bbfa8a3..938dd30 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -7,6 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/). --- +## [0.2.0] - 2025-08-23 + +### Added +- XML launch file parsing support +- Autoware XML Launch Real Test File + +### Changed +- Reorganized the parser contents for demarcation between python and xml with common utilities + ## [0.1.9] - 2025-08-12 ### Added diff --git a/package-lock.json b/package-lock.json index b30455b..3cc5ae7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "launchmap", - "version": "0.1.9", + "version": "0.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "launchmap", - "version": "0.1.9", + "version": "0.2.0", "license": "Apache-2.0", "dependencies": { "which": "^5.0.0" diff --git a/package.json b/package.json index f78299b..81bd08e 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "launchmap", "displayName": "LaunchMap", "description": "Visualize ROS2 Launch Files", - "version": "0.1.9", + "version": "0.2.0", "publisher": "kodorobotics", "icon": "assets/launchmap-logo.png", "bugs": { From a64290501c99fa4aa4ad76ea6074194ef7c45c1d Mon Sep 17 00:00:00 2001 From: Sakshay Mahna Date: Sat, 23 Aug 2025 16:30:13 +0530 Subject: [PATCH 9/9] Fix linting issues --- parser/entrypoint/common.py | 4 ++-- parser/entrypoint/parser_runner.py | 1 + .../handlers/opaque_function_handler.py | 2 +- parser/parser/xml/handlers/arg_handler.py | 1 + .../parser/xml/handlers/condition_handler.py | 1 + parser/parser/xml/handlers/env_handler.py | 1 + parser/parser/xml/handlers/eval_handler.py | 1 + .../xml/handlers/find_pkg_share_handler.py | 1 + parser/parser/xml/handlers/group_handler.py | 3 ++- parser/parser/xml/handlers/include_handler.py | 3 ++- parser/parser/xml/handlers/node_handler.py | 6 ++++-- parser/parser/xml/handlers/var_handler.py | 1 + parser/parser/xml/utils.py | 1 + parser/resolution/resolvers/call.py | 2 +- parser/tests/test_from_yaml_python.py | 21 ++++++++++++------- parser/tests/test_from_yaml_xml.py | 7 +++++-- 16 files changed, 39 insertions(+), 17 deletions(-) diff --git a/parser/entrypoint/common.py b/parser/entrypoint/common.py index d05bd82..d5c8182 100644 --- a/parser/entrypoint/common.py +++ b/parser/entrypoint/common.py @@ -12,10 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. -import io from typing import List + from parser.context import ParseContext -import xml.etree.ElementTree as ET + def build_result(filepath: str, context: ParseContext, parsed: List): """ diff --git a/parser/entrypoint/parser_runner.py b/parser/entrypoint/parser_runner.py index dd547c2..19d2a4e 100644 --- a/parser/entrypoint/parser_runner.py +++ b/parser/entrypoint/parser_runner.py @@ -16,6 +16,7 @@ from parser.entrypoint.python_runner import parse_python_launch_file from parser.entrypoint.xml_runner import parse_xml_launch_file + def parse_launch_file(filepath: str) -> dict: with open(filepath, "r", encoding="utf-8") as f: code = f.read() diff --git a/parser/parser/python/handlers/opaque_function_handler.py b/parser/parser/python/handlers/opaque_function_handler.py index a6eafcb..6376eb9 100644 --- a/parser/parser/python/handlers/opaque_function_handler.py +++ b/parser/parser/python/handlers/opaque_function_handler.py @@ -16,8 +16,8 @@ from parser.context import ParseContext from parser.parser.postprocessing import simplify_launch_configurations -from parser.parser.registry import register_handler from parser.parser.python.utils import extract_opaque_function +from parser.parser.registry import register_handler from parser.parser.utils import group_entities_by_type from parser.resolution.resolution_engine import ResolutionEngine from parser.resolution.utils import bind_function_args, resolve_call_signature diff --git a/parser/parser/xml/handlers/arg_handler.py b/parser/parser/xml/handlers/arg_handler.py index a16516a..8bb369f 100644 --- a/parser/parser/xml/handlers/arg_handler.py +++ b/parser/parser/xml/handlers/arg_handler.py @@ -18,6 +18,7 @@ from parser.parser.registry import register_handler from parser.parser.xml.utils import normalize_keys, resolve_parameters + @register_handler("arg") def handle_arg(element: ET.Element, context: ParseContext) -> dict: """ diff --git a/parser/parser/xml/handlers/condition_handler.py b/parser/parser/xml/handlers/condition_handler.py index 97671d2..936379d 100644 --- a/parser/parser/xml/handlers/condition_handler.py +++ b/parser/parser/xml/handlers/condition_handler.py @@ -14,6 +14,7 @@ from parser.parser.postprocessing import simplify_launch_configurations + def handle_condition(kwargs: dict): if "if" in kwargs: _handle_if_condition(kwargs) diff --git a/parser/parser/xml/handlers/env_handler.py b/parser/parser/xml/handlers/env_handler.py index 3b017f2..29726d4 100644 --- a/parser/parser/xml/handlers/env_handler.py +++ b/parser/parser/xml/handlers/env_handler.py @@ -18,6 +18,7 @@ from parser.parser.registry import register_handler from parser.parser.xml.utils import resolve_parameters + @register_handler("env") def handle_environment_variable(element: ET.Element, context: ParseContext): """ diff --git a/parser/parser/xml/handlers/eval_handler.py b/parser/parser/xml/handlers/eval_handler.py index f1d424e..5828f37 100644 --- a/parser/parser/xml/handlers/eval_handler.py +++ b/parser/parser/xml/handlers/eval_handler.py @@ -15,6 +15,7 @@ from parser.context import ParseContext from parser.parser.registry import register_handler + @register_handler("subst:eval") def handle_find_package_share(name: str, context: ParseContext) -> dict: """ diff --git a/parser/parser/xml/handlers/find_pkg_share_handler.py b/parser/parser/xml/handlers/find_pkg_share_handler.py index e79323c..53d29cf 100644 --- a/parser/parser/xml/handlers/find_pkg_share_handler.py +++ b/parser/parser/xml/handlers/find_pkg_share_handler.py @@ -15,6 +15,7 @@ from parser.context import ParseContext from parser.parser.registry import register_handler + @register_handler("subst:find-pkg-share") def handle_find_package_share(name: str, context: ParseContext) -> dict: """ diff --git a/parser/parser/xml/handlers/group_handler.py b/parser/parser/xml/handlers/group_handler.py index 99f2e81..0a419a4 100644 --- a/parser/parser/xml/handlers/group_handler.py +++ b/parser/parser/xml/handlers/group_handler.py @@ -18,7 +18,8 @@ from parser.parser.registry import register_handler from parser.parser.utils import flatten_once, group_entities_by_type from parser.parser.xml.handlers.condition_handler import handle_condition -from parser.parser.xml.utils import resolve_parameters, resolve_children +from parser.parser.xml.utils import resolve_children, resolve_parameters + @register_handler("group") def handle_group(element: ET.Element, context: ParseContext) -> dict: diff --git a/parser/parser/xml/handlers/include_handler.py b/parser/parser/xml/handlers/include_handler.py index 51490cb..84f0462 100644 --- a/parser/parser/xml/handlers/include_handler.py +++ b/parser/parser/xml/handlers/include_handler.py @@ -17,7 +17,8 @@ from parser.context import ParseContext from parser.parser.registry import register_handler from parser.parser.xml.handlers.condition_handler import handle_condition -from parser.parser.xml.utils import resolve_parameters, resolve_children +from parser.parser.xml.utils import resolve_children, resolve_parameters + @register_handler("include") def handle_include(element: ET.Element, context: ParseContext) -> dict: diff --git a/parser/parser/xml/handlers/node_handler.py b/parser/parser/xml/handlers/node_handler.py index 1f8dfe4..d074a54 100644 --- a/parser/parser/xml/handlers/node_handler.py +++ b/parser/parser/xml/handlers/node_handler.py @@ -17,7 +17,7 @@ from parser.context import ParseContext from parser.parser.registry import register_handler from parser.parser.xml.handlers.condition_handler import handle_condition -from parser.parser.xml.utils import normalize_keys, resolve_parameters, resolve_children +from parser.parser.xml.utils import normalize_keys, resolve_children, resolve_parameters @register_handler("node") @@ -31,7 +31,9 @@ def handle_node(element: ET.Element, context: ParseContext) -> dict: handle_condition(kwargs) # Resolve remapping and parameters - remappings = []; parameters = {}; environment_vars = {} + remappings = [] + parameters = {} + environment_vars = {} children = resolve_children(element, context) for child in children: if child["type"] == "Remapping": diff --git a/parser/parser/xml/handlers/var_handler.py b/parser/parser/xml/handlers/var_handler.py index 3e15c2f..ecb1282 100644 --- a/parser/parser/xml/handlers/var_handler.py +++ b/parser/parser/xml/handlers/var_handler.py @@ -15,6 +15,7 @@ from parser.context import ParseContext from parser.parser.registry import register_handler + @register_handler("subst:var") def handle_var(name: str, context: ParseContext) -> dict: """ diff --git a/parser/parser/xml/utils.py b/parser/parser/xml/utils.py index 46590d4..25832b5 100644 --- a/parser/parser/xml/utils.py +++ b/parser/parser/xml/utils.py @@ -18,6 +18,7 @@ from parser.context import ParseContext from parser.parser.postprocessing import simplify_launch_configurations + def strip_ns(tag: str) -> str: return tag.split('}')[-1] diff --git a/parser/resolution/resolvers/call.py b/parser/resolution/resolvers/call.py index 6be2f24..fba5751 100644 --- a/parser/resolution/resolvers/call.py +++ b/parser/resolution/resolvers/call.py @@ -15,8 +15,8 @@ import ast import warnings -from parser.parser.python.dispatcher import dispatch_call from parser.parser.postprocessing import simplify_launch_configurations +from parser.parser.python.dispatcher import dispatch_call from parser.resolution.resolution_registry import register_resolver diff --git a/parser/tests/test_from_yaml_python.py b/parser/tests/test_from_yaml_python.py index dde0677..5afd603 100644 --- a/parser/tests/test_from_yaml_python.py +++ b/parser/tests/test_from_yaml_python.py @@ -26,7 +26,8 @@ def test_node_parsing(code, expected): result = parse_launch_string(code, suffix=".py") assert result.get("nodes") == expected.get("nodes") -@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/python/launch_config_tests.yaml")) +@pytest.mark.parametrize("code,expected", + load_yaml_tests("test_cases/python/launch_config_tests.yaml")) def test_launch_configuration_parsing(code, expected): result = parse_launch_string(code, suffix=".py") for key in [ @@ -41,14 +42,16 @@ def test_launch_configuration_parsing(code, expected): assert result.get(key, []) == expected.get(key, []) -@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/python/group_action_tests.yaml")) +@pytest.mark.parametrize("code,expected", + load_yaml_tests("test_cases/python/group_action_tests.yaml")) def test_group_action_parsing(code, expected): result = parse_launch_string(code, suffix=".py") for key in ["nodes", "arguments", "includes", "groups", "launch_argument_usages"]: assert result.get(key, []) == expected.get(key, []) -@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/python/include_launch_tests.yaml")) +@pytest.mark.parametrize("code,expected", + load_yaml_tests("test_cases/python/include_launch_tests.yaml")) def test_include_launch_parsing(code, expected): result = parse_launch_string(code, suffix=".py") for key in [ @@ -60,7 +63,8 @@ def test_include_launch_parsing(code, expected): assert result.get(key, []) == expected.get(key, []) -@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/python/opaque_function_tests.yaml")) +@pytest.mark.parametrize("code,expected", + load_yaml_tests("test_cases/python/opaque_function_tests.yaml")) def test_opaque_functions_parsing(code, expected): result = parse_launch_string(code, suffix=".py") for key in [ @@ -72,7 +76,8 @@ def test_opaque_functions_parsing(code, expected): assert result.get(key, []) == expected.get(key, []) -@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/python/condition_tests.yaml")) +@pytest.mark.parametrize("code,expected", + load_yaml_tests("test_cases/python/condition_tests.yaml")) def test_conditions_parsing(code, expected): result = parse_launch_string(code, suffix=".py") for key in [ @@ -85,7 +90,8 @@ def test_conditions_parsing(code, expected): assert result.get(key, []) == expected.get(key, []) -@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/python/composable_node_tests.yaml")) +@pytest.mark.parametrize("code,expected", + load_yaml_tests("test_cases/python/composable_node_tests.yaml")) def test_composable_nodes_parsing(code, expected): result = parse_launch_string(code, suffix=".py") for key in [ @@ -98,7 +104,8 @@ def test_composable_nodes_parsing(code, expected): assert result.get(key, []) == expected.get(key, []) -@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/python/event_handler_tests.yaml")) +@pytest.mark.parametrize("code,expected", + load_yaml_tests("test_cases/python/event_handler_tests.yaml")) def test_event_handlers_parsing(code, expected): result = parse_launch_string(code, suffix=".py") for key in ["nodes", "event_handlers"]: diff --git a/parser/tests/test_from_yaml_xml.py b/parser/tests/test_from_yaml_xml.py index 368a4cb..4a57b3a 100644 --- a/parser/tests/test_from_yaml_xml.py +++ b/parser/tests/test_from_yaml_xml.py @@ -16,12 +16,14 @@ from parser.tests.test_helpers import load_yaml_tests, parse_launch_string + @pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/xml/node_tests.yaml")) def test_node_parsing(code, expected): result = parse_launch_string(code, suffix=".xml") assert result.get("nodes") == expected.get("nodes") -@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/xml/launch_config_tests.yaml")) +@pytest.mark.parametrize("code,expected", + load_yaml_tests("test_cases/xml/launch_config_tests.yaml")) def test_launch_configuration_parsing(code, expected): result = parse_launch_string(code, suffix=".xml") print(result) @@ -43,7 +45,8 @@ def test_group_action_parsing(code, expected): for key in ["nodes", "arguments", "includes", "groups", "launch_argument_usages"]: assert result.get(key, []) == expected.get(key, []) -@pytest.mark.parametrize("code,expected", load_yaml_tests("test_cases/xml/include_launch_tests.yaml")) +@pytest.mark.parametrize("code,expected", + load_yaml_tests("test_cases/xml/include_launch_tests.yaml")) def test_include_launch_parsing(code, expected): result = parse_launch_string(code, suffix=".xml") print(result)