Corrected JSONValue.__unicode__ to return unicode instead of bytestrings... not sure...
authorStephen Burrows <stephen.r.burrows@gmail.com>
Mon, 21 Feb 2011 18:47:48 +0000 (13:47 -0500)
committerStephen Burrows <stephen.r.burrows@gmail.com>
Mon, 21 Feb 2011 18:47:48 +0000 (13:47 -0500)
models/base.py
models/nodes.py

index 8370bb7..836fe4a 100644 (file)
@@ -5,7 +5,7 @@ from django.contrib.contenttypes import generic
 from django.core.exceptions import ObjectDoesNotExist
 from django.core.validators import RegexValidator
 from django.utils import simplejson as json
 from django.core.exceptions import ObjectDoesNotExist
 from django.core.validators import RegexValidator
 from django.utils import simplejson as json
-from django.utils.encoding import smart_str
+from django.utils.encoding import force_unicode
 from philo.exceptions import AncestorDoesNotExist
 from philo.models.fields import JSONField
 from philo.utils import ContentTypeRegistryLimiter, ContentTypeSubclassLimiter
 from philo.exceptions import AncestorDoesNotExist
 from philo.models.fields import JSONField
 from philo.utils import ContentTypeRegistryLimiter, ContentTypeSubclassLimiter
@@ -84,7 +84,7 @@ class JSONValue(AttributeValue):
        value = JSONField(verbose_name='Value (JSON)', help_text='This value must be valid JSON.', default='null', db_index=True)
        
        def __unicode__(self):
        value = JSONField(verbose_name='Value (JSON)', help_text='This value must be valid JSON.', default='null', db_index=True)
        
        def __unicode__(self):
-               return smart_str(self.value)
+               return force_unicode(self.value)
        
        def value_formfields(self):
                kwargs = {'initial': self.value_json}
        
        def value_formfields(self):
                kwargs = {'initial': self.value_json}
index 3f40205..99be196 100644 (file)
@@ -7,6 +7,7 @@ from django.core.exceptions import ValidationError
 from django.core.servers.basehttp import FileWrapper
 from django.core.urlresolvers import resolve, clear_url_caches, reverse, NoReverseMatch
 from django.template import add_to_builtins as register_templatetags
 from django.core.servers.basehttp import FileWrapper
 from django.core.urlresolvers import resolve, clear_url_caches, reverse, NoReverseMatch
 from django.template import add_to_builtins as register_templatetags
+from django.utils.encoding import smart_str
 from inspect import getargspec
 from philo.exceptions import MIDDLEWARE_NOT_CONFIGURED
 from philo.models.base import TreeEntity, Entity, QuerySetMapper, register_value_model
 from inspect import getargspec
 from philo.exceptions import MIDDLEWARE_NOT_CONFIGURED
 from philo.models.base import TreeEntity, Entity, QuerySetMapper, register_value_model
@@ -210,7 +211,6 @@ class TargetURLModel(models.Model):
        reversing_parameters = JSONField(blank=True, help_text="If reversing parameters are defined, url_or_subpath will instead be interpreted as the view name to be reversed.")
        
        def clean(self):
        reversing_parameters = JSONField(blank=True, help_text="If reversing parameters are defined, url_or_subpath will instead be interpreted as the view name to be reversed.")
        
        def clean(self):
-               # Should this be enforced? Not enforcing it would allow creation of "headers" in the navbar.
                if not self.target_node and not self.url_or_subpath:
                        raise ValidationError("Either a target node or a url must be defined.")
                
                if not self.target_node and not self.url_or_subpath:
                        raise ValidationError("Either a target node or a url must be defined.")
                
@@ -232,11 +232,7 @@ class TargetURLModel(models.Model):
                elif isinstance(params, dict):
                        # Convert unicode keys to strings for Python < 2.6.5. Compare
                        # http://stackoverflow.com/questions/4598604/how-to-pass-unicode-keywords-to-kwargs
                elif isinstance(params, dict):
                        # Convert unicode keys to strings for Python < 2.6.5. Compare
                        # http://stackoverflow.com/questions/4598604/how-to-pass-unicode-keywords-to-kwargs
-                       kwargs = {}
-                       for key, val in params.items():
-                               if isinstance(key, unicode):
-                                       key = str(key)
-                               kwargs[key] = val
+                       kwargs = dict([(smart_str(k, 'ascii'), v) for k, v in params.items()])
                return self.url_or_subpath, args, kwargs
        
        def get_target_url(self):
                return self.url_or_subpath, args, kwargs
        
        def get_target_url(self):
@@ -263,7 +259,7 @@ class TargetURLModel(models.Model):
                abstract = True
 
 
                abstract = True
 
 
-class Redirect(View, TargetURLModel):
+class Redirect(TargetURLModel, View):
        STATUS_CODES = (
                (302, 'Temporary'),
                (301, 'Permanent'),
        STATUS_CODES = (
                (302, 'Temporary'),
                (301, 'Permanent'),