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 <[email protected]> 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 [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---