[Python-modules-commits] [django-classy-tags] 01/06: Import django-classy-tags_0.7.2.orig.tar.gz

Michael Fladischer fladi at moszumanska.debian.org
Wed Mar 2 17:46:44 UTC 2016


This is an automated email from the git hooks/post-receive script.

fladi pushed a commit to branch master
in repository django-classy-tags.

commit e48f21fa6306e61da1654f9e2d6914fc11146bc5
Author: Michael Fladischer <FladischerMichael at fladi.at>
Date:   Wed Mar 2 18:26:38 2016 +0100

    Import django-classy-tags_0.7.2.orig.tar.gz
---
 classytags/__init__.py |  2 +-
 classytags/tests.py    | 81 ++++++++++++++++++++++++++++++++++++++++++++------
 classytags/utils.py    | 21 ++++++++++---
 docs/changes.rst       |  7 +++++
 4 files changed, 97 insertions(+), 14 deletions(-)

diff --git a/classytags/__init__.py b/classytags/__init__.py
index f0788a8..fb9b668 100644
--- a/classytags/__init__.py
+++ b/classytags/__init__.py
@@ -1 +1 @@
-__version__ = '0.7.1'
+__version__ = '0.7.2'
diff --git a/classytags/tests.py b/classytags/tests.py
index 4a8bcd2..294074f 100644
--- a/classytags/tests.py
+++ b/classytags/tests.py
@@ -10,6 +10,8 @@ from unittest import TestCase
 import django
 from django import template
 from django.core.exceptions import ImproperlyConfigured
+from django.template import Context, RequestContext
+from django.test import RequestFactory
 
 from classytags import arguments
 from classytags import core
@@ -23,7 +25,6 @@ from classytags.blocks import VariableBlockName
 from classytags.compat import compat_next
 from classytags.test.context_managers import SettingsOverride
 from classytags.test.context_managers import TemplateTags
-from django.template import Context
 
 DJANGO_1_4_OR_HIGHER = (
     LooseVersion(django.get_version()) >= LooseVersion('1.4')
@@ -1231,7 +1232,7 @@ class MultiBreakpointTests(TestCase):
         dummy_context = {}
         self.assertEqual(kwargs['first'].resolve(dummy_context), 'firstval')
         self.assertEqual(kwargs['second'].resolve(dummy_context), None)
-        
+
     def test_optional_both(self):
         options = core.Options(
             arguments.Argument('first'),
@@ -1247,7 +1248,7 @@ class MultiBreakpointTests(TestCase):
         dummy_context = {}
         self.assertEqual(kwargs['first'].resolve(dummy_context), 'firstval')
         self.assertEqual(kwargs['second'].resolve(dummy_context), 'secondval')
-    
+
     def test_partial_breakpoints(self):
         options = core.Options(
             arguments.Argument('first'),
@@ -1261,7 +1262,7 @@ class MultiBreakpointTests(TestCase):
             exceptions.TrailingBreakpoint,
             options.parse, dummy_parser, dummy_tokens
         )
-    
+
     def test_partial_breakpoints_second(self):
         options = core.Options(
             arguments.Argument('first'),
@@ -1275,7 +1276,7 @@ class MultiBreakpointTests(TestCase):
             exceptions.BreakpointExpected,
             options.parse, dummy_parser, dummy_tokens
         )
-    
+
     def test_partial_breakpoints_both(self):
         options = core.Options(
             arguments.Argument('first'),
@@ -1290,7 +1291,7 @@ class MultiBreakpointTests(TestCase):
             exceptions.BreakpointExpected,
             options.parse, dummy_parser, dummy_tokens
         )
-    
+
     def test_partial_breakpoints_second_both(self):
         options = core.Options(
             arguments.Argument('first'),
@@ -1381,9 +1382,9 @@ class MultiBreakpointTests(TestCase):
         }
         if DJANGO_1_5_OR_HIGHER:
             expected.update({
-            'None': None,
-            'True': True,
-            'False': False,
+                'None': None,
+                'True': True,
+                'False': False,
             })
         self.assertEqual(flat, expected)
         context.flatten = None
@@ -1391,3 +1392,65 @@ class MultiBreakpointTests(TestCase):
         self.assertEqual(flat, expected)
         flat = utils.flatten_context({'foo': 'test', 'bar': 'baz'})
         self.assertEqual(flat, {'foo': 'test', 'bar': 'baz'})
+
+    def test_flatten_requestcontext(self):
+        factory = RequestFactory()
+        request = factory.get('/')
+        expected = {
+            'foo': 'test',
+            'request': 'bar',
+            'bar': 'baz',
+        }
+        if DJANGO_1_5_OR_HIGHER:
+            expected.update({
+                'None': None,
+                'True': True,
+                'False': False,
+            })
+
+        checked_keys = expected.keys()
+
+        # Adding a requestcontext to a plain context
+        context = Context({'foo': 'bar'})
+        context.push()
+        context.update({'bar': 'baz'})
+        context.push()
+        rcontext = RequestContext(request, {})
+        rcontext.update({'request': 'bar'})
+        context.update(rcontext)
+        context.push()
+        context.update({'foo': 'test'})
+        flat = utils.flatten_context(context)
+        self.assertEqual(
+            expected, dict(filter(lambda item: item[0] in checked_keys, flat.items()))
+        )
+
+        # Adding a plain context to a requestcontext
+        context = RequestContext(request, {})
+        context.update({'request': 'bar'})
+        normal_context = Context({'foo': 'bar'})
+        context.push()
+        context.update({'bar': 'baz'})
+        context.push()
+        context.update(normal_context)
+        context.push()
+        context.update({'foo': 'test'})
+        flat = utils.flatten_context(context)
+        self.assertEqual(
+            expected, dict(filter(lambda item: item[0] in checked_keys, flat.items()))
+        )
+
+        # Adding a requestcontext to a requestcontext
+        context = RequestContext(request, {})
+        context.update({'request': 'bar'})
+        rcontext = RequestContext(request, {'foo': 'bar'})
+        context.push()
+        context.update({'bar': 'baz'})
+        context.push()
+        context.update(rcontext)
+        context.push()
+        context.update({'foo': 'test'})
+        flat = utils.flatten_context(context)
+        self.assertEqual(
+            expected, dict(filter(lambda item: item[0] in checked_keys, flat.items()))
+        )
diff --git a/classytags/utils.py b/classytags/utils.py
index d38a1c9..6b2a444 100644
--- a/classytags/utils.py
+++ b/classytags/utils.py
@@ -1,9 +1,16 @@
 import re
 from copy import copy
+from distutils.version import LooseVersion
 
 from classytags.compat import compat_basestring
+from django import get_version
+from django.template import Context, RequestContext
 from django.template.context import BaseContext
 
+DJANGO_1_9_OR_HIGHER = (
+    LooseVersion(get_version()) >= LooseVersion('1.9')
+)
+
 
 class NULL:
     """
@@ -86,11 +93,17 @@ def mixin(parent, child, attrs=None):
 
 
 def flatten_context(context):
-    if callable(getattr(context, 'flatten', None)):
-        return context.flatten()
-    elif isinstance(context, BaseContext):
+    def do_flatten(context):
         flat = {}
         for d in context.dicts:
-            flat.update(d)
+            if isinstance(d, (Context, RequestContext)):
+                flat.update(do_flatten(d))
+            else:
+                flat.update(d)
         return flat
+
+    if callable(getattr(context, 'flatten', None)) and DJANGO_1_9_OR_HIGHER:
+        return context.flatten()
+    elif isinstance(context, BaseContext):
+        return do_flatten(context)
     return context
diff --git a/docs/changes.rst b/docs/changes.rst
index 698dd1d..b58d0fd 100644
--- a/docs/changes.rst
+++ b/docs/changes.rst
@@ -4,6 +4,13 @@ Changelog
 
 
 *****
+0.7.2
+*****
+
+* Fixed regression introduced in 0.7.1 breaking Django 1.9 and higher.
+
+
+*****
 0.7.1
 *****
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/django-classy-tags.git



More information about the Python-modules-commits mailing list