From e25750db3d7735947cad24f630d135ba02db5e59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Hern=C3=A1ndez=20Cordero?= Date: Thu, 22 Aug 2024 10:29:46 +0200 Subject: [PATCH] Support empy3 and empy4 (#821) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Alejandro Hernández Cordero --- .../rosidl_adapter/resource/__init__.py | 43 +++++++++++++---- rosidl_pycommon/rosidl_pycommon/__init__.py | 48 ++++++++++++++----- 2 files changed, 69 insertions(+), 22 deletions(-) diff --git a/rosidl_adapter/rosidl_adapter/resource/__init__.py b/rosidl_adapter/rosidl_adapter/resource/__init__.py index ce3335853..b629021a1 100644 --- a/rosidl_adapter/rosidl_adapter/resource/__init__.py +++ b/rosidl_adapter/rosidl_adapter/resource/__init__.py @@ -18,6 +18,12 @@ import em +try: + from em import Configuration + em_has_configuration = True +except ImportError: + em_has_configuration = False + def expand_template(template_name, data, output_file, encoding='utf-8'): content = evaluate_template(template_name, data) @@ -45,18 +51,31 @@ def evaluate_template(template_name, data): output = StringIO() try: - _interpreter = em.Interpreter( - output=output, - options={ - em.BUFFERED_OPT: True, - em.RAW_OPT: True, - }) - + if em_has_configuration: + config = Configuration( + defaultRoot=template_path, + defaultStdout=output, + deleteOnError=True, + rawErrors=True, + useProxy=True) + _interpreter = em.Interpreter( + config=config, + dispatcher=False) + else: + _interpreter = em.Interpreter( + output=output, + options={ + em.BUFFERED_OPT: True, + em.RAW_OPT: True, + }) with open(template_path, 'r') as h: content = h.read() _interpreter.invoke( 'beforeFile', name=template_name, file=h, locals=data) - _interpreter.string(content, template_path, locals=data) + if em_has_configuration: + _interpreter.string(content, locals=data) + else: + _interpreter.string(content, template_path, locals=data) _interpreter.invoke('afterFile') return output.getvalue() @@ -66,7 +85,8 @@ def evaluate_template(template_name, data): file=sys.stderr) raise finally: - _interpreter.shutdown() + if _interpreter is not None: + _interpreter.shutdown() _interpreter = None @@ -78,7 +98,10 @@ def _evaluate_template(template_name, **kwargs): 'beforeInclude', name=template_path, file=h, locals=kwargs) content = h.read() try: - _interpreter.string(content, template_path, kwargs) + if em_has_configuration: + _interpreter.string(content, locals=kwargs) + else: + _interpreter.string(content, template_path, kwargs) except Exception as e: # noqa: F841 print( f"{e.__class__.__name__} processing template '{template_name}': " diff --git a/rosidl_pycommon/rosidl_pycommon/__init__.py b/rosidl_pycommon/rosidl_pycommon/__init__.py index 3fecd8c72..36d887113 100644 --- a/rosidl_pycommon/rosidl_pycommon/__init__.py +++ b/rosidl_pycommon/rosidl_pycommon/__init__.py @@ -20,6 +20,13 @@ import sys import em + +try: + from em import Configuration + em_has_configuration = True +except ImportError: + em_has_configuration = False + from rosidl_parser.definition import IdlLocator from rosidl_parser.parser import parse_idl_file @@ -146,20 +153,31 @@ def expand_template( 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) + global interpreter + output = StringIO() + if em_has_configuration: + config = Configuration( + defaultRoot=template_path, + defaultStdout=output, + deleteOnError=True, + rawErrors=True, + useProxy=True) + interpreter = em.Interpreter( + config=config, + dispatcher=False) + else: + interpreter = em.Interpreter( + output=output, + options={ + em.BUFFERED_OPT: True, + em.RAW_OPT: True, + }, + ) + # create copy before manipulating data = dict(data) _add_helper_functions(data) @@ -169,7 +187,10 @@ def expand_template( template_content = h.read() interpreter.invoke( 'beforeFile', name=template_name, file=h, locals=data) - interpreter.string(template_content, template_path, locals=data) + if em_has_configuration: + interpreter.string(template_content, locals=data) + else: + interpreter.string(template_content, template_path, locals=data) interpreter.invoke('afterFile') except Exception as e: # noqa: F841 if os.path.exists(output_file): @@ -218,7 +239,10 @@ def _expand_template(template_name, **kwargs): 'beforeInclude', name=str(template_path), file=h, locals=kwargs) content = h.read() try: - interpreter.string(content, str(template_path), kwargs) + if em_has_configuration: + interpreter.string(content, locals=kwargs) + else: + interpreter.string(content, template_path, locals=kwargs) except Exception as e: # noqa: F841 print(f"{e.__class__.__name__} in template '{template_path}': {e}", file=sys.stderr)