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;
}
};