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() |
---|