From 50f8dccbfbbbbe3482ebc4fd7a1c7f3ed9d3003a Mon Sep 17 00:00:00 2001 From: Chad Roberts Date: Thu, 14 Nov 2013 14:58:56 -0500 Subject: [PATCH] Adding ability to download job binaries There is now the ability to download job binaries both from the job binaires table and from the job binaries description page. Closes-Bug: #1251288 Change-Id: Ie7dae47f2b682a0093bbfa40457c67eb94d070c7 --- savannadashboard/job_binaries/tables.py | 9 ++++++- savannadashboard/job_binaries/urls.py | 5 +++- savannadashboard/job_binaries/views.py | 26 +++++++++++++++++++ .../templates/job_binaries/_details.html | 1 + 4 files changed, 39 insertions(+), 2 deletions(-) diff --git a/savannadashboard/job_binaries/tables.py b/savannadashboard/job_binaries/tables.py index 36a2908a..c2175884 100644 --- a/savannadashboard/job_binaries/tables.py +++ b/savannadashboard/job_binaries/tables.py @@ -58,6 +58,13 @@ class DeleteJobBinary(tables.BatchAction): savanna.job_binaries.delete(obj_id) +class DownloadJobBinary(tables.LinkAction): + name = "download job binary" + verbose_name = _("Download Job Binary") + url = "horizon:savanna:job_binaries:download" + classes = ("btn-edit") + + class JobBinariesTable(tables.DataTable): name = tables.Column("name", verbose_name=_("Name"), @@ -72,4 +79,4 @@ class JobBinariesTable(tables.DataTable): verbose_name = _("Job Binaries") table_actions = (CreateJobBinary, DeleteJobBinary) - row_actions = (DeleteJobBinary,) + row_actions = (DeleteJobBinary, DownloadJobBinary) diff --git a/savannadashboard/job_binaries/urls.py b/savannadashboard/job_binaries/urls.py index ef562828..53553b7c 100644 --- a/savannadashboard/job_binaries/urls.py +++ b/savannadashboard/job_binaries/urls.py @@ -31,4 +31,7 @@ urlpatterns = patterns('', name='create-job-binary'), url(r'^(?P[^/]+)$', views.JobBinaryDetailsView.as_view(), - name='details')) + name='details'), + url(r'^(?P[^/]+)/download/$', + views.DownloadJobBinaryView.as_view(), + name='download')) diff --git a/savannadashboard/job_binaries/views.py b/savannadashboard/job_binaries/views.py index 150b0877..2e865e5d 100644 --- a/savannadashboard/job_binaries/views.py +++ b/savannadashboard/job_binaries/views.py @@ -17,8 +17,14 @@ import logging +from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse_lazy +from django import http +from django.template.defaultfilters import slugify +from django.utils.translation import ugettext_lazy as _ +from django.views.generic import View +from horizon import exceptions from horizon import forms from horizon import tables from horizon import tabs @@ -61,3 +67,23 @@ class JobBinaryDetailsView(tabs.TabView): def get_data(self): pass + + +class DownloadJobBinaryView(View): + def get(self, request, job_binary_id=None): + try: + savanna = savannaclient(request) + jb = savanna.job_binaries.get(job_binary_id) + data = savanna.job_binaries.get_file(job_binary_id) + except Exception: + redirect = reverse('horizon:savanna:job_binaries:index') + exceptions.handle(self.request, + _('Unable to fetch job binary: %(exc)s'), + redirect=redirect) + + response = http.HttpResponse(mimetype='application/binary') + response['Content-Disposition'] = \ + 'attachment; filename=%s' % slugify(jb.name) + response.write(data) + response['Content-Length'] = str(len(data)) + return response diff --git a/savannadashboard/templates/job_binaries/_details.html b/savannadashboard/templates/job_binaries/_details.html index 51266d27..4fe73f39 100644 --- a/savannadashboard/templates/job_binaries/_details.html +++ b/savannadashboard/templates/job_binaries/_details.html @@ -15,4 +15,5 @@
{% trans "Create time" %}
{{ job_binary.created_at }}
+ {% trans "Download Job Binary" %}