Changeset 1371:b772c96abe5e
- Timestamp:
- 06/09/08 11:20:42 (7 months ago)
- Files:
-
- datatype_converters_conf.xml.sample (deleted)
- datatypes_conf.xml.sample (added)
- lib/galaxy/app.py (modified) (2 diffs)
- lib/galaxy/config.py (modified) (1 diff)
- lib/galaxy/datatypes/registry.py (modified) (5 diffs)
- universe_wsgi.ini.sample (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
lib/galaxy/app.py
r1186 r1371 14 14 self.config.check() 15 15 config.configure_logging( self.config ) 16 # Set up datatypes registry17 self.datatypes_registry = galaxy.datatypes.registry.Registry( datatypes=self.config.datatypes, sniff_order=self.config.sniff_order)18 galaxy.model.set_datatypes_registry( self.datatypes_registry)16 # Set up datatypes registry 17 self.datatypes_registry = galaxy.datatypes.registry.Registry( self.config.root, self.config.datatypes_config ) 18 galaxy.model.set_datatypes_registry( self.datatypes_registry ) 19 19 # Determine the database url 20 20 if self.config.database_connection: … … 30 30 self.toolbox = tools.ToolBox( self.config.tool_config, self.config.tool_path, self ) 31 31 #Load datatype converters 32 self.datatypes_registry.load_datatype_converters( self.config.datatype_converters_config, self.config.datatype_converters_path, self.toolbox)32 self.datatypes_registry.load_datatype_converters( self.toolbox ) 33 33 # Start the job queue 34 34 job_dispatcher = jobs.DefaultJobDispatcher( self ) lib/galaxy/config.py
r1356 r1371 73 73 except ConfigParser.NoSectionError: 74 74 self.tool_runners = [] 75 #Store datatypes config 76 try: 77 self.datatypes = global_conf_parser.items("galaxy:datatypes") 78 except ConfigParser.NoSectionError: 79 self.datatypes = [] 80 #Store sniff order config 81 try: 82 self.sniff_order = global_conf_parser.items("galaxy:sniff_order") 83 except ConfigParser.NoSectionError: 84 self.sniff_order = [] 85 self.datatype_converters_config = kwargs.get( 'datatype_converters_config_file', "datatype_converters_conf.xml" ) 86 self.datatype_converters_path = kwargs.get( 'datatype_converters_path', os.path.join(self.root,"lib/galaxy/datatypes/converters") ) 75 self.datatypes_config = kwargs.get( 'datatypes_config_file', 'datatypes_conf.xml' ) 87 76 def get( self, key, default ): 88 77 return self.config_dict.get( key, default ) 89 78 def check( self ): 90 79 # Check that required directories exist 91 for path in self.root, self.file_path, self.tool_path, self.tool_data_path, self.template_path, self.job_working_directory , self.datatype_converters_path:80 for path in self.root, self.file_path, self.tool_path, self.tool_data_path, self.template_path, self.job_working_directory: 92 81 if not os.path.isdir( path ): 93 82 raise ConfigurationError("Directory does not exist: %s" % path ) 94 83 # Check that required files exist 95 for path in self.tool_config, self.datatype _converters_config:84 for path in self.tool_config, self.datatypes_config: 96 85 if not os.path.isfile(path): 97 86 raise ConfigurationError("File not found: %s" % path ) lib/galaxy/datatypes/registry.py
r1367 r1371 4 4 import os 5 5 import logging 6 import data, tabular, interval, images, sequence, qualityscore 7 import genetics # needed for rgenetics tools 6 import data, tabular, interval, images, sequence, qualityscore, genetics 8 7 import galaxy.util 9 8 from galaxy.util.odict import odict 10 9 10 class ConfigurationError( Exception ): 11 pass 12 11 13 class Registry( object ): 12 def __init__( self, datatypes=[], sniff_order=[]):14 def __init__( self, root_dir=None, config=None ): 13 15 self.log = logging.getLogger(__name__) 14 16 self.datatypes_by_extension = {} 15 17 self.mimetypes_by_extension = {} 16 18 self.datatype_converters = odict() 19 self.converters = [] 20 self.sniff_order = [] 17 21 self.upload_file_formats = [] 18 self.sniff_order = [] 19 for ext, kind in datatypes: 20 # Data types are defined in the config like this: 21 # #<file extension> = <data type class>,<mime type (optional)>,<display in upload select list (optional)> 22 try: 23 fields = kind.split(",") 24 kind = fields[0].strip() 25 mime_type = None 26 display_in_upload = False 27 # See if we have a mime type or a display_in_upload 22 if root_dir and config: 23 # Parse datatypes_conf.xml 24 tree = galaxy.util.parse_xml( config ) 25 root = tree.getroot() 26 # Load datatypes and converters from config 27 self.log.debug( 'Loading datatypes from %s' % config ) 28 registration = root.find( 'registration' ) 29 self.datatype_converters_path = os.path.join( root_dir, registration.get( 'converters_path', 'lib/galaxy/datatypes/converters' ) ) 30 if not os.path.isdir( self.datatype_converters_path ): 31 raise ConfigurationError( "Directory does not exist: %s" % self.datatype_converters_path ) 32 for elem in registration.findall( 'datatype' ): 28 33 try: 29 ele = fields[1].strip() 30 if ele: 31 if ele == 'display_in_upload': 32 display_in_upload = True 33 else: 34 mime_type = ele 35 except: 36 pass 37 # See if we have a display_in_upload 38 if not display_in_upload: 39 try: 40 ele = fields[2].strip() 41 if ele == 'display_in_upload': 42 display_in_upload = True 43 except: 44 pass 45 if display_in_upload: 46 self.upload_file_formats.append( ext ) 47 fields = kind.split(":") 48 datatype_module = fields[0] 49 datatype_class = fields[1] 50 fields = datatype_module.split(".") 51 module = __import__( fields.pop(0) ) 52 for mod in fields: 53 module = getattr(module,mod) 54 self.datatypes_by_extension[ext] = getattr(module, datatype_class)() 55 if mime_type is None: 56 # Use default mime type as per datatype spec 57 mime_type = self.datatypes_by_extension[ext].get_mime() 58 self.mimetypes_by_extension[ext] = mime_type 59 except Exception, e: 60 self.log.warning('error loading datatype "%s", problem: %s' % ( ext, str( e ) ) ) 34 extension = elem.get( 'extension', None ) 35 type = elem.get( 'type', None ) 36 mimetype = elem.get( 'mimetype', None ) 37 display_in_upload = elem.get( 'display_in_upload', False ) 38 if extension and type: 39 fields = type.split( ':' ) 40 datatype_module = fields[0] 41 datatype_class = fields[1] 42 fields = datatype_module.split( '.' ) 43 module = __import__( fields.pop(0) ) 44 for mod in fields: 45 module = getattr( module, mod ) 46 self.datatypes_by_extension[extension] = getattr( module, datatype_class )() 47 if mimetype is None: 48 # Use default mime type as per datatype spec 49 mimetype = self.datatypes_by_extension[extension].get_mime() 50 self.mimetypes_by_extension[extension] = mimetype 51 if display_in_upload: 52 self.upload_file_formats.append( extension ) 53 for converter in elem.findall( 'converter' ): 54 # Build the list of datatype converters which will later be loaded 55 # into the calling app's toolbox. 56 converter_config = converter.get( 'file', None ) 57 target_datatype = converter.get( 'target_datatype', None ) 58 if converter_config and target_datatype: 59 self.converters.append( ( converter_config, extension, target_datatype ) ) 60 except Exception, e: 61 self.log.warning( 'Error loading datatype "%s", problem: %s' % ( extension, str( e ) ) ) 62 # Load datatype sniffers from config 63 sniff_order = [] 64 sniffers = root.find( 'sniffers' ) 65 for elem in sniffers.findall( 'sniffer' ): 66 order = elem.get( 'order', None ) 67 type = elem.get( 'type', None ) 68 if order and type: 69 sniff_order.append( ( order, type ) ) 70 sniff_order.sort() 71 for ele in sniff_order: 72 try: 73 type = ele[1] 74 fields = type.split( ":" ) 75 datatype_module = fields[0] 76 datatype_class = fields[1] 77 fields = datatype_module.split( "." ) 78 module = __import__( fields.pop(0) ) 79 for mod in fields: 80 module = getattr( module, mod ) 81 aclass = getattr( module, datatype_class )() 82 included = False 83 for atype in self.sniff_order: 84 if not issubclass( atype.__class__, aclass.__class__ ) and isinstance( atype, aclass.__class__ ): 85 included = True 86 break 87 if not included: 88 self.sniff_order.append( aclass ) 89 self.log.debug( 'Loaded sniffer for datatype: %s' % type ) 90 except Exception, exc: 91 self.log.warning( 'Error appending datatype %s to sniff_order, problem: %s' % ( type, str( exc ) ) ) 61 92 #default values 62 93 if len(self.datatypes_by_extension) < 1: … … 105 136 'wig' : 'text/plain' 106 137 } 107 """ 108 The order in which we attempt to determine data types is critical 109 because some formats are much more flexibly defined than others. 110 """ 111 sniff_order.sort() 112 for ele in sniff_order: 113 try: 114 ord = ele[0] 115 kind = ele[1] 116 fields = kind.split( ":" ) 117 datatype_module = fields[0] 118 datatype_class = fields[1] 119 fields = datatype_module.split( "." ) 120 module = __import__( fields.pop(0) ) 121 for mod in fields: 122 module = getattr( module, mod ) 123 aclass = getattr( module, datatype_class )() 124 included = False 125 for atype in self.sniff_order: 126 if not issubclass( atype.__class__, aclass.__class__ ) and isinstance( atype, aclass.__class__ ): 127 included = True 128 break 129 if not included: 130 self.sniff_order.append( aclass ) 131 except Exception, exc: 132 self.log.warning( 'error appending datatype: %s to sniff_order, error: %s' % ( str( kind ), str( exc ) ) ) 133 #default values 138 # Default values - the order in which we attempt to determine data types is critical 139 # because some formats are much more flexibly defined than others. 134 140 if len(self.sniff_order) < 1: 135 141 self.sniff_order = [ … … 147 153 ] 148 154 def append_to_sniff_order(): 149 """Just in case any supported data types are not included in the config's sniff_order section."""155 # Just in case any supported data types are not included in the config's sniff_order section. 150 156 for ext in self.datatypes_by_extension: 151 157 datatype = self.datatypes_by_extension[ext] … … 158 164 self.sniff_order.append(datatype) 159 165 append_to_sniff_order() 160 166 161 167 def get_mimetype_by_extension(self, ext ): 162 168 """Returns a mimetype based on an extension""" … … 197 203 newdata.ext = ext 198 204 return newdata 199 200 def load_datatype_converters( self, datatype_converters_config, datatype_converters_path, toolbox):201 """ Loads datatype converters from a file, and adds to the toolbox"""202 self.datatype_converters = odict()203 tree = galaxy.util.parse_xml( datatype_converters_config )204 root = tree.getroot()205 self.log.debug( "Loading converters from %s" % (datatype_converters_config) )206 for elem in root.findall("converter"):207 path = elem.get("file")208 source_datatype = elem.get("source_datatype").split(",")209 target_datatype = elem.get("target_datatype")210 converter = toolbox.load_tool( os.path.join( datatype_converters_path, path ) )205 206 def load_datatype_converters( self, toolbox ): 207 """Adds datatype converters from self.converters to the calling app's toolbox""" 208 for elem in self.converters: 209 tool_config = elem[0] 210 source_datatype = elem[1] 211 target_datatype = elem[2] 212 converter = toolbox.load_tool( os.path.join( self.datatype_converters_path, tool_config ) ) 213 toolbox.tools_by_id[converter.id] = converter 214 if source_datatype not in self.datatype_converters: 215 self.datatype_converters[source_datatype] = odict() 216 self.datatype_converters[source_datatype][target_datatype] = converter 211 217 self.log.debug( "Loaded converter: %s", converter.id ) 212 toolbox.tools_by_id[converter.id] = converter 213 for source_d in source_datatype: 214 if source_d not in self.datatype_converters: 215 self.datatype_converters[source_d] = odict() 216 self.datatype_converters[source_d][target_datatype] = converter 218 217 219 def get_converters_by_datatype(self, ext): 218 220 """Returns available converters by source type""" universe_wsgi.ini.sample
r1367 r1371 93 93 # Comma separated list of UCSC / gbrowse browsers to use for viewing 94 94 ucsc_display_sites = main,test,archaea 95 gbrowse_display_sites = wormbase,flybase,elegans95 gbrowse_display_sites = elegans,flybase 96 96 97 97 # Serving static files (needed if running standalone) … … 118 118 119 119 # Clustering Galaxy is not a straightforward process and requires a lot of 120 # pre-configuration. Please see theGalaxy Wiki before attempting to set any120 # pre-configuration. See the ClusteringGalaxy Wiki before attempting to set any 121 121 # of these options. If running normally (without a cluster), do not change 122 122 # anything in this section. … … 130 130 # default_cluster_job_runner: The URL for the default runner to use when a tool 131 131 # doesn't explicity define a runner below. For help on the cluster URL format, 132 # see the Galaxy Wiki. Leave commented if not using a cluster job runner.132 # see the ClusteringGalaxy Wiki. Leave commented if not using a cluster job runner. 133 133 #default_cluster_job_runner = pbs:/// 134 134 135 # The PBS options are described in detail on the Galaxy Wiki 135 # The PBS options are described in detail in the Galaxy Configuration section of 136 # the ClusteringGalaxy Wiki 136 137 #pbs_application_server = 137 138 #pbs_stage_path = … … 163 164 ucsc_table_direct_test1 = local:/// 164 165 upload1 = local:/// 165 166 # ---- Datatypes ------------------------------------------------------------167 168 [galaxy:datatypes]169 170 #<file extension> = <data type class>,<mime type (optional)>,<display in upload select list (optional)>171 ab1 = galaxy.datatypes.images:Ab1,application/octet-stream,display_in_upload172 axt = galaxy.datatypes.sequence:Axt,display_in_upload173 bed = galaxy.datatypes.interval:Bed,display_in_upload174 binseq.zip = galaxy.datatypes.images:Binseq,application/zip,display_in_upload175 customtrack = galaxy.datatypes.interval:CustomTrack176 data = galaxy.datatypes.data:Data,application/octet-stream177 fasta = galaxy.datatypes.sequence:Fasta,display_in_upload178 fastqsolexa = galaxy.datatypes.sequence:FastqSolexa,display_in_upload179 gff = galaxy.datatypes.interval:Gff,display_in_upload180 gff3 = galaxy.datatypes.interval:Gff3,display_in_upload181 gif = galaxy.datatypes.images:Image,image/gif182 gmaj.zip = galaxy.datatypes.images:Gmaj,application/zip183 html = galaxy.datatypes.images:Html,text/html184 interval = galaxy.datatypes.interval:Interval,display_in_upload185 jpg = galaxy.datatypes.images:Image,image/jpeg186 laj = galaxy.datatypes.images:Laj187 lav = galaxy.datatypes.sequence:Lav,display_in_upload188 maf = galaxy.datatypes.sequence:Maf,display_in_upload189 pdf = galaxy.datatypes.images:Image,application/pdf190 png = galaxy.datatypes.images:Image,image/png191 qual = galaxy.datatypes.qualityscore:QualityScore,display_in_upload192 scf = galaxy.datatypes.images:Scf,application/octet-stream,display_in_upload193 taxonomy = galaxy.datatypes.tabular:Taxonomy,display_in_upload194 tabular = galaxy.datatypes.tabular:Tabular,display_in_upload195 txt = galaxy.datatypes.data:Text,display_in_upload196 txtseq.zip = galaxy.datatypes.images:Txtseq,application/zip,display_in_upload197 wig = galaxy.datatypes.interval:Wiggle,display_in_upload198 #EMBOSS TOOLS199 acedb = galaxy.datatypes.data:Text200 asn1 = galaxy.datatypes.data:Text201 btwisted = galaxy.datatypes.data:Text202 cai = galaxy.datatypes.data:Text203 charge = galaxy.datatypes.data:Text204 checktrans = galaxy.datatypes.data:Text205 chips = galaxy.datatypes.data:Text206 clustal = galaxy.datatypes.data:Text207 codata = galaxy.datatypes.data:Text208 codcmp = galaxy.datatypes.data:Text209 coderet = galaxy.datatypes.data:Text210 compseq = galaxy.datatypes.data:Text211 cpgplot = galaxy.datatypes.data:Text212 cpgreport = galaxy.datatypes.data:Text213 cusp = galaxy.datatypes.data:Text214 cut = galaxy.datatypes.data:Text215 dan = galaxy.datatypes.data:Text216 dbmotif = galaxy.datatypes.data:Text217 diffseq = galaxy.datatypes.data:Text218 digest = galaxy.datatypes.data:Text219 dreg = galaxy.datatypes.data:Text220 einverted = galaxy.datatypes.data:Text221 embl = galaxy.datatypes.data:Text222 epestfind = galaxy.datatypes.data:Text223 equicktandem = galaxy.datatypes.data:Text224 est2genome = galaxy.datatypes.data:Text225 etandem = galaxy.datatypes.data:Text226 excel = galaxy.datatypes.data:Text227 feattable = galaxy.datatypes.data:Text228 fitch = galaxy.datatypes.data:Text229 freak = galaxy.datatypes.data:Text230 fuzznuc = galaxy.datatypes.data:Text231 fuzzpro = galaxy.datatypes.data:Text232 fuzztran = galaxy.datatypes.data:Text233 garnier = galaxy.datatypes.data:Text234 gcg = galaxy.datatypes.data:Text235 geecee = galaxy.datatypes.data:Text236 genbank = galaxy.datatypes.data:Text237 helixturnhelix = galaxy.datatypes.data:Text238 hennig86 = galaxy.datatypes.data:Text239 hmoment = galaxy.datatypes.data:Text240 ig = galaxy.datatypes.data:Text241 isochore = galaxy.datatypes.data:Text242 jackknifer = galaxy.datatypes.data:Text243 jackknifernon = galaxy.datatypes.data:Text244 markx10 = galaxy.datatypes.data:Text245 markx1 = galaxy.datatypes.data:Text246 markx0 = galaxy.datatypes.data:Text247 markx3 = galaxy.datatypes.data:Text248 markx2 = galaxy.datatypes.data:Text249 match = galaxy.datatypes.data:Text250 mega = galaxy.datatypes.data:Text251 meganon = galaxy.datatypes.data:Text252 motif = galaxy.datatypes.data:Text253 msf = galaxy.datatypes.data:Text254 nametable = galaxy.datatypes.data:Text255 ncbi = galaxy.datatypes.data:Text256 needle = galaxy.datatypes.data:Text257 newcpgreport = galaxy.datatypes.data:Text258 newcpgseek = galaxy.datatypes.data:Text259 nexus = galaxy.datatypes.data:Text260 nexusnon = galaxy.datatypes.data:Text261 noreturn = galaxy.datatypes.data:Text262 pair = galaxy.datatypes.data:Text263 palindrome = galaxy.datatypes.data:Text264 pepcoil = galaxy.datatypes.data:Text265 pepinfo = galaxy.datatypes.data:Text266 pepstats = galaxy.datatypes.data:Text267 phylip = galaxy.datatypes.data:Text268 phylipnon = galaxy.datatypes.data:Text269 pir = galaxy.datatypes.data:Text270 polydot = galaxy.datatypes.data:Text271 preg = galaxy.datatypes.data:Text272 prettyseq = galaxy.datatypes.data:Text273 primersearch = galaxy.datatypes.data:Text274 regions = galaxy.datatypes.data:Text275 score = galaxy.datatypes.data:Text276 selex = galaxy.datatypes.data:Text277 seqtable = galaxy.datatypes.data:Text278 showfeat = galaxy.datatypes.data:Text279 showorf = galaxy.datatypes.data:Text280 simple = galaxy.datatypes.data:Text281 sixpack = galaxy.datatypes.data:Text282 srs = galaxy.datatypes.data:Text283 srspair = galaxy.datatypes.data:Text284 staden = galaxy.datatypes.data:Text285 strider = galaxy.datatypes.data:Text286 supermatcher = galaxy.datatypes.data:Text287 swiss = galaxy.datatypes.data:Text288 syco = galaxy.datatypes.data:Text289 table = galaxy.datatypes.data:Text290 textsearch = galaxy.datatypes.data:Text291 vectorstrip = galaxy.datatypes.data:Text292 wobble = galaxy.datatypes.data:Text293 wordcount = galaxy.datatypes.data:Text294 tagseq = galaxy.datatypes.data:Text295 296 # ---- Data Type Sniff Order --------------------------------------------------297 298 [galaxy:sniff_order]299 300 05 = galaxy.datatypes.sequence:Maf301 10 = galaxy.datatypes.sequence:Lav302 15 = galaxy.datatypes.sequence:Fasta303 20 = galaxy.datatypes.sequence:Fastq304 25 = galaxy.datatypes.sequence:FastqSolexa305 30 = galaxy.datatypes.interval:Wiggle306 35 = galaxy.datatypes.images:Html307 40 = galaxy.datatypes.sequence:Axt308 45 = galaxy.datatypes.interval:Bed309 50 = galaxy.datatypes.interval:CustomTrack310 55 = galaxy.datatypes.interval:Gff311 60 = galaxy.datatypes.interval:Gff3312 65 = galaxy.datatypes.interval:Interval