Changed class sniffers to have boolean return types.

This commit is contained in:
Greg Von Kuster
2007-09-28 19:23:31 +00:00
parent 5aa8cb1e23
commit 882d6d6aef
4 changed files with 94 additions and 99 deletions
+7 -7
View File
@@ -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
+61 -65
View File
@@ -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
+23 -23
View File
@@ -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
+3 -4
View File
@@ -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 ):