From a2833b19f2a4669f5416e9f2d2f40e9cf65f9b7a Mon Sep 17 00:00:00 2001 From: Emerson Knapp Date: Thu, 26 Jan 2023 12:03:37 -0800 Subject: [PATCH 1/5] Add type version hash for message, from code gen Signed-off-by: Emerson Knapp --- rosidl_generator_py/resource/_action.py.em | 12 ++++++------ rosidl_generator_py/resource/_idl.py.em | 6 +++--- rosidl_generator_py/resource/_msg.py.em | 2 ++ rosidl_generator_py/resource/_srv.py.em | 4 ++-- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/rosidl_generator_py/resource/_action.py.em b/rosidl_generator_py/resource/_action.py.em index 77fbf875..e65e2cef 100644 --- a/rosidl_generator_py/resource/_action.py.em +++ b/rosidl_generator_py/resource/_action.py.em @@ -8,27 +8,27 @@ module_name = '_' + convert_camel_case_to_lower_case_underscore(interface_path.s TEMPLATE( '_msg.py.em', package_name=package_name, interface_path=interface_path, - message=action.goal, import_statements=import_statements) + message=action.goal, import_statements=import_statements, type_hash=type_hash) TEMPLATE( '_msg.py.em', package_name=package_name, interface_path=interface_path, - message=action.result, import_statements=import_statements) + message=action.result, import_statements=import_statements, type_hash=type_hash) TEMPLATE( '_msg.py.em', package_name=package_name, interface_path=interface_path, - message=action.feedback, import_statements=import_statements) + message=action.feedback, import_statements=import_statements, type_hash=type_hash) TEMPLATE( '_srv.py.em', package_name=package_name, interface_path=interface_path, - service=action.send_goal_service, import_statements=import_statements) + service=action.send_goal_service, import_statements=import_statements, type_hash=type_hash) TEMPLATE( '_srv.py.em', package_name=package_name, interface_path=interface_path, - service=action.get_result_service, import_statements=import_statements) + service=action.get_result_service, import_statements=import_statements, type_hash=type_hash) TEMPLATE( '_msg.py.em', package_name=package_name, interface_path=interface_path, - message=action.feedback_message, import_statements=import_statements) + message=action.feedback_message, import_statements=import_statements, type_hash=type_hash) }@ diff --git a/rosidl_generator_py/resource/_idl.py.em b/rosidl_generator_py/resource/_idl.py.em index 5fe45875..801ea059 100644 --- a/rosidl_generator_py/resource/_idl.py.em +++ b/rosidl_generator_py/resource/_idl.py.em @@ -25,7 +25,7 @@ from rosidl_parser.definition import Message TEMPLATE( '_msg.py.em', package_name=package_name, interface_path=interface_path, message=message, - import_statements=import_statements) + import_statements=import_statements, type_hash=type_hash) }@ @[end for]@ @ @@ -40,7 +40,7 @@ from rosidl_parser.definition import Service TEMPLATE( '_srv.py.em', package_name=package_name, interface_path=interface_path, service=service, - import_statements=import_statements) + import_statements=import_statements, type_hash=type_hash) }@ @[end for]@ @ @@ -55,6 +55,6 @@ from rosidl_parser.definition import Action TEMPLATE( '_action.py.em', package_name=package_name, interface_path=interface_path, action=action, - import_statements=import_statements) + import_statements=import_statements, type_hash=type_hash) }@ @[end for]@ diff --git a/rosidl_generator_py/resource/_msg.py.em b/rosidl_generator_py/resource/_msg.py.em index a5b9cabc..fb556751 100644 --- a/rosidl_generator_py/resource/_msg.py.em +++ b/rosidl_generator_py/resource/_msg.py.em @@ -254,6 +254,8 @@ string@ @[end for]@ } + TYPE_VERSION_HASH = @(type_hash) + SLOT_TYPES = ( @[for member in message.structure.members]@ @[ if len(message.structure.members) == 1 and member.name == EMPTY_STRUCTURE_REQUIRED_MEMBER_NAME]@ diff --git a/rosidl_generator_py/resource/_srv.py.em b/rosidl_generator_py/resource/_srv.py.em index 24d4548f..52492b6e 100644 --- a/rosidl_generator_py/resource/_srv.py.em +++ b/rosidl_generator_py/resource/_srv.py.em @@ -8,7 +8,7 @@ module_name = '_' + convert_camel_case_to_lower_case_underscore(interface_path.s TEMPLATE( '_msg.py.em', package_name=package_name, interface_path=interface_path, - message=service.request_message, import_statements=import_statements) + message=service.request_message, import_statements=import_statements, type_hash=type_hash) TEMPLATE( '_msg.py.em', package_name=package_name, interface_path=interface_path, @@ -16,7 +16,7 @@ TEMPLATE( TEMPLATE( '_msg.py.em', package_name=package_name, interface_path=interface_path, - message=service.event_message, import_statements=import_statements) + message=service.response_message, import_statements=import_statements, type_hash=type_hash) }@ From d45fa603d039bf2b4dcf03837d7ee7601e5c26fd Mon Sep 17 00:00:00 2001 From: Emerson Knapp Date: Mon, 6 Feb 2023 21:33:16 -0800 Subject: [PATCH 2/5] Update Signed-off-by: Emerson Knapp --- rosidl_generator_py/resource/_srv.py.em | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rosidl_generator_py/resource/_srv.py.em b/rosidl_generator_py/resource/_srv.py.em index 52492b6e..eede4d0c 100644 --- a/rosidl_generator_py/resource/_srv.py.em +++ b/rosidl_generator_py/resource/_srv.py.em @@ -12,7 +12,7 @@ TEMPLATE( TEMPLATE( '_msg.py.em', package_name=package_name, interface_path=interface_path, - message=service.response_message, import_statements=import_statements) + message=service.response_message, import_statements=import_statements, type_hash=type_hash) TEMPLATE( '_msg.py.em', package_name=package_name, interface_path=interface_path, From 410d65db98b1ce51a2f2fee74873d1312d185d83 Mon Sep 17 00:00:00 2001 From: Emerson Knapp Date: Thu, 9 Feb 2023 15:49:21 -0800 Subject: [PATCH 3/5] Match latest subinterface stuff from type_hash generator Signed-off-by: Emerson Knapp --- ...sidl_generator_py_generate_interfaces.cmake | 1 + rosidl_generator_py/resource/_action.py.em | 18 ++++++++++++------ rosidl_generator_py/resource/_msg.py.em | 2 +- rosidl_generator_py/resource/_srv.py.em | 11 ++++++++--- 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/rosidl_generator_py/cmake/rosidl_generator_py_generate_interfaces.cmake b/rosidl_generator_py/cmake/rosidl_generator_py_generate_interfaces.cmake index a6d8263e..90bb1b15 100644 --- a/rosidl_generator_py/cmake/rosidl_generator_py_generate_interfaces.cmake +++ b/rosidl_generator_py/cmake/rosidl_generator_py_generate_interfaces.cmake @@ -118,6 +118,7 @@ rosidl_write_generator_arguments( OUTPUT_DIR "${_output_path}" TEMPLATE_DIR "${rosidl_generator_py_TEMPLATE_DIR}" TARGET_DEPENDENCIES ${target_dependencies} + TYPE_HASH_TUPLES "${${rosidl_generate_interfaces_TARGET}__HASH_TUPLES}" ) if(NOT rosidl_generate_interfaces_SKIP_INSTALL) diff --git a/rosidl_generator_py/resource/_action.py.em b/rosidl_generator_py/resource/_action.py.em index e65e2cef..20f5321f 100644 --- a/rosidl_generator_py/resource/_action.py.em +++ b/rosidl_generator_py/resource/_action.py.em @@ -8,27 +8,33 @@ module_name = '_' + convert_camel_case_to_lower_case_underscore(interface_path.s TEMPLATE( '_msg.py.em', package_name=package_name, interface_path=interface_path, - message=action.goal, import_statements=import_statements, type_hash=type_hash) + message=action.goal, import_statements=import_statements, + type_hash=type_hash['goal']) TEMPLATE( '_msg.py.em', package_name=package_name, interface_path=interface_path, - message=action.result, import_statements=import_statements, type_hash=type_hash) + message=action.result, import_statements=import_statements, + type_hash=type_hash['result']) TEMPLATE( '_msg.py.em', package_name=package_name, interface_path=interface_path, - message=action.feedback, import_statements=import_statements, type_hash=type_hash) + message=action.feedback, import_statements=import_statements, + type_hash=type_hash['feedback']) TEMPLATE( '_srv.py.em', package_name=package_name, interface_path=interface_path, - service=action.send_goal_service, import_statements=import_statements, type_hash=type_hash) + service=action.send_goal_service, import_statements=import_statements, + type_hash=type_hash['send_goal_service']) TEMPLATE( '_srv.py.em', package_name=package_name, interface_path=interface_path, - service=action.get_result_service, import_statements=import_statements, type_hash=type_hash) + service=action.get_result_service, import_statements=import_statements, + type_hash=type_hash['get_result_service']) TEMPLATE( '_msg.py.em', package_name=package_name, interface_path=interface_path, - message=action.feedback_message, import_statements=import_statements, type_hash=type_hash) + message=action.feedback_message, import_statements=import_statements, + type_hash=type_hash['feedback_message']) }@ diff --git a/rosidl_generator_py/resource/_msg.py.em b/rosidl_generator_py/resource/_msg.py.em index fb556751..2779b165 100644 --- a/rosidl_generator_py/resource/_msg.py.em +++ b/rosidl_generator_py/resource/_msg.py.em @@ -254,7 +254,7 @@ string@ @[end for]@ } - TYPE_VERSION_HASH = @(type_hash) + TYPE_VERSION_HASH = @(bytes.fromhex(type_hash['message'])) SLOT_TYPES = ( @[for member in message.structure.members]@ diff --git a/rosidl_generator_py/resource/_srv.py.em b/rosidl_generator_py/resource/_srv.py.em index eede4d0c..75333248 100644 --- a/rosidl_generator_py/resource/_srv.py.em +++ b/rosidl_generator_py/resource/_srv.py.em @@ -8,15 +8,18 @@ module_name = '_' + convert_camel_case_to_lower_case_underscore(interface_path.s TEMPLATE( '_msg.py.em', package_name=package_name, interface_path=interface_path, - message=service.request_message, import_statements=import_statements, type_hash=type_hash) + message=service.request_message, import_statements=import_statements, + type_hash=type_hash['request_message']) TEMPLATE( '_msg.py.em', package_name=package_name, interface_path=interface_path, - message=service.response_message, import_statements=import_statements, type_hash=type_hash) + message=service.response_message, import_statements=import_statements, + type_hash=type_hash['response_message']) TEMPLATE( '_msg.py.em', package_name=package_name, interface_path=interface_path, - message=service.response_message, import_statements=import_statements, type_hash=type_hash) + message=service.event_message, import_statements=import_statements, + type_hash=type_hash['event_message']) }@ @@ -51,6 +54,8 @@ class Metaclass_@(service.namespaced_type.name)(type): class @(service.namespaced_type.name)(metaclass=Metaclass_@(service.namespaced_type.name)): + TYPE_VERSION_HASH = @(bytes.fromhex(type_hash['service'])) + from @('.'.join(service.namespaced_type.namespaces)).@(module_name) import @(service.request_message.structure.namespaced_type.name) as Request from @('.'.join(service.namespaced_type.namespaces)).@(module_name) import @(service.response_message.structure.namespaced_type.name) as Response from @('.'.join(service.namespaced_type.namespaces)).@(module_name) import @(service.event_message.structure.namespaced_type.name) as Event From 7df53a8e1527c28d0a2b03e4116a7e7ca4c0597c Mon Sep 17 00:00:00 2001 From: Emerson Knapp Date: Thu, 9 Feb 2023 19:34:40 -0800 Subject: [PATCH 4/5] Add toplevel hash for Action Signed-off-by: Emerson Knapp --- rosidl_generator_py/resource/_action.py.em | 1 + 1 file changed, 1 insertion(+) diff --git a/rosidl_generator_py/resource/_action.py.em b/rosidl_generator_py/resource/_action.py.em index 20f5321f..c9b3706f 100644 --- a/rosidl_generator_py/resource/_action.py.em +++ b/rosidl_generator_py/resource/_action.py.em @@ -76,6 +76,7 @@ class Metaclass_@(action.namespaced_type.name)(type): class @(action.namespaced_type.name)(metaclass=Metaclass_@(action.namespaced_type.name)): + TYPE_VERSION_HASH = @(bytes.fromhex(type_hash['action'])) # The goal message defined in the action definition. from @('.'.join(action.namespaced_type.namespaces)).@(module_name) import @(action.goal.structure.namespaced_type.name) as Goal From 0aeb16dc7e26eb060b1f782fd421fe92cd9137fd Mon Sep 17 00:00:00 2001 From: Emerson Knapp Date: Thu, 23 Feb 2023 17:58:29 -0800 Subject: [PATCH 5/5] Commenting out for now since values are no good in latest iteration Signed-off-by: Emerson Knapp --- rosidl_generator_py/resource/_action.py.em | 2 +- rosidl_generator_py/resource/_msg.py.em | 2 +- rosidl_generator_py/resource/_srv.py.em | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/rosidl_generator_py/resource/_action.py.em b/rosidl_generator_py/resource/_action.py.em index c9b3706f..63290528 100644 --- a/rosidl_generator_py/resource/_action.py.em +++ b/rosidl_generator_py/resource/_action.py.em @@ -76,7 +76,7 @@ class Metaclass_@(action.namespaced_type.name)(type): class @(action.namespaced_type.name)(metaclass=Metaclass_@(action.namespaced_type.name)): - TYPE_VERSION_HASH = @(bytes.fromhex(type_hash['action'])) + TYPE_VERSION_HASH = @(type_hash['action']) # The goal message defined in the action definition. from @('.'.join(action.namespaced_type.namespaces)).@(module_name) import @(action.goal.structure.namespaced_type.name) as Goal diff --git a/rosidl_generator_py/resource/_msg.py.em b/rosidl_generator_py/resource/_msg.py.em index 2779b165..e6f30123 100644 --- a/rosidl_generator_py/resource/_msg.py.em +++ b/rosidl_generator_py/resource/_msg.py.em @@ -254,7 +254,7 @@ string@ @[end for]@ } - TYPE_VERSION_HASH = @(bytes.fromhex(type_hash['message'])) + TYPE_VERSION_HASH = @(type_hash['message']) SLOT_TYPES = ( @[for member in message.structure.members]@ diff --git a/rosidl_generator_py/resource/_srv.py.em b/rosidl_generator_py/resource/_srv.py.em index 75333248..62f61f20 100644 --- a/rosidl_generator_py/resource/_srv.py.em +++ b/rosidl_generator_py/resource/_srv.py.em @@ -54,7 +54,7 @@ class Metaclass_@(service.namespaced_type.name)(type): class @(service.namespaced_type.name)(metaclass=Metaclass_@(service.namespaced_type.name)): - TYPE_VERSION_HASH = @(bytes.fromhex(type_hash['service'])) + TYPE_VERSION_HASH = @(type_hash['service']) from @('.'.join(service.namespaced_type.namespaces)).@(module_name) import @(service.request_message.structure.namespaced_type.name) as Request from @('.'.join(service.namespaced_type.namespaces)).@(module_name) import @(service.response_message.structure.namespaced_type.name) as Response