Fixed #21765 -- Added support for comparing Context instances
This commit is contained in:
parent
985ae732b2
commit
d97bf2e9c8
|
@ -97,6 +97,16 @@ class BaseContext(object):
|
||||||
new_context._reset_dicts(values)
|
new_context._reset_dicts(values)
|
||||||
return new_context
|
return new_context
|
||||||
|
|
||||||
|
def __eq__(self, other):
|
||||||
|
"""
|
||||||
|
Compares two contexts by comparing theirs 'dicts' attributes.
|
||||||
|
"""
|
||||||
|
if isinstance(other, BaseContext):
|
||||||
|
return self.dicts[-1] == other.dicts[-1]
|
||||||
|
|
||||||
|
# if it's not comparable return false
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
class Context(BaseContext):
|
class Context(BaseContext):
|
||||||
"A stack container for variable context"
|
"A stack container for variable context"
|
||||||
|
|
|
@ -49,3 +49,8 @@ class ContextTests(TestCase):
|
||||||
with self.assertRaises(KeyError):
|
with self.assertRaises(KeyError):
|
||||||
test_context['fruit']
|
test_context['fruit']
|
||||||
self.assertIsNone(test_context.get('fruit'))
|
self.assertIsNone(test_context.get('fruit'))
|
||||||
|
|
||||||
|
def test_context_comparable(self):
|
||||||
|
test_data = {'x': 'y', 'v': 'z', 'd': {'o': object, 'a': 'b'}}
|
||||||
|
|
||||||
|
self.assertEquals(Context(test_data), Context(test_data))
|
||||||
|
|
|
@ -1928,6 +1928,19 @@ class RequestContextTests(unittest.TestCase):
|
||||||
# [builtins, supplied context, context processor]
|
# [builtins, supplied context, context processor]
|
||||||
self.assertEqual(len(ctx.dicts), 3)
|
self.assertEqual(len(ctx.dicts), 3)
|
||||||
|
|
||||||
|
@override_settings(TEMPLATE_CONTEXT_PROCESSORS=())
|
||||||
|
def test_context_comparable(self):
|
||||||
|
test_data = {'x': 'y', 'v': 'z', 'd': {'o': object, 'a': 'b'}}
|
||||||
|
|
||||||
|
# test comparing RequestContext to prevent problems if somebody
|
||||||
|
# adds __eq__ in the future
|
||||||
|
request = RequestFactory().get('/')
|
||||||
|
|
||||||
|
self.assertEquals(
|
||||||
|
RequestContext(request, dict_=test_data),
|
||||||
|
RequestContext(request, dict_=test_data)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class SSITests(TestCase):
|
class SSITests(TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
|
Loading…
Reference in New Issue