from django.contrib.syndication.views import Feed
from django.utils.feedgenerator import Rss201rev2Feed
from conservancy.apps.news.models import PressRelease
from conservancy.apps.blog.models import Entry as BlogEntry
from django.template import RequestContext
from django.shortcuts import render_to_response
from django.shortcuts import render
from django.conf import settings
from datetime import datetime
import itertools
import operator
class ConservancyFeedBase(Feed):
def copyright_holder(self): return "Software Freedom Conservancy"
def license_no_html(self): return "Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License."
def item_copyright(self, item):
year = 2008
for attr in ('pub_date', 'date_created', 'date_last_modified'):
if hasattr(item, attr):
if hasattr(getattr(item, attr), 'year'):
year = getattr(getattr(item, attr), 'year')
break
return 'Copyright (C) %d, %s. %s' % (year, self.copyright_holder(), self.license_no_html())
def item_extra_kwargs(self, item):
@@ -234,25 +233,25 @@ class BlogFeed(ConservancyFeedBase):
def OR_filter(field_name, subfield_name, objs):
from django.db.models import Q
return reduce(lambda x, y: x | y,
[Q(**{'%s__%s' % (field_name, subfield_name): x})
for x in objs])
queryset = BlogEntry.objects.filter(pub_date__lte=datetime.now())
if 'author' in GET:
authors = GET.getlist('author')
queryset = queryset.filter(OR_filter('author', 'username', authors))
if 'tag' in GET:
tags = GET.getlist('tag')
queryset = queryset.filter(OR_filter('tags', 'slug', tags))
return queryset.order_by('-pub_date')[:10]
def view(request):
"""Listing of all available feeds
"""
feeds = (PressReleaseFeed, BlogFeed, OmnibusFeed)
return render_to_response("feeds.html", {'feeds': feeds}, context_instance=RequestContext(request))
return render(request, "feeds.html", {'feeds': feeds})