From bc486d508e8bb593a3fae546378a7620cdbf812e Mon Sep 17 00:00:00 2001 From: Greg Von Kuster Date: Tue, 7 Feb 2012 11:15:20 -0500 Subject: [PATCH] Fix for loading proprietary datatype sniffers that are included in installed tool shed repositories. --- lib/galaxy/datatypes/registry.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/lib/galaxy/datatypes/registry.py b/lib/galaxy/datatypes/registry.py index 8af4372b746..5da02ffeae1 100644 --- a/lib/galaxy/datatypes/registry.py +++ b/lib/galaxy/datatypes/registry.py @@ -187,11 +187,21 @@ class Registry( object ): try: fields = dtype.split( ":" ) datatype_module = fields[0] - datatype_class = fields[1] - module = __import__( datatype_module ) - for comp in datatype_module.split( '.' )[ 1: ]: - module = getattr( module, comp ) - aclass = getattr( module, datatype_class )() + datatype_class_name = fields[1] + module = None + if imported_modules: + # See if one of the imported modules contains the datatype class name. + for imported_module in imported_modules: + if hasattr( imported_module, datatype_class_name ): + module = imported_module + break + if module is None: + # The datatype class name must be contained in one of the datatype + # modules in the Galaxy distribution. + module = __import__( datatype_module ) + for comp in datatype_module.split( '.' )[ 1: ]: + module = getattr( module, comp ) + aclass = getattr( module, datatype_class_name )() if deactivate: self.sniff_order.remove( aclass ) self.log.debug( 'Deactivated sniffer for datatype: %s' % dtype )