From 83c7d77abdaf4f802cd651fb59de77c72dc94cfe Mon Sep 17 00:00:00 2001
From: Paul Moore
Date: Mon, 20 Aug 2018 15:25:14 +0100
Subject: [PATCH 1/3] PEP 517 hook arguments are unicode, not str (and
distutils objects to that)
---
setuptools/build_meta.py | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/setuptools/build_meta.py b/setuptools/build_meta.py
index 609ea1e510..fb657a5462 100644
--- a/setuptools/build_meta.py
+++ b/setuptools/build_meta.py
@@ -61,6 +61,19 @@ def patch(cls):
distutils.core.Distribution = orig
+def _to_str(s):
+ """
+ Convert a filename to a string (on Python 2, explicitly
+ a byte string, not Unicode) as distutils checks for the
+ exact type str.
+ """
+ if sys.version_info[0] == 2 and not isinstance(s, str):
+ # Assume it's Unicode, as that's what the PEP says
+ # should be provided.
+ return s.encode(sys.getfilesystemencoding())
+ return s
+
+
def _run_setup(setup_script='setup.py'):
# Note that we can reuse our build directory between calls
# Correctness comes first, then optimization later
@@ -109,7 +122,7 @@ def get_requires_for_build_sdist(config_settings=None):
def prepare_metadata_for_build_wheel(metadata_directory, config_settings=None):
- sys.argv = sys.argv[:1] + ['dist_info', '--egg-base', metadata_directory]
+ sys.argv = sys.argv[:1] + ['dist_info', '--egg-base', _to_str(metadata_directory)]
_run_setup()
dist_info_directory = metadata_directory
From 785feaf7981fac8731a750f6ed1f6a19561c50ed Mon Sep 17 00:00:00 2001
From: Paul Moore
Date: Tue, 21 Aug 2018 09:51:03 +0100
Subject: [PATCH 2/3] Add a test for a Unicode metadata directory
---
setuptools/tests/test_build_meta.py | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/setuptools/tests/test_build_meta.py b/setuptools/tests/test_build_meta.py
index b39b7b8f90..c1be3eda92 100644
--- a/setuptools/tests/test_build_meta.py
+++ b/setuptools/tests/test_build_meta.py
@@ -126,3 +126,12 @@ def test_prepare_metadata_for_build_wheel(build_backend):
dist_info = build_backend.prepare_metadata_for_build_wheel(dist_dir)
assert os.path.isfile(os.path.join(dist_dir, dist_info, 'METADATA'))
+
+
+def test_prepare_metadata_for_build_wheel_with_unicode(build_backend):
+ dist_dir = os.path.abspath(u'pip-dist-info')
+ os.makedirs(dist_dir)
+
+ dist_info = build_backend.prepare_metadata_for_build_wheel(dist_dir)
+
+ assert os.path.isfile(os.path.join(dist_dir, dist_info, 'METADATA'))
From 687cfab49529e530af4091ddf126a476681b7fd3 Mon Sep 17 00:00:00 2001
From: Paul Moore
Date: Tue, 21 Aug 2018 09:59:58 +0100
Subject: [PATCH 3/3] Add a changelog entry
---
changelog.d/1466.change.rst | 1 +
1 file changed, 1 insertion(+)
create mode 100644 changelog.d/1466.change.rst
diff --git a/changelog.d/1466.change.rst b/changelog.d/1466.change.rst
new file mode 100644
index 0000000000..7818bfc10d
--- /dev/null
+++ b/changelog.d/1466.change.rst
@@ -0,0 +1 @@
+Fix handling of Unicode arguments in PEP 517 backend