|
rdobuilder |
c17c08 |
From 72b33ddbcdc41eb5af42b86329d81d96894a9d10 Mon Sep 17 00:00:00 2001
|
|
rdobuilder |
c17c08 |
From: Carlton Gibson <carlton.gibson@noumenal.co.uk>
|
|
rdobuilder |
c17c08 |
Date: Tue, 10 Mar 2015 20:04:07 +0100
|
|
rdobuilder |
c17c08 |
Subject: [PATCH] Make `compress` command (at least) run through on 1.8
|
|
rdobuilder |
c17c08 |
|
|
rdobuilder |
c17c08 |
FAILED (failures=15, errors=15, skipped=1)
|
|
rdobuilder |
c17c08 |
|
|
rdobuilder |
c17c08 |
AssertionError: 2 != 12
|
|
rdobuilder |
c17c08 |
OfflineGenerationError: ... key "XYZ" missing ...
|
|
rdobuilder |
c17c08 |
---
|
|
rdobuilder |
c17c08 |
compressor/management/commands/compress.py | 41 +++++++++++++++++-------------
|
|
rdobuilder |
c17c08 |
compressor/offline/django.py | 27 ++++++++++++++------
|
|
rdobuilder |
c17c08 |
2 files changed, 43 insertions(+), 25 deletions(-)
|
|
rdobuilder |
c17c08 |
|
|
rdobuilder |
c17c08 |
diff --git a/compressor/management/commands/compress.py b/compressor/management/commands/compress.py
|
|
rdobuilder |
c17c08 |
index 6be215e..0bc436a 100644
|
|
rdobuilder |
c17c08 |
--- a/compressor/management/commands/compress.py
|
|
rdobuilder |
c17c08 |
+++ b/compressor/management/commands/compress.py
|
|
rdobuilder |
c17c08 |
@@ -5,6 +5,7 @@
|
|
rdobuilder |
c17c08 |
from fnmatch import fnmatch
|
|
rdobuilder |
c17c08 |
from optparse import make_option
|
|
rdobuilder |
c17c08 |
|
|
rdobuilder |
c17c08 |
+import django
|
|
rdobuilder |
c17c08 |
from django.core.management.base import NoArgsCommand, CommandError
|
|
rdobuilder |
c17c08 |
import django.template
|
|
rdobuilder |
c17c08 |
from django.template import Context
|
|
rdobuilder |
c17c08 |
@@ -53,24 +54,30 @@ class Command(NoArgsCommand):
|
|
rdobuilder |
c17c08 |
requires_model_validation = False
|
|
rdobuilder |
c17c08 |
|
|
rdobuilder |
c17c08 |
def get_loaders(self):
|
|
rdobuilder |
c17c08 |
- from django.template.loader import template_source_loaders
|
|
rdobuilder |
c17c08 |
- if template_source_loaders is None:
|
|
rdobuilder |
c17c08 |
- try:
|
|
rdobuilder |
c17c08 |
- from django.template.loader import (
|
|
rdobuilder |
c17c08 |
- find_template as finder_func)
|
|
rdobuilder |
c17c08 |
- except ImportError:
|
|
rdobuilder |
c17c08 |
- from django.template.loader import (
|
|
rdobuilder |
c17c08 |
- find_template_source as finder_func) # noqa
|
|
rdobuilder |
c17c08 |
- try:
|
|
rdobuilder |
c17c08 |
- # Force django to calculate template_source_loaders from
|
|
rdobuilder |
c17c08 |
- # TEMPLATE_LOADERS settings, by asking to find a dummy template
|
|
rdobuilder |
c17c08 |
- source, name = finder_func('test')
|
|
rdobuilder |
c17c08 |
- except django.template.TemplateDoesNotExist:
|
|
rdobuilder |
c17c08 |
- pass
|
|
rdobuilder |
c17c08 |
- # Reload template_source_loaders now that it has been calculated ;
|
|
rdobuilder |
c17c08 |
- # it should contain the list of valid, instanciated template loaders
|
|
rdobuilder |
c17c08 |
- # to use.
|
|
rdobuilder |
c17c08 |
+ if django.VERSION < (1, 8):
|
|
rdobuilder |
c17c08 |
from django.template.loader import template_source_loaders
|
|
rdobuilder |
c17c08 |
+ if template_source_loaders is None:
|
|
rdobuilder |
c17c08 |
+ try:
|
|
rdobuilder |
c17c08 |
+ from django.template.loader import (
|
|
rdobuilder |
c17c08 |
+ find_template as finder_func)
|
|
rdobuilder |
c17c08 |
+ except ImportError:
|
|
rdobuilder |
c17c08 |
+ from django.template.loader import (
|
|
rdobuilder |
c17c08 |
+ find_template_source as finder_func) # noqa
|
|
rdobuilder |
c17c08 |
+ try:
|
|
rdobuilder |
c17c08 |
+ # Force django to calculate template_source_loaders from
|
|
rdobuilder |
c17c08 |
+ # TEMPLATE_LOADERS settings, by asking to find a dummy template
|
|
rdobuilder |
c17c08 |
+ source, name = finder_func('test')
|
|
rdobuilder |
c17c08 |
+ except django.template.TemplateDoesNotExist:
|
|
rdobuilder |
c17c08 |
+ pass
|
|
rdobuilder |
c17c08 |
+ # Reload template_source_loaders now that it has been calculated ;
|
|
rdobuilder |
c17c08 |
+ # it should contain the list of valid, instanciated template loaders
|
|
rdobuilder |
c17c08 |
+ # to use.
|
|
rdobuilder |
c17c08 |
+ from django.template.loader import template_source_loaders
|
|
rdobuilder |
c17c08 |
+ else:
|
|
rdobuilder |
c17c08 |
+ from django.template import engines
|
|
rdobuilder |
c17c08 |
+ template_source_loaders = []
|
|
rdobuilder |
c17c08 |
+ for e in engines.all():
|
|
rdobuilder |
c17c08 |
+ template_source_loaders.extend(e.engine.get_template_loaders(e.engine.loaders))
|
|
rdobuilder |
c17c08 |
loaders = []
|
|
rdobuilder |
c17c08 |
# If template loader is CachedTemplateLoader, return the loaders
|
|
rdobuilder |
c17c08 |
# that it wraps around. So if we have
|
|
rdobuilder |
c17c08 |
diff --git a/compressor/offline/django.py b/compressor/offline/django.py
|
|
rdobuilder |
c17c08 |
index b326093..107c6e4 100644
|
|
rdobuilder |
c17c08 |
--- a/compressor/offline/django.py
|
|
rdobuilder |
c17c08 |
+++ b/compressor/offline/django.py
|
|
rdobuilder |
c17c08 |
@@ -1,6 +1,7 @@
|
|
rdobuilder |
c17c08 |
from __future__ import absolute_import
|
|
rdobuilder |
c17c08 |
from copy import copy
|
|
rdobuilder |
c17c08 |
|
|
rdobuilder |
c17c08 |
+import django
|
|
rdobuilder |
c17c08 |
from django import template
|
|
rdobuilder |
c17c08 |
from django.conf import settings
|
|
rdobuilder |
c17c08 |
from django.template import Context
|
|
rdobuilder |
c17c08 |
@@ -14,7 +15,7 @@
|
|
rdobuilder |
c17c08 |
from compressor.templatetags.compress import CompressorNode
|
|
rdobuilder |
c17c08 |
|
|
rdobuilder |
c17c08 |
|
|
rdobuilder |
c17c08 |
-def handle_extendsnode(extendsnode, block_context=None):
|
|
rdobuilder |
c17c08 |
+def handle_extendsnode(extendsnode, block_context=None, original=None):
|
|
rdobuilder |
c17c08 |
"""Create a copy of Node tree of a derived template replacing
|
|
rdobuilder |
c17c08 |
all blocks tags with the nodes of appropriate blocks.
|
|
rdobuilder |
c17c08 |
Also handles {{ block.super }} tags.
|
|
rdobuilder |
c17c08 |
@@ -26,6 +27,9 @@ def handle_extendsnode(extendsnode, block_context=None):
|
|
rdobuilder |
c17c08 |
block_context.add_blocks(blocks)
|
|
rdobuilder |
c17c08 |
|
|
rdobuilder |
c17c08 |
context = Context(settings.COMPRESS_OFFLINE_CONTEXT)
|
|
rdobuilder |
c17c08 |
+ if original is not None:
|
|
rdobuilder |
c17c08 |
+ context.template = original
|
|
rdobuilder |
c17c08 |
+
|
|
rdobuilder |
c17c08 |
compiled_parent = extendsnode.get_parent(context)
|
|
rdobuilder |
c17c08 |
parent_nodelist = compiled_parent.nodelist
|
|
rdobuilder |
c17c08 |
# If the parent template has an ExtendsNode it is not the root.
|
|
rdobuilder |
c17c08 |
@@ -33,7 +37,7 @@ def handle_extendsnode(extendsnode, block_context=None):
|
|
rdobuilder |
c17c08 |
# The ExtendsNode has to be the first non-text node.
|
|
rdobuilder |
c17c08 |
if not isinstance(node, TextNode):
|
|
rdobuilder |
c17c08 |
if isinstance(node, ExtendsNode):
|
|
rdobuilder |
c17c08 |
- return handle_extendsnode(node, block_context)
|
|
rdobuilder |
c17c08 |
+ return handle_extendsnode(node, block_context, original)
|
|
rdobuilder |
c17c08 |
break
|
|
rdobuilder |
c17c08 |
# Add blocks of the root template to block context.
|
|
rdobuilder |
c17c08 |
blocks = dict((n.name, n) for n in
|
|
rdobuilder |
c17c08 |
@@ -95,7 +99,10 @@ def __init__(self, charset):
|
|
rdobuilder |
c17c08 |
|
|
rdobuilder |
c17c08 |
def parse(self, template_name):
|
|
rdobuilder |
c17c08 |
try:
|
|
rdobuilder |
c17c08 |
- return get_template(template_name)
|
|
rdobuilder |
c17c08 |
+ if django.VERSION < (1, 8):
|
|
rdobuilder |
c17c08 |
+ return get_template(template_name)
|
|
rdobuilder |
c17c08 |
+ else:
|
|
rdobuilder |
c17c08 |
+ return get_template(template_name).template
|
|
rdobuilder |
c17c08 |
except template.TemplateSyntaxError as e:
|
|
rdobuilder |
c17c08 |
raise TemplateSyntaxError(str(e))
|
|
rdobuilder |
c17c08 |
except template.TemplateDoesNotExist as e:
|
|
rdobuilder |
c17c08 |
@@ -111,15 +118,17 @@ def process_node(self, template, context, node):
|
|
rdobuilder |
c17c08 |
pass
|
|
rdobuilder |
c17c08 |
|
|
rdobuilder |
c17c08 |
def render_nodelist(self, template, context, node):
|
|
rdobuilder |
c17c08 |
+ if django.VERSION >= (1, 8):
|
|
rdobuilder |
c17c08 |
+ context.template = template
|
|
rdobuilder |
c17c08 |
return node.nodelist.render(context)
|
|
rdobuilder |
c17c08 |
|
|
rdobuilder |
c17c08 |
def render_node(self, template, context, node):
|
|
rdobuilder |
c17c08 |
return node.render(context, forced=True)
|
|
rdobuilder |
c17c08 |
|
|
rdobuilder |
c17c08 |
- def get_nodelist(self, node):
|
|
rdobuilder |
c17c08 |
+ def get_nodelist(self, node, original=None):
|
|
rdobuilder |
c17c08 |
if isinstance(node, ExtendsNode):
|
|
rdobuilder |
c17c08 |
try:
|
|
rdobuilder |
c17c08 |
- return handle_extendsnode(node)
|
|
rdobuilder |
c17c08 |
+ return handle_extendsnode(node, block_context=None, original=original)
|
|
rdobuilder |
c17c08 |
except template.TemplateSyntaxError as e:
|
|
rdobuilder |
c17c08 |
raise TemplateSyntaxError(str(e))
|
|
rdobuilder |
c17c08 |
except template.TemplateDoesNotExist as e:
|
|
rdobuilder |
c17c08 |
@@ -134,10 +143,12 @@ def get_nodelist(self, node):
|
|
rdobuilder |
c17c08 |
nodelist = getattr(node, 'nodelist', [])
|
|
rdobuilder |
c17c08 |
return nodelist
|
|
rdobuilder |
c17c08 |
|
|
rdobuilder |
c17c08 |
- def walk_nodes(self, node):
|
|
rdobuilder |
c17c08 |
- for node in self.get_nodelist(node):
|
|
rdobuilder |
c17c08 |
+ def walk_nodes(self, node, original=None):
|
|
rdobuilder |
c17c08 |
+ if django.VERSION >= (1, 8) and original is None:
|
|
rdobuilder |
c17c08 |
+ original = node
|
|
rdobuilder |
c17c08 |
+ for node in self.get_nodelist(node, original):
|
|
rdobuilder |
c17c08 |
if isinstance(node, CompressorNode) and node.is_offline_compression_enabled(forced=True):
|
|
rdobuilder |
c17c08 |
yield node
|
|
rdobuilder |
c17c08 |
else:
|
|
rdobuilder |
c17c08 |
- for node in self.walk_nodes(node):
|
|
rdobuilder |
c17c08 |
+ for node in self.walk_nodes(node, original):
|
|
rdobuilder |
c17c08 |
yield node
|