Handle trace without lifecycle transitions (#28)

Signed-off-by: Christophe Bedard <christophe.bedard@apex.ai>
This commit is contained in:
Christophe Bedard 2024-06-18 19:59:46 -04:00 committed by GitHub
parent d8c352c082
commit 6550e878bc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 13 additions and 3 deletions

View file

@ -39,3 +39,9 @@ class TestUtils(unittest.TestCase):
data_model.finalize()
util = Ros2DataModelUtil(data_model)
self.assertEqual({}, util.get_callback_symbols())
def test_ros2_no_lifecycle_transitions(self) -> None:
data_model = Ros2DataModel()
data_model.finalize()
util = Ros2DataModelUtil(data_model)
self.assertEqual({}, util.get_lifecycle_node_state_intervals())

View file

@ -17,6 +17,7 @@
"""Module for ROS data model utils."""
from typing import Any
from typing import Dict
from typing import List
from typing import Mapping
from typing import Optional
@ -117,7 +118,7 @@ class Ros2DataModelUtil(DataModelUtil):
callback_instances = self.data.callback_instances
callback_symbols = self.data.callback_symbols
if 'callback_object' not in callback_instances.columns:
if callback_instances.empty:
return {}
# Get a list of callback objects
@ -507,7 +508,7 @@ class Ros2DataModelUtil(DataModelUtil):
def get_lifecycle_node_state_intervals(
self,
) -> DataFrame:
) -> Dict[int, DataFrame]:
"""
Get state intervals (start, end) for all lifecycle nodes.
@ -522,8 +523,11 @@ class Ros2DataModelUtil(DataModelUtil):
:return: dictionary with a dataframe (with each row containing state interval information)
for each lifecycle node
"""
data = {}
lifecycle_transitions = self.data.lifecycle_transitions.copy()
if lifecycle_transitions.empty:
return {}
data = {}
state_machine_handles = set(lifecycle_transitions['state_machine_handle'])
for state_machine_handle in state_machine_handles:
transitions = lifecycle_transitions.loc[