You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ma...@apache.org on 2018/02/15 21:35:10 UTC

[airavata-django-portal] branch master updated: AIRAVATA-2631 Change download URL from query param to path param

This is an automated email from the ASF dual-hosted git repository.

machristie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airavata-django-portal.git


The following commit(s) were added to refs/heads/master by this push:
     new 73c00a8  AIRAVATA-2631 Change download URL from query param to path param
73c00a8 is described below

commit 73c00a8e3effc9dbaf70e8aec55576d936bb98db
Author: Marcus Christie <ma...@iu.edu>
AuthorDate: Thu Feb 15 16:34:59 2018 -0500

    AIRAVATA-2631 Change download URL from query param to path param
---
 django_airavata/apps/api/serializers.py |  7 +++++--
 django_airavata/apps/api/urls.py        |  2 +-
 django_airavata/apps/api/views.py       | 15 ++++++++++-----
 3 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/django_airavata/apps/api/serializers.py b/django_airavata/apps/api/serializers.py
index 5a418c8..a5f843f 100644
--- a/django_airavata/apps/api/serializers.py
+++ b/django_airavata/apps/api/serializers.py
@@ -2,7 +2,7 @@
 import copy
 import datetime
 import logging
-from urllib.parse import quote
+from urllib.parse import quote, urlencode
 
 from django.conf import settings
 from django.urls import reverse
@@ -313,7 +313,10 @@ class DataProductSerializer(
         """Getter for downloadURL field."""
         if datastore.exists(data_product):
             request = self.context['request']
-            return request.build_absolute_uri(reverse('django_airavata_api:download_file', args=[data_product.productUri]))
+            return (request.build_absolute_uri(
+                reverse('django_airavata_api:download_file'))
+                + '?'
+                + urlencode({'data-product-uri': data_product.productUri}))
         return None
 
 
diff --git a/django_airavata/apps/api/urls.py b/django_airavata/apps/api/urls.py
index a9a715a..bc63c5a 100644
--- a/django_airavata/apps/api/urls.py
+++ b/django_airavata/apps/api/urls.py
@@ -35,7 +35,7 @@ urlpatterns = [
     url(r'^credentials/ssh/key/delete', views.DeleteSSHPubKey.as_view(), name="ssh_key_deletion"),
     url(r'^credentials/ssh/key/create', views.GenerateRegisterSSHKeys.as_view(), name="ssh_key_creation"),
     url(r'^upload$', views.upload_input_file, name='upload_input_file'),
-    url(r'^download/(?P<data_product_uri>.+)$', views.download_file, name='download_file'),
+    url(r'^download', views.download_file, name='download_file'),
 ]
 
 
diff --git a/django_airavata/apps/api/views.py b/django_airavata/apps/api/views.py
index 1307012..45a2eb1 100644
--- a/django_airavata/apps/api/views.py
+++ b/django_airavata/apps/api/views.py
@@ -647,12 +647,17 @@ def upload_input_file(request):
 
 
 @login_required
-def download_file(request, data_product_uri):
+def download_file(request):
     # TODO check that user has access to this file using sharing API
-    data_product = request.airavata_client.getDataProduct(
-        request.authz_token, data_product_uri)
-    if not data_product:
-        raise Http404("data product does not exist")
+    data_product_uri = request.GET.get('data-product-uri', '')
+    data_product = None
+    try:
+        data_product = request.airavata_client.getDataProduct(
+            request.authz_token, data_product_uri)
+    except Exception as e:
+        log.warning("Failed to load DataProduct for {}"
+                    .format(data_product_uri), exc_info=True)
+        raise Http404("data product does not exist") from e
     try:
         data_file = datastore.open(data_product)
         response = FileResponse(data_file,

-- 
To stop receiving notification emails like this one, please contact
machristie@apache.org.