On Thu, May 12, 2016 at 10:18 AM, Brett Cannon
On Thu, 12 May 2016 at 09:25 Guido van Rossum
wrote: def fspath(p: Union[str, bytes, PathLike]) -> Union[str, bytes]: if isinstance(p, (str, bytes)): return p try: return p.__fspath__ except AttributeError: raise TypeError(...)
Other than that I think the PEP is already in fine shape.
- Bytes: I strongly believe that os.fspath() should be a thin wrapper around the __fspath__ protocol, like next() wraps the .__next__ protocol. It should not get into bytes vs. string politics. If your app really needs strings, call os.fsdecode(). So this is my version (unoptimized):
Just to double-check, did you mean for __fspath__ to only be an attribute in your example, or did you leave off the `()` by accident? As of right now the PEP is proposing a method for the protocol to follow common practice of using methods and in case the representation is not always pre-computed and thus not necessarily giving the wrong impression that the attribute access is cheap. But admittedly an attribute was previously proposed and there wasn't a terribly strong argument against it beyond "we historically haven't done it that way", so I'm open to swapping to an attribute if that's your preference.
Whoops. Didn't mean to change that! Yes, __fspath__ should remain a method. You can breathe again. :-) -- --Guido van Rossum (python.org/~guido)