"""
Exceptions and handlers for tools.
FIXME: These are used by tool scripts, not the framework, and should not live
in this package.
"""
[docs]class UCSCLimitException( Exception ):
pass
[docs]class UCSCOutWrapper( object ):
"""File-like object that throws an exception if it encounters the UCSC limit error lines"""
def __init__( self, other ):
self.other = iter( other )
# Need one line of lookahead to be sure we are hitting the limit message
self.lookahead = None
def __iter__( self ):
return self
[docs] def next( self ):
if self.lookahead is None:
line = self.other.next()
else:
line = self.lookahead
self.lookahead = None
if line.startswith( "----------" ):
next_line = self.other.next()
if next_line.startswith( "Reached output limit" ):
raise UCSCLimitException( next_line.strip() )
else:
self.lookahead = next_line
return line
[docs] def readline(self):
return self.next()