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 18:48:45 UTC

[airavata-django-portal] 02/04: AIRAVATA-2631 Add downloadURL to DataProductSerializer

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

commit aeeb13976a5b2e22f2224cae67115075f8ee6b26
Author: Marcus Christie <ma...@iu.edu>
AuthorDate: Thu Feb 15 11:46:42 2018 -0500

    AIRAVATA-2631 Add downloadURL to DataProductSerializer
---
 django_airavata/apps/api/serializers.py                        | 10 ++++++++++
 .../api/static/django_airavata_api/js/models/DataProduct.js    |  1 +
 .../js/components/experiment/ExperimentSummary.vue             |  7 ++++---
 3 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/django_airavata/apps/api/serializers.py b/django_airavata/apps/api/serializers.py
index 7c3ab02..5a418c8 100644
--- a/django_airavata/apps/api/serializers.py
+++ b/django_airavata/apps/api/serializers.py
@@ -5,6 +5,7 @@ import logging
 from urllib.parse import quote
 
 from django.conf import settings
+from django.urls import reverse
 from rest_framework import serializers
 
 from airavata.model.appcatalog.appdeployment.ttypes import (ApplicationDeploymentDescription,
@@ -25,6 +26,7 @@ from airavata.model.job.ttypes import JobModel
 from airavata.model.status.ttypes import ExperimentStatus
 from airavata.model.workspace.ttypes import Project
 
+from . import datastore
 from . import thrift_utils
 
 log = logging.getLogger(__name__)
@@ -305,6 +307,14 @@ class DataProductSerializer(
     creationTime = UTCPosixTimestampDateTimeField()
     lastModifiedTime = UTCPosixTimestampDateTimeField()
     replicaLocations = DataReplicaLocationSerializer(many=True)
+    downloadURL = serializers.SerializerMethodField()
+
+    def get_downloadURL(self, data_product):
+        """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 None
 
 
 # TODO move this into airavata_sdk?
diff --git a/django_airavata/apps/api/static/django_airavata_api/js/models/DataProduct.js b/django_airavata/apps/api/static/django_airavata_api/js/models/DataProduct.js
index dff0251..1f95ce3 100644
--- a/django_airavata/apps/api/static/django_airavata_api/js/models/DataProduct.js
+++ b/django_airavata/apps/api/static/django_airavata_api/js/models/DataProduct.js
@@ -27,6 +27,7 @@ const FIELDS = [
         type: DataReplicaLocation,
         list: true
     },
+    'downloadURL',
 ];
 
 const FILENAME_REGEX = /[^/]+$/;
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/ExperimentSummary.vue b/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/ExperimentSummary.vue
index 337e53b..c424d7c 100644
--- a/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/ExperimentSummary.vue
+++ b/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/ExperimentSummary.vue
@@ -29,7 +29,8 @@
                                     <th scope="row">Outputs</th>
                                     <td>
                                         <template v-for="output in localFullExperiment.outputDataProducts">
-                                            <a :href="'/api/download/' + encodeURIComponent(output.productUri)">{{ output.filename }}</a>
+                                            <span v-if="output.downloadURL"><a :href="output.downloadURL">{{ output.filename }}</a></span>
+                                            <span v-else>{{ output.filename }}</span>
                                         </template>
                                     </td>
                                 </tr>
@@ -111,11 +112,11 @@
                                     <td>{{ experiment.userConfigurationData.computationalResourceScheduling.queueName }}</td>
                                 </tr>
                                 <tr>
-                                    <!-- TODO -->
                                     <th scope="row">Inputs</th>
                                     <td>
                                         <template v-for="input in localFullExperiment.inputDataProducts">
-                                            <a :href="'/api/download/' + encodeURIComponent(input.productUri)">{{ input.filename }}</a>
+                                            <span v-if="input.downloadURL"><a :href="input.downloadURL">{{ input.filename }}</a></span>
+                                            <span v-else>{{ input.filename }}</span>
                                         </template>
                                     </td>
                                 </tr>

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