Hi there,
I just tracked down a thorny problem I was having with Storage.getlist(),
and think it may be useful to folks.
The particular situation was a strange edge-case, where I'm wanting a
request.vars value as a list, so am calling:
my_ids = request.vars.getlist('my_id')
The problem was that in this case request.vars.my_id = "" (empty string)
And, unfortunately request.vars.getlist('my_id') was returning "" (and not
[""] as was hoped)
Looking at the source-code for getlist:
def getlist(self, key):
value =
self.get<http://www.web2py.com/examples/static/epydoc/web2py.gluon.storage-pysrc.html#>(key,
[])
return value if not value else \
value if isinstance(value, (list, tuple)) else [value]
It seems that the "return value if not value..." is confusing things, since
"" (empty string) will evaluate as False.
I've redefined Storage.getlist() in my code as:
def getlist(self, key):
value = self.get(key, [])
if value is None or isinstance(value, (list, tuple)):
return value
else:
return [value]
and it seems to work for me now.
Thoughts?
--