I was thinking about the new IOStack and could not come up with an use case requiring both a line-oriented and a record-oriented read/write functionality -- the general case is the record-oriented, lines are just new-line terminated records. Perhaps this has already been dropped, but I seem to recall the original spec having a readrec, writerec?  Similarly, readline/writeline aren't needed. For example...
<br><br>class InputStream(Stream):<br>&nbsp;&nbsp; def read(self): # Reads 1 byte<br>&nbsp;&nbsp; &nbsp; &nbsp; return os.stdin.read(1)<br>&nbsp;&nbsp; <br>&nbsp;&nbsp; def readline(self):<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret = self.readrec('\n') # or whatever constant represents the EOL<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ret<br>
<br>class Stream(object):<br>&nbsp;&nbsp; def read(self): <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; raise Exception, 'cannot read'<br><br>&nbsp;&nbsp; def readrec(self,terminator):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret = ''<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ret != terminator: ret = ret + self.read()<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ret<br><br>&nbsp;&nbsp; def write(self):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; raise Exception, 'cannot write'<br>
&nbsp;&nbsp; <br>&nbsp;&nbsp; def writeRec(self, terminator):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ''' writeRec returns self as a list split by terminator '''<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ret = str(self)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return str(ret).split(terminator)<br>-- <br>Cheers,<br>Hasan Diwan &lt;<a href="mailto:hasan.diwan@gmail.com">
hasan.diwan@gmail.com</a>&gt;