Clarification on string arguments in PEP 517 hooks
I'm in the process of implementing PEP 517 for pip, and I've hit a question. I'm pretty sure I know the answer, but I want to be clear, as whatever the answer is will require some fixing up. The various hooks take directory paths as arguments, and typically return a filename (e.g., build_wheel). The returned filename is always explicitly noted as being *a unicode string*. However, argumnents (metadata_directory in build_wheel/prepare_metadata_for_build_wheel) are *not* explicitly mandated to be Unicode. My assumption is that the intent is that *all* strings, whether arguments or return values, must be Unicode. The reason that I've hit this is that the current setuptools PEP 517 backend passes the metadata_directory direct to distutils which, on Python 2, checks for a (non-Unicode) string type and errors if Unicode is supplied. Fixing that is going to be annoyingly tricky, so I want to be sure that's the requirement before I start making fixes to setuptools. Paul
On Mon, Aug 20, 2018, at 2:52 PM, Paul Moore wrote:
The various hooks take directory paths as arguments, and typically return a filename (e.g., build_wheel). The returned filename is always explicitly noted as being *a unicode string*. However, argumnents (metadata_directory in build_wheel/prepare_metadata_for_build_wheel) are *not* explicitly mandated to be Unicode.
My assumption is that the intent is that *all* strings, whether arguments or return values, must be Unicode.
I'd say we should handle all paths the same way, i.e. unicode. If it's a serious obstacle, we could alter the specification. But I would be surprised if the required changes to the setuptools backend are so tricky that they warrant a workaround in the specification. Thomas
On Mon, 20 Aug 2018 at 18:54, Thomas Kluyver
On Mon, Aug 20, 2018, at 2:52 PM, Paul Moore wrote:
The various hooks take directory paths as arguments, and typically return a filename (e.g., build_wheel). The returned filename is always explicitly noted as being *a unicode string*. However, argumnents (metadata_directory in build_wheel/prepare_metadata_for_build_wheel) are *not* explicitly mandated to be Unicode.
My assumption is that the intent is that *all* strings, whether arguments or return values, must be Unicode.
I'd say we should handle all paths the same way, i.e. unicode. If it's a serious obstacle, we could alter the specification. But I would be surprised if the required changes to the setuptools backend are so tricky that they warrant a workaround in the specification.
The required change to setuptools is pretty simple. What's tricky is getting pip (in this case the test suite) to pick up an unreleased version of setuptools so that I can continue work on pip's PEP 517 support. That's why I wanted to confirm that my assumption was correct, so I could get a change into setuptools quickly. Paul Paul
On Mon., 20 Aug. 2018, 11:54 pm Paul Moore,
My assumption is that the intent is that *all* strings, whether arguments or return values, must be Unicode.
Handling bytes paths correctly cross-platform is a pain, so I think requiring frontends to always pass in Unicode makes sense. Cheers, Nick.
On Tue, 28 Aug 2018 at 07:56, Nick Coghlan
On Mon., 20 Aug. 2018, 11:54 pm Paul Moore,
wrote: My assumption is that the intent is that *all* strings, whether arguments or return values, must be Unicode.
Handling bytes paths correctly cross-platform is a pain, so I think requiring frontends to always pass in Unicode makes sense.
That's what I went for (and I've submitted a change to setuptools to fix their backend to follow that rule). I should probably also submit a PR to the PEP to clarify the intention :-) Paul
participants (3)
-
Nick Coghlan
-
Paul Moore
-
Thomas Kluyver