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/08/28 15:07:47 UTC

[airavata-django-portal] 01/02: AIRAVATA-3188 image custom output display type

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 f0014ff754de475b268e47f79155960bd4ab0052
Author: Marcus Christie <ma...@apache.org>
AuthorDate: Wed Aug 28 10:58:35 2019 -0400

    AIRAVATA-3188 image custom output display type
---
 django_airavata/apps/api/urls.py                   |  2 +
 django_airavata/apps/api/views.py                  | 13 ++++++
 .../output-displays/ImageOutputDisplay.vue         | 46 ++++++++++++++++++++++
 .../output-displays/OutputDisplayContainer.vue     |  4 ++
 4 files changed, 65 insertions(+)

diff --git a/django_airavata/apps/api/urls.py b/django_airavata/apps/api/urls.py
index 9f59eb1..9548cca 100644
--- a/django_airavata/apps/api/urls.py
+++ b/django_airavata/apps/api/urls.py
@@ -97,6 +97,8 @@ urlpatterns = [
         views.notebook_output_view, name="notebook-output"),
     url(r'^html-output',
         views.html_output_view, name="html-output"),
+    url(r'^image-output',
+        views.image_output_view, name="image-output"),
 ]
 
 if logger.isEnabledFor(logging.DEBUG):
diff --git a/django_airavata/apps/api/views.py b/django_airavata/apps/api/views.py
index 068d43b..d0c8a07 100644
--- a/django_airavata/apps/api/views.py
+++ b/django_airavata/apps/api/views.py
@@ -1755,3 +1755,16 @@ def html_output_view(request):
                                       experiment_output_name,
                                       experiment_id)
     return JsonResponse(data)
+
+
+def image_output_view(request):
+    provider_id = request.GET['provider-id']
+    experiment_id = request.GET['experiment-id']
+    experiment_output_name = request.GET['experiment-output-name']
+    data = output_views.generate_data(request,
+                                      provider_id,
+                                      experiment_output_name,
+                                      experiment_id)
+    # data should contain 'image' as a file-like object or raw bytes with the
+    # file data and 'mime-type' with the images mimetype
+    return HttpResponse(data['image'], content_type=data['mime-type'])
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/output-displays/ImageOutputDisplay.vue b/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/output-displays/ImageOutputDisplay.vue
new file mode 100644
index 0000000..ab6da61
--- /dev/null
+++ b/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/output-displays/ImageOutputDisplay.vue
@@ -0,0 +1,46 @@
+<template>
+  <img :src="url" />
+</template>
+
+<script>
+import { models, utils } from "django-airavata-api";
+export default {
+  name: "image-output-display",
+  props: {
+    experimentOutput: {
+      type: models.OutputDataObjectType,
+      required: true
+    },
+    dataProducts: {
+      type: Array,
+      required: true
+    },
+    experimentId: {
+      type: String,
+      required: true
+    },
+    providerId: {
+      type: String,
+      required: true
+    }
+  },
+  data() {
+    return {
+      rawOutput: null
+    };
+  },
+  computed: {
+    url() {
+      return (
+        "/api/image-output?" +
+        "experiment-id=" +
+        encodeURIComponent(this.experimentId) +
+        "&experiment-output-name=" +
+        encodeURIComponent(this.experimentOutput.name) +
+        "&provider-id=" +
+        encodeURIComponent(this.providerId)
+      );
+    }
+  }
+};
+</script>
diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/output-displays/OutputDisplayContainer.vue b/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/output-displays/OutputDisplayContainer.vue
index 40387ab..2ae3498 100644
--- a/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/output-displays/OutputDisplayContainer.vue
+++ b/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/output-displays/OutputDisplayContainer.vue
@@ -34,6 +34,7 @@ import { models } from "django-airavata-api";
 import { components } from "django-airavata-common-ui";
 import DefaultOutputDisplay from "./DefaultOutputDisplay";
 import HtmlOutputDisplay from "./HtmlOutputDisplay";
+import ImageOutputDisplay from "./ImageOutputDisplay";
 import LinkDisplay from "./LinkDisplay";
 import NotebookOutputDisplay from "./NotebookOutputDisplay";
 
@@ -62,6 +63,7 @@ export default {
     "data-product-viewer": components.DataProductViewer,
     DefaultOutputDisplay,
     HtmlOutputDisplay,
+    ImageOutputDisplay,
     LinkDisplay,
     NotebookOutputDisplay
   },
@@ -83,6 +85,8 @@ export default {
         return "notebook-output-display";
       } else if (this.currentView["display-type"] === "html") {
         return "html-output-display";
+      } else if (this.currentView["display-type"] === "image") {
+        return "image-output-display";
       } else {
         return null;
       }