evorepo/feeds.py
Dan McGee 89cae2bcb5 Update feeds to new 1.2 framework
Feeds are now views-based and don't need the dictionary anymore.
get_object() now takes named arguments as well making it a bit more
understandable when reading the code.

Signed-off-by: Dan McGee <dan@archlinux.org>
2010-06-08 10:52:53 -05:00

77 lines
2.5 KiB
Python

import datetime
from django.contrib.syndication.feeds import FeedDoesNotExist
from django.contrib.syndication.views import Feed
from django.db.models import Q
from main.models import Arch, Repo, Package, News
class PackageFeed(Feed):
link = '/packages/'
title_template = 'feeds/packages_title.html'
description_template = 'feeds/packages_description.html'
def get_object(self, request, arch='', repo=''):
obj = dict()
qs = Package.objects.select_related('arch', 'repo').order_by('-last_update')
if arch != '':
# feed for a single arch, also include 'any' packages everywhere
a = Arch.objects.get(name=arch)
qs = qs.filter(Q(arch=a) | Q(arch__name__iexact='any'))
obj['arch'] = a
if repo != '':
# feed for a single arch AND repo
r = Repo.objects.get(name=repo)
qs = qs.filter(repo=r)
obj['repo'] = r
obj['qs'] = qs[:50]
return obj
def title(self, obj):
s = 'Arch Linux: Recent package updates'
if 'repo' in obj:
s += ' (%s [%s])' % (obj['arch'].name, obj['repo'].name.lower())
elif 'arch' in obj:
s += ' (%s)' % (obj['arch'].name)
return s
def description(self, obj):
s = 'Recently updated packages in the Arch Linux package repositories'
if 'arch' in obj:
s += ' for the \'%s\' architecture' % obj['arch'].name.lower()
if obj['arch'].name != 'any':
s += ' (including \'any\' packages)'
if 'repo' in obj:
s += ' in the [%s] repository' % obj['repo'].name.lower()
s += '.'
return s
def items(self, obj):
return obj['qs']
def item_pubdate(self, item):
return item.last_update
def item_categories(self, item):
return (item.repo.name,item.arch.name)
class NewsFeed(Feed):
title = 'Arch Linux: Recent news updates'
link = '/news/'
description = 'The latest and greatest news from the Arch Linux distribution.'
title_template = 'feeds/news_title.html'
description_template = 'feeds/news_description.html'
def items(self):
return News.objects.select_related('author').order_by('-postdate', '-id')[:10]
def item_pubdate(self, item):
d = item.postdate
return datetime.datetime(d.year, d.month, d.day)
def item_author_name(self, item):
return item.author.get_full_name()
# vim: set ts=4 sw=4 et: