miracle2k / django-assets

Django webassets integration.
BSD 2-Clause "Simplified" License
89 stars 79 forks source link

Django 1.10 support #87

Closed adamchainz closed 4 years ago

adamchainz commented 7 years ago

I'm trying to upgrade to Django 1.10 and django-assets is one of the libraries I have that doesn't advertise support for it. I tried running its tests on top of #86 with the following patch, but got the below failures. Test compatibility here seems to be around the settings used, which need updating to use TEMPLATES, but also maybe some stuff needs doing in webassets too to fix the failures seen in #86?

patch:

diff --git a/tox.ini b/tox.ini
index 5fc998d..0685dde 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,5 +1,7 @@
 [tox]
-envlist = django18-{py27,py33,py34,pypy}, django19-{py27,py34,py35}
+envlist = django18-{py27,py33,py34,pypy},
+          django19-{py27,py34,py35},
+          django110-{py27,py34,py35}

 [testenv]
@@ -12,3 +14,4 @@ deps =
     https://github.com/miracle2k/webassets/archive/master.tar.gz
     django18: Django>=1.8,<1.9
     django19: Django>=1.9,<1.10
+    django110: Django>=1.10,<1.11

failures:

django110-py35 create: /Users/adamj/Documents/Projects/django-assets/.tox/django110-py35
django110-py35 installdeps: nose==1.3.7, ipdb>=0.8.0, https://github.com/miracle2k/webassets/archive/master.tar.gz, Django>=1.10,<1.11
django110-py35 inst: /Users/adamj/Documents/Projects/django-assets/.tox/dist/django-assets-0.12.zip
django110-py35 installed: appnope==0.1.0,decorator==4.0.10,Django==1.10.2,django-assets==0.12,ipdb==0.10.1,ipython==5.1.0,ipython-genutils==0.1.0,nose==1.3.7,pexpect==4.2.1,pickleshare==0.7.4,prompt-toolkit==1.0.7,ptyprocess==0.5.1,Pygments==2.1.3,simplegeneric==0.8.1,six==1.10.0,traitlets==4.3.1,wcwidth==0.1.7,webassets==0.12.0
django110-py35 runtests: PYTHONHASHSEED='383892742'
django110-py35 runtests: commands[0] | nosetests
..EFF.......EEEEEEE
======================================================================
ERROR: tests.test_django.TestFilter.test_template
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/nose/case.py", line 198, in runTest
    self.test(*self.arg)
  File "/Users/adamj/Documents/Projects/django-assets/tests/test_django.py", line 312, in test_template
    filters=get_filter('template', context={'num': 23232323}),
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/webassets/bundle.py", line 663, in build
    disable_cache=disable_cache))
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/webassets/bundle.py", line 600, in _build
    force, disable_cache=disable_cache, extra_filters=extra_filters)
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/webassets/bundle.py", line 524, in _merge_and_apply
    kwargs=item_data)
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/webassets/merge.py", line 276, in apply
    return self._wrap_cache(key, func)
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/webassets/merge.py", line 218, in _wrap_cache
    content = func().getvalue()
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/webassets/merge.py", line 251, in func
    getattr(filter, type)(data, out, **kwargs_final)
  File "/Users/adamj/Documents/Projects/django-assets/django_assets/filter.py", line 24, in input
    t = Template(_in.read(), origin='django-assets', name=source_path)
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/django/template/base.py", line 184, in __init__
    engine = Engine.get_default()
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/django/template/engine.py", line 81, in get_default
    "No DjangoTemplates backend is configured.")
django.core.exceptions.ImproperlyConfigured: No DjangoTemplates backend is configured.

======================================================================
ERROR: tests.test_django.TestTemplateTag.test_debug_option
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/nose/case.py", line 198, in runTest
    self.test(*self.arg)
  File "/Users/adamj/Documents/Projects/django-assets/tests/test_django.py", line 148, in test_debug_option
    self.render_template('"file", debug="true"')
  File "/Users/adamj/Documents/Projects/django-assets/tests/test_django.py", line 129, in render_template
    return Template('{% load assets %}{% assets '+args+' %}{{ ASSET_URL }};{% endassets %}').render(Context(ctx))
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/django/template/base.py", line 184, in __init__
    engine = Engine.get_default()
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/django/template/engine.py", line 81, in get_default
    "No DjangoTemplates backend is configured.")
django.core.exceptions.ImproperlyConfigured: No DjangoTemplates backend is configured.

======================================================================
ERROR: Ensure the tag correcly spits out the urls the bundle returns.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/nose/case.py", line 198, in runTest
    self.test(*self.arg)
  File "/Users/adamj/Documents/Projects/django-assets/tests/test_django.py", line 164, in test_output_urls
    assert self.render_template('"file1" "file2" "file3"') == 'foo;bar;'
  File "/Users/adamj/Documents/Projects/django-assets/tests/test_django.py", line 129, in render_template
    return Template('{% load assets %}{% assets '+args+' %}{{ ASSET_URL }};{% endassets %}').render(Context(ctx))
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/django/template/base.py", line 184, in __init__
    engine = Engine.get_default()
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/django/template/engine.py", line 81, in get_default
    "No DjangoTemplates backend is configured.")
django.core.exceptions.ImproperlyConfigured: No DjangoTemplates backend is configured.

======================================================================
ERROR: tests.test_django.TestTemplateTag.test_reference_bundles
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/nose/case.py", line 198, in runTest
    self.test(*self.arg)
  File "/Users/adamj/Documents/Projects/django-assets/tests/test_django.py", line 132, in test_reference_bundles
    self.render_template('"foo_bundle", "bar_bundle"')
  File "/Users/adamj/Documents/Projects/django-assets/tests/test_django.py", line 129, in render_template
    return Template('{% load assets %}{% assets '+args+' %}{{ ASSET_URL }};{% endassets %}').render(Context(ctx))
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/django/template/base.py", line 184, in __init__
    engine = Engine.get_default()
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/django/template/engine.py", line 81, in get_default
    "No DjangoTemplates backend is configured.")
django.core.exceptions.ImproperlyConfigured: No DjangoTemplates backend is configured.

======================================================================
ERROR: tests.test_django.TestTemplateTag.test_reference_files
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/nose/case.py", line 198, in runTest
    self.test(*self.arg)
  File "/Users/adamj/Documents/Projects/django-assets/tests/test_django.py", line 136, in test_reference_files
    self.render_template('"file1", "file2", "file3"')
  File "/Users/adamj/Documents/Projects/django-assets/tests/test_django.py", line 129, in render_template
    return Template('{% load assets %}{% assets '+args+' %}{{ ASSET_URL }};{% endassets %}').render(Context(ctx))
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/django/template/base.py", line 184, in __init__
    engine = Engine.get_default()
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/django/template/engine.py", line 81, in get_default
    "No DjangoTemplates backend is configured.")
django.core.exceptions.ImproperlyConfigured: No DjangoTemplates backend is configured.

======================================================================
ERROR: tests.test_django.TestTemplateTag.test_reference_mixed
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/nose/case.py", line 198, in runTest
    self.test(*self.arg)
  File "/Users/adamj/Documents/Projects/django-assets/tests/test_django.py", line 140, in test_reference_mixed
    self.render_template('"foo_bundle", "file2", "file3"')
  File "/Users/adamj/Documents/Projects/django-assets/tests/test_django.py", line 129, in render_template
    return Template('{% load assets %}{% assets '+args+' %}{{ ASSET_URL }};{% endassets %}').render(Context(ctx))
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/django/template/base.py", line 184, in __init__
    engine = Engine.get_default()
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/django/template/engine.py", line 81, in get_default
    "No DjangoTemplates backend is configured.")
django.core.exceptions.ImproperlyConfigured: No DjangoTemplates backend is configured.

======================================================================
ERROR: Using commas is optional.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/nose/case.py", line 198, in runTest
    self.test(*self.arg)
  File "/Users/adamj/Documents/Projects/django-assets/tests/test_django.py", line 158, in test_with_no_commas
    self.render_template('"file1" "file2" "file3"')
  File "/Users/adamj/Documents/Projects/django-assets/tests/test_django.py", line 129, in render_template
    return Template('{% load assets %}{% assets '+args+' %}{{ ASSET_URL }};{% endassets %}').render(Context(ctx))
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/django/template/base.py", line 184, in __init__
    engine = Engine.get_default()
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/django/template/engine.py", line 81, in get_default
    "No DjangoTemplates backend is configured.")
django.core.exceptions.ImproperlyConfigured: No DjangoTemplates backend is configured.

======================================================================
ERROR: tests.test_django.TestTemplateTag.test_with_vars
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/nose/case.py", line 198, in runTest
    self.test(*self.arg)
  File "/Users/adamj/Documents/Projects/django-assets/tests/test_django.py", line 144, in test_with_vars
    self.render_template('var1 var2', {'var1': self.foo_bundle, 'var2': 'a_file'})
  File "/Users/adamj/Documents/Projects/django-assets/tests/test_django.py", line 129, in render_template
    return Template('{% load assets %}{% assets '+args+' %}{{ ASSET_URL }};{% endassets %}').render(Context(ctx))
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/django/template/base.py", line 184, in __init__
    engine = Engine.get_default()
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/django/template/engine.py", line 81, in get_default
    "No DjangoTemplates backend is configured.")
django.core.exceptions.ImproperlyConfigured: No DjangoTemplates backend is configured.

======================================================================
FAIL: tests.test_django.TestLoader.test
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/nose/case.py", line 198, in runTest
    self.test(*self.arg)
  File "/Users/adamj/Documents/Projects/django-assets/tests/test_django.py", line 192, in test
    assert len(bundles) == 1
AssertionError

======================================================================
FAIL: tests.test_django.TestLoader.test_cached_loader
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/adamj/Documents/Projects/django-assets/.tox/django110-py35/lib/python3.5/site-packages/nose/case.py", line 198, in runTest
    self.test(*self.arg)
  File "/Users/adamj/Documents/Projects/django-assets/tests/test_django.py", line 202, in test_cached_loader
    assert len(bundles) == 1
AssertionError

----------------------------------------------------------------------
Ran 19 tests in 0.263s
uranusjr commented 7 years ago

Django 1.10 removes the old-style template configuration in favour of the TEMPLATES settings. Now you need to either use the django.templates.Engine API, or explicitly configure a Django templates backend.

Modify tests/__init__.py and change the settings.configure(...) line like this

settings.configure(
    INSTALLED_APPS=['django_assets', 'django.contrib.staticfiles'],
    TEMPLATES=[{'BACKEND': 'django.template.backends.django.DjangoTemplates'}],
)

and you’re good to go.

miracle2k commented 4 years ago

Fixed in trunk.