Calculate tag have to be single in a template file now. fixed #1

master
Иванов Денис 4 years ago
parent 564e6a0a0d
commit a70c39ed37

@ -838,6 +838,10 @@ class CalculateExtension(Extension):
self.parameters_processor = parameters_processor
self.template_type = DIR
# Флаг, указывающий, что тег calculate уже был разобран. Нужен для
# того, чтобы проверять единственность тега calculate.
self.calculate_parsed = False
self.tags = {'calculate', 'save', 'set_var'}
self.CONDITION_TOKENS_TYPES = {'eq', 'ne', 'lt', 'gt', 'lteq', 'gteq'}
self.LITERAL_TOKENS_TYPES = {'string', 'integer', 'float'}
@ -908,10 +912,15 @@ class CalculateExtension(Extension):
def parse_calculate(self):
'''Метод для разбора тега calculate, содержащего значения параметров и
условия выполнения шаблона.'''
expect_comma_flag = False
lineno = next(self.stream).lineno
if self.calculate_parsed:
raise TemplateSyntaxError(
"template can only have one calculate tag.",
lineno=lineno)
expect_comma_flag = False
while self.stream.current.type != 'block_end':
if expect_comma_flag:
self.stream.expect('comma')
@ -967,6 +976,7 @@ class CalculateExtension(Extension):
# lineno=lineno)
# return nodes.Output([save_node], lineno=lineno)
self.calculate_parsed = True
return nodes.Output([nodes.Const('')], lineno=lineno)
def _is_variable_name(self, token):
@ -1396,6 +1406,7 @@ class TemplateEngine:
self._parameters_object
self.calculate_extension.template_type = template_type
self.calculate_extension.calculate_parsed = False
template = self.environment.get_template(template_path)
self.parameters_processor.check_postparse_parameters()
@ -1423,6 +1434,7 @@ class TemplateEngine:
self._parameters_object
self.calculate_extension.template_type = template_type
self.calculate_extension.calculate_parsed = False
template = self.environment.from_string(string)
self.parameters_processor.check_postparse_parameters()

@ -1,7 +1,8 @@
import os
import pytest
from calculate.templates.template_engine import TemplateEngine, Variables,\
ConditionFailed, DIR, FILE
ConditionFailed, DIR, FILE,\
TemplateSyntaxError
from calculate.templates.template_processor import TemplateExecutor
@ -25,6 +26,14 @@ class TestTemplateEngine():
output_parameters.path == '/etc/path' and
output_parameters.force)
def test_if_an_input_template_contains_more_than_one_calculate_tag__the_template_engine_raises_the_TemplateSyntaxError_exception(self):
input_template = '''{% calculate name = 'filename' %}
{% calculate path = '/etc/path'%}
{% calculate force %}'''
template_engine = TemplateEngine(appends_set=APPENDS_SET)
with pytest.raises(TemplateSyntaxError):
template_engine.process_template_from_string(input_template, DIR)
def test_if_an_input_template_binded_with_datavars_module__variables_available_in_a_template(self):
input_template = '''{% calculate name = vars.var_1, path = vars.var_2, autoupdate %}'''
datavars_module = Variables({'vars':
@ -71,10 +80,8 @@ class TestTemplateEngine():
pytest.fail('Unexpected ConditionFailed exception.')
def test_if_an_input_template_contains_several_conditions_and_it_is_False__the_template_engine_raises_ConditionFailed_exception(self):
input_template = '''{% calculate name = vars.var_1 %}
{% calculate env = 'other_vars'%}
{% calculate var_4 < var_5 %}
{% calculate path = var_3, var_6 == 'value' %}'''
input_template = '''{% calculate name = vars.var_1, env = 'other_vars',
var_4 < var_5, path = var_3, var_6 == 'value' %}'''
datavars_module = Variables({'vars':
Variables({'var_1': 'filename',
@ -90,10 +97,9 @@ class TestTemplateEngine():
template_engine.process_template_from_string(input_template, DIR)
def test_if_an_input_template_contains_several_calculate_tags__the_template_engine_will_parse_them_all_and_will_contain_all_parameters_and_result_of_all_conditions(self):
input_template = '''{% calculate name = vars.var_1 %}
{% calculate env = 'other_vars, vars' %}
{% calculate var_4 > var_5 %}
{% calculate path = var_3, var_6 == 'value' %}'''
input_template = '''{% calculate name = vars.var_1,
env = 'other_vars, vars', var_4 > var_5,
path = var_3, var_6 == 'value' %}'''
datavars_module = Variables({'vars':
Variables({'var_1': 'filename',
'var_2': '/etc/path'}),
@ -111,9 +117,9 @@ class TestTemplateEngine():
output_parameters.env == {'other_vars', 'vars'})
def test_if_an_input_template_contains_variables_in_its_text__the_rendered_text_will_contain_values_of_this_variables(self):
input_template = '''{% calculate name = 'filename', force -%}
input_template = '''{% calculate name = 'filename', force,
env = 'vars_1' -%}
parameter_1 = {{ vars_2.var_3 }}
{% calculate env = 'vars_1' -%}
parameter_2 = {{ vars_2.var_4 }}
parameter_3 = {{ var_1 }}'''
output_text = '''parameter_1 = value_1
@ -193,8 +199,7 @@ class TestTemplateEngine():
def test_if_an_input_template_calculate_tag_contains_pkg_function_with_an_existing_package_in_its_argument__the_pkg_function_returns_version_value_of_the_package_from_package_parameter_without_any_exceptions(self):
input_template = '''{% calculate name = 'filename',
package='test-category/test-package', force -%}
{% calculate pkg() < 2.7 -%}'''
package='test-category/test-package', force, pkg() < 2.7 -%}'''
try:
template_engine = TemplateEngine(appends_set=APPENDS_SET,

@ -1,2 +1,2 @@
{% calculate append = 'skip', action = 'install', package = 'test-category/new-package' %}
{% calculate autoupdate %}
{% calculate append = 'skip', action = 'install',
package = 'test-category/new-package', autoupdate %}

@ -1,2 +1,2 @@
{% calculate append = 'skip', package = 'test-category/test-package' %}
{% calculate path = '/etc' %}
{% calculate append = 'skip', package = 'test-category/test-package',
path = '/etc' %}

@ -1,2 +1,2 @@
{% calculate append = 'skip', package = 'test-category/test-package' %}
{% calculate action = 'install' %}
{% calculate append = 'skip', package = 'test-category/test-package',
action = 'install' %}

@ -1,2 +1,2 @@
{% calculate append = 'skip', package = 'test-category/test-package' %}
{% calculate action = 'update' %}
{% calculate append = 'skip', package = 'test-category/test-package',
action = 'update' %}

@ -1,2 +1,2 @@
{% calculate append = 'skip', action = 'install', package = 'test-category/test-package' %}
{% calculate path = '/etc' %}
{% calculate append = 'skip', action = 'install',
package = 'test-category/test-package', path = '/etc' %}

@ -1,5 +1,5 @@
{% calculate append = 'join', format = 'bind' %}
{% calculate merge = 'test-category/test-package, test-category/new-package' -%}
{% calculate append = 'join', format = 'bind',
merge = 'test-category/test-package, test-category/new-package' -%}
options {
parameter-1 {{ variables.variable_1 }};
parameter-2 {{ variables.variable_2 }};

@ -1,5 +1,5 @@
{% calculate append = 'join', format = 'bind' %}
{% calculate merge = 'test-category/new-package' -%}
{% calculate append = 'join', format = 'bind',
merge = 'test-category/new-package' -%}
options {
parameter-1 {{ variables.variable_1 }};
parameter-2 {{ variables.variable_2 }};

@ -1,5 +1,5 @@
{% calculate append = 'join', format = 'bind' -%}
{% calculate merge = 'test-category/test-package' -%}
{% calculate append = 'join', format = 'bind',
merge = 'test-category/test-package' -%}
options {
parameter-1 {{ variables.variable_1 }};
parameter-2 {{ variables.variable_2 }};

@ -1,5 +1,5 @@
{% calculate append = 'join', format = 'bind' %}
{% calculate merge = 'test-category/test-package' %}
{% calculate append = 'join', format = 'bind',
merge = 'test-category/test-package' %}
options {
parameter-1 {{ variables.variable_1 }};
parameter-2 {{ variables.variable_2 }};

@ -1,5 +1,5 @@
{% calculate append = 'join', format = 'bind' -%}
{% calculate package = 'test-category/test-package' -%}
{% calculate append = 'join', format = 'bind',
package = 'test-category/test-package' -%}
options {
parameter-1 {{ variables.variable_1 }};
parameter-2 {{ variables.variable_2 }};

@ -1,5 +1,5 @@
{% calculate append = 'join', format = 'bind', path = '/etc' -%}
{% calculate install.number > 100 -%}
{% calculate append = 'join', format = 'bind', path = '/etc',
install.number > 100 -%}
options {
parameter-1 {{ variables.variable_1 }};
parameter-2 {{ variables.variable_2 }};

@ -1,2 +1,2 @@
{% calculate append = 'skip', action = 'install', package = 'test-category/test-package' %}
{% calculate path = '/etc' %}
{% calculate append = 'skip', action = 'install',
package = 'test-category/test-package', path = '/etc' %}

@ -1,2 +1,2 @@
{% calculate append = 'skip', action = 'install', package = 'test-category/test-package' %}
{% calculate path = '/etc' %}
{% calculate append = 'skip', action = 'install',
package = 'test-category/test-package', path = '/etc' %}

@ -1,3 +1,2 @@
{% calculate append = 'skip', action = 'install',
package = 'test-category/test-package' %}
{% calculate path = '/etc' %}
package = 'test-category/test-package', path = '/etc' %}

@ -1,3 +1,2 @@
{% calculate append = 'skip', action = 'update',
package = 'test-category/test-package' %}
{% calculate path = '/etc' %}
package = 'test-category/test-package', path = '/etc' %}

@ -1,2 +1 @@
{% calculate append = 'skip', action = 'install' %}
{% calculate path = '/etc' %}
{% calculate append = 'skip', action = 'install', path = '/etc' %}

@ -1,3 +1,2 @@
{% calculate append = 'skip', action = 'update',
package = 'test-category/test-package' %}
{% calculate path = '/etc' %}
package = 'test-category/test-package', path = '/etc' %}

@ -1,2 +1,2 @@
{% calculate append = 'skip', action = 'install', package = 'test-category/test-package' %}
{% calculate path = '/etc' %}
{% calculate append = 'skip', action = 'install',
package = 'test-category/test-package', path = '/etc' %}

@ -1,2 +1,2 @@
{% calculate append = 'skip', action = 'install', package = 'test-category/test-package' %}
{% calculate path = '/etc' %}
{% calculate append = 'skip', action = 'install',
package = 'test-category/test-package', path = '/etc' %}

@ -1,2 +1,2 @@
{% calculate append = 'skip', action = 'install', package = 'test-category/new-package' %}
{% calculate path = '/etc' %}
{% calculate append = 'skip', action = 'install',
package = 'test-category/new-package', path = '/etc' %}

Loading…
Cancel
Save