Deron Meranda
deron.meranda at gmail.com
Mon Apr 17 18:03:04 EDT 2006
On 4/17/06, Nick <nick at dd.revealed.net> wrote: > The iterator would stop when None was read, so that's implicit. Again, this > idea assumes a producer/consumer model rather than the repeated calling > model that is supported now. And that, of course, implies some kind of > thread or fork and communication through a pipe or some other form of IPC, > unless there's some aspect of the apache API that I'm not aware of (which is > highly possible :) Not sure why you're thinking about threads and IPC? Anyway creating a generator-wrapper is the quickest way. But you could modify the filter class so it acts like an iterator pretty easy. Just add a new method something like (this is untested): class filter: .... def __iter__(self): class filteriter: def __init__(self,f): self.f = f def next(self): s = self.f.read() if s is None: raise StopIteration return s return filteriter(self) With a little more work, you could even make the iterator repackage the data blocks into lines so it acts more like readlines() ... although that's not a good general solution since not all data will be line-oriented. And as Graham pointed out, doing the replace '\r\n' as you're doing it is quite fragile. It will break when you least expect it to. -- Deron Meranda
|