HTTPConnection.send

dspublic at freemail.hu dspublic at freemail.hu
Fri Mar 29 08:27:01 EDT 2013


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 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?

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))



More information about the Python-list mailing list