Skip to content

Commit 15249f1

Browse files
authored
Merge pull request #2593 from melissa-kun-li/uppercase_metadata_warning
Warn for uppercase key usage in metadata in setup.cfg, provides compatibility. Fixes #2592
2 parents 23ee037 + 66323ad commit 15249f1

File tree

3 files changed

+35
-0
lines changed

3 files changed

+35
-0
lines changed

changelog.d/2592.bugfix.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Made option keys in the ``[metadata]`` section of ``setup.cfg`` case-sensitive. Users having
2+
uppercase option spellings will get a warning suggesting to make them to lowercase
3+
-- by :user:`melissa-kun-li`

setuptools/dist.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -599,6 +599,7 @@ def _parse_config_files(self, filenames=None): # noqa: C901
599599

600600
val = parser.get(section, opt)
601601
opt = self.dash_to_underscore_warning(opt, section)
602+
opt = self.make_option_lowercase(opt, section)
602603
opt_dict[opt] = (filename, val)
603604

604605
# Make the ConfigParser forget everything (so we retain
@@ -636,6 +637,18 @@ def dash_to_underscore_warning(self, opt, section):
636637
% (opt, underscore_opt))
637638
return underscore_opt
638639

640+
def make_option_lowercase(self, opt, section):
641+
if section != 'metadata' or opt.islower():
642+
return opt
643+
644+
lowercase_opt = opt.lower()
645+
warnings.warn(
646+
"Usage of uppercase key '%s' in '%s' will be deprecated in future "
647+
"versions. Please use lowercase '%s' instead"
648+
% (opt, section, lowercase_opt)
649+
)
650+
return lowercase_opt
651+
639652
# FIXME: 'Distribution._set_command_options' is too complex (14)
640653
def _set_command_options(self, command_obj, option_dict=None): # noqa: C901
641654
"""

setuptools/tests/test_config.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -526,6 +526,25 @@ def test_dash_to_underscore_warning(self, tmpdir):
526526
assert metadata.author_email == '[email protected]'
527527
assert metadata.maintainer_email == '[email protected]'
528528

529+
def test_uppercase_warning(self, tmpdir):
530+
# remove this test and the method uppercase_warning() in setuptools.dist
531+
# when no longer needed
532+
fake_env(
533+
tmpdir,
534+
'[metadata]\n'
535+
'Name = foo\n'
536+
'description = Some description\n'
537+
)
538+
msg = ("Usage of uppercase key 'Name' in 'metadata' will be deprecated in "
539+
"future versions. "
540+
"Please use lowercase 'name' instead")
541+
with pytest.warns(UserWarning, match=msg):
542+
with get_dist(tmpdir) as dist:
543+
metadata = dist.metadata
544+
545+
assert metadata.name == 'foo'
546+
assert metadata.description == 'Some description'
547+
529548

530549
class TestOptions:
531550

0 commit comments

Comments
 (0)