Add support for completed/failed jobs RSS feeds.
From: Ian Lawrence <ext-ian.lawrence@nokia.com>


git-svn-id: http://test.kernel.org/svn/autotest/trunk@1460 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/frontend/afe/feeds/feed.py b/frontend/afe/feeds/feed.py
new file mode 100644
index 0000000..801cfe0
--- /dev/null
+++ b/frontend/afe/feeds/feed.py
@@ -0,0 +1,67 @@
+import django.http
+from django.contrib.syndication import feeds
+from frontend.afe import models
+
+
+# Copied from django/contrib/syndication/views.py.  The default view doesn't
+# give the feed any way to access the request object, and we need to access it
+# to get the server hostname.  So we're forced to copy the code here and modify
+# it to pass in the request.
+from django.http import HttpResponse, Http404
+
+# name changed from feed to feed_view
+def feed_view(request, url, feed_dict=None):
+	if not feed_dict:
+		raise Http404, "No feeds are registered."
+
+	try:
+		slug, param = url.split('/', 1)
+	except ValueError:
+		slug, param = url, ''
+
+	try:
+		f = feed_dict[slug]
+	except KeyError:
+		raise Http404, "Slug %r isn't registered." % slug
+
+	try:
+		# this line is changed from the Django library version to pass
+		# in request instead of request.path
+		feedgen = f(slug, request).get_feed(param)
+	except feeds.FeedDoesNotExist:
+		raise Http404, "Invalid feed parameters. Slug %r is valid, but other parameters, or lack thereof, are not." % slug
+
+	response = HttpResponse(mimetype=feedgen.mime_type)
+	feedgen.write(response, 'utf-8')
+	return response
+# end copied code
+
+class JobFeed(feeds.Feed):
+	"""\
+	Common feed functionality.
+	"""
+	link  =  "/results"
+	title_template = "feeds/job_feed_title.html"
+	description_template = "feeds/job_feed_description.html"
+
+	NUM_ITEMS = 20
+
+	def __init__(self, slug, request):
+		super(JobFeed, self).__init__(slug, request.path)
+		server_hostname = django.http.get_host(request)
+		self.full_link = 'http://' + server_hostname + self.link
+
+	def title(self, obj):
+		return "Automated Test Framework %s Jobs" % obj.capitalize()
+
+	def get_object(self, bits):
+		# bits[0] should be a job status
+		return bits[0]
+
+	def items(self, obj):
+		item_list = models.HostQueueEntry.objects.filter(
+		    status__iexact=obj).select_related()
+		return item_list.order_by('-id')[:self.NUM_ITEMS]
+
+	def item_link(self, obj):
+		return  '%s/%s-%s' % (self.full_link, obj.job.id, obj.job.owner)