[Python-Dev] Pathlib enhancements - acceptable inputs and outputs for fspath and os.fspath() (original) (raw)
Random832 random832 at fastmail.com
Wed Apr 13 23:54:52 EDT 2016
- Previous message (by thread): [Python-Dev] Pathlib enhancements - acceptable inputs and outputs for __fspath__ and os.fspath()
- Next message (by thread): [Python-Dev] Pathlib enhancements - acceptable inputs and outputs for __fspath__ and os.fspath()
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Wed, Apr 13, 2016, at 23:17, Nick Coghlan wrote:
- os.fspath -> str (no coercion) - os.fsdecode -> str (with coercion from bytes) - os.fsencode -> bytes (with coercion from str) - os.rawfspath -> str-or-bytes (no coercion)
(with "coercion" referring to how the result of fspath and any directly passed in str or bytes objects are handled) The leading underscore on rawfspath would be of the "this is a documented and stable API, but you probably don't want to use it unless you really know what you're doing" variety, rather than the "this is an undocumented and potentially unstable private API" variety.
In this scenario could the protocol return bytes?
If the protocol cannot return bytes, then _raw_fspath will only return bytes if directly passed bytes. This limits its utility for the functions that consume it (presumably path_convert (os.open and friends) and builtin open), since they already have to act specially based on the types of their arguments (builtin open can accept an integer; path_convert has to behave radically differently on str or bytes input) and there's no reason they couldn't simply accept bytes directly while they're doing that.
If the protocol can return bytes, then that means that types (DirEntry? someone had an alternate path library with a bPath?) which return bytes via the protocol will proliferate, and cannot be safely passed to anything that uses os.fspath. Numerous copies of "def myfspath(x): return os.fsdecode(os._raw_fspath(x))" will proliferate (or they'll just monkey-patch os.fspath), and no-one actually uses os.fspath except toy examples.
Why is it so objectionable for os.fspath to do coercion?
- Previous message (by thread): [Python-Dev] Pathlib enhancements - acceptable inputs and outputs for __fspath__ and os.fspath()
- Next message (by thread): [Python-Dev] Pathlib enhancements - acceptable inputs and outputs for __fspath__ and os.fspath()
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]