﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
25624	Autoreload fails if jinja2.ModuleLoader used	SvartalF	Tom Forbes	"It happens because `jinja2.ModuleLoader` injects a weakref to a fake module into a sys.modules: https://github.com/mitsuhiko/jinja2/blob/f6b654de615de61a9ca79e7ccecf7b4a8bf90ec0/jinja2/loaders.py#L439-L449

So, because weakref is not a hashable object, autoreload fails.

{{{
Traceback (most recent call last):
  File ""bug/manage.py"", line 10, in <module>
    execute_from_command_line(sys.argv)
  File ""/home/svartalf/projects/dj-module-loader-bug/.env/local/lib/python2.7/site-packages/django/core/management/__init__.py"", line 351, in execute_from_command_line
    utility.execute()
  File ""/home/svartalf/projects/dj-module-loader-bug/.env/local/lib/python2.7/site-packages/django/core/management/__init__.py"", line 343, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File ""/home/svartalf/projects/dj-module-loader-bug/.env/local/lib/python2.7/site-packages/django/core/management/base.py"", line 394, in run_from_argv
    self.execute(*args, **cmd_options)
  File ""/home/svartalf/projects/dj-module-loader-bug/.env/local/lib/python2.7/site-packages/django/core/management/commands/runserver.py"", line 49, in execute
    super(Command, self).execute(*args, **options)
  File ""/home/svartalf/projects/dj-module-loader-bug/.env/local/lib/python2.7/site-packages/django/core/management/base.py"", line 445, in execute
    output = self.handle(*args, **options)
  File ""/home/svartalf/projects/dj-module-loader-bug/.env/local/lib/python2.7/site-packages/django/core/management/commands/runserver.py"", line 88, in handle
    self.run(**options)
  File ""/home/svartalf/projects/dj-module-loader-bug/.env/local/lib/python2.7/site-packages/django/core/management/commands/runserver.py"", line 97, in run
    autoreload.main(self.inner_run, None, options)
  File ""/home/svartalf/projects/dj-module-loader-bug/.env/local/lib/python2.7/site-packages/django/utils/autoreload.py"", line 336, in main
    reloader(wrapped_main_func, args, kwargs)
  File ""/home/svartalf/projects/dj-module-loader-bug/.env/local/lib/python2.7/site-packages/django/utils/autoreload.py"", line 302, in python_reloader
    reloader_thread()
  File ""/home/svartalf/projects/dj-module-loader-bug/.env/local/lib/python2.7/site-packages/django/utils/autoreload.py"", line 278, in reloader_thread
    change = fn()
  File ""/home/svartalf/projects/dj-module-loader-bug/.env/local/lib/python2.7/site-packages/django/utils/autoreload.py"", line 207, in code_changed
    for filename in gen_filenames():
  File ""/home/svartalf/projects/dj-module-loader-bug/.env/local/lib/python2.7/site-packages/django/utils/autoreload.py"", line 94, in gen_filenames
    module_values = set(sys.modules.values())
TypeError: unhashable type: 'weakproxy'
}}}

I had reproduced this bug with a clean project and following environment:
{{{
Python 2.7.6

$ pip freeze
Django==1.8.5
Jinja2==2.7.3
MarkupSafe==0.23
argparse==1.2.1
wsgiref==0.1.2
}}}

Template settings:
{{{
template_loader = jinja2.ModuleLoader('compiled_templates')
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.jinja2.Jinja2',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'loader': template_loader,
        },
    },
]
}}}

P.S. Not sure if it is an ""Utilities"" or a ""Template system"" component."	Bug	closed	Utilities	1.8	Normal	fixed	autoreload, jinja2, ModuleLoader		Accepted	1	0	0	0	0	0
