> What I'd like is some scheme that lets me issue a
> "now downloading your file" HTML page *and then*
> return the contents of StaticFile like:
>
> ...
>
> But I think this constitutes two replies to one request
> and assumes HTTP keeps request state?
>
> How do Quixote users handle this kind of requirement in
> practice? I can see one way would be to have separate
> URLs for the message and the download and have the
> message HTML do a "refresh" call back to the download
> URL?
>
> Cheers,
>
> Stu
>
Stu,
This (as you observed) isn't really a Quixote specific issue. This would be
somewhat tricky with any web solution I'm familiar with.
Personally, I'd approach it the way you outlined:
.../bar/filename.zip/requisition <-- figures out if it's available, and
either returns 'not available' or returns 'please wait', with a refresh
(doesn't have to be a meta... Qx makes it easy to do the real thing) to the
next url (.../bar/filename.zip) that actually serves the StaticFile.
Something along these lines:
class filenameUI(object):
_q_exports = ['requisition']
def __init__(self, filename):
self.filename = filename
self.can_publish = can_publish(self.filename)
self.stage = ""
def requisition(self, request):
if self.can_publish:
url = "../%s" % url_quote(self.filename)
# That may need to be a full qualified url... I don't remember.
# What we're looking for is ".../bar/filename.zip"
request.response.set_header('refresh','5,url=' + url)
return """Your file will be transmitted momentarily...
If it doesn't start, please click
here.""" % url
else:
return "Sorry, that file not available"
def _q_index(self, request):
if self.can_publish:
the_file = StaticFile(self.filename)
return the_file(request)
else:
return "Sorry, that file not available"
__call__ = _q_index
That said, some browsers can deal with documents being sent in a fragmented
form that is spread out over time, but, a) Qx isn't put together in a way
that would accomodate this easily, if at all (it requires that the server be
able to send 'part' of a reply, then sit on it's thumbs for a time, then
send some more, than sit on it's thumbs... etc until complete. Qx is
designed around the idea that the reply isn't sent until the whole reply is
ready. Further, I doubt you could change the content-type in the middle of
the reply even with a browser that would honor this 'trick'. But am not
sure about that. This trick could be used to provide a choppy form of
animation... Sorta like a slide show. I've never tried it personally, but
saw a demo in something once... I think it was the jsp engine that was
installed with Oracle, but even that's fuzzy.
HTH,
Jason