HTTPConnection.send

D

dspublic

Hi!

I have a problem with HTTPConnection object send() method (pyver3.3.1). I want to send data from file-like object with HTTPConnection.send( f ), and Iget a "data should be a bytes-like object or an iterable, ..." exception. I have investigated a send method, and discovered a problem: if data has a read attribute, send it , and try send it again with self.sock.sendall(data). My opinion is need an "else" after the "if hasattr(data, "read")"

Please, somebody help me. Does it a real BUG or my mistake?

http.client.py >

if hasattr(data, "read") :
if self.debuglevel > 0:
print("sendIng a read()able")
encode = False
try:
mode = data.mode
except AttributeError:
# io.BytesIO and other file-like objects don't have a `mode`
# attribute.
pass
else:
if "b" not in mode:
encode = True
if self.debuglevel > 0:
print("encoding file using iso-8859-1")
while 1:
datablock = data.read(blocksize)
if not datablock:
break
if encode:
datablock = datablock.encode("iso-8859-1")
self.sock.sendall(datablock)
ELSE: #!!!! i guess missing !!!!
try:
self.sock.sendall(data)
except TypeError:
if isinstance(data, collections.Iterable):
for d in data:
self.sock.sendall(d)
else:
raise TypeError("data should be a bytes-like object "
"or an iterable, got %r" % type(data))
 
P

Peter Otten

I have a problem with HTTPConnection object send() method (pyver3.3.1). I
want to send data from file-like object with HTTPConnection.send( f ), and
I get a "data should be a bytes-like object or an iterable, ..."
exception. I have investigated a send method, and discovered a problem: if
data has a read attribute, send it , and try send it again with
self.sock.sendall(data). My opinion is need an "else" after the "if
hasattr(data, "read")"

Please, somebody help me. Does it a real BUG or my mistake?

I think your analysis is correct. Please file a bug report on
 
C

Chris Angelico

I have a problem with HTTPConnection object send() method (pyver3.3.1). Iwant to send data from file-like object with HTTPConnection.send( f ), andI get a "data should be a bytes-like object or an iterable, ..." exception.. I have investigated a send method, and discovered a problem: if data has a read attribute, send it , and try send it again with self.sock.sendall(data). My opinion is need an "else" after the "if hasattr(data, "read")"

Please, somebody help me. Does it a real BUG or my mistake?

Yeah, I think you may be right on that. Changeset 67046 added the try
block, and removed the else. I'd raise this on the tracker; I'd say
the removal of else was purely accidental.

ChrisA
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,020
Latest member
GenesisGai

Latest Threads

Top