summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Lord <davidism@gmail.com>2017-07-07 09:40:35 -0700
committerGitHub <noreply@github.com>2017-07-07 09:40:35 -0700
commita361b74fda6bfd01f389b3e0110f607953e445e0 (patch)
tree1f8f56800cfb641c365d210b3397ad9863657525
parent2c61df138ae2bfc475f9f1e531691d3f6474e209 (diff)
parent32afe631c2e4a05fbb4a35078dff46dfaf5e46eb (diff)
downloadjinja2-a361b74fda6bfd01f389b3e0110f607953e445e0.tar.gz
Merge pull request #618 from jackwilsdon/stricter-from-parsing
Add stricter checking to "from ... import ..."
-rw-r--r--CHANGES2
-rw-r--r--jinja2/parser.py2
-rw-r--r--tests/test_imports.py22
3 files changed, 23 insertions, 3 deletions
diff --git a/CHANGES b/CHANGES
index 6276b11..500af4e 100644
--- a/CHANGES
+++ b/CHANGES
@@ -28,10 +28,12 @@ Version 2.10
- Add ``min`` and ``max`` filters. (`#475`_)
- Add tests for all comparison operators: ``eq``, ``ne``, ``lt``, ``le``,
``gt``, ``ge``. (`#665`_)
+- ``import`` statement cannot end with a trailing comma. (`#618`_)
.. _#469: https://github.com/pallets/jinja/pull/469
.. _#475: https://github.com/pallets/jinja/pull/475
.. _#478: https://github.com/pallets/jinja/pull/478
+.. _#618: https://github.com/pallets/jinja/pull/618
.. _#665: https://github.com/pallets/jinja/pull/665
Version 2.9.6
diff --git a/jinja2/parser.py b/jinja2/parser.py
index 6d1fff6..0823364 100644
--- a/jinja2/parser.py
+++ b/jinja2/parser.py
@@ -334,7 +334,7 @@ class Parser(object):
if parse_context() or self.stream.current.type != 'comma':
break
else:
- break
+ self.stream.expect('name')
if not hasattr(node, 'with_context'):
node.with_context = False
self.stream.skip_if('comma')
diff --git a/tests/test_imports.py b/tests/test_imports.py
index a6d5161..4250eb9 100644
--- a/tests/test_imports.py
+++ b/tests/test_imports.py
@@ -11,7 +11,8 @@
import pytest
from jinja2 import Environment, DictLoader
-from jinja2.exceptions import TemplateNotFound, TemplatesNotFound
+from jinja2.exceptions import TemplateNotFound, TemplatesNotFound, \
+ TemplateSyntaxError
@pytest.fixture
@@ -50,7 +51,24 @@ class TestImports(object):
)
assert t.render(foo=42) == '[42|23]'
- def test_trailing_comma(self, test_env):
+ def test_import_needs_name(self, test_env):
+ test_env.from_string('{% from "foo" import bar %}')
+ test_env.from_string('{% from "foo" import bar, baz %}')
+
+ with pytest.raises(TemplateSyntaxError):
+ test_env.from_string('{% from "foo" import %}')
+
+ def test_no_trailing_comma(self, test_env):
+ with pytest.raises(TemplateSyntaxError):
+ test_env.from_string('{% from "foo" import bar, %}')
+
+ with pytest.raises(TemplateSyntaxError):
+ test_env.from_string('{% from "foo" import bar,, %}')
+
+ with pytest.raises(TemplateSyntaxError):
+ test_env.from_string('{% from "foo" import, %}')
+
+ def test_trailing_comma_with_context(self, test_env):
test_env.from_string('{% from "foo" import bar, baz with context %}')
test_env.from_string('{% from "foo" import bar, baz, with context %}')
test_env.from_string('{% from "foo" import bar, with context %}')