diff --git a/lib/galaxy/visualization/plugins/plugin.py b/lib/galaxy/visualization/plugins/plugin.py index ee51b2fbd5d..5435f180562 100644 --- a/lib/galaxy/visualization/plugins/plugin.py +++ b/lib/galaxy/visualization/plugins/plugin.py @@ -72,8 +72,8 @@ 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') - if os.path.exists(os.path.join(self.static_path, 'logo.png')): + self.static_path = self._get_static_path(self.path) + 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', []) @@ -127,6 +127,13 @@ 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): + if '/config/' in path: + match = path.split('/config/')[-1] + return os.path.join('./static', match, 'static') + else: + log.debug('Visualization has no static path: %s.' % path) + def _get_saved_visualization_config(self, visualization, revision=None, **kwargs): """ Return the config of a saved visualization and revision. 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