I solved my problem.
Part of me wants to just leave it at that. But I come here to teach as
well as learn, and this is definitely a "teaching moment" for web2py
developers.
The code I posted before was without error. The problem occurred because
it was not the only code in the controller. Here is the complete example
from the web page:
def reg_getfile():
from datetime import datetime as dt
from copy import copy
if db(db.download_group).isempty():
init_download_groups_table()
if session.idset:
rset = session.idset
session.idclear = copy(rset)
now = dt.today()
elif request.vars.modified_on:
dbrs, dbre = db.reg_swim, db.reg_edit
rows =
db((dbre.id_regswim==dbrs.id)&(dbre.modified_on==request.vars.modified_on)).select(dbre.id)
rset = set([r.id for r in rows])
now = dt.strptime(request.vars.modified_on,'%Y-%m-%d %H:%M:%S')
else:
return ''
return _reg_getfile(now, rset)
def _reg_getfile(now,idset):
from regexport import generate_regfile
from cStringIO import StringIO
buf = StringIO()
generate_regfile(idset, buf)
buf.seek(0)
fname = 'reg-%s.sd3'%now.strftime('%y%m%d-%H%M%S')
response.headers['Content-Type']='application/sd3'
response.headers['Content-Disposition']='attachment; filename=%s'%fname
return response.stream(buf)
The second method, _reg_getfile() (with the underscore) is what we poured
over before. The problem was that it was not the method called directly by
the link. The method reg_getfile() (no underscore) is called first. It
examines some vars, does a database lookup for the ids of affected rows,
and then calls the underscore method.
And here is where the problem lies:
return _reg_getfile(now,rset)
*The code that DOESN'T work lacks the little "return" keyword.* ARRRRGH!
I am not an inexperienced Python programmer. It's not that I'm just
careless. It's the kind of stupid little error that can sideline anybody,
no matter how much code you're written. It's pernicious because everything
"seems" to work perfectly. You can stop it almost anywhere and everything
looks fine.
So let my stupidity be a cautionary tale. When something like this happens
to you, you'll solve it quicker if you make these assumptions:
1. It's not the fault of the platform. web2py works just fine.
2. It's not a bug in Python. The chances of finding a bug in Python are
probably less than being hit by a meteor. Not because it doesn't have any
but because there are so many users that someone else found it already.
3. If it worked before in any fashion -- WHAT CHANGED? In my case I
split one method into two.
4. Don't be afraid to step thru the debugger into code you don't know.
You'll learn more and eventually find your answer.
5. And last, "always make new mistakes." I like that one.
Joe
--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.