summaryrefslogtreecommitdiff
path: root/frontend/afe/feeds/feed.py
blob: 801cfe05607d86823551791605ff7534c2c14e9f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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)