Source code for galaxy.webapps.galaxy.controllers.library

import logging
from galaxy import model, util
from galaxy import web
from galaxy.model.orm import and_, not_, or_
from galaxy.web.base.controller import BaseUIController
from galaxy.web.framework.helpers import escape, grids
from library_common import get_comptypes, lucene_search, whoosh_search


log = logging.getLogger( __name__ )


[docs]class LibraryListGrid( grids.Grid ):
[docs] class NameColumn( grids.TextColumn ):
[docs] def get_value( self, trans, grid, library ): return library.name
[docs] class DescriptionColumn( grids.TextColumn ):
[docs] def get_value( self, trans, grid, library ): if library.description: return library.description return '' # Grid definition
title = "Data Libraries" model_class = model.Library template='/library/grid.mako' default_sort_key = "name" columns = [ NameColumn( "Data library name", key="name", link=( lambda library: dict( operation="browse", id=library.id ) ), attach_popup=False, filterable="advanced" ), DescriptionColumn( "Data library description", key="description", attach_popup=False, filterable="advanced" ), ] columns.append( grids.MulticolFilterColumn( "search dataset name, info, message, dbkey", cols_to_filter=[ columns[0], columns[1] ], key="free-text-search", visible=False, filterable="standard" ) ) standard_filters = [] default_filter = dict( name="All", description="All", deleted="False", purged="False" ) num_rows_per_page = 50 preserve_state = False use_paging = True
[docs] def build_initial_query( self, trans, **kwargs ): return trans.sa_session.query( self.model_class ).filter( self.model_class.table.c.deleted == False )
[docs] def apply_query_filter( self, trans, query, **kwd ): current_user_role_ids = [ role.id for role in trans.get_current_user_roles() ] library_access_action = trans.app.security_agent.permitted_actions.LIBRARY_ACCESS.action restricted_library_ids = [ lp.library_id for lp in trans.sa_session.query( trans.model.LibraryPermissions ) \ .filter( trans.model.LibraryPermissions.table.c.action == library_access_action ) \ .distinct() ] accessible_restricted_library_ids = [ lp.library_id for lp in trans.sa_session.query( trans.model.LibraryPermissions ) \ .filter( and_( trans.model.LibraryPermissions.table.c.action == library_access_action, trans.model.LibraryPermissions.table.c.role_id.in_( current_user_role_ids ) ) ) ] if not trans.user: # Filter to get only public libraries, a library whose id # is not in restricted_library_ids is a public library return query.filter( not_( trans.model.Library.table.c.id.in_( restricted_library_ids ) ) ) else: # Filter to get libraries accessible by the current user, get both # public libraries and restricted libraries accessible by the current user. return query.filter( or_( not_( trans.model.Library.table.c.id.in_( restricted_library_ids ) ), trans.model.Library.table.c.id.in_( accessible_restricted_library_ids ) ) )
[docs]class Library( BaseUIController ): library_list_grid = LibraryListGrid() @web.expose
[docs] def list( self, trans, **kwd ): # define app configuration for generic mako template app = { 'jscript' : "galaxy.library" } return trans.fill_template( 'galaxy.panels.mako', config = { 'title': 'Galaxy Data Libraries', 'app': app } )
@web.expose
[docs] def index( self, trans, **kwd ): message = escape( kwd.get( 'message', '' ) ) status = escape( kwd.get( 'status', 'done' ) ) default_action = kwd.get( 'default_action', None ) return trans.fill_template( "/library/index.mako", default_action=default_action, message=message, status=status )
@web.expose
[docs] def browse_libraries( self, trans, **kwd ): if 'operation' in kwd: operation = kwd['operation'].lower() if operation == "browse": return trans.response.send_redirect( web.url_for( controller='library_common', action='browse_library', cntrller='library', **kwd ) ) if 'f-free-text-search' in kwd: search_term = kwd[ "f-free-text-search" ] if trans.app.config.enable_lucene_library_search: indexed_search_enabled = True search_url = trans.app.config.config_dict.get( "fulltext_url", "" ) if search_url: indexed_search_enabled = True status, message, lddas = lucene_search( trans, 'library', search_term, search_url, **kwd ) elif trans.app.config.enable_whoosh_library_search: indexed_search_enabled = True status, message, lddas = whoosh_search( trans, 'library', search_term, **kwd ) else: indexed_search_enabled = False if indexed_search_enabled: comptypes = get_comptypes( trans ) show_deleted = util.string_as_bool( kwd.get( 'show_deleted', False ) ) use_panels = util.string_as_bool( kwd.get( 'use_panels', False ) ) return trans.fill_template( '/library/common/library_dataset_search_results.mako', cntrller='library', search_term=search_term, comptypes=comptypes, lddas=lddas, current_user_roles=trans.get_current_user_roles(), show_deleted=show_deleted, use_panels=use_panels, message=message, status=status ) # Render the list view return self.library_list_grid( trans, **kwd )