From 6e56e9c98560b99b1d5382492bd4737a487c3c97 Mon Sep 17 00:00:00 2001 From: Sylvester Kaczmarek <16242628+sylvesterkaczmarek@users.noreply.github.com> Date: Fri, 21 Aug 2026 12:52:33 +0100 Subject: [PATCH 1/3] Preserve render product lists for noop annotator --- .../isaacsim.core.nodes/python/impl/base_writer_node.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/source/extensions/isaacsim.core.nodes/python/impl/base_writer_node.py b/source/extensions/isaacsim.core.nodes/python/impl/base_writer_node.py index e23e955057..a9d8aa0cce 100644 --- a/source/extensions/isaacsim.core.nodes/python/impl/base_writer_node.py +++ b/source/extensions/isaacsim.core.nodes/python/impl/base_writer_node.py @@ -140,7 +140,12 @@ def _process_activation_requests(self, event: carb.eventdispatcher.Event) -> Non noop = rep.AnnotatorRegistry.get_annotator( "IsaacNoop", ) - noop.attach([request.render_product_path]) + render_products = ( + request.render_product_path + if isinstance(request.render_product_path, list) + else [request.render_product_path] + ) + noop.attach(render_products) carb.log_info(f"Attaching:\n{request}") else: request.writer.detach() From aba4fe4c0dd82ad6e744ef37416c6e54c581f80b Mon Sep 17 00:00:00 2001 From: Sylvester Kaczmarek <16242628+sylvesterkaczmarek@users.noreply.github.com> Date: Fri, 21 Aug 2026 12:53:28 +0100 Subject: [PATCH 2/3] Cover multi-render-product writer attachment --- .../python/tests/test_base_writer_node.py | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 source/extensions/isaacsim.core.nodes/python/tests/test_base_writer_node.py diff --git a/source/extensions/isaacsim.core.nodes/python/tests/test_base_writer_node.py b/source/extensions/isaacsim.core.nodes/python/tests/test_base_writer_node.py new file mode 100644 index 0000000000..d5014db0b6 --- /dev/null +++ b/source/extensions/isaacsim.core.nodes/python/tests/test_base_writer_node.py @@ -0,0 +1,41 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +"""Tests for BaseWriterNode render-product attachment handling.""" + +from unittest.mock import MagicMock, patch + +import omni.kit.test +from isaacsim.core.nodes import BaseWriterNode, WriterRequest + + +class TestBaseWriterNode(omni.kit.test.TestCase): + """Validate writer activation requests.""" + + @patch("isaacsim.core.nodes.impl.base_writer_node.Usd.EditContext") + @patch("isaacsim.core.nodes.impl.base_writer_node.omni.usd.get_context") + @patch("isaacsim.core.nodes.impl.base_writer_node.rep.AnnotatorRegistry.get_annotator") + def test_noop_annotator_preserves_render_product_list( + self, mock_get_annotator: MagicMock, mock_get_context: MagicMock, mock_edit_context: MagicMock + ) -> None: + """A list of render products must not be wrapped in another list.""" + stage = MagicMock() + mock_get_context.return_value.get_stage.return_value = stage + mock_edit_context.return_value.__enter__.return_value = None + mock_edit_context.return_value.__exit__.return_value = False + + writer = MagicMock() + writer.node_type_id = "TestWriter" + writer._kwargs = {} + writer._annotators = [] + noop = mock_get_annotator.return_value + + render_products = ["/Render/ProductA", "/Render/ProductB"] + node = BaseWriterNode() + node.post_attach = MagicMock() + node._requests = [WriterRequest(writer, render_products, True)] + + node._process_activation_requests(MagicMock()) + + writer.attach.assert_called_once_with(render_products) + noop.attach.assert_called_once_with(render_products) From d20e98eb98661d0981ccd8159f69180fb7bd9d9c Mon Sep 17 00:00:00 2001 From: Sylvester Kaczmarek <16242628+sylvesterkaczmarek@users.noreply.github.com> Date: Fri, 21 Aug 2026 12:57:57 +0100 Subject: [PATCH 3/3] Use async Kit test base for writer regression --- .../isaacsim.core.nodes/python/tests/test_base_writer_node.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/extensions/isaacsim.core.nodes/python/tests/test_base_writer_node.py b/source/extensions/isaacsim.core.nodes/python/tests/test_base_writer_node.py index d5014db0b6..fd7d5de1fd 100644 --- a/source/extensions/isaacsim.core.nodes/python/tests/test_base_writer_node.py +++ b/source/extensions/isaacsim.core.nodes/python/tests/test_base_writer_node.py @@ -9,13 +9,13 @@ from isaacsim.core.nodes import BaseWriterNode, WriterRequest -class TestBaseWriterNode(omni.kit.test.TestCase): +class TestBaseWriterNode(omni.kit.test.AsyncTestCase): """Validate writer activation requests.""" @patch("isaacsim.core.nodes.impl.base_writer_node.Usd.EditContext") @patch("isaacsim.core.nodes.impl.base_writer_node.omni.usd.get_context") @patch("isaacsim.core.nodes.impl.base_writer_node.rep.AnnotatorRegistry.get_annotator") - def test_noop_annotator_preserves_render_product_list( + async def test_noop_annotator_preserves_render_product_list( self, mock_get_annotator: MagicMock, mock_get_context: MagicMock, mock_edit_context: MagicMock ) -> None: """A list of render products must not be wrapped in another list."""