From 419594845d15fc040d6c58f80096663e76fb3b80 Mon Sep 17 00:00:00 2001 From: Dannon Baker Date: Tue, 14 Jun 2016 14:01:32 -0400 Subject: [PATCH 1/2] Fixes the ability for users to toggle their filters. There's no reason to require a user_id here since it's locked to trans and require_login is set. --- lib/galaxy/webapps/galaxy/controllers/user.py | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/lib/galaxy/webapps/galaxy/controllers/user.py b/lib/galaxy/webapps/galaxy/controllers/user.py index b1fa9f67906..6a07212c9d5 100644 --- a/lib/galaxy/webapps/galaxy/controllers/user.py +++ b/lib/galaxy/webapps/galaxy/controllers/user.py @@ -1349,12 +1349,6 @@ class User( BaseUIController, UsesFormDefinitionsMixin, CreatesUsersMixin, Creat def edit_toolbox_filters( self, trans, cntrller, **kwd ): params = util.Params( kwd ) message = util.restore_text( params.get( 'message', '' ) ) - user_id = params.get( 'user_id', False ) - if not user_id: - # User must be logged in to create a new address - return trans.show_error_message( "You must be logged in to change the ToolBox filters." ) - - user = trans.sa_session.query( trans.app.model.User ).get( trans.security.decode_id( user_id ) ) if params.get( 'edit_toolbox_filter_button', False ): tool_filters = list() @@ -1368,11 +1362,11 @@ class User( BaseUIController, UsesFormDefinitionsMixin, CreatesUsersMixin, Creat label_filters.append( name[2:] ) elif name.startswith('s_'): section_filters.append( name[2:] ) - user.preferences['toolbox_tool_filters'] = ','.join( tool_filters ) - user.preferences['toolbox_section_filters'] = ','.join( section_filters ) - user.preferences['toolbox_label_filters'] = ','.join( label_filters ) + trans.user.preferences['toolbox_tool_filters'] = ','.join( tool_filters ) + trans.user.preferences['toolbox_section_filters'] = ','.join( section_filters ) + trans.user.preferences['toolbox_label_filters'] = ','.join( label_filters ) - trans.sa_session.add( user ) + trans.sa_session.add( trans.user ) trans.sa_session.flush() message = 'ToolBox filters has been updated.' kwd = dict( message=message, status='done' ) From 0c4fd995c5562863cbeb6945e95d13283506ea15 Mon Sep 17 00:00:00 2001 From: Dannon Baker Date: Tue, 14 Jun 2016 14:30:31 -0400 Subject: [PATCH 2/2] Fix module resolution for migrated toolbox filters path -- reuses (in a hacky way) the filtering function that was duplicated to galaxy.tools.toolbox.filters. Pushing more of this functionality (the docs, etc) into the FilterFactory might be nice down the road. --- lib/galaxy/tools/toolbox/filters/__init__.py | 4 ++-- lib/galaxy/webapps/galaxy/controllers/user.py | 22 ++++++------------- 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/lib/galaxy/tools/toolbox/filters/__init__.py b/lib/galaxy/tools/toolbox/filters/__init__.py index d4e7b44d99d..86721b4f489 100644 --- a/lib/galaxy/tools/toolbox/filters/__init__.py +++ b/lib/galaxy/tools/toolbox/filters/__init__.py @@ -55,13 +55,13 @@ class FilterFactory( object ): def __init_filters( self, key, filters, toolbox_filters, validate=None ): for filter in filters: if validate is None or filter in validate or filter in self.default_filters: - filter_function = self.__build_filter_function( filter ) + filter_function = self._build_filter_function( filter ) toolbox_filters[ key ].append( filter_function ) else: log.warning( "Refusing to load %s filter '%s' which is not defined in config", key, filter ) return toolbox_filters - def __build_filter_function( self, filter_name ): + def _build_filter_function( self, filter_name ): """Obtain python function (importing a submodule if needed) corresponding to filter_name. """ diff --git a/lib/galaxy/webapps/galaxy/controllers/user.py b/lib/galaxy/webapps/galaxy/controllers/user.py index 6a07212c9d5..f07e476b9ff 100644 --- a/lib/galaxy/webapps/galaxy/controllers/user.py +++ b/lib/galaxy/webapps/galaxy/controllers/user.py @@ -22,6 +22,7 @@ from galaxy.security.validate_user_input import (transform_publicname, validate_email, validate_password, validate_publicname) +from galaxy.tools.toolbox.filters import FilterFactory from galaxy.util import biostar, hash_util, docstring_trim, listify from galaxy.web import url_for from galaxy.web.base.controller import (BaseUIController, @@ -1269,7 +1270,7 @@ class User( BaseUIController, UsesFormDefinitionsMixin, CreatesUsersMixin, Creat The user can activate them and the choice is stored in user_preferences. """ - def get_filter_mapping( db_filters, config_filters ): + def get_filter_mapping( db_filters, config_filters, factory ): """ Compare the allowed filters from the galaxy.ini config file with the previously saved or default filters from the database. We need that to toogle the checkboxes for the formular in the right way. @@ -1277,17 +1278,7 @@ class User( BaseUIController, UsesFormDefinitionsMixin, CreatesUsersMixin, Creat """ filters = list() for filter_name in config_filters: - if ":" in filter_name: - # Should be a submodule of filters (e.g. examples:restrict_development_tools) - (module_name, function_name) = filter_name.rsplit(":", 1) - module_name = 'galaxy.tools.filters.%s' % module_name.strip() - module = __import__( module_name, globals(), fromlist=['temp_module'] ) - function = getattr( module, function_name.strip() ) - else: - # No module found it has to be explicitly imported. - module = __import__( 'galaxy.tools.filters', globals(), fromlist=['temp_module'] ) - function = getattr( globals(), filter_name.strip() ) - + function = factory._build_filter_function(filter_name) doc_string = docstring_trim( function.__doc__ ) split = doc_string.split('\n\n') if split: @@ -1328,9 +1319,10 @@ class User( BaseUIController, UsesFormDefinitionsMixin, CreatesUsersMixin, Creat elif name == 'toolbox_label_filters': saved_user_label_filters = listify( value, do_strip=True ) - tool_filters = get_filter_mapping( saved_user_tool_filters, trans.app.config.user_tool_filters ) - section_filters = get_filter_mapping( saved_user_section_filters, trans.app.config.user_section_filters ) - label_filters = get_filter_mapping( saved_user_label_filters, trans.app.config.user_label_filters ) + ff = FilterFactory(trans.app.toolbox) + tool_filters = get_filter_mapping( saved_user_tool_filters, trans.app.config.user_tool_filters, ff ) + section_filters = get_filter_mapping( saved_user_section_filters, trans.app.config.user_section_filters, ff ) + label_filters = get_filter_mapping( saved_user_label_filters, trans.app.config.user_label_filters, ff ) return trans.fill_template( 'user/toolbox_filters.mako', cntrller=cntrller,