1
2
3
4
5
6 """Code for more fancy file handles.
7
8
9 Classes:
10
11 UndoHandle File object decorator with support for undo-like operations.
12
13 StringHandle Wraps a file object around a string.
14
15 SGMLStripper Object that strips SGML. This is now considered OBSOLETE, and
16 is likely to be deprecated in a future release of Biopython,
17 and later removed.
18
19 """
20 import StringIO
21
23 """A Python handle that adds functionality for saving lines.
24
25 Saves lines in a LIFO fashion.
26
27 Added methods:
28 saveline Save a line to be returned next time.
29 peekline Peek at the next line without consuming it.
30
31 """
33 self._handle = handle
34 self._saved = []
35
38
44
46 lines = self._saved + self._handle.readlines(*args,**keywds)
47 self._saved = []
48 return lines
49
51 if self._saved:
52 line = self._saved.pop(0)
53 else:
54 line = self._handle.readline(*args,**keywds)
55 return line
56
57 - def read(self, size=-1):
58 if size == -1:
59 saved = "".join(self._saved)
60 self._saved[:] = []
61 else:
62 saved = ''
63 while size > 0 and self._saved:
64 if len(self._saved[0]) <= size:
65 size = size - len(self._saved[0])
66 saved = saved + self._saved.pop(0)
67 else:
68 saved = saved + self._saved[0][:size]
69 self._saved[0] = self._saved[0][size:]
70 size = 0
71 return saved + self._handle.read(size)
72
74 if line:
75 self._saved = [line] + self._saved
76
78 if self._saved:
79 line = self._saved[0]
80 else:
81 line = self._handle.readline()
82 self.saveline(line)
83 return line
84
89
90 - def seek(self, *args):
91 self._saved = []
92 self._handle.seek(*args)
93
95 return getattr(self._handle, attr)
96
99
100 - def __exit__(self, type, value, traceback):
102
103
104
105
106
107 StringHandle = StringIO.StringIO
108
109 try:
110 import sgmllib
111 except ImportError:
112
113
114 pass
115 else:
117 """Object to strip SGML tags (OBSOLETE)."""
124
126 import warnings
127 warnings.warn("This class is obsolete, and likely to be deprecated and later removed in a future version of Biopython", PendingDeprecationWarning)
128 self._parser = SGMLStripper.MyParser()
129
131 """S.strip(str) -> string
132
133 Strip the SGML tags from str.
134
135 """
136 if not str:
137 return ''
138
139
140
141
142
143 is_newline = str[-1] in ['\n', '\r']
144
145 self._parser.data = ''
146 self._parser.feed(str)
147 if self._parser.data:
148 str = self._parser.data
149 elif is_newline:
150 str = '\n'
151 else:
152 str = ''
153 return str
154