[2] | 1 | """ |
---|
| 2 | Exceptions and handlers for tools. |
---|
| 3 | |
---|
| 4 | FIXME: These are used by tool scripts, not the framework, and should not live |
---|
| 5 | in this package. |
---|
| 6 | """ |
---|
| 7 | |
---|
| 8 | class UCSCLimitException( Exception ): |
---|
| 9 | pass |
---|
| 10 | |
---|
| 11 | class UCSCOutWrapper( object ): |
---|
| 12 | """File-like object that throws an exception if it encounters the UCSC limit error lines""" |
---|
| 13 | def __init__( self, other ): |
---|
| 14 | self.other = iter( other ) |
---|
| 15 | # Need one line of lookahead to be sure we are hitting the limit message |
---|
| 16 | self.lookahead = None |
---|
| 17 | def __iter__( self ): |
---|
| 18 | return self |
---|
| 19 | def next( self ): |
---|
| 20 | if self.lookahead is None: |
---|
| 21 | line = self.other.next() |
---|
| 22 | else: |
---|
| 23 | line = self.lookahead |
---|
| 24 | self.lookahead = None |
---|
| 25 | if line.startswith( "----------" ): |
---|
| 26 | next_line = self.other.next() |
---|
| 27 | if next_line.startswith( "Reached output limit" ): |
---|
| 28 | raise UCSCLimitException( next_line.strip() ) |
---|
| 29 | else: |
---|
| 30 | self.lookahead = next_line |
---|
| 31 | return line |
---|
| 32 | def readline(self): |
---|
| 33 | return self.next() |
---|