From ae535f83075f50aebe05a73a9c175d56cbd24a71 Mon Sep 17 00:00:00 2001 From: guerler Date: Wed, 24 Jul 2019 15:52:22 -0400 Subject: [PATCH 1/5] Identify visualization static path from absolute path --- lib/galaxy/visualization/plugins/plugin.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/galaxy/visualization/plugins/plugin.py b/lib/galaxy/visualization/plugins/plugin.py index ee51b2fbd5d..e0f5d494dee 100644 --- a/lib/galaxy/visualization/plugins/plugin.py +++ b/lib/galaxy/visualization/plugins/plugin.py @@ -5,6 +5,7 @@ from a query string and render a webpage based on those data. import copy import logging import os +import re import mako.lookup @@ -72,7 +73,7 @@ class VisualizationPlugin(ServesTemplatesPluginMixin): self.config = config base_url = context.get('base_url', '') self.base_url = '/'.join([base_url, self.name]) if base_url else self.name - self.static_path = os.path.join(self.path.replace('./config', './static'), 'static') + self.static_path = self._get_static_path(self.path) if os.path.exists(os.path.join(self.static_path, 'logo.png')): self.config['logo'] = '/'.join([self.static_path, 'logo.png']) template_cache_dir = context.get('template_cache_dir', None) @@ -127,6 +128,12 @@ class VisualizationPlugin(ServesTemplatesPluginMixin): return url_for(controller='visualization', action=self.name) return url_for('visualization_plugin', visualization_name=self.name) + def _get_static_path(self, path): + match = re.match(r'.*/config/(.*)', path) + if match: + return os.path.join('./static', match.group(1), 'static') + return None + def _get_saved_visualization_config(self, visualization, revision=None, **kwargs): """ Return the config of a saved visualization and revision. From 31e99a932e0280d08bc6d935f3df8b0e5b47a896 Mon Sep 17 00:00:00 2001 From: guerler Date: Wed, 24 Jul 2019 20:54:45 -0400 Subject: [PATCH 2/5] Validate static path before joining path extensions --- lib/galaxy/visualization/plugins/plugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/galaxy/visualization/plugins/plugin.py b/lib/galaxy/visualization/plugins/plugin.py index e0f5d494dee..d033c424f77 100644 --- a/lib/galaxy/visualization/plugins/plugin.py +++ b/lib/galaxy/visualization/plugins/plugin.py @@ -74,7 +74,7 @@ class VisualizationPlugin(ServesTemplatesPluginMixin): base_url = context.get('base_url', '') self.base_url = '/'.join([base_url, self.name]) if base_url else self.name self.static_path = self._get_static_path(self.path) - if os.path.exists(os.path.join(self.static_path, 'logo.png')): + if self.static_path and os.path.exists(os.path.join(self.static_path, 'logo.png')): self.config['logo'] = '/'.join([self.static_path, 'logo.png']) template_cache_dir = context.get('template_cache_dir', None) additional_template_paths = context.get('additional_template_paths', []) From 70363cd0b33a9a80c973676670e30f6e938fe681 Mon Sep 17 00:00:00 2001 From: guerler Date: Thu, 25 Jul 2019 14:00:39 -0400 Subject: [PATCH 3/5] Add error logging and use avoid usage of regex --- lib/galaxy/visualization/plugins/plugin.py | 11 ++++++----- lib/galaxy/visualization/plugins/registry.py | 2 ++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/galaxy/visualization/plugins/plugin.py b/lib/galaxy/visualization/plugins/plugin.py index d033c424f77..db64e028e3e 100644 --- a/lib/galaxy/visualization/plugins/plugin.py +++ b/lib/galaxy/visualization/plugins/plugin.py @@ -5,10 +5,10 @@ from a query string and render a webpage based on those data. import copy import logging import os -import re import mako.lookup +from galaxy.exceptions import MessageException from galaxy.managers import api_keys from galaxy.visualization.plugins import ( interactive_environments, @@ -129,10 +129,11 @@ class VisualizationPlugin(ServesTemplatesPluginMixin): return url_for('visualization_plugin', visualization_name=self.name) def _get_static_path(self, path): - match = re.match(r'.*/config/(.*)', path) - if match: - return os.path.join('./static', match.group(1), 'static') - return None + if '/config/' in path: + match = path.split('/config/')[-1] + return os.path.join('./static', match, 'static') + else: + raise MessageException('Failed to determine static path: %s.' % path) def _get_saved_visualization_config(self, visualization, revision=None, **kwargs): """ diff --git a/lib/galaxy/visualization/plugins/registry.py b/lib/galaxy/visualization/plugins/registry.py index 8442484bad2..95983ab7c7f 100644 --- a/lib/galaxy/visualization/plugins/registry.py +++ b/lib/galaxy/visualization/plugins/registry.py @@ -189,6 +189,8 @@ class VisualizationsRegistry(object): if config is not None: plugin = self._build_plugin(plugin_name, plugin_path, config) return plugin + else: + raise ObjectNotFound('Visualization XML not found: %s.' % config_file) def _build_plugin(self, plugin_name, plugin_path, config): # TODO: as builder not factory From 5c7fddc15cb3d26a59cbea88b75e8ef00cbdff1a Mon Sep 17 00:00:00 2001 From: guerler Date: Thu, 25 Jul 2019 17:00:47 -0400 Subject: [PATCH 4/5] Replace message exception with log statement, a static path is optional --- lib/galaxy/visualization/plugins/plugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/galaxy/visualization/plugins/plugin.py b/lib/galaxy/visualization/plugins/plugin.py index db64e028e3e..95c459f6635 100644 --- a/lib/galaxy/visualization/plugins/plugin.py +++ b/lib/galaxy/visualization/plugins/plugin.py @@ -133,7 +133,7 @@ class VisualizationPlugin(ServesTemplatesPluginMixin): match = path.split('/config/')[-1] return os.path.join('./static', match, 'static') else: - raise MessageException('Failed to determine static path: %s.' % path) + log.debug('Visualization has no static path: %s.' % path) def _get_saved_visualization_config(self, visualization, revision=None, **kwargs): """ From 766d0d062c88060c7c50b78ca3201a62a706ac65 Mon Sep 17 00:00:00 2001 From: guerler Date: Thu, 25 Jul 2019 17:15:37 -0400 Subject: [PATCH 5/5] Remove unused import --- lib/galaxy/visualization/plugins/plugin.py | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/galaxy/visualization/plugins/plugin.py b/lib/galaxy/visualization/plugins/plugin.py index 95c459f6635..5435f180562 100644 --- a/lib/galaxy/visualization/plugins/plugin.py +++ b/lib/galaxy/visualization/plugins/plugin.py @@ -8,7 +8,6 @@ import os import mako.lookup -from galaxy.exceptions import MessageException from galaxy.managers import api_keys from galaxy.visualization.plugins import ( interactive_environments,