<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Thu, 12 May 2016 at 09:25 Guido van Rossum <<a href="mailto:guido@python.org">guido@python.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div>I am glad this is finally happening. There's quite a bit of noise in the thread which I have to ignore.</div></div></div></div></blockquote><div><br></div><div>Don't worry, I'm not ignoring it on your behalf. :)</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div> The two issues that I want to respond to are speed and whether os.fspath() can return bytes.<br><br></div>- Speed: We should trust our ability to optimize the implementations where necessary. First the API issues need to be settled.<br></div></div></div></blockquote><div><br></div><div>Added a note to the PEP to say perf isn't a worry for os.path.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><br></div>- 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):<br><br></div><div>def fspath(p: Union[str, bytes, PathLike]) -> Union[str, bytes]:<br></div><div>    if isinstance(p, (str, bytes)):<br></div><div>        return p<br></div><div>    try:<br></div><div>        return p.__fspath__<br></div><div>    except AttributeError:<br></div><div>        raise TypeError(...)<span style="line-height:1.5"> </span></div></div></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><br></div>Other than that I think the PEP is already in fine shape.</div></blockquote><div><br></div><div>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.</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div><div><div class="gmail_extra">
</div></div></div></div></div></div></div></blockquote></div></div>