Make compressor work with django-1.8
This commit is contained in:
parent
ba004aa5b1
commit
cf9cb06670
4 changed files with 270 additions and 3 deletions
37
django-compressor-fix-attributeerror-in-offline.patch
Normal file
37
django-compressor-fix-attributeerror-in-offline.patch
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
From ac70fbfb7f8349e5c1150f40bf1d21ba635d0cb8 Mon Sep 17 00:00:00 2001
|
||||
From: Chirag Jadwani <cbjadwani@elance-odesk.com>
|
||||
Date: Fri, 29 Aug 2014 13:15:35 +0530
|
||||
Subject: [PATCH] Fix AttributeError in offline compression
|
||||
|
||||
---
|
||||
compressor/offline/django.py | 2 ++
|
||||
.../test_block_super_base_compressed/test_compressor_offline.html | 5 +++++
|
||||
2 files changed, 7 insertions(+)
|
||||
|
||||
diff --git a/compressor/offline/django.py b/compressor/offline/django.py
|
||||
index 3986562..b326093 100644
|
||||
--- a/compressor/offline/django.py
|
||||
+++ b/compressor/offline/django.py
|
||||
@@ -54,6 +54,8 @@ def remove_block_nodes(nodelist, block_stack, block_context):
|
||||
if not block_stack:
|
||||
continue
|
||||
node = block_context.get_block(block_stack[-1].name)
|
||||
+ if not node:
|
||||
+ continue
|
||||
if isinstance(node, BlockNode):
|
||||
expanded_block = expand_blocknode(node, block_stack, block_context)
|
||||
new_nodelist.extend(expanded_block)
|
||||
diff --git a/compressor/tests/test_templates/test_block_super_base_compressed/test_compressor_offline.html b/compressor/tests/test_templates/test_block_super_base_compressed/test_compressor_offline.html
|
||||
index 01382ec..10097c1 100644
|
||||
--- a/compressor/tests/test_templates/test_block_super_base_compressed/test_compressor_offline.html
|
||||
+++ b/compressor/tests/test_templates/test_block_super_base_compressed/test_compressor_offline.html
|
||||
@@ -5,4 +5,9 @@
|
||||
<script type="text/javascript">
|
||||
alert("this alert shouldn't be alone!");
|
||||
</script>
|
||||
+ {% block orphan %}
|
||||
+ {{ block.super }}
|
||||
+ An 'orphan' block that refers to a non-existent super block.
|
||||
+ Contents of this block are ignored.
|
||||
+ {% endblock %}
|
||||
{% endspaceless %}{% endblock %}
|
||||
162
django-compressor-make-compress-run-through.patch
Normal file
162
django-compressor-make-compress-run-through.patch
Normal file
|
|
@ -0,0 +1,162 @@
|
|||
From 72b33ddbcdc41eb5af42b86329d81d96894a9d10 Mon Sep 17 00:00:00 2001
|
||||
From: Carlton Gibson <carlton.gibson@noumenal.co.uk>
|
||||
Date: Tue, 10 Mar 2015 20:04:07 +0100
|
||||
Subject: [PATCH] Make `compress` command (at least) run through on 1.8
|
||||
|
||||
FAILED (failures=15, errors=15, skipped=1)
|
||||
|
||||
AssertionError: 2 != 12
|
||||
OfflineGenerationError: ... key "XYZ" missing ...
|
||||
---
|
||||
compressor/management/commands/compress.py | 41 +++++++++++++++++-------------
|
||||
compressor/offline/django.py | 27 ++++++++++++++------
|
||||
2 files changed, 43 insertions(+), 25 deletions(-)
|
||||
|
||||
diff --git a/compressor/management/commands/compress.py b/compressor/management/commands/compress.py
|
||||
index 6be215e..0bc436a 100644
|
||||
--- a/compressor/management/commands/compress.py
|
||||
+++ b/compressor/management/commands/compress.py
|
||||
@@ -5,6 +5,7 @@
|
||||
from fnmatch import fnmatch
|
||||
from optparse import make_option
|
||||
|
||||
+import django
|
||||
from django.core.management.base import NoArgsCommand, CommandError
|
||||
import django.template
|
||||
from django.template import Context
|
||||
@@ -53,24 +54,30 @@ class Command(NoArgsCommand):
|
||||
requires_model_validation = False
|
||||
|
||||
def get_loaders(self):
|
||||
- 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.
|
||||
+ if django.VERSION < (1, 8):
|
||||
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 = []
|
||||
# If template loader is CachedTemplateLoader, return the loaders
|
||||
# that it wraps around. So if we have
|
||||
diff --git a/compressor/offline/django.py b/compressor/offline/django.py
|
||||
index b326093..107c6e4 100644
|
||||
--- a/compressor/offline/django.py
|
||||
+++ b/compressor/offline/django.py
|
||||
@@ -1,6 +1,7 @@
|
||||
from __future__ import absolute_import
|
||||
from copy import copy
|
||||
|
||||
+import django
|
||||
from django import template
|
||||
from django.conf import settings
|
||||
from django.template import Context
|
||||
@@ -14,7 +15,7 @@
|
||||
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
|
||||
all blocks tags with the nodes of appropriate blocks.
|
||||
Also handles {{ block.super }} tags.
|
||||
@@ -26,6 +27,9 @@ def handle_extendsnode(extendsnode, block_context=None):
|
||||
block_context.add_blocks(blocks)
|
||||
|
||||
context = Context(settings.COMPRESS_OFFLINE_CONTEXT)
|
||||
+ if original is not None:
|
||||
+ context.template = original
|
||||
+
|
||||
compiled_parent = extendsnode.get_parent(context)
|
||||
parent_nodelist = compiled_parent.nodelist
|
||||
# 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.
|
||||
if not isinstance(node, TextNode):
|
||||
if isinstance(node, ExtendsNode):
|
||||
- return handle_extendsnode(node, block_context)
|
||||
+ return handle_extendsnode(node, block_context, original)
|
||||
break
|
||||
# Add blocks of the root template to block context.
|
||||
blocks = dict((n.name, n) for n in
|
||||
@@ -95,7 +99,10 @@ def __init__(self, charset):
|
||||
|
||||
def parse(self, template_name):
|
||||
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:
|
||||
raise TemplateSyntaxError(str(e))
|
||||
except template.TemplateDoesNotExist as e:
|
||||
@@ -111,15 +118,17 @@ def process_node(self, template, context, node):
|
||||
pass
|
||||
|
||||
def render_nodelist(self, template, context, node):
|
||||
+ if django.VERSION >= (1, 8):
|
||||
+ context.template = template
|
||||
return node.nodelist.render(context)
|
||||
|
||||
def render_node(self, template, context, node):
|
||||
return node.render(context, forced=True)
|
||||
|
||||
- def get_nodelist(self, node):
|
||||
+ def get_nodelist(self, node, original=None):
|
||||
if isinstance(node, ExtendsNode):
|
||||
try:
|
||||
- return handle_extendsnode(node)
|
||||
+ return handle_extendsnode(node, block_context=None, original=original)
|
||||
except template.TemplateSyntaxError as e:
|
||||
raise TemplateSyntaxError(str(e))
|
||||
except template.TemplateDoesNotExist as e:
|
||||
@@ -134,10 +143,12 @@ def get_nodelist(self, node):
|
||||
nodelist = getattr(node, 'nodelist', [])
|
||||
return nodelist
|
||||
|
||||
- def walk_nodes(self, node):
|
||||
- for node in self.get_nodelist(node):
|
||||
+ def walk_nodes(self, node, original=None):
|
||||
+ 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):
|
||||
yield node
|
||||
else:
|
||||
- for node in self.walk_nodes(node):
|
||||
+ for node in self.walk_nodes(node, original):
|
||||
yield node
|
||||
48
django-compressor-use-get_template.patch
Normal file
48
django-compressor-use-get_template.patch
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
From c8495264b503a595fbc89e6c8a83a402eff445c6 Mon Sep 17 00:00:00 2001
|
||||
From: Mathieu Pillard <m@virgule.net>
|
||||
Date: Sun, 25 May 2014 14:09:33 +0200
|
||||
Subject: [PATCH] Use get_template() when dealing with django templates
|
||||
|
||||
---
|
||||
compressor/offline/django.py | 16 +++++++---------
|
||||
1 file changed, 7 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/compressor/offline/django.py b/compressor/offline/django.py
|
||||
index 6541471..3986562 100644
|
||||
--- a/compressor/offline/django.py
|
||||
+++ b/compressor/offline/django.py
|
||||
@@ -1,13 +1,12 @@
|
||||
from __future__ import absolute_import
|
||||
-import io
|
||||
from copy import copy
|
||||
|
||||
from django import template
|
||||
from django.conf import settings
|
||||
-from django.template import Template
|
||||
from django.template import Context
|
||||
from django.template.base import Node, VariableNode, TextNode, NodeList
|
||||
from django.template.defaulttags import IfNode
|
||||
+from django.template.loader import get_template
|
||||
from django.template.loader_tags import ExtendsNode, BlockNode, BlockContext
|
||||
|
||||
|
||||
@@ -93,13 +92,12 @@ def __init__(self, charset):
|
||||
self.charset = charset
|
||||
|
||||
def parse(self, template_name):
|
||||
- with io.open(template_name, mode='rb') as file:
|
||||
- try:
|
||||
- return Template(file.read().decode(self.charset))
|
||||
- except template.TemplateSyntaxError as e:
|
||||
- raise TemplateSyntaxError(str(e))
|
||||
- except template.TemplateDoesNotExist as e:
|
||||
- raise TemplateDoesNotExist(str(e))
|
||||
+ try:
|
||||
+ return get_template(template_name)
|
||||
+ except template.TemplateSyntaxError as e:
|
||||
+ raise TemplateSyntaxError(str(e))
|
||||
+ except template.TemplateDoesNotExist as e:
|
||||
+ raise TemplateDoesNotExist(str(e))
|
||||
|
||||
def process_template(self, template, context):
|
||||
return True
|
||||
|
|
@ -2,17 +2,30 @@
|
|||
|
||||
Name: python-django-compressor
|
||||
Version: 1.4
|
||||
Release: 1%{?dist}
|
||||
Release: 2%{?dist}
|
||||
Summary: Compresses linked and inline JavaScript or CSS into single cached files
|
||||
|
||||
License: MIT
|
||||
URL: http://pypi.python.org/pypi/django_compressor/%{version}
|
||||
Source0: http://pypi.python.org/packages/source/d/%{pypi_name}/%{pypi_name}-%{version}.tar.gz
|
||||
|
||||
# All patches are directly connected to Django-1.8
|
||||
#
|
||||
# cherry-pick from upstream
|
||||
# https://github.com/django-compressor/django-compressor/commit/c8495264b503a595fbc89e6c8a83a402eff445c6.patch
|
||||
Patch0001: django-compressor-use-get_template.patch
|
||||
# cherry-pick from upstream
|
||||
# https://github.com/django-compressor/django-compressor/commit/ac70fbfb7f8349e5c1150f40bf1d21ba635d0cb8.patch
|
||||
Patch0002: django-compressor-fix-attributeerror-in-offline.patch
|
||||
# cherry-pick from upstream
|
||||
# https://github.com/django-compressor/django-compressor/commit/72b33ddbcdc41eb5af42b86329d81d96894a9d10.patch
|
||||
Patch0003: django-compressor-make-compress-run-through.patch
|
||||
|
||||
BuildArch: noarch
|
||||
|
||||
|
||||
BuildRequires: python2-devel
|
||||
BuildRequires: python-setuptools
|
||||
|
||||
|
||||
Requires: python-django-appconf >= 0.4
|
||||
Requires: python-versiontools
|
||||
|
||||
|
|
@ -33,6 +46,10 @@ processed with optional, configurable compilers and filters.
|
|||
|
||||
%prep
|
||||
%setup -q -n %{pypi_name}-%{version}
|
||||
%patch0001 -p1
|
||||
%patch0002 -p1
|
||||
%patch0003 -p1
|
||||
|
||||
# Remove bundled egg-info
|
||||
rm -rf %{pypi_name}.egg-info
|
||||
|
||||
|
|
@ -59,6 +76,9 @@ rm -rf %{pypi_name}.egg-info
|
|||
%{python_sitelib}/%{pypi_name}-%{version}-py?.?.egg-info
|
||||
|
||||
%changelog
|
||||
* Wed Apr 15 2015 Matthias Runge <mrunge@redhat.com> - 1.4-2
|
||||
- make compress command work on django-1.8
|
||||
|
||||
* Mon May 26 2014 Matthias Runge <mrunge@redhat.com> - 1.4-1
|
||||
- update to 1.4 (rhbz#1100732)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue