On 1/9/2013 9:14 AM, Antoon Pardon wrote:
Op 01/09/13 14:54, Dave Angel schreef:
On 01/09/2013 08:22 AM, Antoon Pardon wrote:
This is using python 3.2.
...
But the documentation states:
socket.makefile(mode='r', buffering=None, *, encoding=None, errors=None,
newline=None)
     Return a file object associated with the socket. The exact returned
type depends on the arguments given to makefile(). These arguments are
interpreted the same way as by the built-in open() function.

And since 't' is allowed in the mode of the built-in open() function I
would consider this a bug.
Unless I am missing something?
I believe that 't' was a new addition to mode, for Python 3.x     So
perhaps the socket library hasn't kept consistent with it.

I don't really know the socket library.  Does it even support text
mode?  Does that make sense?  Remember that text mode means a different
thing in 3.x than it did in 2.x
As far as I understand the code, it does support text. This is part of
the makefile method.

    def makefile(self, mode="r", buffering=None, *,
                  encoding=None, errors=None, newline=None):

         for c in mode:
             if c not in {"r", "w", "b"}:
                 raise ValueError("invalid mode %r (only r, w, b allowed)")
         writing = "w" in mode
         reading = "r" in mode or not writing
         assert reading or writing
         binary = "b" in mode
         ...
         if binary:
             return buffer
         text = io.TextIOWrapper(buffer, encoding, errors, newline)
         text.mode = mode
         return text

So it seems that if the mode is not binary an io.TextIOWrapper is
returned. That indicates to me that
text mode is supported.

The doc does not specify any limit on mode, though the exclusions 'a', '+', 'x', and 'U' seem proper to me. That contradicts the mode check. The exclusion of of 't' (which is the default, in that 'b' must be explicitly given to have effect) contradicts the later code. I think you should open an issue on the tracker suggesting that 't' be added to the mode check and that the doc mention the remaining mode limitation.

In the meanwhile, your ftpfile.__init__ could remove t from the mode before passing it on.


--
Terry Jan Reedy

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to