<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Wed, 13 Apr 2016 at 15:46 Nikolaus Rath <<a href="mailto:Nikolaus@rath.org">Nikolaus@rath.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Apr 13 2016, Brett Cannon <<a href="mailto:brett@python.org" target="_blank">brett@python.org</a>> wrote:<br>
> On Tue, 12 Apr 2016 at 22:38 Michael Mysinger via Python-Dev <<br>
> <a href="mailto:python-dev@python.org" target="_blank">python-dev@python.org</a>> wrote:<br>
><br>
>> Ethan Furman <ethan <at> <a href="http://stoneleaf.us" rel="noreferrer" target="_blank">stoneleaf.us</a>> writes:<br>
>><br>
>> > Do we allow bytes to be returned from os.fspath()?  If yes, then do we<br>
>> > allow bytes from __fspath__()?<br>
>><br>
>> De-lurking. Especially since the ultimate goal is better interoperability,<br>
>> I<br>
>> feel like an implementation that people can play with would help guide the<br>
>> few remaining decisions. To help test the various options you could<br>
>> temporarily add a _allow_bytes=GLOBAL_CONFIG_OPTION default argument to<br>
>> both<br>
>> pathlib.__fspath__() and os.fspath(), with distinct configurable defaults<br>
>> for<br>
>> each.<br>
>><br>
>> In the spirit of Python 3 I feel like bytes might not be needed in<br>
>> practice,<br>
>> but something like this with defaults of False will allow people to easily<br>
>> test all the various options.<br>
>><br>
><br>
> <a href="https://gist.github.com/brettcannon/b3719f54715787d54a206bc011869aa1" rel="noreferrer" target="_blank">https://gist.github.com/brettcannon/b3719f54715787d54a206bc011869aa1</a> has<br>
> the four potential approaches implemented (although it doesn't follow the<br>
> "separate functions" approach some are proposing and instead goes with the<br>
> allow_bytes approach I originally proposed).<br>
<br>
<br>
When passing an object that is of type str and has a __fspath__<br>
attribute, all approaches return the value of __fspath__().<br>
<br>
However, when passing something of type bytes, the second approach<br>
returns the object, while the third returns the value of __fspath__().<br>
<br>
Is this intentional? I think a __fspath__ attribute should always be<br>
preferred.<br></blockquote><div><br></div><div>It's very much intentional. If we define __fspath__() to only return strings but still want to minimize boilerplate of allowing bytes to simply pass through without checking a path argument to see if it is bytes then approach #2 is warranted. But if __fspath__() can return bytes then approach #3 allows for it. </div></div></div>