Yes. Thanks to both replies. I had a look at StringIO src in the meantime and noticed that there isn't much to implement at all (as the Jammer example also demonstrates).
Regards, HC On May 26, 7:47 pm, SergeyPo <ser...@zarealye.com> wrote: > There is an example of string streaming on the site, and I have > implemented my streaming controller function using this example (yes, > it involves diving into file interface but not too much): > > #class streams long CSV to file-like object > #I pasted it here unchanged, so code may be excessive > class CSVstreamer(): > def __init__(self, conditions, output_fields): > self.rs = db(eval(conditions)).select() > self.outfile = cStringIO.StringIO() > self.writer = csv.writer(self.outfile, dialect='excel-tab') > self.columns = [f for f in output_fields if not > f.adv_omit_download] > row = [T(f.name) for f in self.columns] > self.writer.writerow(row) > self.iterator = self.make_iterator() > def make_iterator(self): > for rec in self.rs: > row = [none_exception(eval('rec.' + str(f))) for f in > self.columns] > self.writer.writerow(row) > yield self.outfile.getvalue() > #the following is tricky part but without this file > redefining the thing does not work > #it appears that if gluon streamer tries to stream > something that is not yet ready > #it stops streaming until EOF is generated... better ask > Massimo why :-) > self.outfile.close() > self.outfile = cStringIO.StringIO() > self.writer = csv.writer(self.outfile, dialect='excel- > tab') > def read(self, n): > n = self.iterator.next() > return n > > #controller function that streams LONG csv-string to browser > def download_csv(): > cond = 'db.table.id > 0' > outfields = ['a', 'b', 'c'] > response.headers['Content-Type'] = 'application/octet-stream' > response.headers['Content-Disposition'] = 'attachment; > filename=download.csv' > return response.stream(CSVstreamer(cond, outfields), 64) > > On May 26, 8:34 pm, hcvst <hcv...@googlemail.com> wrote: > > > Hi, > > > I would like to 'stream' results to the browser as they become > > available. > > > Something like: > > --- > > response.write(lengthy_op(1)) > > response.flush() > > response.write(lengthy_op(2)) > > response.flush() > > ... > > > I am now thinking of extending StringIO to write sth like > > > response.stream(MyStringIO( [ (lengthy_op, 1), (lengthy_op, 2) ] )) > > > but I don't feel like diving into the file interface and ending up > > with probably messy code > > if there is a solution available already. > > > As always, thanks for web2py and the great support, > > HC --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "web2py Web Framework" group. To post to this group, send email to web2py@googlegroups.com To unsubscribe from this group, send email to web2py+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/web2py?hl=en -~----------~----~----~----~------~----~------~--~---