From dc8a4b119e60865ace7e7cde901d7d86fe233a02 Mon Sep 17 00:00:00 2001 From: Jacob Perron Date: Mon, 1 Aug 2022 14:31:45 -0700 Subject: [PATCH 1/3] Move common Python functions into new package Deprecate the Python module in rosidl_cmake and move the implementation to the new package rosidl_pycommon. This works towards removing a dependency on rosidl_cmake in generator packages. Signed-off-by: Jacob Perron --- rosidl_cmake/package.xml | 4 +- rosidl_cmake/rosidl_cmake/__init__.py | 194 +------------------ rosidl_pycommon/package.xml | 22 +++ rosidl_pycommon/resource/rosidl_pycommon | 0 rosidl_pycommon/rosidl_pycommon/__init__.py | 203 ++++++++++++++++++++ rosidl_pycommon/setup.cfg | 4 + rosidl_pycommon/setup.py | 28 +++ rosidl_pycommon/test/test_copyright.py | 23 +++ rosidl_pycommon/test/test_flake8.py | 25 +++ rosidl_pycommon/test/test_pep257.py | 23 +++ 10 files changed, 336 insertions(+), 190 deletions(-) create mode 100644 rosidl_pycommon/package.xml create mode 100644 rosidl_pycommon/resource/rosidl_pycommon create mode 100644 rosidl_pycommon/rosidl_pycommon/__init__.py create mode 100644 rosidl_pycommon/setup.cfg create mode 100644 rosidl_pycommon/setup.py create mode 100644 rosidl_pycommon/test/test_copyright.py create mode 100644 rosidl_pycommon/test/test_flake8.py create mode 100644 rosidl_pycommon/test/test_pep257.py diff --git a/rosidl_cmake/package.xml b/rosidl_cmake/package.xml index 3bf2d204b..94898b3e3 100644 --- a/rosidl_cmake/package.xml +++ b/rosidl_cmake/package.xml @@ -16,8 +16,8 @@ ament_cmake python3-empy - rosidl_adapter - rosidl_parser + + rosidl_pycommon ament_lint_auto ament_lint_common diff --git a/rosidl_cmake/rosidl_cmake/__init__.py b/rosidl_cmake/rosidl_cmake/__init__.py index 053d53c72..14e06c41d 100644 --- a/rosidl_cmake/rosidl_cmake/__init__.py +++ b/rosidl_cmake/rosidl_cmake/__init__.py @@ -12,192 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. -from io import StringIO -import json -import os -import pathlib -import re -import sys +import warnings +from rosidl_pycommon import * -import em -from rosidl_parser.definition import IdlLocator -from rosidl_parser.parser import parse_idl_file - - -def convert_camel_case_to_lower_case_underscore(value): - # insert an underscore before any upper case letter - # which is followed by a lower case letter - value = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', value) - # insert an underscore before any upper case letter - # which is preseded by a lower case letter or number - value = re.sub('([a-z0-9])([A-Z])', r'\1_\2', value) - return value.lower() - - -def read_generator_arguments(input_file): - with open(input_file, mode='r', encoding='utf-8') as h: - return json.load(h) - - -def get_newest_modification_time(target_dependencies): - newest_timestamp = None - for dep in target_dependencies: - ts = os.path.getmtime(dep) - if newest_timestamp is None or ts > newest_timestamp: - newest_timestamp = ts - return newest_timestamp - - -def generate_files( - generator_arguments_file, mapping, additional_context=None, - keep_case=False, post_process_callback=None -): - args = read_generator_arguments(generator_arguments_file) - - template_basepath = pathlib.Path(args['template_dir']) - for template_filename in mapping.keys(): - assert (template_basepath / template_filename).exists(), \ - 'Could not find template: ' + template_filename - - latest_target_timestamp = get_newest_modification_time(args['target_dependencies']) - generated_files = [] - - for idl_tuple in args.get('idl_tuples', []): - idl_parts = idl_tuple.rsplit(':', 1) - assert len(idl_parts) == 2 - locator = IdlLocator(*idl_parts) - idl_rel_path = pathlib.Path(idl_parts[1]) - idl_stem = idl_rel_path.stem - if not keep_case: - idl_stem = convert_camel_case_to_lower_case_underscore(idl_stem) - try: - idl_file = parse_idl_file(locator) - for template_file, generated_filename in mapping.items(): - generated_file = os.path.join( - args['output_dir'], str(idl_rel_path.parent), - generated_filename % idl_stem) - generated_files.append(generated_file) - data = { - 'package_name': args['package_name'], - 'interface_path': idl_rel_path, - 'content': idl_file.content, - } - if additional_context is not None: - data.update(additional_context) - expand_template( - os.path.basename(template_file), data, - generated_file, minimum_timestamp=latest_target_timestamp, - template_basepath=template_basepath, - post_process_callback=post_process_callback) - except Exception as e: - print( - 'Error processing idl file: ' + - str(locator.get_absolute_path()), file=sys.stderr) - raise(e) - - return generated_files - - -template_prefix_path = [] - - -def get_template_path(template_name): - global template_prefix_path - for basepath in template_prefix_path: - template_path = basepath / template_name - if template_path.exists(): - return template_path - raise RuntimeError(f"Failed to find template '{template_name}'") - - -interpreter = None - - -def expand_template( - template_name, data, output_file, minimum_timestamp=None, - template_basepath=None, post_process_callback=None -): - # in the legacy API the first argument was the path to the template - if template_basepath is None: - template_name = pathlib.Path(template_name) - template_basepath = template_name.parent - template_name = template_name.name - - global interpreter - output = StringIO() - interpreter = em.Interpreter( - output=output, - options={ - em.BUFFERED_OPT: True, - em.RAW_OPT: True, - }, - ) - - global template_prefix_path - template_prefix_path.append(template_basepath) - template_path = get_template_path(template_name) - - # create copy before manipulating - data = dict(data) - _add_helper_functions(data) - - try: - with template_path.open('r') as h: - template_content = h.read() - interpreter.invoke( - 'beforeFile', name=template_name, file=h, locals=data) - interpreter.string(template_content, template_path, locals=data) - interpreter.invoke('afterFile') - except Exception as e: # noqa: F841 - if os.path.exists(output_file): - os.remove(output_file) - print(f"{e.__class__.__name__} when expanding '{template_name}' into " - f"'{output_file}': {e}", file=sys.stderr) - raise - finally: - template_prefix_path.pop() - - content = output.getvalue() - interpreter.shutdown() - - if post_process_callback: - content = post_process_callback(content) - - # only overwrite file if necessary - # which is either when the timestamp is too old or when the content is different - if os.path.exists(output_file): - timestamp = os.path.getmtime(output_file) - if minimum_timestamp is None or timestamp > minimum_timestamp: - with open(output_file, 'r', encoding='utf-8') as h: - if h.read() == content: - return - else: - # create folder if necessary - try: - os.makedirs(os.path.dirname(output_file)) - except FileExistsError: - pass - - with open(output_file, 'w', encoding='utf-8') as h: - h.write(content) - - -def _add_helper_functions(data): - data['TEMPLATE'] = _expand_template - - -def _expand_template(template_name, **kwargs): - global interpreter - template_path = get_template_path(template_name) - _add_helper_functions(kwargs) - with template_path.open('r') as h: - interpreter.invoke( - 'beforeInclude', name=str(template_path), file=h, locals=kwargs) - content = h.read() - try: - interpreter.string(content, str(template_path), kwargs) - except Exception as e: # noqa: F841 - print(f"{e.__class__.__name__} in template '{template_path}': {e}", - file=sys.stderr) - raise - interpreter.invoke('afterInclude') +warnings.warn( + "The 'rosidl_cmake' Python module is deprecated. Use 'rosidl_pycommon' instead.", + UserWarning +) diff --git a/rosidl_pycommon/package.xml b/rosidl_pycommon/package.xml new file mode 100644 index 000000000..ffd17f43f --- /dev/null +++ b/rosidl_pycommon/package.xml @@ -0,0 +1,22 @@ + + + + rosidl_pycommon + 3.2.1 + Common Python functions used by rosidl packages. + Michel Hidalgo + Shane Loretz + Apache License 2.0 + Jacob Perron + + rosidl_parser + + ament_copyright + ament_flake8 + ament_pep257 + python3-pytest + + + ament_python + + diff --git a/rosidl_pycommon/resource/rosidl_pycommon b/rosidl_pycommon/resource/rosidl_pycommon new file mode 100644 index 000000000..e69de29bb diff --git a/rosidl_pycommon/rosidl_pycommon/__init__.py b/rosidl_pycommon/rosidl_pycommon/__init__.py new file mode 100644 index 000000000..053d53c72 --- /dev/null +++ b/rosidl_pycommon/rosidl_pycommon/__init__.py @@ -0,0 +1,203 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# 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 io import StringIO +import json +import os +import pathlib +import re +import sys + +import em +from rosidl_parser.definition import IdlLocator +from rosidl_parser.parser import parse_idl_file + + +def convert_camel_case_to_lower_case_underscore(value): + # insert an underscore before any upper case letter + # which is followed by a lower case letter + value = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', value) + # insert an underscore before any upper case letter + # which is preseded by a lower case letter or number + value = re.sub('([a-z0-9])([A-Z])', r'\1_\2', value) + return value.lower() + + +def read_generator_arguments(input_file): + with open(input_file, mode='r', encoding='utf-8') as h: + return json.load(h) + + +def get_newest_modification_time(target_dependencies): + newest_timestamp = None + for dep in target_dependencies: + ts = os.path.getmtime(dep) + if newest_timestamp is None or ts > newest_timestamp: + newest_timestamp = ts + return newest_timestamp + + +def generate_files( + generator_arguments_file, mapping, additional_context=None, + keep_case=False, post_process_callback=None +): + args = read_generator_arguments(generator_arguments_file) + + template_basepath = pathlib.Path(args['template_dir']) + for template_filename in mapping.keys(): + assert (template_basepath / template_filename).exists(), \ + 'Could not find template: ' + template_filename + + latest_target_timestamp = get_newest_modification_time(args['target_dependencies']) + generated_files = [] + + for idl_tuple in args.get('idl_tuples', []): + idl_parts = idl_tuple.rsplit(':', 1) + assert len(idl_parts) == 2 + locator = IdlLocator(*idl_parts) + idl_rel_path = pathlib.Path(idl_parts[1]) + idl_stem = idl_rel_path.stem + if not keep_case: + idl_stem = convert_camel_case_to_lower_case_underscore(idl_stem) + try: + idl_file = parse_idl_file(locator) + for template_file, generated_filename in mapping.items(): + generated_file = os.path.join( + args['output_dir'], str(idl_rel_path.parent), + generated_filename % idl_stem) + generated_files.append(generated_file) + data = { + 'package_name': args['package_name'], + 'interface_path': idl_rel_path, + 'content': idl_file.content, + } + if additional_context is not None: + data.update(additional_context) + expand_template( + os.path.basename(template_file), data, + generated_file, minimum_timestamp=latest_target_timestamp, + template_basepath=template_basepath, + post_process_callback=post_process_callback) + except Exception as e: + print( + 'Error processing idl file: ' + + str(locator.get_absolute_path()), file=sys.stderr) + raise(e) + + return generated_files + + +template_prefix_path = [] + + +def get_template_path(template_name): + global template_prefix_path + for basepath in template_prefix_path: + template_path = basepath / template_name + if template_path.exists(): + return template_path + raise RuntimeError(f"Failed to find template '{template_name}'") + + +interpreter = None + + +def expand_template( + template_name, data, output_file, minimum_timestamp=None, + template_basepath=None, post_process_callback=None +): + # in the legacy API the first argument was the path to the template + if template_basepath is None: + template_name = pathlib.Path(template_name) + template_basepath = template_name.parent + template_name = template_name.name + + global interpreter + output = StringIO() + interpreter = em.Interpreter( + output=output, + options={ + em.BUFFERED_OPT: True, + em.RAW_OPT: True, + }, + ) + + global template_prefix_path + template_prefix_path.append(template_basepath) + template_path = get_template_path(template_name) + + # create copy before manipulating + data = dict(data) + _add_helper_functions(data) + + try: + with template_path.open('r') as h: + template_content = h.read() + interpreter.invoke( + 'beforeFile', name=template_name, file=h, locals=data) + interpreter.string(template_content, template_path, locals=data) + interpreter.invoke('afterFile') + except Exception as e: # noqa: F841 + if os.path.exists(output_file): + os.remove(output_file) + print(f"{e.__class__.__name__} when expanding '{template_name}' into " + f"'{output_file}': {e}", file=sys.stderr) + raise + finally: + template_prefix_path.pop() + + content = output.getvalue() + interpreter.shutdown() + + if post_process_callback: + content = post_process_callback(content) + + # only overwrite file if necessary + # which is either when the timestamp is too old or when the content is different + if os.path.exists(output_file): + timestamp = os.path.getmtime(output_file) + if minimum_timestamp is None or timestamp > minimum_timestamp: + with open(output_file, 'r', encoding='utf-8') as h: + if h.read() == content: + return + else: + # create folder if necessary + try: + os.makedirs(os.path.dirname(output_file)) + except FileExistsError: + pass + + with open(output_file, 'w', encoding='utf-8') as h: + h.write(content) + + +def _add_helper_functions(data): + data['TEMPLATE'] = _expand_template + + +def _expand_template(template_name, **kwargs): + global interpreter + template_path = get_template_path(template_name) + _add_helper_functions(kwargs) + with template_path.open('r') as h: + interpreter.invoke( + 'beforeInclude', name=str(template_path), file=h, locals=kwargs) + content = h.read() + try: + interpreter.string(content, str(template_path), kwargs) + except Exception as e: # noqa: F841 + print(f"{e.__class__.__name__} in template '{template_path}': {e}", + file=sys.stderr) + raise + interpreter.invoke('afterInclude') diff --git a/rosidl_pycommon/setup.cfg b/rosidl_pycommon/setup.cfg new file mode 100644 index 000000000..13274b757 --- /dev/null +++ b/rosidl_pycommon/setup.cfg @@ -0,0 +1,4 @@ +[develop] +script_dir=$base/lib/rosidl_pycommon +[install] +install_scripts=$base/lib/rosidl_pycommon diff --git a/rosidl_pycommon/setup.py b/rosidl_pycommon/setup.py new file mode 100644 index 000000000..e2582bdec --- /dev/null +++ b/rosidl_pycommon/setup.py @@ -0,0 +1,28 @@ +from setuptools import find_packages +from setuptools import setup + +package_name = 'rosidl_pycommon' + +setup( + name=package_name, + version='3.2.1', + packages=find_packages(exclude=['test']), + data_files=[ + ('share/ament_index/resource_index/packages', + ['resource/' + package_name]), + ('share/' + package_name, ['package.xml']), + ], + install_requires=['setuptools'], + zip_safe=True, + author='Jacob Perron', + author_email='jacob@openrobotics.org', + maintainer='Michel Hidalgo, Shane Loretz', + maintainer_email='michel@ekumenlabs.com, sloretz@openrobotics.org', + description='Common Python functions used by rosidl packages.', + license='Apache License, Version 2.0', + tests_require=['pytest'], + entry_points={ + 'console_scripts': [ + ], + }, +) diff --git a/rosidl_pycommon/test/test_copyright.py b/rosidl_pycommon/test/test_copyright.py new file mode 100644 index 000000000..a89fa2726 --- /dev/null +++ b/rosidl_pycommon/test/test_copyright.py @@ -0,0 +1,23 @@ +# Copyright 2022 Open Source Robotics Foundation, Inc. +# +# 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 ament_copyright.main import main +import pytest + + +@pytest.mark.copyright +@pytest.mark.linter +def test_copyright(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found errors' diff --git a/rosidl_pycommon/test/test_flake8.py b/rosidl_pycommon/test/test_flake8.py new file mode 100644 index 000000000..648bb70f9 --- /dev/null +++ b/rosidl_pycommon/test/test_flake8.py @@ -0,0 +1,25 @@ +# Copyright 2022 Open Source Robotics Foundation, Inc. +# +# 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 ament_flake8.main import main_with_errors +import pytest + + +@pytest.mark.flake8 +@pytest.mark.linter +def test_flake8(): + rc, errors = main_with_errors(argv=[]) + assert rc == 0, \ + 'Found %d code style errors / warnings:\n' % len(errors) + \ + '\n'.join(errors) diff --git a/rosidl_pycommon/test/test_pep257.py b/rosidl_pycommon/test/test_pep257.py new file mode 100644 index 000000000..7a2a3747e --- /dev/null +++ b/rosidl_pycommon/test/test_pep257.py @@ -0,0 +1,23 @@ +# Copyright 2022 Open Source Robotics Foundation, Inc. +# +# 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 ament_pep257.main import main +import pytest + + +@pytest.mark.linter +@pytest.mark.pep257 +def test_pep257(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found code style errors / warnings' From 6876438c94c1c29d20effb660d33ff34103bafec Mon Sep 17 00:00:00 2001 From: Jacob Perron Date: Mon, 1 Aug 2022 14:44:23 -0700 Subject: [PATCH 2/3] Replace rosidl_cmake imports with rosidl_pycommon Signed-off-by: Jacob Perron --- rosidl_generator_c/CMakeLists.txt | 1 - rosidl_generator_c/package.xml | 2 +- rosidl_generator_c/resource/idl.h.em | 2 +- rosidl_generator_c/resource/idl__functions.c.em | 2 +- rosidl_generator_c/resource/idl__functions.h.em | 2 +- rosidl_generator_c/resource/idl__struct.h.em | 2 +- rosidl_generator_c/resource/idl__type_support.h.em | 2 +- rosidl_generator_c/rosidl_generator_c/__init__.py | 4 ++-- rosidl_generator_cpp/CMakeLists.txt | 2 -- rosidl_generator_cpp/package.xml | 2 +- rosidl_generator_cpp/resource/idl.hpp.em | 2 +- rosidl_generator_cpp/resource/idl__builder.hpp.em | 2 +- rosidl_generator_cpp/resource/idl__struct.hpp.em | 2 +- rosidl_generator_cpp/resource/idl__traits.hpp.em | 2 +- rosidl_generator_cpp/resource/msg__struct.hpp.em | 2 +- rosidl_generator_cpp/resource/msg__traits.hpp.em | 2 +- rosidl_generator_cpp/rosidl_generator_cpp/__init__.py | 2 +- rosidl_typesupport_introspection_c/CMakeLists.txt | 1 - rosidl_typesupport_introspection_c/package.xml | 4 ++-- .../resource/idl__rosidl_typesupport_introspection_c.h.em | 2 +- .../resource/msg__type_support.c.em | 2 +- .../resource/srv__type_support.c.em | 2 +- .../rosidl_typesupport_introspection_c/__init__.py | 2 +- rosidl_typesupport_introspection_cpp/CMakeLists.txt | 1 - rosidl_typesupport_introspection_cpp/package.xml | 4 ++-- .../resource/idl__rosidl_typesupport_introspection_cpp.hpp.em | 2 +- .../resource/msg__type_support.cpp.em | 2 +- .../resource/srv__type_support.cpp.em | 2 +- .../rosidl_typesupport_introspection_cpp/__init__.py | 2 +- 29 files changed, 28 insertions(+), 33 deletions(-) diff --git a/rosidl_generator_c/CMakeLists.txt b/rosidl_generator_c/CMakeLists.txt index 7b9b93be1..236f5bd45 100644 --- a/rosidl_generator_c/CMakeLists.txt +++ b/rosidl_generator_c/CMakeLists.txt @@ -14,7 +14,6 @@ endif() find_package(ament_cmake_python REQUIRED) find_package(ament_cmake_ros REQUIRED) -ament_export_dependencies(rosidl_cmake) ament_export_dependencies(rosidl_typesupport_interface) ament_index_register_resource("rosidl_generator_packages") diff --git a/rosidl_generator_c/package.xml b/rosidl_generator_c/package.xml index 0a8ef60f8..1d642b64e 100644 --- a/rosidl_generator_c/package.xml +++ b/rosidl_generator_c/package.xml @@ -16,7 +16,7 @@ ament_cmake_core python3 - rosidl_cmake + rosidl_pycommon rosidl_typesupport_interface rcutils diff --git a/rosidl_generator_c/resource/idl.h.em b/rosidl_generator_c/resource/idl.h.em index 5bb3bc599..0682824b3 100644 --- a/rosidl_generator_c/resource/idl.h.em +++ b/rosidl_generator_c/resource/idl.h.em @@ -12,7 +12,7 @@ @####################################################################### @ @{ -from rosidl_cmake import convert_camel_case_to_lower_case_underscore +from rosidl_pycommon import convert_camel_case_to_lower_case_underscore include_parts = [package_name] + list(interface_path.parents[0].parts) + \ [convert_camel_case_to_lower_case_underscore(interface_path.stem)] include_parts_detail = [package_name] + list(interface_path.parents[0].parts) + [ diff --git a/rosidl_generator_c/resource/idl__functions.c.em b/rosidl_generator_c/resource/idl__functions.c.em index 934b13a6f..86b75e507 100644 --- a/rosidl_generator_c/resource/idl__functions.c.em +++ b/rosidl_generator_c/resource/idl__functions.c.em @@ -11,7 +11,7 @@ @# - content (IdlContent, list of elements, e.g. Messages or Services) @####################################################################### @{ -from rosidl_cmake import convert_camel_case_to_lower_case_underscore +from rosidl_pycommon import convert_camel_case_to_lower_case_underscore include_parts = [package_name] + list(interface_path.parents[0].parts) + [ 'detail', convert_camel_case_to_lower_case_underscore(interface_path.stem)] include_base = '/'.join(include_parts) diff --git a/rosidl_generator_c/resource/idl__functions.h.em b/rosidl_generator_c/resource/idl__functions.h.em index 7d550ec04..ef2a933da 100644 --- a/rosidl_generator_c/resource/idl__functions.h.em +++ b/rosidl_generator_c/resource/idl__functions.h.em @@ -11,7 +11,7 @@ @# - content (IdlContent, list of elements, e.g. Messages or Services) @####################################################################### @{ -from rosidl_cmake import convert_camel_case_to_lower_case_underscore +from rosidl_pycommon import convert_camel_case_to_lower_case_underscore include_parts = [package_name] + list(interface_path.parents[0].parts) + [ 'detail', convert_camel_case_to_lower_case_underscore(interface_path.stem)] header_guard_variable = '__'.join([x.upper() for x in include_parts]) + \ diff --git a/rosidl_generator_c/resource/idl__struct.h.em b/rosidl_generator_c/resource/idl__struct.h.em index 881c755b7..dca413791 100644 --- a/rosidl_generator_c/resource/idl__struct.h.em +++ b/rosidl_generator_c/resource/idl__struct.h.em @@ -11,7 +11,7 @@ @# - content (IdlContent, list of elements, e.g. Messages or Services) @####################################################################### @{ -from rosidl_cmake import convert_camel_case_to_lower_case_underscore +from rosidl_pycommon import convert_camel_case_to_lower_case_underscore include_parts = [package_name] + list(interface_path.parents[0].parts) + [ 'detail', convert_camel_case_to_lower_case_underscore(interface_path.stem)] header_guard_variable = '__'.join([x.upper() for x in include_parts]) + \ diff --git a/rosidl_generator_c/resource/idl__type_support.h.em b/rosidl_generator_c/resource/idl__type_support.h.em index dd4478c4e..259f05645 100644 --- a/rosidl_generator_c/resource/idl__type_support.h.em +++ b/rosidl_generator_c/resource/idl__type_support.h.em @@ -11,7 +11,7 @@ @# - content (IdlContent, list of elements, e.g. Messages or Services) @####################################################################### @{ -from rosidl_cmake import convert_camel_case_to_lower_case_underscore +from rosidl_pycommon import convert_camel_case_to_lower_case_underscore include_parts = [package_name] + list(interface_path.parents[0].parts) + [ 'detail', convert_camel_case_to_lower_case_underscore(interface_path.stem)] header_guard_variable = '__'.join([x.upper() for x in include_parts]) + \ diff --git a/rosidl_generator_c/rosidl_generator_c/__init__.py b/rosidl_generator_c/rosidl_generator_c/__init__.py index 838cc3766..02aa5e884 100644 --- a/rosidl_generator_c/rosidl_generator_c/__init__.py +++ b/rosidl_generator_c/rosidl_generator_c/__init__.py @@ -12,8 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -from rosidl_cmake import convert_camel_case_to_lower_case_underscore -from rosidl_cmake import generate_files from rosidl_parser.definition import AbstractGenericString from rosidl_parser.definition import AbstractSequence from rosidl_parser.definition import AbstractString @@ -24,6 +22,8 @@ from rosidl_parser.definition import CHARACTER_TYPES from rosidl_parser.definition import NamespacedType from rosidl_parser.definition import OCTET_TYPE +from rosidl_pycommon import convert_camel_case_to_lower_case_underscore +from rosidl_pycommon import generate_files def generate_c(generator_arguments_file): diff --git a/rosidl_generator_cpp/CMakeLists.txt b/rosidl_generator_cpp/CMakeLists.txt index 6097af81b..57edc182d 100644 --- a/rosidl_generator_cpp/CMakeLists.txt +++ b/rosidl_generator_cpp/CMakeLists.txt @@ -5,8 +5,6 @@ project(rosidl_generator_cpp) find_package(ament_cmake REQUIRED) find_package(ament_cmake_python REQUIRED) -ament_export_dependencies(rosidl_cmake) - ament_index_register_resource("rosidl_generator_packages") ament_python_install_package(${PROJECT_NAME}) diff --git a/rosidl_generator_cpp/package.xml b/rosidl_generator_cpp/package.xml index 989cd6269..6a10d21ed 100644 --- a/rosidl_generator_cpp/package.xml +++ b/rosidl_generator_cpp/package.xml @@ -14,7 +14,7 @@ ament_cmake_core python3 - rosidl_cmake + rosidl_pycommon rosidl_generator_c diff --git a/rosidl_generator_cpp/resource/idl.hpp.em b/rosidl_generator_cpp/resource/idl.hpp.em index acb84945e..71b8a1be1 100644 --- a/rosidl_generator_cpp/resource/idl.hpp.em +++ b/rosidl_generator_cpp/resource/idl.hpp.em @@ -11,7 +11,7 @@ @####################################################################### @ @{ -from rosidl_cmake import convert_camel_case_to_lower_case_underscore +from rosidl_pycommon import convert_camel_case_to_lower_case_underscore include_parts = [package_name] + list(interface_path.parents[0].parts) + \ [convert_camel_case_to_lower_case_underscore(interface_path.stem)] include_parts_detail = [package_name] + list(interface_path.parents[0].parts) + [ diff --git a/rosidl_generator_cpp/resource/idl__builder.hpp.em b/rosidl_generator_cpp/resource/idl__builder.hpp.em index b40a5dcf3..6a50661bc 100644 --- a/rosidl_generator_cpp/resource/idl__builder.hpp.em +++ b/rosidl_generator_cpp/resource/idl__builder.hpp.em @@ -11,7 +11,7 @@ @# - content (IdlContent, list of elements, e.g. Messages or Services) @####################################################################### @{ -from rosidl_cmake import convert_camel_case_to_lower_case_underscore +from rosidl_pycommon import convert_camel_case_to_lower_case_underscore include_parts = [package_name] + list(interface_path.parents[0].parts) + [ 'detail', convert_camel_case_to_lower_case_underscore(interface_path.stem)] include_base = '/'.join(include_parts) diff --git a/rosidl_generator_cpp/resource/idl__struct.hpp.em b/rosidl_generator_cpp/resource/idl__struct.hpp.em index 602d47d71..e29a1f89e 100644 --- a/rosidl_generator_cpp/resource/idl__struct.hpp.em +++ b/rosidl_generator_cpp/resource/idl__struct.hpp.em @@ -11,7 +11,7 @@ @# - content (IdlContent, list of elements, e.g. Messages or Services) @####################################################################### @{ -from rosidl_cmake import convert_camel_case_to_lower_case_underscore +from rosidl_pycommon import convert_camel_case_to_lower_case_underscore include_parts = [package_name] + list(interface_path.parents[0].parts) + [ 'detail', convert_camel_case_to_lower_case_underscore(interface_path.stem)] header_guard_variable = '__'.join([x.upper() for x in include_parts]) + \ diff --git a/rosidl_generator_cpp/resource/idl__traits.hpp.em b/rosidl_generator_cpp/resource/idl__traits.hpp.em index dd460cf72..35f008300 100644 --- a/rosidl_generator_cpp/resource/idl__traits.hpp.em +++ b/rosidl_generator_cpp/resource/idl__traits.hpp.em @@ -11,7 +11,7 @@ @# - content (IdlContent, list of elements, e.g. Messages or Services) @####################################################################### @{ -from rosidl_cmake import convert_camel_case_to_lower_case_underscore +from rosidl_pycommon import convert_camel_case_to_lower_case_underscore include_parts = [package_name] + list(interface_path.parents[0].parts) + [ 'detail', convert_camel_case_to_lower_case_underscore(interface_path.stem)] include_base = '/'.join(include_parts) diff --git a/rosidl_generator_cpp/resource/msg__struct.hpp.em b/rosidl_generator_cpp/resource/msg__struct.hpp.em index 5f2e10b38..5f8a82c82 100644 --- a/rosidl_generator_cpp/resource/msg__struct.hpp.em +++ b/rosidl_generator_cpp/resource/msg__struct.hpp.em @@ -30,7 +30,7 @@ msvc_common_macros = ('DELETE', 'ERROR', 'NO_ERROR') @# Collect necessary include directives for all members @{ from collections import OrderedDict -from rosidl_cmake import convert_camel_case_to_lower_case_underscore +from rosidl_pycommon import convert_camel_case_to_lower_case_underscore includes = OrderedDict() for member in message.structure.members: type_ = member.type diff --git a/rosidl_generator_cpp/resource/msg__traits.hpp.em b/rosidl_generator_cpp/resource/msg__traits.hpp.em index 3243d99d7..9fa1923dd 100644 --- a/rosidl_generator_cpp/resource/msg__traits.hpp.em +++ b/rosidl_generator_cpp/resource/msg__traits.hpp.em @@ -21,7 +21,7 @@ message_fully_qualified_name = '/'.join(message.structure.namespaced_type.namesp @# Collect necessary include directives for all members @{ from collections import OrderedDict -from rosidl_cmake import convert_camel_case_to_lower_case_underscore +from rosidl_pycommon import convert_camel_case_to_lower_case_underscore includes = OrderedDict() for member in message.structure.members: type_ = member.type diff --git a/rosidl_generator_cpp/rosidl_generator_cpp/__init__.py b/rosidl_generator_cpp/rosidl_generator_cpp/__init__.py index 9fbbf62f0..9ea047290 100644 --- a/rosidl_generator_cpp/rosidl_generator_cpp/__init__.py +++ b/rosidl_generator_cpp/rosidl_generator_cpp/__init__.py @@ -14,7 +14,6 @@ from ast import literal_eval -from rosidl_cmake import generate_files from rosidl_parser.definition import AbstractGenericString from rosidl_parser.definition import AbstractNestedType from rosidl_parser.definition import AbstractSequence @@ -26,6 +25,7 @@ from rosidl_parser.definition import FLOATING_POINT_TYPES from rosidl_parser.definition import NamespacedType from rosidl_parser.definition import UnboundedSequence +from rosidl_pycommon import generate_files def generate_cpp(generator_arguments_file): diff --git a/rosidl_typesupport_introspection_c/CMakeLists.txt b/rosidl_typesupport_introspection_c/CMakeLists.txt index 39c54fc11..65acbf504 100644 --- a/rosidl_typesupport_introspection_c/CMakeLists.txt +++ b/rosidl_typesupport_introspection_c/CMakeLists.txt @@ -14,7 +14,6 @@ endif() find_package(ament_cmake_python REQUIRED) find_package(ament_cmake_ros REQUIRED) -ament_export_dependencies(rosidl_cmake) ament_export_dependencies(rosidl_runtime_c) # The reason the impl folder is exported is that it contains the implementation # for the get_*_type_support_handle functions and defines the opensplice diff --git a/rosidl_typesupport_introspection_c/package.xml b/rosidl_typesupport_introspection_c/package.xml index 0a9a9a86c..fded7960e 100644 --- a/rosidl_typesupport_introspection_c/package.xml +++ b/rosidl_typesupport_introspection_c/package.xml @@ -16,14 +16,14 @@ ament_cmake python3 - rosidl_cmake + rosidl_pycommon rosidl_runtime_c ament_index_python rosidl_cli - rosidl_cmake rosidl_parser + rosidl_pycommon ament_lint_auto ament_lint_common diff --git a/rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em b/rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em index 2c6bf9baa..172dc5a09 100644 --- a/rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em +++ b/rosidl_typesupport_introspection_c/resource/idl__rosidl_typesupport_introspection_c.h.em @@ -11,7 +11,7 @@ @# - content (IdlContent, list of elements, e.g. Messages or Services) @####################################################################### @{ -from rosidl_cmake import convert_camel_case_to_lower_case_underscore +from rosidl_pycommon import convert_camel_case_to_lower_case_underscore include_parts = [package_name] + list(interface_path.parents[0].parts) + [ 'detail', convert_camel_case_to_lower_case_underscore(interface_path.stem)] header_guard_variable = '__'.join([x.upper() for x in include_parts]) + \ diff --git a/rosidl_typesupport_introspection_c/resource/msg__type_support.c.em b/rosidl_typesupport_introspection_c/resource/msg__type_support.c.em index 5a213df01..f0004338a 100644 --- a/rosidl_typesupport_introspection_c/resource/msg__type_support.c.em +++ b/rosidl_typesupport_introspection_c/resource/msg__type_support.c.em @@ -1,6 +1,6 @@ @# Included from rosidl_typesupport_introspection_c/resource/idl__type_support.c.em @{ -from rosidl_cmake import convert_camel_case_to_lower_case_underscore +from rosidl_pycommon import convert_camel_case_to_lower_case_underscore from rosidl_generator_c import idl_structure_type_to_c_include_prefix from rosidl_parser.definition import AbstractGenericString from rosidl_parser.definition import AbstractNestedType diff --git a/rosidl_typesupport_introspection_c/resource/srv__type_support.c.em b/rosidl_typesupport_introspection_c/resource/srv__type_support.c.em index 44102566d..3922e5830 100644 --- a/rosidl_typesupport_introspection_c/resource/srv__type_support.c.em +++ b/rosidl_typesupport_introspection_c/resource/srv__type_support.c.em @@ -14,7 +14,7 @@ TEMPLATE( }@ @{ -from rosidl_cmake import convert_camel_case_to_lower_case_underscore +from rosidl_pycommon import convert_camel_case_to_lower_case_underscore include_parts = [package_name] + list(interface_path.parents[0].parts) + [ 'detail', convert_camel_case_to_lower_case_underscore(interface_path.stem)] include_base = '/'.join(include_parts) diff --git a/rosidl_typesupport_introspection_c/rosidl_typesupport_introspection_c/__init__.py b/rosidl_typesupport_introspection_c/rosidl_typesupport_introspection_c/__init__.py index fba92d457..8a728f9a5 100644 --- a/rosidl_typesupport_introspection_c/rosidl_typesupport_introspection_c/__init__.py +++ b/rosidl_typesupport_introspection_c/rosidl_typesupport_introspection_c/__init__.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from rosidl_cmake import generate_files +from rosidl_pycommon import generate_files def generate_c(generator_arguments_file: str): diff --git a/rosidl_typesupport_introspection_cpp/CMakeLists.txt b/rosidl_typesupport_introspection_cpp/CMakeLists.txt index aa78e4d22..12892d1bb 100644 --- a/rosidl_typesupport_introspection_cpp/CMakeLists.txt +++ b/rosidl_typesupport_introspection_cpp/CMakeLists.txt @@ -16,7 +16,6 @@ find_package(ament_cmake_ros REQUIRED) find_package(rosidl_runtime_cpp REQUIRED) find_package(rosidl_typesupport_introspection_c REQUIRED) -ament_export_dependencies(rosidl_cmake) ament_export_dependencies(rosidl_runtime_c) ament_export_dependencies(rosidl_runtime_cpp) ament_export_dependencies(rosidl_typesupport_interface) diff --git a/rosidl_typesupport_introspection_cpp/package.xml b/rosidl_typesupport_introspection_cpp/package.xml index a1613f3bc..edf09c7c1 100644 --- a/rosidl_typesupport_introspection_cpp/package.xml +++ b/rosidl_typesupport_introspection_cpp/package.xml @@ -16,7 +16,7 @@ ament_cmake python3 - rosidl_cmake + rosidl_pycommon rosidl_runtime_c rosidl_runtime_cpp @@ -26,8 +26,8 @@ ament_index_python rosidl_cli - rosidl_cmake rosidl_parser + rosidl_pycommon rosidl_typesupport_interface rosidl_typesupport_introspection_c diff --git a/rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.hpp.em b/rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.hpp.em index d496b3292..4e8ee6f23 100644 --- a/rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.hpp.em +++ b/rosidl_typesupport_introspection_cpp/resource/idl__rosidl_typesupport_introspection_cpp.hpp.em @@ -11,7 +11,7 @@ @# - content (IdlContent, list of elements, e.g. Messages or Services) @####################################################################### @{ -from rosidl_cmake import convert_camel_case_to_lower_case_underscore +from rosidl_pycommon import convert_camel_case_to_lower_case_underscore include_parts = [package_name] + list(interface_path.parents[0].parts) + [ 'detail', convert_camel_case_to_lower_case_underscore(interface_path.stem)] header_guard_variable = '__'.join([x.upper() for x in include_parts]) + \ diff --git a/rosidl_typesupport_introspection_cpp/resource/msg__type_support.cpp.em b/rosidl_typesupport_introspection_cpp/resource/msg__type_support.cpp.em index 60cc226c4..2ebcc9274 100644 --- a/rosidl_typesupport_introspection_cpp/resource/msg__type_support.cpp.em +++ b/rosidl_typesupport_introspection_cpp/resource/msg__type_support.cpp.em @@ -9,7 +9,7 @@ from rosidl_parser.definition import Array from rosidl_parser.definition import BasicType from rosidl_parser.definition import BoundedSequence from rosidl_parser.definition import NamespacedType -from rosidl_cmake import convert_camel_case_to_lower_case_underscore +from rosidl_pycommon import convert_camel_case_to_lower_case_underscore include_parts = [package_name] + list(interface_path.parents[0].parts) + [ 'detail', convert_camel_case_to_lower_case_underscore(interface_path.stem)] diff --git a/rosidl_typesupport_introspection_cpp/resource/srv__type_support.cpp.em b/rosidl_typesupport_introspection_cpp/resource/srv__type_support.cpp.em index 3495910de..0e2883e1d 100644 --- a/rosidl_typesupport_introspection_cpp/resource/srv__type_support.cpp.em +++ b/rosidl_typesupport_introspection_cpp/resource/srv__type_support.cpp.em @@ -14,7 +14,7 @@ TEMPLATE( }@ @{ -from rosidl_cmake import convert_camel_case_to_lower_case_underscore +from rosidl_pycommon import convert_camel_case_to_lower_case_underscore include_parts = [package_name] + list(interface_path.parents[0].parts) + [ 'detail', convert_camel_case_to_lower_case_underscore(interface_path.stem)] include_base = '/'.join(include_parts) diff --git a/rosidl_typesupport_introspection_cpp/rosidl_typesupport_introspection_cpp/__init__.py b/rosidl_typesupport_introspection_cpp/rosidl_typesupport_introspection_cpp/__init__.py index b8a901d7e..7457e2a60 100644 --- a/rosidl_typesupport_introspection_cpp/rosidl_typesupport_introspection_cpp/__init__.py +++ b/rosidl_typesupport_introspection_cpp/rosidl_typesupport_introspection_cpp/__init__.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from rosidl_cmake import generate_files +from rosidl_pycommon import generate_files def generate_cpp(generator_arguments_file: str): From 1b49fb7a0cc0a6952c97bca34550349fd94ed90c Mon Sep 17 00:00:00 2001 From: Jacob Perron Date: Tue, 2 Aug 2022 12:01:25 -0700 Subject: [PATCH 3/3] Lint Signed-off-by: Jacob Perron --- rosidl_cmake/rosidl_cmake/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rosidl_cmake/rosidl_cmake/__init__.py b/rosidl_cmake/rosidl_cmake/__init__.py index 14e06c41d..3dccb6d86 100644 --- a/rosidl_cmake/rosidl_cmake/__init__.py +++ b/rosidl_cmake/rosidl_cmake/__init__.py @@ -13,7 +13,8 @@ # limitations under the License. import warnings -from rosidl_pycommon import * + +from rosidl_pycommon import * # noqa: F401, F403 warnings.warn( "The 'rosidl_cmake' Python module is deprecated. Use 'rosidl_pycommon' instead.",