From 132a6cde2a47f34680527258a3753a692e23b266 Mon Sep 17 00:00:00 2001
From: Melissa Li
Date: Fri, 5 Mar 2021 23:03:15 -0500
Subject: [PATCH 1/5] Warn for uppercase usage in setup.cfg metadata
---
setuptools/dist.py | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/setuptools/dist.py b/setuptools/dist.py
index c074468ba9..43a51ad808 100644
--- a/setuptools/dist.py
+++ b/setuptools/dist.py
@@ -599,6 +599,7 @@ def _parse_config_files(self, filenames=None): # noqa: C901
val = parser.get(section, opt)
opt = self.dash_to_underscore_warning(opt, section)
+ opt = self.uppercase_warning(opt, section)
opt_dict[opt] = (filename, val)
# Make the ConfigParser forget everything (so we retain
@@ -636,6 +637,17 @@ def dash_to_underscore_warning(self, opt, section):
% (opt, underscore_opt))
return underscore_opt
+ def uppercase_warning(self, opt, section):
+ if section in ('metadata',) and (any(c.isupper() for c in opt)):
+ lowercase_opt = opt.lower()
+ warnings.warn(
+ "Usage of uppercase key '%s' in '%s' will be deprecated in future "
+ "versions. Please use lowercase '%s' instead"
+ % (opt, section, lowercase_opt)
+ )
+ return lowercase_opt
+ return opt
+
# FIXME: 'Distribution._set_command_options' is too complex (14)
def _set_command_options(self, command_obj, option_dict=None): # noqa: C901
"""
From fa48ac3626c21efc5261b4f112270ca40d2e004d Mon Sep 17 00:00:00 2001
From: Melissa Li
Date: Fri, 5 Mar 2021 23:20:59 -0500
Subject: [PATCH 2/5] Test for uppercase metadata warning
---
setuptools/tests/test_config.py | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/setuptools/tests/test_config.py b/setuptools/tests/test_config.py
index eac26749d4..454ffb245e 100644
--- a/setuptools/tests/test_config.py
+++ b/setuptools/tests/test_config.py
@@ -526,6 +526,24 @@ def test_dash_to_underscore_warning(self, tmpdir):
assert metadata.author_email == 'test@test.com'
assert metadata.maintainer_email == 'foo@foo.com'
+ def test_uppercase_warning(self, tmpdir):
+ # remove this test and the method uppercase_warning() in setuptools.dist
+ # when no longer needed
+ fake_env(
+ tmpdir,
+ '[metadata]\n'
+ 'Name = foo\n'
+ 'description = Some description\n'
+ )
+ msg = ("Usage of uppercase key 'Name' in 'metadata' will be deprecated in "
+ "future versions. "
+ "Please use lowercase 'name' instead")
+ with pytest.warns(UserWarning, match=msg):
+ with get_dist(tmpdir) as dist:
+ metadata = dist.metadata
+ assert metadata.name == 'foo'
+ assert metadata.description == 'Some description'
+
class TestOptions:
From 28c7abc9516821cb701be5576ccd274a3b0c0389 Mon Sep 17 00:00:00 2001
From: Melissa Li
Date: Sat, 6 Mar 2021 00:00:37 -0500
Subject: [PATCH 3/5] Add changelog
---
changelog.d/2592.change.rst | 1 +
1 file changed, 1 insertion(+)
create mode 100644 changelog.d/2592.change.rst
diff --git a/changelog.d/2592.change.rst b/changelog.d/2592.change.rst
new file mode 100644
index 0000000000..3dbe816fd8
--- /dev/null
+++ b/changelog.d/2592.change.rst
@@ -0,0 +1 @@
+Warned for usage of uppercase keys in :code:`metadata` in :code:`setup.cfg`, restored some compatiblity by transforming to lowercase if not. Followed the change of keys in :code:`setup.cfg` now being case-sensitive -- by :user:`melissa-kun-li`
\ No newline at end of file
From 0bffc7c1c673f9735bdac71a2949fae809ec07a3 Mon Sep 17 00:00:00 2001
From: "Jason R. Coombs"
Date: Sat, 6 Mar 2021 21:47:15 -0500
Subject: [PATCH 4/5] Apply suggestions in code review.
Co-authored-by: Sviatoslav Sydorenko
---
changelog.d/2592.change.rst | 4 +++-
setuptools/dist.py | 23 ++++++++++++-----------
setuptools/tests/test_config.py | 5 +++--
3 files changed, 18 insertions(+), 14 deletions(-)
diff --git a/changelog.d/2592.change.rst b/changelog.d/2592.change.rst
index 3dbe816fd8..a38ae0c4c4 100644
--- a/changelog.d/2592.change.rst
+++ b/changelog.d/2592.change.rst
@@ -1 +1,3 @@
-Warned for usage of uppercase keys in :code:`metadata` in :code:`setup.cfg`, restored some compatiblity by transforming to lowercase if not. Followed the change of keys in :code:`setup.cfg` now being case-sensitive -- by :user:`melissa-kun-li`
\ No newline at end of file
+Made option keys in the ``[metadata]`` section of ``setup.cfg`` case-sensitive. Users having
+uppercase option spellings will get a warning suggesting to make them to lowercase
+-- by :user:`melissa-kun-li`
diff --git a/setuptools/dist.py b/setuptools/dist.py
index 43a51ad808..70c0e6becb 100644
--- a/setuptools/dist.py
+++ b/setuptools/dist.py
@@ -599,7 +599,7 @@ def _parse_config_files(self, filenames=None): # noqa: C901
val = parser.get(section, opt)
opt = self.dash_to_underscore_warning(opt, section)
- opt = self.uppercase_warning(opt, section)
+ opt = self.make_option_lowercase(opt, section)
opt_dict[opt] = (filename, val)
# Make the ConfigParser forget everything (so we retain
@@ -637,16 +637,17 @@ def dash_to_underscore_warning(self, opt, section):
% (opt, underscore_opt))
return underscore_opt
- def uppercase_warning(self, opt, section):
- if section in ('metadata',) and (any(c.isupper() for c in opt)):
- lowercase_opt = opt.lower()
- warnings.warn(
- "Usage of uppercase key '%s' in '%s' will be deprecated in future "
- "versions. Please use lowercase '%s' instead"
- % (opt, section, lowercase_opt)
- )
- return lowercase_opt
- return opt
+ def make_option_lowercase(self, opt, section):
+ if section != 'metadata' or opt.islower():
+ return opt
+
+ lowercase_opt = opt.lower()
+ warnings.warn(
+ "Usage of uppercase key '%s' in '%s' will be deprecated in future "
+ "versions. Please use lowercase '%s' instead"
+ % (opt, section, lowercase_opt)
+ )
+ return lowercase_opt
# FIXME: 'Distribution._set_command_options' is too complex (14)
def _set_command_options(self, command_obj, option_dict=None): # noqa: C901
diff --git a/setuptools/tests/test_config.py b/setuptools/tests/test_config.py
index 454ffb245e..1ff5ee4185 100644
--- a/setuptools/tests/test_config.py
+++ b/setuptools/tests/test_config.py
@@ -541,8 +541,9 @@ def test_uppercase_warning(self, tmpdir):
with pytest.warns(UserWarning, match=msg):
with get_dist(tmpdir) as dist:
metadata = dist.metadata
- assert metadata.name == 'foo'
- assert metadata.description == 'Some description'
+
+ assert metadata.name == 'foo'
+ assert metadata.description == 'Some description'
class TestOptions:
From 66323adeae5cb2d143d00db13fd96686c0887233 Mon Sep 17 00:00:00 2001
From: "Jason R. Coombs"
Date: Sat, 6 Mar 2021 21:49:29 -0500
Subject: [PATCH 5/5] Make change a bugfix
---
changelog.d/{2592.change.rst => 2592.bugfix.rst} | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename changelog.d/{2592.change.rst => 2592.bugfix.rst} (100%)
diff --git a/changelog.d/2592.change.rst b/changelog.d/2592.bugfix.rst
similarity index 100%
rename from changelog.d/2592.change.rst
rename to changelog.d/2592.bugfix.rst