diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 9a4501ee..8bc5e48a 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -12,6 +12,22 @@ jobs: uses: ros-infrastructure/ci/.github/workflows/pytest.yaml@main with: matrix-filter: del(.matrix.os[] | select(contains("windows"))) + + # Dedicated job for testing with empy < 4 + pytest-empy-legacy: + runs-on: ubuntu-latest + name: Test empy < 4 compatibility + steps: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v4 + - name: Install dependencies with empy < 4 + run: | + python -m pip install --upgrade pip + pip install -e .[test] 'empy<4' + - name: Run tests + run: | + python -m pytest test/ -v yamllint: runs-on: ubuntu-latest steps: diff --git a/bloom/generators/debian/generator.py b/bloom/generators/debian/generator.py index 1d33306d..cb0b9213 100644 --- a/bloom/generators/debian/generator.py +++ b/bloom/generators/debian/generator.py @@ -78,6 +78,8 @@ from bloom.logging import is_debug from bloom.logging import warning +from bloom.util import expand_template_em + from bloom.commands.git.patch.common import get_patch_config from bloom.commands.git.patch.common import set_patch_config @@ -534,7 +536,7 @@ def __process_template_folder(path, subs): info("Expanding '{0}' -> '{1}'".format( os.path.relpath(item), os.path.relpath(template_path))) - result = em.expand(template, **subs) + result = expand_template_em(template, subs) # Don't write an empty file if len(result) == 0 and \ os.path.basename(template_path) in ['copyright']: diff --git a/bloom/generators/rpm/generator.py b/bloom/generators/rpm/generator.py index 9162710d..c80d3582 100644 --- a/bloom/generators/rpm/generator.py +++ b/bloom/generators/rpm/generator.py @@ -81,6 +81,7 @@ from bloom.util import code from bloom.util import execute_command +from bloom.util import expand_template_em from bloom.util import maybe_continue try: @@ -89,12 +90,6 @@ debug(traceback.format_exc()) error("rosdistro was not detected, please install it.", exit=True) -try: - import em -except ImportError: - debug(traceback.format_exc()) - error("empy was not detected, please install it.", exit=True) - # Drop the first log prefix for this command enable_drop_first_log_prefix(True) @@ -379,7 +374,7 @@ def __process_template_folder(path, subs): info("Expanding '{0}' -> '{1}'".format( os.path.relpath(item), os.path.relpath(template_path))) - result = em.expand(template, **subs) + result = expand_template_em(template, subs) # Write the result with io.open(template_path, 'w', encoding='utf-8') as f: if sys.version_info.major == 2: diff --git a/bloom/util.py b/bloom/util.py index 7ef46093..78c0a180 100755 --- a/bloom/util.py +++ b/bloom/util.py @@ -84,6 +84,23 @@ to_unicode = str +def expand_template_em(template, subs): + """ + Compatibility function for EmPy 3 and 4. + EmPy 3: em.expand(template, **kwargs) + EmPy 4: em.expand(template, locals=dict) + """ + try: + import em + except ImportError: + error("empy was not detected, please install it.", exit=True) + + if em.__version__.startswith('3'): + return em.expand(template, **subs) + else: + return em.expand(template, locals=subs) + + def flush_stdin(): try: from termios import tcflush, TCIFLUSH diff --git a/setup.py b/setup.py index b46bf3ef..f4f99065 100755 --- a/setup.py +++ b/setup.py @@ -1,6 +1,5 @@ #!/usr/bin/env python -import sys from setuptools import find_packages, setup @@ -20,7 +19,7 @@ install_requires=[ 'catkin_pkg >= 0.4.3', 'setuptools < 82', - 'empy < 4', + 'empy', 'packaging', 'python-dateutil', 'PyYAML', diff --git a/test/unit_tests/test_generators/test_debian/test_generator.py b/test/unit_tests/test_generators/test_debian/test_generator.py index d0eb2723..466fcfb0 100644 --- a/test/unit_tests/test_generators/test_debian/test_generator.py +++ b/test/unit_tests/test_generators/test_debian/test_generator.py @@ -2,9 +2,9 @@ from ....utils.common import redirected_stdio -from bloom.generators.debian.generator import em from bloom.generators.debian.generator import get_changelogs from bloom.generators.debian.generator import format_description +from bloom.util import expand_template_em from catkin_pkg.packages import find_packages @@ -24,7 +24,7 @@ def test_unicode_templating(): assert 'bad_changelog_pkg' in packages chlogs = get_changelogs(packages['bad_changelog_pkg']) template = "@(changelog)" - em.expand(template, {'changelog': chlogs[0][2]}) + expand_template_em(template, {'changelog': chlogs[0][2]}) def test_format_description():