Refs #23913 -- Removed support for a single equals sign in {% if %} tag.
Per deprecation timeline.
This commit is contained in:
parent
9af3c6b9ce
commit
2ccfac1a65
|
@ -1,17 +1,13 @@
|
||||||
"""
|
"""
|
||||||
Parser and utilities for the smart 'if' tag
|
Parser and utilities for the smart 'if' tag
|
||||||
"""
|
"""
|
||||||
import warnings
|
|
||||||
|
|
||||||
from django.utils.deprecation import RemovedInDjango110Warning
|
|
||||||
|
|
||||||
|
|
||||||
# Using a simple top down parser, as described here:
|
# Using a simple top down parser, as described here:
|
||||||
# http://effbot.org/zone/simple-top-down-parsing.htm.
|
# http://effbot.org/zone/simple-top-down-parsing.htm.
|
||||||
# 'led' = left denotation
|
# 'led' = left denotation
|
||||||
# 'nud' = null denotation
|
# 'nud' = null denotation
|
||||||
# 'bp' = binding power (left = lbp, right = rbp)
|
# 'bp' = binding power (left = lbp, right = rbp)
|
||||||
|
|
||||||
|
|
||||||
class TokenBase(object):
|
class TokenBase(object):
|
||||||
"""
|
"""
|
||||||
Base class for operators and literals, mainly for debugging and for throwing
|
Base class for operators and literals, mainly for debugging and for throwing
|
||||||
|
@ -102,8 +98,6 @@ OPERATORS = {
|
||||||
'not': prefix(8, lambda context, x: not x.eval(context)),
|
'not': prefix(8, lambda context, x: not x.eval(context)),
|
||||||
'in': infix(9, lambda context, x, y: x.eval(context) in y.eval(context)),
|
'in': infix(9, lambda context, x, y: x.eval(context) in y.eval(context)),
|
||||||
'not in': infix(9, lambda context, x, y: x.eval(context) not in y.eval(context)),
|
'not in': infix(9, lambda context, x, y: x.eval(context) not in y.eval(context)),
|
||||||
# This should be removed in Django 1.10:
|
|
||||||
'=': infix(10, lambda context, x, y: x.eval(context) == y.eval(context)),
|
|
||||||
'==': infix(10, lambda context, x, y: x.eval(context) == y.eval(context)),
|
'==': infix(10, lambda context, x, y: x.eval(context) == y.eval(context)),
|
||||||
'!=': infix(10, lambda context, x, y: x.eval(context) != y.eval(context)),
|
'!=': infix(10, lambda context, x, y: x.eval(context) != y.eval(context)),
|
||||||
'>': infix(10, lambda context, x, y: x.eval(context) > y.eval(context)),
|
'>': infix(10, lambda context, x, y: x.eval(context) > y.eval(context)),
|
||||||
|
@ -178,11 +172,6 @@ class IfParser(object):
|
||||||
except (KeyError, TypeError):
|
except (KeyError, TypeError):
|
||||||
return self.create_var(token)
|
return self.create_var(token)
|
||||||
else:
|
else:
|
||||||
if token == '=':
|
|
||||||
warnings.warn(
|
|
||||||
"Operator '=' is deprecated and will be removed in Django 1.10. Use '==' instead.",
|
|
||||||
RemovedInDjango110Warning, stacklevel=2
|
|
||||||
)
|
|
||||||
return op()
|
return op()
|
||||||
|
|
||||||
def next_token(self):
|
def next_token(self):
|
||||||
|
|
|
@ -1,9 +1,5 @@
|
||||||
import warnings
|
|
||||||
|
|
||||||
from django.template import TemplateSyntaxError
|
from django.template import TemplateSyntaxError
|
||||||
from django.test import SimpleTestCase, ignore_warnings
|
from django.test import SimpleTestCase
|
||||||
from django.test.utils import reset_warning_registry
|
|
||||||
from django.utils.deprecation import RemovedInDjango110Warning
|
|
||||||
|
|
||||||
from ..utils import TestObj, setup
|
from ..utils import TestObj, setup
|
||||||
|
|
||||||
|
@ -526,42 +522,8 @@ class IfTagTests(SimpleTestCase):
|
||||||
output = self.engine.render_to_string('if-tag-badarg04')
|
output = self.engine.render_to_string('if-tag-badarg04')
|
||||||
self.assertEqual(output, 'no')
|
self.assertEqual(output, 'no')
|
||||||
|
|
||||||
@setup({'if-tag-eq-deprecated': '{% if foo = bar %}yes{% else %}no{% endif %}'},
|
@setup({'if-tag-single-eq': '{% if foo = bar %}yes{% else %}no{% endif %}'})
|
||||||
test_once=True)
|
def test_if_tag_single_eq(self):
|
||||||
def test_if_tag_eq_deprecated(self):
|
# A single equals sign is a syntax error.
|
||||||
reset_warning_registry()
|
with self.assertRaises(TemplateSyntaxError):
|
||||||
with warnings.catch_warnings(record=True) as warns:
|
self.engine.render_to_string('if-tag-single-eq', {'foo': 1})
|
||||||
warnings.simplefilter('always')
|
|
||||||
output = self.engine.render_to_string('if-tag-eq-deprecated')
|
|
||||||
self.assertEqual(output, 'yes')
|
|
||||||
self.assertEqual(len(warns), 1)
|
|
||||||
self.assertEqual(
|
|
||||||
str(warns[0].message),
|
|
||||||
"Operator '=' is deprecated and will be removed in Django 1.10. "
|
|
||||||
"Use '==' instead."
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@ignore_warnings(category=RemovedInDjango110Warning)
|
|
||||||
class TestEqualitySingleEqualsSign(SimpleTestCase):
|
|
||||||
# The following tests should be changed to template.TemplateSyntaxError
|
|
||||||
# (or simply removed) when the deprecation path ends in Django 1.10.
|
|
||||||
@setup({'if-tag-eq01': '{% if foo = bar %}yes{% else %}no{% endif %}'})
|
|
||||||
def test_if_tag_eq01(self):
|
|
||||||
output = self.engine.render_to_string('if-tag-eq01', {'foo': 1})
|
|
||||||
self.assertEqual(output, 'no')
|
|
||||||
|
|
||||||
@setup({'if-tag-eq02': '{% if foo = bar %}yes{% else %}no{% endif %}'})
|
|
||||||
def test_if_tag_eq02(self):
|
|
||||||
output = self.engine.render_to_string('if-tag-eq02', {'foo': 1, 'bar': 1})
|
|
||||||
self.assertEqual(output, 'yes')
|
|
||||||
|
|
||||||
@setup({'if-tag-eq03': '{% if foo = bar %}yes{% else %}no{% endif %}'})
|
|
||||||
def test_if_tag_eq03(self):
|
|
||||||
output = self.engine.render_to_string('if-tag-eq03', {'foo': 1, 'bar': 2})
|
|
||||||
self.assertEqual(output, 'no')
|
|
||||||
|
|
||||||
@setup({'if-tag-eq04': '{% if foo == \'\' %}yes{% else %}no{% endif %}'})
|
|
||||||
def test_if_tag_eq04(self):
|
|
||||||
output = self.engine.render_to_string('if-tag-eq04')
|
|
||||||
self.assertEqual(output, 'no')
|
|
||||||
|
|
Loading…
Reference in New Issue