Home | History | Annotate | Download | only in feeds
      1 import django.http
      2 from django.contrib.syndication import views
      3 from autotest_lib.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.
     10 from django.http import HttpResponse, Http404
     11 
     12 # name changed from feed to feed_view
     13 def feed_view(request, url, feed_dict=None):
     14     if not feed_dict:
     15         raise Http404, "No feeds are registered."
     16 
     17     try:
     18         slug, param = url.split('/', 1)
     19     except ValueError:
     20         slug, param = url, ''
     21 
     22     try:
     23         f = feed_dict[slug]
     24     except KeyError:
     25         raise Http404, "Slug %r isn't registered." % slug
     26 
     27     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 views.FeedDoesNotExist:
     32         raise Http404, "Invalid feed parameters. Slug %r is valid, but other parameters, or lack thereof, are not." % slug
     33 
     34     response = HttpResponse(mimetype=feedgen.mime_type)
     35     feedgen.write(response, 'utf-8')
     36     return response
     37 # end copied code
     38 
     39 class JobFeed(views.Feed):
     40     """\
     41     Common feed functionality.
     42     """
     43     link  =  "/results"
     44     title_template = "feeds/job_feed_title.html"
     45     description_template = "feeds/job_feed_description.html"
     46 
     47     NUM_ITEMS = 20
     48 
     49     def __init__(self, slug, request):
     50         super(JobFeed, self).__init__(slug, request)
     51         server_hostname = django.http.get_host(request)
     52         self.full_link = 'http://' + server_hostname + self.link
     53 
     54     def title(self, obj):
     55         return "Automated Test Framework %s Jobs" % obj.capitalize()
     56 
     57     def get_object(self, bits):
     58         # bits[0] should be a job status
     59         return bits[0]
     60 
     61     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]
     65 
     66     def item_link(self, obj):
     67         return  '%s/%s-%s' % (self.full_link, obj.job.id, obj.job.owner)
     68