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 77fbf875..63290528 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) + 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) + 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) + 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) + 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) + 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) + message=action.feedback_message, import_statements=import_statements, + type_hash=type_hash['feedback_message']) }@ @@ -70,6 +76,7 @@ class Metaclass_@(action.namespaced_type.name)(type): class @(action.namespaced_type.name)(metaclass=Metaclass_@(action.namespaced_type.name)): + 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/_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..e6f30123 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['message']) + 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..62f61f20 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) + 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) + 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.event_message, import_statements=import_statements) + 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 = @(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