blob: d34a0b93723291e106fa1711a3ad3dc53a0218e2 [file] [log] [blame]
showardb91c3b92008-04-23 21:53:26 +00001import django.http
2from django.contrib.syndication import feeds
3from frontend.afe import models
4
5
6# Copied from django/contrib/syndication/views.py. The default view doesn't
7# give the feed any way to access the request object, and we need to access it
8# to get the server hostname. So we're forced to copy the code here and modify
9# it to pass in the request.
10from django.http import HttpResponse, Http404
11
12# name changed from feed to feed_view
13def feed_view(request, url, feed_dict=None):
jadmanski0afbb632008-06-06 21:10:57 +000014 if not feed_dict:
15 raise Http404, "No feeds are registered."
showardb91c3b92008-04-23 21:53:26 +000016
jadmanski0afbb632008-06-06 21:10:57 +000017 try:
18 slug, param = url.split('/', 1)
19 except ValueError:
20 slug, param = url, ''
showardb91c3b92008-04-23 21:53:26 +000021
jadmanski0afbb632008-06-06 21:10:57 +000022 try:
23 f = feed_dict[slug]
24 except KeyError:
25 raise Http404, "Slug %r isn't registered." % slug
showardb91c3b92008-04-23 21:53:26 +000026
jadmanski0afbb632008-06-06 21:10:57 +000027 try:
28 # this line is changed from the Django library version to pass
29 # in request instead of request.path
30 feedgen = f(slug, request).get_feed(param)
31 except feeds.FeedDoesNotExist:
32 raise Http404, "Invalid feed parameters. Slug %r is valid, but other parameters, or lack thereof, are not." % slug
showardb91c3b92008-04-23 21:53:26 +000033
jadmanski0afbb632008-06-06 21:10:57 +000034 response = HttpResponse(mimetype=feedgen.mime_type)
35 feedgen.write(response, 'utf-8')
36 return response
showardb91c3b92008-04-23 21:53:26 +000037# end copied code
38
39class JobFeed(feeds.Feed):
jadmanski0afbb632008-06-06 21:10:57 +000040 """\
41 Common feed functionality.
42 """
43 link = "/results"
44 title_template = "feeds/job_feed_title.html"
45 description_template = "feeds/job_feed_description.html"
showardb91c3b92008-04-23 21:53:26 +000046
jadmanski0afbb632008-06-06 21:10:57 +000047 NUM_ITEMS = 20
showardb91c3b92008-04-23 21:53:26 +000048
jadmanski0afbb632008-06-06 21:10:57 +000049 def __init__(self, slug, request):
50 super(JobFeed, self).__init__(slug, request.path)
51 server_hostname = django.http.get_host(request)
52 self.full_link = 'http://' + server_hostname + self.link
showardb91c3b92008-04-23 21:53:26 +000053
jadmanski0afbb632008-06-06 21:10:57 +000054 def title(self, obj):
55 return "Automated Test Framework %s Jobs" % obj.capitalize()
showardb91c3b92008-04-23 21:53:26 +000056
jadmanski0afbb632008-06-06 21:10:57 +000057 def get_object(self, bits):
58 # bits[0] should be a job status
59 return bits[0]
showardb91c3b92008-04-23 21:53:26 +000060
jadmanski0afbb632008-06-06 21:10:57 +000061 def items(self, obj):
62 item_list = models.HostQueueEntry.objects.filter(
63 status__iexact=obj).select_related()
64 return item_list.order_by('-id')[:self.NUM_ITEMS]
showardb91c3b92008-04-23 21:53:26 +000065
jadmanski0afbb632008-06-06 21:10:57 +000066 def item_link(self, obj):
67 return '%s/%s-%s' % (self.full_link, obj.job.id, obj.job.owner)