Fix bug that mucked up fetch for chrom lengths in new track browsers.

This commit is contained in:
Jeremy Goecks
2010-05-04 22:27:05 -04:00
parent bfff008170
commit 07f96e096d
2 changed files with 26 additions and 13 deletions
+20 -12
View File
@@ -158,9 +158,9 @@ class TracksController( BaseController, UsesVisualization ):
return trans.fill_template( 'tracks/browser.mako', config=config )
@web.json
def chroms(self, trans, vis_id=None ):
def chroms(self, trans, vis_id=None, dbkey=None ):
"""
Returns a naturally sorted list of chroms/contigs for the given dbkey
Returns a naturally sorted list of chroms/contigs for either a given visualization or a given dbkey.
"""
def check_int(s):
if s.isdigit():
@@ -171,25 +171,33 @@ class TracksController( BaseController, UsesVisualization ):
def split_by_number(s):
return [ check_int(c) for c in re.split('([0-9]+)', s) ]
# Get visualization and config.
visualization = self.get_visualization( trans, vis_id, check_ownership=False, check_accessible=True )
visualization.config = self.get_visualization_config( trans, visualization )
if visualization is None:
raise web.httpexceptions.HTTPNotFound()
# Must specify either vis_id or dbkey.
if not vis_id and not dbkey:
return trans.show_error_message("No visualization id or dbkey specified.")
# Need to get user and dbkey in order to get chroms data.
if vis_id:
# Use user, dbkey from viz.
visualization = self.get_visualization( trans, vis_id, check_ownership=False, check_accessible=True )
visualization.config = self.get_visualization_config( trans, visualization )
vis_user = visualization.user
vis_dbkey = visualization.config['dbkey']
else:
# No vis_id, so visualization is new. User is current user, dbkey must be given.
vis_user = trans.user
vis_dbkey = dbkey
# Get chroms data.
chroms = self._chroms( trans, visualization )
chroms = self._chroms( trans, vis_user, vis_dbkey )
to_sort = [{ 'chrom': chrom, 'len': length } for chrom, length in chroms.iteritems()]
to_sort.sort(lambda a,b: cmp( split_by_number(a['chrom']), split_by_number(b['chrom']) ))
return to_sort
def _chroms( self, trans, visualization ):
def _chroms( self, trans, user, dbkey ):
"""
Called by the browser to get a list of valid chromosomes and lengths
Helper method that returns chrom lengths for a given user and dbkey.
"""
# If there is any dataset in the history of extension `len`, this will use it
user = visualization.user
dbkey = visualization.config['dbkey']
if 'dbkeys' in user.preferences:
user_keys = from_json_string( user.preferences['dbkeys'] )
if dbkey in user_keys:
+6 -1
View File
@@ -272,7 +272,12 @@ ${h.js( 'galaxy.base', 'galaxy.panels', "json2", "jquery", "jquery.event.drag",
$.ajax({
url: "${h.url_for( action='chroms' )}",
data: { vis_id: view.vis_id },
## If vis is new, it doesn't have an id, so send the dbkey instead.
%if config.get('vis_id'):
data: { vis_id: view.vis_id },
%else:
data: { dbkey: view.dbkey },
%endif
dataType: "json",
success: function ( data ) {
view.chrom_data = data;