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 2019/05/30 00:16:02 UTC

[airavata-django-portal] 01/02: AIRAVATA-3035 Link to storage from experiment summary

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 dcf5331c81bbea22d69c24629eadb3d19bccf7fa
Author: Marcus Christie <ma...@apache.org>
AuthorDate: Wed May 29 20:13:48 2019 -0400

    AIRAVATA-3035 Link to storage from experiment summary
---
 django_airavata/apps/api/data_products_helper.py               |  4 ++++
 django_airavata/apps/api/serializers.py                        | 10 ++++++++++
 .../api/static/django_airavata_api/js/models/Experiment.js     |  3 ++-
 .../js/components/experiment/ExperimentSummary.vue             |  8 ++++++++
 .../static/django_airavata_workspace/js/utils/urls.js          |  6 ++++++
 5 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/django_airavata/apps/api/data_products_helper.py b/django_airavata/apps/api/data_products_helper.py
index 759cae3..d995365 100644
--- a/django_airavata/apps/api/data_products_helper.py
+++ b/django_airavata/apps/api/data_products_helper.py
@@ -151,6 +151,10 @@ def create_user_dir(request, path):
     return datastore.create_user_dir(request.user.username, path)
 
 
+def get_rel_path(request, path):
+    return datastore.rel_path(request.user.username, path)
+
+
 def _get_data_product_uri(request, full_path):
 
     user_file = models.User_Files.objects.filter(
diff --git a/django_airavata/apps/api/serializers.py b/django_airavata/apps/api/serializers.py
index d6a7600..bbb66a8 100644
--- a/django_airavata/apps/api/serializers.py
+++ b/django_airavata/apps/api/serializers.py
@@ -419,6 +419,7 @@ class ExperimentSerializer(
     creationTime = UTCPosixTimestampDateTimeField(allow_null=True)
     experimentStatus = ExperimentStatusSerializer(many=True, allow_null=True)
     userHasWriteAccess = serializers.SerializerMethodField()
+    relativeExperimentDataDir = serializers.SerializerMethodField()
 
     def get_userHasWriteAccess(self, experiment):
         request = self.context['request']
@@ -426,6 +427,15 @@ class ExperimentSerializer(
             request.authz_token, experiment.experimentId,
             ResourcePermissionType.WRITE)
 
+    def get_relativeExperimentDataDir(self, experiment):
+        if (experiment.userConfigurationData and
+                experiment.userConfigurationData.experimentDataDir):
+            request = self.context['request']
+            return data_products_helper.get_rel_path(
+                request, experiment.userConfigurationData.experimentDataDir)
+        else:
+            return None
+
 
 class DataReplicaLocationSerializer(
         thrift_utils.create_serializer_class(DataReplicaLocationModel)):
diff --git a/django_airavata/apps/api/static/django_airavata_api/js/models/Experiment.js b/django_airavata/apps/api/static/django_airavata_api/js/models/Experiment.js
index 7052299..025f07e 100644
--- a/django_airavata/apps/api/static/django_airavata_api/js/models/Experiment.js
+++ b/django_airavata/apps/api/static/django_airavata_api/js/models/Experiment.js
@@ -70,7 +70,8 @@ const FIELDS = [
     name: "userHasWriteAccess",
     type: "boolean",
     default: true
-  }
+  },
+  "relativeExperimentDataDir"
 ];
 
 export default class Experiment extends BaseModel {
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 65320e6..72dd87b 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
@@ -64,6 +64,7 @@
                         </template>
                       </li>
                     </ul>
+                    <b-link v-if="storageDirLink" :href="storageDirLink">Storage Directory</b-link>
                   </td>
                 </tr>
                 <!-- Going to leave this out for now -->
@@ -256,6 +257,13 @@ export default {
     },
     isClonable() {
       return this.localFullExperiment.applicationName;
+    },
+    storageDirLink() {
+      if (this.experiment.relativeExperimentDataDir) {
+        return urls.storageDirectory(this.experiment.relativeExperimentDataDir)
+      } else {
+        return null;
+      }
     }
   },
   methods: {
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/utils/urls.js b/django_airavata/apps/workspace/static/django_airavata_workspace/js/utils/urls.js
index 060c6a9..e8bdd0a 100644
--- a/django_airavata/apps/workspace/static/django_airavata_workspace/js/utils/urls.js
+++ b/django_airavata/apps/workspace/static/django_airavata_workspace/js/utils/urls.js
@@ -42,5 +42,11 @@ export default {
   },
   navigateToProjectsList() {
     window.location.assign(this.projectsList());
+  },
+  storageDirectory(relativePath) {
+    if (relativePath.startsWith("/")) {
+      relativePath = relativePath.substring(1);
+    }
+    return "/workspace/storage/~/" + relativePath;
   }
 };