Merge branch 'julian' of git://github.com/lapilofu/philo
[philo.git] / models / nodes.py
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'),