From 118d3f2fbe479d572938c0cfdc3d41f6d8159502 Mon Sep 17 00:00:00 2001 From: mvdbeek Date: Tue, 4 Feb 2020 19:48:41 +0100 Subject: [PATCH] Allow showing png and jpg contents as invocation outputs --- lib/galaxy/datatypes/data.py | 2 ++ lib/galaxy/datatypes/images.py | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/lib/galaxy/datatypes/data.py b/lib/galaxy/datatypes/data.py index b2aa9c59441..cbb139a3ac0 100644 --- a/lib/galaxy/datatypes/data.py +++ b/lib/galaxy/datatypes/data.py @@ -482,6 +482,8 @@ class Data(object): If the data cannot reasonably be displayed, just indicate this and do not throw an exception. """ + if self.file_ext in {'png', 'jpg'}: + return self.handle_dataset_as_image(dataset_instance) if self.is_binary: result = "*cannot display binary content*\n" else: diff --git a/lib/galaxy/datatypes/images.py b/lib/galaxy/datatypes/images.py index cdd7add688d..9f20e8431ff 100644 --- a/lib/galaxy/datatypes/images.py +++ b/lib/galaxy/datatypes/images.py @@ -1,6 +1,7 @@ """ Image classes """ +import base64 import logging import zipfile @@ -46,6 +47,13 @@ class Image(data.Data): """Determine if the file is in this format""" return check_image_type(filename, self.image_formats) + def handle_dataset_as_image(self, hda): + dataset = hda.dataset + name = hda.name or '' + with open(dataset.file_name, "rb") as f: + base64_image_data = base64.b64encode(f.read()).decode("utf-8") + return "![%s](data:image/%s;base64,%s)" % (name, self.file_ext, base64_image_data) + class Jpg(Image): edam_format = "format_3579"