From d3a5c4c7205b269830547fcb647528e3e2a9663f Mon Sep 17 00:00:00 2001 From: guerler Date: Thu, 3 Nov 2016 22:29:09 -0400 Subject: [PATCH 1/5] Catch and display exceptions triggered by tool filter functions --- lib/galaxy/tools/toolbox/base.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/galaxy/tools/toolbox/base.py b/lib/galaxy/tools/toolbox/base.py index 4de387e5aba..17ff3d9c48d 100644 --- a/lib/galaxy/tools/toolbox/base.py +++ b/lib/galaxy/tools/toolbox/base.py @@ -8,7 +8,7 @@ from markupsafe import escape from six import iteritems from six.moves.urllib.parse import urlparse -from galaxy.exceptions import ObjectNotFound +from galaxy.exceptions import ObjectNotFound, MessageException # Next two are extra tool dependency not used by AbstractToolBox but by # BaseGalaxyToolBox. from galaxy.tools.deps import build_dependency_manager @@ -990,8 +990,11 @@ def _filter_for_panel( item, item_type, filters, context ): """ def _apply_filter( filter_item, filter_list ): for filter_method in filter_list: - if not filter_method( context, filter_item ): - return False + try: + if not filter_method( context, filter_item ): + return False + except Exception, e: + raise MessageException( "Toolbox filter exception from \'%s\': %s." % ( filter_method.__name__, e ) ) return True if item_type == panel_item_types.TOOL: if _apply_filter( item, filters[ 'tool' ] ): From 300c9616306f69579b1d492aa78a17985e21f738 Mon Sep 17 00:00:00 2001 From: guerler Date: Thu, 3 Nov 2016 22:30:11 -0400 Subject: [PATCH 2/5] Use as instead of comma --- lib/galaxy/tools/toolbox/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/galaxy/tools/toolbox/base.py b/lib/galaxy/tools/toolbox/base.py index 17ff3d9c48d..d8d39a5c203 100644 --- a/lib/galaxy/tools/toolbox/base.py +++ b/lib/galaxy/tools/toolbox/base.py @@ -993,7 +993,7 @@ def _filter_for_panel( item, item_type, filters, context ): try: if not filter_method( context, filter_item ): return False - except Exception, e: + except Exception as e: raise MessageException( "Toolbox filter exception from \'%s\': %s." % ( filter_method.__name__, e ) ) return True if item_type == panel_item_types.TOOL: From 1c740833e0c1884d43a42dc4417eb3f02adfafab Mon Sep 17 00:00:00 2001 From: guerler Date: Fri, 4 Nov 2016 14:59:19 -0400 Subject: [PATCH 3/5] Fix import order --- lib/galaxy/tools/toolbox/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/galaxy/tools/toolbox/base.py b/lib/galaxy/tools/toolbox/base.py index d8d39a5c203..ccacb9d6519 100644 --- a/lib/galaxy/tools/toolbox/base.py +++ b/lib/galaxy/tools/toolbox/base.py @@ -8,7 +8,7 @@ from markupsafe import escape from six import iteritems from six.moves.urllib.parse import urlparse -from galaxy.exceptions import ObjectNotFound, MessageException +from galaxy.exceptions import MessageException, ObjectNotFound # Next two are extra tool dependency not used by AbstractToolBox but by # BaseGalaxyToolBox. from galaxy.tools.deps import build_dependency_manager From 7456b1f9218dabd6eab0d2fa6c3acc285c6c20c3 Mon Sep 17 00:00:00 2001 From: guerler Date: Fri, 4 Nov 2016 18:12:26 -0400 Subject: [PATCH 4/5] Remove unnecessary slashes --- lib/galaxy/tools/toolbox/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/galaxy/tools/toolbox/base.py b/lib/galaxy/tools/toolbox/base.py index ccacb9d6519..1a68cb3d090 100644 --- a/lib/galaxy/tools/toolbox/base.py +++ b/lib/galaxy/tools/toolbox/base.py @@ -994,7 +994,7 @@ def _filter_for_panel( item, item_type, filters, context ): if not filter_method( context, filter_item ): return False except Exception as e: - raise MessageException( "Toolbox filter exception from \'%s\': %s." % ( filter_method.__name__, e ) ) + raise MessageException( "Toolbox filter exception from '%s': %s." % ( filter_method.__name__, e ) ) return True if item_type == panel_item_types.TOOL: if _apply_filter( item, filters[ 'tool' ] ): From 4d623a4d5a391a6aed2faf4b45f03c87b8f11a90 Mon Sep 17 00:00:00 2001 From: guerler Date: Fri, 4 Nov 2016 18:19:53 -0400 Subject: [PATCH 5/5] Ensure that label key exists before attempting removal --- lib/galaxy/tools/toolbox/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/galaxy/tools/toolbox/base.py b/lib/galaxy/tools/toolbox/base.py index 1a68cb3d090..32ff9e0a53a 100644 --- a/lib/galaxy/tools/toolbox/base.py +++ b/lib/galaxy/tools/toolbox/base.py @@ -1020,7 +1020,7 @@ def _filter_for_panel( item, item_type, filters, context ): elif section_item_type == panel_item_types.LABEL: # If there is a label and it does not have tools, # remove it. - if ( cur_label_key and not tools_under_label ) or not _apply_filter( section_item, filters[ 'label' ] ): + if cur_label_key and ( not tools_under_label or not _apply_filter( section_item, filters[ 'label' ] ) ): del filtered_elems[ cur_label_key ] # Reset attributes for new label.