Files
galaxy/test/unit/util/test_fill_template.py
T

102 lines
2.8 KiB
Python

import sys
import pytest
from Cheetah.NameMapper import NotFound
from galaxy.util.template import fill_template
# In Python 3.12 calling `locals()`` inside a comprehension now includes
# variables from outside the comprehension, see
# https://docs.python.org/dev/whatsnew/3.12.html#pep-709-comprehension-inlining
PY312_OR_LATER = sys.version_info[:2] >= (3, 12)
SIMPLE_TEMPLATE = """#for item in $a_list:
echo $item
#end for
"""
FILLED_SIMPLE_TEMPLATE = """ echo 1
echo 2
"""
LIST_COMPREHENSION_TEMPLATE = """#for $i in [1]:
#set $v = [str(_) for _ in [1] if _ == $i]
echo $v[0]
#end for
"""
DICT_COMPREHENSION_TEMPLATE = """#for $i in [1]:
#set $v = {_:_ for _ in [1] if _ == $i}
echo $v[$i]
#end for
"""
SET_COMPR_TEMPLATE = """#for $i in [1]:
#set $v = {_ for _ in [1] if _ == $i}
echo $v.pop()
#end for
"""
GEN_EXPR_TEMPLATE = """#for $i in [1]:
#set $v = list(_ for _ in [1] if _ == $i)
echo $v[0]
#end for
"""
TWO_TO_THREE_TEMPLATE = """#set $a = [x for x in {'a': '1'}.iterkeys()][0]
#set $b = [x for x in {'a': '1'}.iteritems()][0][0]
#set $c = [x for x in {'a': '1'}.itervalues()][0]
$a $b $c"""
INVALID_CHEETAH_SYNTAX = """#if 1 <> 1
1 is not 1
#else
1 is 1
#end if"""
def test_fill_simple_template():
template_str = str(fill_template(SIMPLE_TEMPLATE, {"a_list": [1, 2]}))
assert template_str == FILLED_SIMPLE_TEMPLATE
def test_fill_list_comprehension_template():
if PY312_OR_LATER:
template_str = fill_template(LIST_COMPREHENSION_TEMPLATE, retry=0)
assert template_str == "echo 1\n"
else:
with pytest.raises(NotFound):
fill_template(LIST_COMPREHENSION_TEMPLATE, retry=0)
def test_fill_list_comprehension_template_2():
template_str = fill_template(LIST_COMPREHENSION_TEMPLATE, python_template_version="2", retry=1)
assert template_str == "echo 1\n"
def test_fill_dict_comprehension():
if PY312_OR_LATER:
template_str = fill_template(DICT_COMPREHENSION_TEMPLATE, retry=1)
assert template_str == "echo 1\n"
else:
with pytest.raises(NotFound):
fill_template(DICT_COMPREHENSION_TEMPLATE, retry=1)
def test_set_comprehension():
if PY312_OR_LATER:
template_str = fill_template(SET_COMPR_TEMPLATE, retry=1)
assert template_str == "echo 1\n"
else:
with pytest.raises(NotFound):
fill_template(SET_COMPR_TEMPLATE, retry=1)
def test_gen_expr():
with pytest.raises(NotFound):
fill_template(GEN_EXPR_TEMPLATE, retry=1)
def test_fix_template_two_to_three():
template_str = fill_template(TWO_TO_THREE_TEMPLATE, python_template_version="2", retry=1)
assert template_str == "a a 1"
def test_fix_template_invalid_cheetah():
template_str = fill_template(INVALID_CHEETAH_SYNTAX, python_template_version="2", retry=1)
assert template_str == "1 is 1\n"