From 9c0b88446b1870cf2dea0d367f3a0a89379bb56c Mon Sep 17 00:00:00 2001 From: Nate Coraor Date: Wed, 3 Sep 2014 12:25:22 -0400 Subject: [PATCH] Move ucsc_display_sites and gbrowse_display_sites into datatypes_conf.xml's new section, as per the suggestion by @nsoranzo. --- datatypes_conf.xml.sample | 14 +++++++++-- display_applications/gbrowse/gbrowse_gff.xml | 2 +- .../gbrowse/gbrowse_interval_as_bed.xml | 2 +- display_applications/gbrowse/gbrowse_wig.xml | 2 +- lib/galaxy/config.py | 2 -- lib/galaxy/datatypes/genetics.py | 2 +- lib/galaxy/datatypes/interval.py | 12 +++++----- lib/galaxy/datatypes/registry.py | 23 +++++++++++++------ lib/galaxy/web/framework/__init__.py | 2 +- universe_wsgi.ini.sample | 6 ----- 10 files changed, 39 insertions(+), 28 deletions(-) diff --git a/datatypes_conf.xml.sample b/datatypes_conf.xml.sample index 1db899ee792..15fbcc804f5 100644 --- a/datatypes_conf.xml.sample +++ b/datatypes_conf.xml.sample @@ -313,8 +313,18 @@ --> - - + + + diff --git a/display_applications/gbrowse/gbrowse_gff.xml b/display_applications/gbrowse/gbrowse_gff.xml index 7c9712b4c5b..9fc2c920d3f 100644 --- a/display_applications/gbrowse/gbrowse_gff.xml +++ b/display_applications/gbrowse/gbrowse_gff.xml @@ -10,7 +10,7 @@ - ${site_id in $APP.config.gbrowse_display_sites} + ${site_id in $APP.datatypes_registry.get_display_sites('gbrowse')} ${dataset.dbkey in $site_dbkeys} diff --git a/display_applications/gbrowse/gbrowse_interval_as_bed.xml b/display_applications/gbrowse/gbrowse_interval_as_bed.xml index e1631f3cde2..fea706f346f 100644 --- a/display_applications/gbrowse/gbrowse_interval_as_bed.xml +++ b/display_applications/gbrowse/gbrowse_interval_as_bed.xml @@ -10,7 +10,7 @@ - ${site_id in $APP.config.gbrowse_display_sites} + ${site_id in $APP.datatypes_registry.get_display_sites('gbrowse')} ${dataset.dbkey in $site_dbkeys} diff --git a/display_applications/gbrowse/gbrowse_wig.xml b/display_applications/gbrowse/gbrowse_wig.xml index 5cfba33a513..1751687bd6e 100644 --- a/display_applications/gbrowse/gbrowse_wig.xml +++ b/display_applications/gbrowse/gbrowse_wig.xml @@ -10,7 +10,7 @@ - ${site_id in $APP.config.gbrowse_display_sites} + ${site_id in $APP.datatypes_registry.get_display_sites('gbrowse')} ${dataset.dbkey in $site_dbkeys} diff --git a/lib/galaxy/config.py b/lib/galaxy/config.py index ca64a7f48f1..5173829bbb0 100644 --- a/lib/galaxy/config.py +++ b/lib/galaxy/config.py @@ -223,8 +223,6 @@ class Configuration( object ): self.sanitize_all_html = string_as_bool( kwargs.get( 'sanitize_all_html', True ) ) self.serve_xss_vulnerable_mimetypes = string_as_bool( kwargs.get( 'serve_xss_vulnerable_mimetypes', False ) ) self.enable_old_display_applications = string_as_bool( kwargs.get( "enable_old_display_applications", "True" ) ) - self.ucsc_display_sites = kwargs.get( 'ucsc_display_sites', "main,test,archaea,ucla" ).lower().split(",") - self.gbrowse_display_sites = kwargs.get( 'gbrowse_display_sites', "modencode,sgd_yeast,tair,wormbase,wormbase_ws120,wormbase_ws140,wormbase_ws170,wormbase_ws180,wormbase_ws190,wormbase_ws200,wormbase_ws204,wormbase_ws210,wormbase_ws220,wormbase_ws225" ).lower().split(",") self.brand = kwargs.get( 'brand', None ) self.welcome_url = kwargs.get( 'welcome_url', '/static/welcome.html' ) # Configuration for the message box directly below the masthead. diff --git a/lib/galaxy/datatypes/genetics.py b/lib/galaxy/datatypes/genetics.py index 33e42630910..3b249c00e21 100644 --- a/lib/galaxy/datatypes/genetics.py +++ b/lib/galaxy/datatypes/genetics.py @@ -86,7 +86,7 @@ class GenomeGraphs( Tabular ): dataset.dbkey = 'hg18' # punt! if dataset.has_data(): for site_name, site_url in app.datatypes_registry.get_legacy_sites_by_build('ucsc', dataset.dbkey): - if site_name in app.config.ucsc_display_sites: + if site_name in datatypes_registry.get_display_sites('ucsc'): site_url = site_url.replace('/hgTracks?','/hgGenome?') # for genome graphs internal_url = "%s" % url_for( controller='dataset', dataset_id=dataset.id, action='display_at', filename='ucsc_' + site_name ) diff --git a/lib/galaxy/datatypes/interval.py b/lib/galaxy/datatypes/interval.py index d883c49b69e..7c3b8dfd301 100644 --- a/lib/galaxy/datatypes/interval.py +++ b/lib/galaxy/datatypes/interval.py @@ -235,7 +235,7 @@ class Interval( Tabular ): # enabled. valid_sites = [ ( name, url ) for name, url in app.datatypes_registry.get_legacy_sites_by_build('ucsc', dataset.dbkey ) - if name in app.config.ucsc_display_sites ] + if name in app.datatypes_registry.get_display_sites('ucsc') ] if not valid_sites: return [] # If there are any valid sites, we need to generate the estimated @@ -751,7 +751,7 @@ class Gff( Tabular, _RemoteCallMixin ): seqid, start, stop = self.get_estimated_display_viewport( dataset ) if seqid is not None: for site_name, site_url in app.datatypes_registry.get_legacy_sites_by_build('ucsc', dataset.dbkey ): - if site_name in app.config.ucsc_display_sites: + if site_name in app.datatypes_registry.get_display_sites('ucsc'): redirect_url = urllib.quote_plus( "%sdb=%s&position=%s:%s-%s&hgt.customText=%%s" % ( site_url, dataset.dbkey, seqid, start, stop ) ) @@ -763,7 +763,7 @@ class Gff( Tabular, _RemoteCallMixin ): seqid, start, stop = self.get_estimated_display_viewport( dataset ) if seqid is not None: for site_name, site_url in app.datatypes_registry.get_legacy_sites_by_build('gbrowse', dataset.dbkey ): - if site_name in app.config.gbrowse_display_sites: + if site_name in app.datatypes_registry.get_display_sites('gbrowse'): if seqid.startswith( 'chr' ) and len ( seqid ) > 3: seqid = seqid[3:] redirect_url = urllib.quote_plus( "%s/?q=%s:%s..%s&eurl=%%s" % ( site_url, seqid, start, stop ) ) @@ -1092,7 +1092,7 @@ class Wiggle( Tabular, _RemoteCallMixin ): chrom, start, stop = self.get_estimated_display_viewport( dataset ) if chrom is not None: for site_name, site_url in app.datatypes_registry.get_legacy_sites_by_build('gbrowse', dataset.dbkey ): - if site_name in app.config.gbrowse_display_sites: + if site_name in app.datatypes_registry.get_display_sites('gbrowse'): if chrom.startswith( 'chr' ) and len ( chrom ) > 3: chrom = chrom[3:] redirect_url = urllib.quote_plus( "%s/?q=%s:%s..%s&eurl=%%s" % ( site_url, chrom, start, stop ) ) @@ -1104,7 +1104,7 @@ class Wiggle( Tabular, _RemoteCallMixin ): chrom, start, stop = self.get_estimated_display_viewport( dataset ) if chrom is not None: for site_name, site_url in app.datatypes_registry.get_legacy_sites_by_build('ucsc', dataset.dbkey ): - if site_name in app.config.ucsc_display_sites: + if site_name in app.datatypes_registry.get_display_sites('ucsc'): redirect_url = urllib.quote_plus( "%sdb=%s&position=%s:%s-%s&hgt.customText=%%s" % ( site_url, dataset.dbkey, chrom, start, stop ) ) link = self._get_remote_call_url( redirect_url, site_name, dataset, type, app, base_url ) ret_val.append( ( site_name, link ) ) @@ -1286,7 +1286,7 @@ class CustomTrack ( Tabular ): chrom, start, stop = self.get_estimated_display_viewport(dataset) if chrom is not None: for site_name, site_url in app.datatypes_registry.get_legacy_sites_by_build('ucsc',dataset.dbkey): - if site_name in app.config.ucsc_display_sites: + if site_name in app.datatypes_registry.get_display_sites('ucsc'): internal_url = "%s" % url_for( controller='dataset', dataset_id=dataset.id, action='display_at', filename='ucsc_' + site_name ) display_url = urllib.quote_plus( "%s%s/display_as?id=%i&display_app=%s&authz_method=display_at" % (base_url, url_for( controller='root' ), dataset.id, type) ) redirect_url = urllib.quote_plus( "%sdb=%s&position=%s:%s-%s&hgt.customText=%%s" % (site_url, dataset.dbkey, chrom, start, stop ) ) diff --git a/lib/galaxy/datatypes/registry.py b/lib/galaxy/datatypes/registry.py index d6ed3682720..61e5575b1ad 100644 --- a/lib/galaxy/datatypes/registry.py +++ b/lib/galaxy/datatypes/registry.py @@ -71,6 +71,7 @@ class Registry( object ): self.xml_filename = None # Build sites self.build_sites = {} + self.display_sites = {} self.legacy_build_sites = {} def load_datatypes( self, root_dir=None, config=None, deactivate=False, override=True ): @@ -314,20 +315,28 @@ class Registry( object ): if not (elem.get( 'type' ) and elem.get( 'file' )): self.log.exception( "Site is missing required 'type' and 'file' attributes: %s" ) else: - self.build_sites[elem.get( 'type' )] = elem.get( 'file' ) - self.log.debug( "Loaded build site '%s': %s", elem.get( 'type' ), elem.get( 'file' ) ) - for site, file in self.build_sites.items(): - if site in ( 'ucsc', 'gbrowse' ): - self.legacy_build_sites[site] = galaxy.util.read_build_sites( file ) - self.log.debug( "Loaded legacy build site '%s': %s", site, file ) + site_type = elem.get( 'type' ) + file = elem.get( 'file' ) + self.build_sites[site_type] = file + if site_type in ('ucsc', 'gbrowse'): + self.legacy_build_sites[site_type] = galaxy.util.read_build_sites( file ) + if elem.get( 'display', None ): + display = elem.get( 'display' ) + self.display_sites[site_type] = [ x.strip() for x in display.lower().split( ',' ) ] + self.log.debug( "Loaded build site '%s': %s with display sites: %s", site_type, file, display ) + else: + self.log.debug( "Loaded build site '%s': %s", site_type, file ) def get_legacy_sites_by_build( self, site_type, build ): sites = [] - for site in self.legacy_build_sites[site_type]: + for site in self.legacy_build_sites.get(site_type, []): if build in site['builds']: sites.append((site['name'], site['url'])) return sites + def get_display_sites( self, site_type ): + return self.display_sites.get( site_type, [] ) + def load_datatype_sniffers( self, root, deactivate=False, handling_proprietary_datatypes=False, override=False ): """ Process the sniffers element from a parsed a datatypes XML file located at root_dir/config (if processing the Galaxy diff --git a/lib/galaxy/web/framework/__init__.py b/lib/galaxy/web/framework/__init__.py index 39888b0842a..9913a311f35 100644 --- a/lib/galaxy/web/framework/__init__.py +++ b/lib/galaxy/web/framework/__init__.py @@ -926,7 +926,7 @@ class GalaxyWebTransaction( base.DefaultWebTransaction, ProvidesAppContext, Prov url_for( controller='dataset', action='list' ) ) display_as = url_for( controller='root', action='display_as' ) - if self.app.config.ucsc_display_sites and self.request.path == display_as: + if self.app.datatypes_registry.get_display_sites('ucsc') and self.request.path == display_as: try: host = socket.gethostbyaddr( self.environ[ 'REMOTE_ADDR' ] )[0] except( socket.error, socket.herror, socket.gaierror, socket.timeout ): diff --git a/universe_wsgi.ini.sample b/universe_wsgi.ini.sample index 3c2f4b68feb..43c6121ff0b 100644 --- a/universe_wsgi.ini.sample +++ b/universe_wsgi.ini.sample @@ -364,12 +364,6 @@ visualization_plugins_directory = config/plugins/visualizations # which browsers should be available. URLs and builds available at these # browsers are defined in the specifield files. -# UCSC browsers: tool-data/shared/ucsc/ucsc_build_sites.txt -#ucsc_display_sites = main,test,archaea,ucla - -# GBrowse servers: tool-data/shared/gbrowse/gbrowse_build_sites.txt -#gbrowse_display_sites = modencode,sgd_yeast,tair,wormbase,wormbase_ws120,wormbase_ws140,wormbase_ws170,wormbase_ws180,wormbase_ws190,wormbase_ws200,wormbase_ws204,wormbase_ws210,wormbase_ws220,wormbase_ws225 - # If use_remote_user = True, display application servers will be denied access # to Galaxy and so displaying datasets in these sites will fail. # display_servers contains a list of hostnames which should be allowed to