Merge branch 'master' into julian
authorStephen Burrows <stephen.r.burrows@gmail.com>
Mon, 14 Feb 2011 19:13:19 +0000 (14:13 -0500)
committerStephen Burrows <stephen.r.burrows@gmail.com>
Mon, 14 Feb 2011 19:13:19 +0000 (14:13 -0500)
contrib/penfield/migrations/0003_auto__add_field_newsletterview_feed_type__add_field_newsletterview_ite.py
contrib/shipherd/models.py
contrib/shipherd/templatetags/shipherd.py
contrib/waldo/models.py
models/nodes.py

index 1f6d829..eae496e 100644 (file)
@@ -9,7 +9,7 @@ class Migration(SchemaMigration):
     def forwards(self, orm):
         
         # Adding field 'NewsletterView.feed_type'
-        db.add_column('penfield_newsletterview', 'feed_type', self.gf('django.db.models.fields.CharField')(default='atom', max_length=50), keep_default=False)
+        db.add_column('penfield_newsletterview', 'feed_type', self.gf('django.db.models.fields.CharField')(default='application/atom+xml', max_length=50), keep_default=False)
 
         # Adding field 'NewsletterView.item_title_template'
         db.add_column('penfield_newsletterview', 'item_title_template', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='penfield_newsletterview_title_related', null=True, to=orm['philo.Template']), keep_default=False)
index 8efc57a..654f5f8 100644 (file)
@@ -148,18 +148,19 @@ class NavigationManager(models.Manager):
                # about that. TODO: Benchmark it.
                caches = self.__class__._cache[self.db][node].values()
                
-               items = []
+               target_pks = set()
                
                for cache in caches:
-                       items += cache['items']
+                       target_pks |= set([item.target_node_id for item in cache['items']])
                
                # A distinct query is not strictly necessary. TODO: benchmark the efficiency
                # with/without distinct.
-               targets = list(Node.objects.filter(shipherd_navigationitem_related__in=items).distinct())
+               targets = list(Node.objects.filter(pk__in=target_pks).distinct())
                
                for cache in caches:
                        for item in cache['items']:
-                               item.target_node = targets[targets.index(item.target_node)]
+                               if item.target_node_id:
+                                       item.target_node = targets[targets.index(item.target_node)]
        
        def clear_cache(self):
                self.__class__._cache.pop(self.db, None)
index 98e3e6b..fa4ec3e 100644 (file)
@@ -84,13 +84,16 @@ def recursenavigation(parser, token):
 
 @register.filter
 def has_navigation(node, key=None):
-       nav = node.navigation
-       if key is not None:
-               if key in nav and bool(node.navigation[key]):
-                       return True
-               elif key not in node.navigation:
-                       return False
-       return bool(node.navigation)
+       try:
+               nav = node.navigation
+               if key is not None:
+                       if key in nav and bool(node.navigation[key]):
+                               return True
+                       elif key not in node.navigation:
+                               return False
+               return bool(node.navigation)
+       except:
+               return False
 
 
 @register.filter
index 3286aa0..d35e22a 100644 (file)
@@ -416,7 +416,7 @@ class AccountMultiView(LoginMultiView):
                        user.email = email
                        user.save()
                        messages.add_message(request, messages.SUCCESS, 'Email changed successfully.')
-                       return HttpReponseRedirect(self.reverse('account', node=request.node))
+                       return HttpResponseRedirect(self.reverse('account', node=request.node))
                
                raise Http404
        
index 10c51b4..07a5e0a 100644 (file)
@@ -114,8 +114,8 @@ class View(Entity):
                
                try:
                        subpath = reverse(view_name, urlconf=self, args=args or [], kwargs=kwargs or {})
-               except NoReverseMatch:
-                       raise ViewCanNotProvideSubpath
+               except NoReverseMatch, e:
+                       raise ViewCanNotProvideSubpath(e.message)
                
                if node is not None:
                        return node.construct_url(subpath)
@@ -219,7 +219,7 @@ class TargetURLModel(models.Model):
                
                try:
                        self.get_target_url()
-               except NoReverseMatch, e:
+               except (NoReverseMatch, ViewCanNotProvideSubpath), e:
                        raise ValidationError(e.message)
                
                super(TargetURLModel, self).clean()