Fixed login redirects
[philo.git] / contrib / penfield / utils.py
index 6f2d41d..1a53cfe 100644 (file)
@@ -2,6 +2,7 @@ from django.utils.feedgenerator import Atom1Feed, Rss201rev2Feed
 from django.conf.urls.defaults import url, patterns
 from django.core.urlresolvers import reverse
 from django.http import HttpResponse
 from django.conf.urls.defaults import url, patterns
 from django.core.urlresolvers import reverse
 from django.http import HttpResponse
+from philo.utils import paginate
 
 
 class FeedMultiViewMixin(object):
 
 
 class FeedMultiViewMixin(object):
@@ -15,23 +16,24 @@ class FeedMultiViewMixin(object):
        atom_feed = Atom1Feed
        rss_feed = Rss201rev2Feed
        feed_description = ''
        atom_feed = Atom1Feed
        rss_feed = Rss201rev2Feed
        feed_description = ''
+       list_var = 'objects'
        
        
-       def page_view(self, func, page, list_var='entries'):
+       def page_view(self, func, page):
                """
                Wraps an object-fetching function and renders the results as a page.
                """
                def inner(request, node=None, extra_context=None, **kwargs):
                """
                Wraps an object-fetching function and renders the results as a page.
                """
                def inner(request, node=None, extra_context=None, **kwargs):
-                       objects, extra_context = func(request, node, extra_context, **kwargs)
+                       objects, extra_context = func(request=request, node=node, extra_context=extra_context, **kwargs)
 
                        context = self.get_context()
                        context.update(extra_context or {})
 
 
                        context = self.get_context()
                        context.update(extra_context or {})
 
-                       if 'page' in kwargs or 'page' in request.GET:
+                       if 'page' in kwargs or 'page' in request.GET or (hasattr(self, 'per_page') and self.per_page):
                                page_num = kwargs.get('page', request.GET.get('page', 1))
                                paginator, paginated_page, objects = paginate(objects, self.per_page, page_num)
                                page_num = kwargs.get('page', request.GET.get('page', 1))
                                paginator, paginated_page, objects = paginate(objects, self.per_page, page_num)
-                               context.update({'paginator': paginator, 'paginated_page': paginated_page, list_var: objects})
+                               context.update({'paginator': paginator, 'paginated_page': paginated_page, self.list_var: objects})
                        else:
                        else:
-                               context.update({list_var: objects})
+                               context.update({self.list_var: objects})
 
                        return page.render_to_response(node, request, extra_context=context)
 
 
                        return page.render_to_response(node, request, extra_context=context)
 
@@ -42,7 +44,7 @@ class FeedMultiViewMixin(object):
                Wraps an object-fetching function and renders the results as a rss or atom feed.
                """
                def inner(request, node=None, extra_context=None, **kwargs):
                Wraps an object-fetching function and renders the results as a rss or atom feed.
                """
                def inner(request, node=None, extra_context=None, **kwargs):
-                       objects, extra_context = func(request, node, extra_context, **kwargs)
+                       objects, extra_context = func(request=request, node=node, extra_context=extra_context, **kwargs)
        
                        if 'HTTP_ACCEPT' in request.META and 'rss' in request.META['HTTP_ACCEPT'] and 'atom' not in request.META['HTTP_ACCEPT']:
                                feed_type = 'rss'
        
                        if 'HTTP_ACCEPT' in request.META and 'rss' in request.META['HTTP_ACCEPT'] and 'atom' not in request.META['HTTP_ACCEPT']:
                                feed_type = 'rss'
@@ -52,7 +54,7 @@ class FeedMultiViewMixin(object):
                        feed = self.get_feed(feed_type, request, node, kwargs, reverse_name)
                        
                        for obj in objects:
                        feed = self.get_feed(feed_type, request, node, kwargs, reverse_name)
                        
                        for obj in objects:
-                               feed.add_item(obj.title, '/%s/%s/' % (node.get_absolute_url().strip('/'), self.get_subpath(obj).strip('/')), description=obj.excerpt)
+                               feed.add_item(obj.title, '/%s/%s/' % (node.get_absolute_url().strip('/'), self.get_subpath(obj).strip('/')), description=self.get_obj_description(obj))
        
                        response = HttpResponse(mimetype=feed.mime_type)
                        feed.write(response, 'utf-8')
        
                        response = HttpResponse(mimetype=feed.mime_type)
                        feed.write(response, 'utf-8')
@@ -75,4 +77,7 @@ class FeedMultiViewMixin(object):
                        url(r'^%s/$' % self.feed_suffix, self.feed_view(object_fetcher, feed_name), name=feed_name),
                        url(r'^$', self.page_view(object_fetcher, page), name=base_name)
                )
                        url(r'^%s/$' % self.feed_suffix, self.feed_view(object_fetcher, feed_name), name=feed_name),
                        url(r'^$', self.page_view(object_fetcher, page), name=base_name)
                )
-               return urlpatterns
\ No newline at end of file
+               return urlpatterns
+       
+       def get_obj_description(self, obj):
+               raise NotImplementedError
\ No newline at end of file