Xuanji Li <[email protected]> added the comment:
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...
----------
Added file: http://bugs.python.org/file19891/issue_3243_py3k_5.patch
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue3243>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com