from django.contrib.syndication.views import Feed from django.http import Http404 from django.template.defaultfilters import slugify from django.shortcuts import get_object_or_404 from django.conf import settings from .models import NewsPosterProfile from postgresqleu.util.db import exec_to_dict, ensure_conference_timezone class LatestNews(Feed): title = "News - %s" % settings.ORG_NAME link = "/" description_template = "pieces/news_description.html" def get_object(self, request, what): if what == 'news': return None elif what.startswith('user/'): a = get_object_or_404(NewsPosterProfile, urlname=what.split('/')[1]) return a raise Http404("Feed not found") def description(self, obj): if obj: return "The latest news from {0} by {1}".format(settings.ORG_NAME, obj.fullname) else: return "The latest news from {0}".format(settings.ORG_NAME) def items(self, obj): # Front page news is a mix of global and conference news, possibly # filtered by NewsPosterProfile. if obj is None: extrafilter = "" params = {} else: extrafilter = " AND p.author_id=%(authorid)s" params = { 'authorid': obj.pk, } with ensure_conference_timezone(None): return exec_to_dict("""WITH main AS ( SELECT id, NULL::text as urlname, datetime, title, summary, p.fullname FROM newsevents_news LEFT JOIN newsevents_newsposterprofile p ON p.author_id=newsevents_news.author_id WHERE datetime