Make compress command (at least) run through on 1.8

FAILED (failures=15, errors=15, skipped=1)

AssertionError: 2 != 12
OfflineGenerationError: ... key "XYZ" missing ...
This commit is contained in:
Carlton Gibson
2015-03-10 20:04:07 +01:00
parent 7706baea15
commit 72b33ddbcd
2 changed files with 43 additions and 25 deletions

View File

@@ -5,6 +5,7 @@ import sys
from fnmatch import fnmatch from fnmatch import fnmatch
from optparse import make_option from optparse import make_option
import django
from django.core.management.base import NoArgsCommand, CommandError from django.core.management.base import NoArgsCommand, CommandError
import django.template import django.template
from django.template import Context from django.template import Context
@@ -53,24 +54,30 @@ class Command(NoArgsCommand):
requires_model_validation = False requires_model_validation = False
def get_loaders(self): def get_loaders(self):
from django.template.loader import template_source_loaders if django.VERSION < (1, 8):
if template_source_loaders is None:
try:
from django.template.loader import (
find_template as finder_func)
except ImportError:
from django.template.loader import (
find_template_source as finder_func) # noqa
try:
# Force django to calculate template_source_loaders from
# TEMPLATE_LOADERS settings, by asking to find a dummy template
source, name = finder_func('test')
except django.template.TemplateDoesNotExist:
pass
# Reload template_source_loaders now that it has been calculated ;
# it should contain the list of valid, instanciated template loaders
# to use.
from django.template.loader import template_source_loaders from django.template.loader import template_source_loaders
if template_source_loaders is None:
try:
from django.template.loader import (
find_template as finder_func)
except ImportError:
from django.template.loader import (
find_template_source as finder_func) # noqa
try:
# Force django to calculate template_source_loaders from
# TEMPLATE_LOADERS settings, by asking to find a dummy template
source, name = finder_func('test')
except django.template.TemplateDoesNotExist:
pass
# Reload template_source_loaders now that it has been calculated ;
# it should contain the list of valid, instanciated template loaders
# to use.
from django.template.loader import template_source_loaders
else:
from django.template import engines
template_source_loaders = []
for e in engines.all():
template_source_loaders.extend(e.engine.get_template_loaders(e.engine.loaders))
loaders = [] loaders = []
# If template loader is CachedTemplateLoader, return the loaders # If template loader is CachedTemplateLoader, return the loaders
# that it wraps around. So if we have # that it wraps around. So if we have

View File

@@ -1,6 +1,7 @@
from __future__ import absolute_import from __future__ import absolute_import
from copy import copy from copy import copy
import django
from django import template from django import template
from django.conf import settings from django.conf import settings
from django.template import Context from django.template import Context
@@ -14,7 +15,7 @@ from compressor.exceptions import TemplateSyntaxError, TemplateDoesNotExist
from compressor.templatetags.compress import CompressorNode from compressor.templatetags.compress import CompressorNode
def handle_extendsnode(extendsnode, block_context=None): def handle_extendsnode(extendsnode, block_context=None, original=None):
"""Create a copy of Node tree of a derived template replacing """Create a copy of Node tree of a derived template replacing
all blocks tags with the nodes of appropriate blocks. all blocks tags with the nodes of appropriate blocks.
Also handles {{ block.super }} tags. Also handles {{ block.super }} tags.
@@ -26,6 +27,9 @@ def handle_extendsnode(extendsnode, block_context=None):
block_context.add_blocks(blocks) block_context.add_blocks(blocks)
context = Context(settings.COMPRESS_OFFLINE_CONTEXT) context = Context(settings.COMPRESS_OFFLINE_CONTEXT)
if original is not None:
context.template = original
compiled_parent = extendsnode.get_parent(context) compiled_parent = extendsnode.get_parent(context)
parent_nodelist = compiled_parent.nodelist parent_nodelist = compiled_parent.nodelist
# If the parent template has an ExtendsNode it is not the root. # If the parent template has an ExtendsNode it is not the root.
@@ -33,7 +37,7 @@ def handle_extendsnode(extendsnode, block_context=None):
# The ExtendsNode has to be the first non-text node. # The ExtendsNode has to be the first non-text node.
if not isinstance(node, TextNode): if not isinstance(node, TextNode):
if isinstance(node, ExtendsNode): if isinstance(node, ExtendsNode):
return handle_extendsnode(node, block_context) return handle_extendsnode(node, block_context, original)
break break
# Add blocks of the root template to block context. # Add blocks of the root template to block context.
blocks = dict((n.name, n) for n in blocks = dict((n.name, n) for n in
@@ -95,7 +99,10 @@ class DjangoParser(object):
def parse(self, template_name): def parse(self, template_name):
try: try:
return get_template(template_name) if django.VERSION < (1, 8):
return get_template(template_name)
else:
return get_template(template_name).template
except template.TemplateSyntaxError as e: except template.TemplateSyntaxError as e:
raise TemplateSyntaxError(str(e)) raise TemplateSyntaxError(str(e))
except template.TemplateDoesNotExist as e: except template.TemplateDoesNotExist as e:
@@ -111,15 +118,17 @@ class DjangoParser(object):
pass pass
def render_nodelist(self, template, context, node): def render_nodelist(self, template, context, node):
if django.VERSION >= (1, 8):
context.template = template
return node.nodelist.render(context) return node.nodelist.render(context)
def render_node(self, template, context, node): def render_node(self, template, context, node):
return node.render(context, forced=True) return node.render(context, forced=True)
def get_nodelist(self, node): def get_nodelist(self, node, original=None):
if isinstance(node, ExtendsNode): if isinstance(node, ExtendsNode):
try: try:
return handle_extendsnode(node) return handle_extendsnode(node, block_context=None, original=original)
except template.TemplateSyntaxError as e: except template.TemplateSyntaxError as e:
raise TemplateSyntaxError(str(e)) raise TemplateSyntaxError(str(e))
except template.TemplateDoesNotExist as e: except template.TemplateDoesNotExist as e:
@@ -134,10 +143,12 @@ class DjangoParser(object):
nodelist = getattr(node, 'nodelist', []) nodelist = getattr(node, 'nodelist', [])
return nodelist return nodelist
def walk_nodes(self, node): def walk_nodes(self, node, original=None):
for node in self.get_nodelist(node): if django.VERSION >= (1, 8) and original is None:
original = node
for node in self.get_nodelist(node, original):
if isinstance(node, CompressorNode) and node.is_offline_compression_enabled(forced=True): if isinstance(node, CompressorNode) and node.is_offline_compression_enabled(forced=True):
yield node yield node
else: else:
for node in self.walk_nodes(node): for node in self.walk_nodes(node, original):
yield node yield node