Opened 12 years ago

Last modified 12 years ago

#18103 closed Bug

Change to _reset_dicts causes wholesale failure — at Initial Version

Reported by: Vinay Sajip Owned by: nobody
Component: Template system Version: dev
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

On updating to r17895, lots of tests appear to have stopped working. Here's the tail end of the test run:

======================================================================
ERROR: test_user_permission_performance
(regressiontests.admin_views.tests.UserAdminTest)


Traceback (most recent call last):

File "/home/vinay/projects/django/tests/regressiontests/admin_views/

tests.py", line 3244, in test_user_permission_performance

response = self.client.get('/test_admin/admin/auth/user/%s/' %

u.pk)

File "/home/vinay/projects/django/django/test/client.py", line 427,

in get

response = super(Client, self).get(path, data=data, extra)

File "/home/vinay/projects/django/django/test/client.py", line 243,

in get

return self.request(r)

File "/home/vinay/projects/django/django/core/handlers/base.py",

line 136, in get_response

response = response.render()

File "/home/vinay/projects/django/django/template/response.py", line

104, in render

self._set_content(self.rendered_content)

File "/home/vinay/projects/django/django/template/response.py", line

81, in rendered_content

content = template.render(context)

File "/home/vinay/projects/django/django/template/base.py", line

140, in render

return self._render(context)

File "/home/vinay/projects/django/django/test/utils.py", line 60, in

instrumented_test_render

return self.nodelist.render(context)

File "/home/vinay/projects/django/django/template/base.py", line

823, in render

bit = self.render_node(node, context)

File "/home/vinay/projects/django/django/template/base.py", line

837, in render_node

return node.render(context)

File "/home/vinay/projects/django/django/template/loader_tags.py",

line 123, in render

return compiled_parent._render(context)

File "/home/vinay/projects/django/django/test/utils.py", line 60, in

instrumented_test_render

return self.nodelist.render(context)

File "/home/vinay/projects/django/django/template/base.py", line

823, in render

bit = self.render_node(node, context)

File "/home/vinay/projects/django/django/template/base.py", line

837, in render_node

return node.render(context)

File "/home/vinay/projects/django/django/template/loader_tags.py",

line 123, in render

return compiled_parent._render(context)

File "/home/vinay/projects/django/django/test/utils.py", line 60, in

instrumented_test_render

return self.nodelist.render(context)

File "/home/vinay/projects/django/django/template/base.py", line

823, in render

bit = self.render_node(node, context)

File "/home/vinay/projects/django/django/template/base.py", line

837, in render_node

return node.render(context)

File "/home/vinay/projects/django/django/template/loader_tags.py",

line 62, in render

result = block.nodelist.render(context)

File "/home/vinay/projects/django/django/template/base.py", line

823, in render

bit = self.render_node(node, context)

File "/home/vinay/projects/django/django/template/base.py", line

837, in render_node

return node.render(context)

File "/home/vinay/projects/django/django/template/base.py", line

1193, in render

'use_tz': context.use_tz,

File "/home/vinay/projects/django/django/template/context.py", line

96, in init

super(Context, self).init(dict_)

File "/home/vinay/projects/django/django/template/context.py", line

18, in init

self._reset_dicts(dict_)

File "/home/vinay/projects/django/django/template/context.py", line

23, in _reset_dicts

builtins.update(value)

ValueError: dictionary update sequence element #0 has length 1; 2 is
required


Ran 4698 tests in 956.978s

FAILED (errors=166, skipped=109, expected failures=2)
Destroying test database for alias 'default'...
Destroying test database for alias 'other'...
vinay@eta-oneiric64:~/projects/django/tests$

All the errors appear to have the same root cause. I'm testing with
Python 2.7.2+ (default, Oct 4 2011, 20:06:09) on Ubuntu Oneiric 64-
bit. The tests were run using

PYTHONPATH=.. python runtests.py --settings test_sqlite

in the tests subdirectory.

The errors seem to be related to Aymeric's change in r17894. If I change

def _reset_dicts(self, value=None):

builtins = {'True': True, 'False': False, 'None': None}
if value:

builtins.update(value)

self.dicts = [builtins]

to the seemingly equivalent

def _reset_dicts(self, value=None):

value = copy(value or {})
value.update({'True': True, 'False': False, 'None': None})
self.dicts = [value]

then the errors no longer occur.

Change History (1)

by Vinay Sajip, 12 years ago

Attachment: context.diff added

Suggested change to django.template.context.BaseContext._reset_dicts

Note: See TracTickets for help on using tickets.
Back to Top