Mac binaries
[jabaws.git] / website / archive / binaries / mac / src / disembl / biopython-1.50 / Bio / FilteredReader.py
diff --git a/website/archive/binaries/mac/src/disembl/biopython-1.50/Bio/FilteredReader.py b/website/archive/binaries/mac/src/disembl/biopython-1.50/Bio/FilteredReader.py
new file mode 100644 (file)
index 0000000..ba2bb6f
--- /dev/null
@@ -0,0 +1,152 @@
+# Copyright 2001 by Katharine Lindner.  All rights reserved.\r
+# This code is part of the Biopython distribution and governed by its\r
+# license.  Please see the LICENSE file that should have been included\r
+# as part of this package.\r
+\r
+"""Code for more fancy file handles (OBSOLETE).\r
+\r
+Classes:\r
+Filtered is a decorator for File that allows the user to filter the output\r
+on a line by line basis.\r
+\r
+The FilteredReader module reads a file and applies a sequence of filters to the input\r
+The constructor sets a default filter chain, but the user can select another filter by setting\r
+Bio.FilteredReader.filter_chain.\r
+\r
+handle = open( "filename" )\r
+filtered_reader = Bio.FilteredReader( handle )\r
+filtered_reader.filter_chain = [ remove_asterisks, replace_dot_with_dash ]\r
+filtered_reasder.read()\r
+\r
+All filters in the chain must provide the same interface with a line of text as the single\r
+input parameter and altered text as the return value.\r
+\r
+This module is now considered to be obsolete, and is likely to be deprecated\r
+in a future release of Biopython, and later removed.\r
+"""\r
+\r
+\r
+def dump_saved( name, text, j ):\r
+    """Used for debugging."""\r
+    dump_file = open( name + '%d' % j, "w" )\r
+    k = 0\r
+    for i in range ( 0, len( text ), 80 ):\r
+        dump_file.write(  '%s\n' % text[ i : i + 80 ] )\r
+    dump_file.close()\r
+\r
+def remove_leading_whitespace( line ):\r
+    return line.lstrip()\r
+\r
+\r
+def remove_empty_line( line ):\r
+    stripped_line = line.strip()\r
+    if( stripped_line ):\r
+        return line[ : ]\r
+    else:\r
+        return ''\r
+\r
+def remove_useless_dot( line ):\r
+    before = line\r
+    while( 1 ):\r
+        after = before.replace( "\t.\t", "\t\t" )\r
+        if( len( before ) == len( after ) ):\r
+            break\r
+        before = after\r
+    if( after.endswith( '.' ) ):\r
+        after = after[ :-1 ]\r
+    return after\r
+\r
+def fix_punctuation( line ):\r
+    line = line.replace( "'", '' )\r
+    line = line.replace( '"', '' )\r
+    line = line.replace( ';', '\t' )\r
+    line = line.replace( 'entryname', 'id' )\r
+#    line = line.lower( )\r
+    if( line ):\r
+        return line[ : ]\r
+    else:\r
+        return ''\r
+\r
+\r
+\r
+class FilteredReader:\r
+    def __init__(self, handle ):\r
+        self._handle = handle\r
+        self._start_line = ''\r
+        self._debug_count = 0\r
+        self.filter_chain = [ remove_empty_line, remove_useless_dot, fix_punctuation ]\r
+\r
+    def __getattr__(self, attr):\r
+        return getattr(self._handle, attr)\r
+\r
+\r
+\r
+    def close(self, *args, **keywds ):\r
+        return self._handle.close( *args, **keywds)\r
+\r
+    def read( self, *args, **keywds ):\r
+        line = ''\r
+        len_expected = self._get_len_expected( args, keywds )\r
+        if( len_expected ):\r
+            filtered_text = self.read_block( len_expected )\r
+        else:\r
+            filtered_text = self.read_to_end()\r
+        return filtered_text\r
+\r
+    def read_block( self, len_expected ):\r
+\r
+        len_filtered = 0\r
+        len_adjusted -= len( self._start_line )\r
+        filtered_text = ''\r
+        while( len_filtered < len_expected ):\r
+\r
+            text_read = self._handle.read( len_adjusted )\r
+            full_text = self._start_line + text_read\r
+            lines = full_text.splitlines( 1 )\r
+            if( text_read == '' ):\r
+                filtered_text = filtered_text + self.filter( lines )\r
+                break\r
+            else:\r
+                all_but_last_line = lines[ :-1 ]\r
+                self._start_line = lines[ -1 ]\r
+                filtered_text = filtered_text + self.filter( all_but_last_line )\r
+            len_filtered_text = len( filtered_text )\r
+            len_adjusted = len_adjusted - len_filtered_text\r
+        return filtered_text[ : ]\r
+\r
+    def read_to_end( self ):\r
+        filtered_text = ''\r
+        text_read = self._handle.read()\r
+        full_text = self._start_line + text_read\r
+        lines = full_text.splitlines( 1 )\r
+        filtered_text += self.filter( lines[:] )\r
+        return filtered_text[ : ]\r
+\r
+    def _get_len_expected( self, args, keywds ):\r
+\r
+        if( len( args) > 0 ):\r
+            len_expected = args[ 0 ]\r
+            if( len_expected < 0 ):\r
+                len_expected = None\r
+        elif 'size' in keywds:\r
+            len_expected = keywds['size']\r
+        else:\r
+            len_expected = None\r
+        return len_expected\r
+\r
+    def filter( self, lines  ):\r
+        filter_chain = self.filter_chain\r
+        filtered_text = ''\r
+        for line in lines:\r
+            for filter in filter_chain:\r
+                line = filter( *( line, ) )\r
+            filtered_text += line\r
+\r
+        return filtered_text\r
+\r
+def has_trailing_linefeed( line ):\r
+    if( line.endswith( chr( 13 ) ) or \\r
+        line.endswith( chr( 10 ) ) ):\r
+        return 1\r
+    else:\r
+        return 0\r