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