mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Changed class sniffers to have boolean return types.
This commit is contained in:
@@ -34,7 +34,7 @@ class Gmaj( data.Data ):
|
||||
return 'application/zip'
|
||||
def sniff( self, filename ):
|
||||
#TODO: fix me
|
||||
return ''
|
||||
return False
|
||||
|
||||
class Html( data.Text ):
|
||||
"""Class describing an html file"""
|
||||
@@ -54,20 +54,20 @@ class Html( data.Text ):
|
||||
|
||||
>>> fname = get_test_fname( 'complete.bed' )
|
||||
>>> Html().sniff( fname )
|
||||
''
|
||||
False
|
||||
>>> fname = get_test_fname( 'file.html' )
|
||||
>>> Html().sniff( fname )
|
||||
'html'
|
||||
True
|
||||
"""
|
||||
headers = get_headers( filename, None )
|
||||
|
||||
try:
|
||||
for i, hdr in enumerate(headers):
|
||||
if hdr and hdr[0].lower().find( '<html>' ) >=0:
|
||||
return self.file_ext
|
||||
return ''
|
||||
return True
|
||||
return False
|
||||
except:
|
||||
return ''
|
||||
return True
|
||||
|
||||
class Laj( data.Text ):
|
||||
"""Class describing a LAJ Applet"""
|
||||
@@ -84,5 +84,5 @@ class Laj( data.Text ):
|
||||
return "peek unavailable"
|
||||
def sniff( self, filename ):
|
||||
#TODO: fix me...
|
||||
return ''
|
||||
return False
|
||||
|
||||
|
||||
@@ -188,10 +188,10 @@ class Interval( Tabular ):
|
||||
|
||||
>>> fname = get_test_fname( 'test_space.bed' )
|
||||
>>> Interval().sniff( fname )
|
||||
''
|
||||
False
|
||||
>>> fname = get_test_fname( 'interval.interval' )
|
||||
>>> Interval().sniff( fname )
|
||||
'interval'
|
||||
True
|
||||
"""
|
||||
headers = get_headers( filename, '\t' )
|
||||
try:
|
||||
@@ -202,14 +202,14 @@ class Interval( Tabular ):
|
||||
for hdr in headers:
|
||||
if not (hdr[0] == '' or hdr[0].startswith( '#' )):
|
||||
if len(hdr) < 3:
|
||||
return ''
|
||||
return False
|
||||
try:
|
||||
map( int, [hdr[1], hdr[2]] )
|
||||
except:
|
||||
return ''
|
||||
return self.file_ext
|
||||
return False
|
||||
return True
|
||||
except:
|
||||
return ''
|
||||
return False
|
||||
|
||||
class Bed( Interval ):
|
||||
"""Tab delimited data in BED format"""
|
||||
@@ -308,22 +308,22 @@ class Bed( Interval ):
|
||||
|
||||
>>> fname = get_test_fname( 'test_tab.bed' )
|
||||
>>> Bed().sniff( fname )
|
||||
'bed'
|
||||
True
|
||||
>>> fname = get_test_fname( 'interval.bed' )
|
||||
>>> Bed().sniff( fname )
|
||||
''
|
||||
False
|
||||
>>> fname = get_test_fname( 'complete.bed' )
|
||||
>>> Bed().sniff( fname )
|
||||
'bed'
|
||||
True
|
||||
"""
|
||||
headers = get_headers( filename, '\t' )
|
||||
try:
|
||||
if not headers:
|
||||
return ''
|
||||
return False
|
||||
for hdr in headers:
|
||||
valid_col1 = False
|
||||
if len(hdr) < 3 or len(hdr) > 12:
|
||||
return ''
|
||||
return False
|
||||
for str in data.col1_startswith:
|
||||
if hdr[0].lower().startswith(str):
|
||||
valid_col1 = True
|
||||
@@ -332,36 +332,32 @@ class Bed( Interval ):
|
||||
try:
|
||||
map( int, [hdr[1], hdr[2]] )
|
||||
except:
|
||||
return ''
|
||||
return False
|
||||
if len(hdr) > 3:
|
||||
"""
|
||||
Since all 9 of these fields are optional, it is difficult to test
|
||||
for specific column values...
|
||||
"""
|
||||
optionals = hdr[3:]
|
||||
"""
|
||||
...we can, however, test complete BED definitions fairly easily.
|
||||
"""
|
||||
"""...we can, however, test complete BED definitions fairly easily."""
|
||||
if len(optionals) == 9:
|
||||
try:
|
||||
map ( int, [optionals[1], optionals[3], optionals[4], optionals[5], optionals[6]] )
|
||||
except:
|
||||
return ''
|
||||
return False
|
||||
score = int(optionals[1])
|
||||
if score < 0 or score > 1000:
|
||||
return ''
|
||||
return False
|
||||
if optionals[2] not in ['+', '-']:
|
||||
return ''
|
||||
return False
|
||||
if int(optionals[5]) != 0:
|
||||
return ''
|
||||
return False
|
||||
block_count = int(optionals[6])
|
||||
"""
|
||||
Sometimes the blosck_sizes and block_starts lists end in extra commas
|
||||
"""
|
||||
"""Sometimes the blosck_sizes and block_starts lists end in extra commas"""
|
||||
block_sizes = optionals[7].rstrip(',').split(',')
|
||||
block_starts = optionals[8].rstrip(',').split(',')
|
||||
if len(block_sizes) != block_count or len(block_starts) != block_count:
|
||||
return ''
|
||||
return False
|
||||
elif len(optionals) > 4 and len(optionals) < 9:
|
||||
"""
|
||||
Here it gets a bit trickier, but in this case, we can be somewhat confident
|
||||
@@ -372,12 +368,12 @@ class Bed( Interval ):
|
||||
if ele in data.valid_strand:
|
||||
is_valid_strand = True
|
||||
if not is_valid_strand:
|
||||
return ''
|
||||
return False
|
||||
else:
|
||||
return ''
|
||||
return self.file_ext
|
||||
return False
|
||||
return True
|
||||
except:
|
||||
return ''
|
||||
return False
|
||||
|
||||
class Gff( Tabular ):
|
||||
"""Tab delimited data in Gff format"""
|
||||
@@ -469,37 +465,37 @@ class Gff( Tabular ):
|
||||
|
||||
>>> fname = get_test_fname( 'gff_version_3.gff' )
|
||||
>>> Gff().sniff( fname )
|
||||
''
|
||||
False
|
||||
>>> fname = get_test_fname( 'test.gff' )
|
||||
>>> Gff().sniff( fname )
|
||||
'gff'
|
||||
True
|
||||
"""
|
||||
headers = get_headers( filename, '\t' )
|
||||
try:
|
||||
if len(headers) < 2:
|
||||
return ''
|
||||
return False
|
||||
for hdr in headers:
|
||||
if hdr and hdr[0].startswith( '##gff-version' ) and hdr[0].find( '2' ) < 0:
|
||||
return ''
|
||||
return False
|
||||
if hdr and hdr[0] and not hdr[0].startswith( '#' ):
|
||||
if len(hdr) != 9:
|
||||
return ''
|
||||
return False
|
||||
try:
|
||||
map( int, [hdr[3], hdr[4]] )
|
||||
except:
|
||||
return ''
|
||||
return False
|
||||
if hdr[5] != '.':
|
||||
try:
|
||||
score = int(hdr[5])
|
||||
except:
|
||||
return ''
|
||||
return False
|
||||
if (score < 0 or score > 1000):
|
||||
return ''
|
||||
return False
|
||||
if hdr[6] not in data.valid_strand:
|
||||
return ''
|
||||
return self.file_ext
|
||||
return False
|
||||
return True
|
||||
except:
|
||||
return ''
|
||||
return False
|
||||
|
||||
class Gff3( Gff ):
|
||||
"""Tab delimited data in Gff3 format"""
|
||||
@@ -562,45 +558,45 @@ class Gff3( Gff ):
|
||||
|
||||
>>> fname = get_test_fname( 'test.gff' )
|
||||
>>> Gff3().sniff( fname )
|
||||
''
|
||||
False
|
||||
>>> fname = get_test_fname('gff_version_3.gff')
|
||||
>>> Gff3().sniff( fname )
|
||||
'gff3'
|
||||
True
|
||||
"""
|
||||
headers = get_headers( filename, '\t' )
|
||||
try:
|
||||
if len(headers) < 2:
|
||||
return ''
|
||||
return False
|
||||
for hdr in headers:
|
||||
if hdr and hdr[0].startswith( '##gff-version' ) and hdr[0].find( '3' ) < 0:
|
||||
return ''
|
||||
return False
|
||||
if hdr and hdr[0] and not hdr[0].startswith( '#' ):
|
||||
if len(hdr) != 9:
|
||||
return ''
|
||||
return False
|
||||
try:
|
||||
map( int, [hdr[3]] )
|
||||
except:
|
||||
if hdr[3] != '.':
|
||||
return ''
|
||||
return False
|
||||
try:
|
||||
map( int, [hdr[4]] )
|
||||
except:
|
||||
if hdr[4] != '.':
|
||||
return ''
|
||||
return False
|
||||
if hdr[5] != '.':
|
||||
try:
|
||||
score = int(hdr[5])
|
||||
except:
|
||||
return ''
|
||||
return False
|
||||
if (score < 0 or score > 1000):
|
||||
return ''
|
||||
return False
|
||||
if hdr[6] not in self.valid_gff3_strand:
|
||||
return ''
|
||||
return False
|
||||
if hdr[7] not in self.valid_gff3_phase:
|
||||
return ''
|
||||
return self.file_ext
|
||||
return False
|
||||
return True
|
||||
except:
|
||||
return ''
|
||||
return False
|
||||
|
||||
class Wiggle( Tabular ):
|
||||
"""Tab delimited data in wiggle format"""
|
||||
@@ -642,19 +638,19 @@ class Wiggle( Tabular ):
|
||||
|
||||
>>> fname = get_test_fname( 'interval.bed' )
|
||||
>>> Wiggle().sniff( fname )
|
||||
''
|
||||
False
|
||||
>>> fname = get_test_fname( 'wiggle.wig' )
|
||||
>>> Wiggle().sniff( fname )
|
||||
'wig'
|
||||
True
|
||||
"""
|
||||
headers = get_headers( filename, None )
|
||||
try:
|
||||
for hdr in headers:
|
||||
if len(hdr) > 1 and hdr[0] == 'track' and hdr[1].startswith('type=wiggle'):
|
||||
return self.file_ext
|
||||
return ''
|
||||
return True
|
||||
return False
|
||||
except:
|
||||
return ''
|
||||
return False
|
||||
|
||||
class CustomTrack ( Tabular ):
|
||||
"""UCSC CustomTrack"""
|
||||
@@ -718,10 +714,10 @@ class CustomTrack ( Tabular ):
|
||||
|
||||
>>> fname = get_test_fname( 'complete.bed' )
|
||||
>>> CustomTrack().sniff( fname )
|
||||
''
|
||||
False
|
||||
>>> fname = get_test_fname( 'ucsc.customtrack' )
|
||||
>>> CustomTrack().sniff( fname )
|
||||
'customtrack'
|
||||
True
|
||||
"""
|
||||
headers = get_headers( filename, None )
|
||||
first_line = True
|
||||
@@ -731,21 +727,21 @@ class CustomTrack ( Tabular ):
|
||||
if hdr[0].startswith('track'):
|
||||
first_line = False
|
||||
else:
|
||||
return ''
|
||||
return False
|
||||
except:
|
||||
return ''
|
||||
return False
|
||||
else:
|
||||
try:
|
||||
if not (hdr[0] == '' or hdr[0].startswith( '#' )):
|
||||
if len(hdr) < 3:
|
||||
return ''
|
||||
return False
|
||||
try:
|
||||
map( int, [hdr[1], hdr[2]] )
|
||||
except:
|
||||
return ''
|
||||
return False
|
||||
except:
|
||||
return ''
|
||||
return self.file_ext
|
||||
return False
|
||||
return True
|
||||
|
||||
class GBrowseTrack ( Tabular ):
|
||||
"""GMOD GBrowseTrack"""
|
||||
@@ -793,7 +789,7 @@ class GBrowseTrack ( Tabular ):
|
||||
GBrowseTrack files are built within Galaxy.
|
||||
TODO: Not yet sure what this file will look like. Fix this sniffer and add some unit tests here as soon as we know.
|
||||
"""
|
||||
return ''
|
||||
return False
|
||||
|
||||
if __name__ == '__main__':
|
||||
import doctest, sys
|
||||
|
||||
@@ -51,19 +51,19 @@ class Fasta( Sequence ):
|
||||
|
||||
>>> fname = get_test_fname( 'sequence.maf' )
|
||||
>>> Fasta().sniff( fname )
|
||||
''
|
||||
False
|
||||
>>> fname = get_test_fname( 'sequence.fasta' )
|
||||
>>> Fasta().sniff( fname )
|
||||
'fasta'
|
||||
True
|
||||
"""
|
||||
headers = get_headers( filename, None )
|
||||
try:
|
||||
if len(headers) > 1 and headers[0][0] and headers[0][0][0] == ">":
|
||||
return self.file_ext
|
||||
return True
|
||||
else:
|
||||
return ''
|
||||
return False
|
||||
except:
|
||||
return ''
|
||||
return False
|
||||
|
||||
try:
|
||||
import pkg_resources; pkg_resources.require( "bx-python" )
|
||||
@@ -124,19 +124,19 @@ class Maf( Alignment ):
|
||||
|
||||
>>> fname = get_test_fname( 'sequence.maf' )
|
||||
>>> Maf().sniff( fname )
|
||||
'maf'
|
||||
True
|
||||
>>> fname = get_test_fname( 'sequence.fasta' )
|
||||
>>> Maf().sniff( fname )
|
||||
''
|
||||
False
|
||||
"""
|
||||
headers = get_headers( filename, None )
|
||||
try:
|
||||
if len(headers) > 1 and headers[0][0] and headers[0][0] == "##maf":
|
||||
return self.file_ext
|
||||
return True
|
||||
else:
|
||||
return ''
|
||||
return False
|
||||
except:
|
||||
return ''
|
||||
return False
|
||||
|
||||
class Axt( Alignment ):
|
||||
"""Class describing an axt alignment"""
|
||||
@@ -156,29 +156,29 @@ class Axt( Alignment ):
|
||||
|
||||
>>> fname = get_test_fname( 'alignment.axt' )
|
||||
>>> Axt().sniff( fname )
|
||||
'axt'
|
||||
True
|
||||
>>> fname = get_test_fname( 'alignment.lav' )
|
||||
>>> Axt().sniff( fname )
|
||||
''
|
||||
False
|
||||
"""
|
||||
headers = get_headers( filename, None )
|
||||
if len(headers) < 4:
|
||||
return ''
|
||||
return False
|
||||
try:
|
||||
"""Assume the summary line is the first line of the file."""
|
||||
line = headers[0]
|
||||
except:
|
||||
return ''
|
||||
return False
|
||||
|
||||
if len(line) != 9:
|
||||
return ''
|
||||
return False
|
||||
try:
|
||||
map ( int, [line[0], line[2], line[3], line[5], line[6], line[8]] )
|
||||
except:
|
||||
return ''
|
||||
return False
|
||||
if line[7] not in data.valid_strand:
|
||||
return ''
|
||||
return self.file_ext
|
||||
return False
|
||||
return True
|
||||
|
||||
class Lav( Alignment ):
|
||||
"""Class describing a LAV alignment"""
|
||||
@@ -195,18 +195,18 @@ class Lav( Alignment ):
|
||||
|
||||
>>> fname = get_test_fname( 'alignment.lav' )
|
||||
>>> Lav().sniff( fname )
|
||||
'lav'
|
||||
True
|
||||
>>> fname = get_test_fname( 'alignment.axt' )
|
||||
>>> Lav().sniff( fname )
|
||||
''
|
||||
False
|
||||
"""
|
||||
headers = get_headers( filename, None )
|
||||
try:
|
||||
if len(headers) > 1 and headers[0][0] and headers[0][0].startswith('#:lav'):
|
||||
return self.file_ext
|
||||
return True
|
||||
else:
|
||||
return ''
|
||||
return False
|
||||
except:
|
||||
return ''
|
||||
return False
|
||||
|
||||
|
||||
|
||||
@@ -183,11 +183,10 @@ def guess_ext( fname ):
|
||||
successfully discovered.
|
||||
"""
|
||||
try:
|
||||
format = datatype.sniff( fname )
|
||||
if datatype.sniff( fname ):
|
||||
return datatype.file_ext
|
||||
except:
|
||||
format = ''
|
||||
if format:
|
||||
return format
|
||||
pass
|
||||
|
||||
"""Default binary file extension"""
|
||||
for line in file( fname ):
|
||||
|
||||
Reference in New Issue
Block a user