Message122998
attaching new patch. this implements the memoryview solution suggested by pitrou. but it does contain this thing:
if not request.has_header('Content-length'):
if (not hasattr(data, '__read__') and
isinstance(data, collections.Iterable)):
print(data,"is an iterable")
try:
m = memoryview(data)
print(m.itemsize * len(m))
request.add_unredirected_header(
'Content-length', '%d' % (len(m) * m.itemsize))
except TypeError:
try:
request.add_unredirected_header(
'Content-length', '%d' % len(data))
except TypeError:
raise ValueError(
"No Content-Length specified for iterable body")
why is it so nested? because data can support 3 different interfaces:
1) Buffer interface, in that case use memoryview to count bytes
2) Can call len but not buffer: assume len == #bytes
3) Iterable but cannot call len or memoryview: raise ValueError
I hope there is a simpler way... |
|
Date |
User |
Action |
Args |
2010-12-01 15:49:53 | xuanji | set | recipients:
+ xuanji, jhylton, georg.brandl, rhettinger, orsenthil, pitrou, catlee, eric.araujo, rcoyner, davide.rizzo |
2010-12-01 15:49:53 | xuanji | set | messageid: <1291218593.66.0.217611113.issue3243@psf.upfronthosting.co.za> |
2010-12-01 15:49:51 | xuanji | link | issue3243 messages |
2010-12-01 15:49:51 | xuanji | create | |
|