From bb7c69f247247edbefb3b6f4372da52bcee389cb Mon Sep 17 00:00:00 2001 From: Jeremy Goecks Date: Sun, 3 Jun 2012 12:19:30 -0400 Subject: [PATCH] More support for genomes as first-class objects: (a) add genomes API; (b) fix bugs in providing genome data. --- lib/galaxy/visualization/genomes.py | 7 +++++-- lib/galaxy/web/api/genomes.py | 25 +++++++++++++++++++++++++ lib/galaxy/web/buildapp.py | 1 + lib/galaxy/web/controllers/tracks.py | 6 +++--- 4 files changed, 34 insertions(+), 5 deletions(-) create mode 100644 lib/galaxy/web/api/genomes.py diff --git a/lib/galaxy/visualization/genomes.py b/lib/galaxy/visualization/genomes.py index 37ba53b44ce..1bf642d8506 100644 --- a/lib/galaxy/visualization/genomes.py +++ b/lib/galaxy/visualization/genomes.py @@ -107,6 +107,8 @@ class Genomes( object ): # # Get len file. # + + # Look first in user's custom builds. len_file = None len_ds = None user_keys = {} @@ -121,10 +123,11 @@ class Genomes( object ): elif 'len' in dbkey_attributes: len_file = trans.sa_session.query( trans.app.model.HistoryDatasetAssociation ).get( user_keys[ dbkey ][ 'len' ] ).file_name + # Look in system builds. if not len_file: len_ds = trans.db_dataset_for( dbkey ) if not len_ds: - len_file = os.path.join( trans.app.config.len_file_path, "%s.len" % dbkey ) + len_file = self.genomes[ dbkey ].len_file else: len_file = len_ds.file_name @@ -203,7 +206,7 @@ class Genomes( object ): dbkey_owner is needed to determine if there is reference data. """ # Look for key in built-in builds. - if dbkey in self.available_genomes: + if dbkey in self.genomes and self.genomes[ dbkey ].twobit_file: # There is built-in reference data. return True diff --git a/lib/galaxy/web/api/genomes.py b/lib/galaxy/web/api/genomes.py new file mode 100644 index 00000000000..480e281b3f3 --- /dev/null +++ b/lib/galaxy/web/api/genomes.py @@ -0,0 +1,25 @@ +from galaxy import config, tools, web, util +from galaxy.web.base.controller import BaseController, BaseAPIController +from galaxy.util.bunch import Bunch + +class GenomesController( BaseAPIController ): + """ + RESTful controller for interactions with genome data. + """ + + @web.expose_api + def index( self, trans, **kwds ): + """ + GET /api/genomes: returns a list of installed genomes + """ + + return [] + + @web.json + def show( self, trans, id, num=None, chrom=None, low=None ): + """ + GET /api/genomes/{id} + + Returns information about build + """ + return self.app.genomes.chroms( trans, dbkey=id, num=num, chrom=chrom, low=low ) \ No newline at end of file diff --git a/lib/galaxy/web/buildapp.py b/lib/galaxy/web/buildapp.py index e3138dc542e..c032349d219 100644 --- a/lib/galaxy/web/buildapp.py +++ b/lib/galaxy/web/buildapp.py @@ -132,6 +132,7 @@ def app_factory( global_conf, **kwargs ): webapp.api_mapper.resource_with_deleted( 'quota', 'quotas', path_prefix='/api' ) webapp.api_mapper.resource( 'tool', 'tools', path_prefix='/api' ) webapp.api_mapper.resource_with_deleted( 'user', 'users', path_prefix='/api' ) + webapp.api_mapper.resource( 'genome', 'genomes', path_prefix='/api' ) webapp.api_mapper.resource( 'visualization', 'visualizations', path_prefix='/api' ) webapp.api_mapper.resource( 'workflow', 'workflows', path_prefix='/api' ) webapp.api_mapper.resource_with_deleted( 'history', 'histories', path_prefix='/api' ) diff --git a/lib/galaxy/web/controllers/tracks.py b/lib/galaxy/web/controllers/tracks.py index bd3a8680a84..e96ca4047fd 100644 --- a/lib/galaxy/web/controllers/tracks.py +++ b/lib/galaxy/web/controllers/tracks.py @@ -268,11 +268,11 @@ class TracksController( BaseUIController, UsesVisualizationMixin, UsesHistoryMix @web.json def chroms( self, trans, dbkey=None, num=None, chrom=None, low=None ): - return self.genomes.chroms( trans, dbkey=dbkey, num=num, chrom=chrom, low=low ) + return self.app.genomes.chroms( trans, dbkey=dbkey, num=num, chrom=chrom, low=low ) @web.json def reference( self, trans, dbkey, chrom, low, high, **kwargs ): - return self.genomes.reference( trans, dbkey, chrom, low, high, **kwargs ) + return self.app.genomes.reference( trans, dbkey, chrom, low, high, **kwargs ) @web.json def raw_data( self, trans, dataset_id, chrom, low, high, **kwargs ): @@ -771,7 +771,7 @@ class TracksController( BaseUIController, UsesVisualizationMixin, UsesHistoryMix # Get genome info. dbkey = dataset.dbkey - chroms_info = self.genomes.chroms( trans, dbkey=dbkey ) + chroms_info = self.app.genomes.chroms( trans, dbkey=dbkey ) genome = { 'dbkey': dbkey, 'chroms_info': chroms_info } # Get summary tree data for dataset.