From 21333fe86db1888dbee134043ea8a2f85b69d439 Mon Sep 17 00:00:00 2001 From: idle sign Date: Sun, 4 Dec 2016 17:11:37 +0700 Subject: Added `metadata` section aliases. --- setuptools/config.py | 22 ++++++++++++++++++++-- setuptools/tests/test_config.py | 25 +++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/setuptools/config.py b/setuptools/config.py index a04c3ce8..0c88df79 100644 --- a/setuptools/config.py +++ b/setuptools/config.py @@ -18,6 +18,12 @@ class ConfigHandler(object): """ + aliases = {} + """Options aliases. + For compatibility with various packages. E.g.: d2to1 and pbr. + + """ + strict_mode = True """Flag. Whether unknown options in config should raise DistutilsOptionError exception, or pass silently. @@ -48,6 +54,9 @@ class ConfigHandler(object): unknown = tuple() target_obj = self.target_obj + # Translate alias into real name. + option_name = self.aliases.get(option_name, option_name) + current_value = getattr(target_obj, option_name, unknown) if current_value is unknown: @@ -216,9 +225,18 @@ class ConfigHandler(object): class ConfigMetadataHandler(ConfigHandler): section_prefix = 'metadata' + + aliases = { + 'author-email': 'author_email', + 'home_page': 'url', + 'summary': 'description', + 'classifier': 'classifiers', + 'platform': 'platforms', + } + strict_mode = False - """We need to keep it loose, to be compatible with `pbr` package - which also uses `metadata` section. + """We need to keep it loose, to be partially compatible with + `pbr` and `d2to1` packages which also uses `metadata` section. """ diff --git a/setuptools/tests/test_config.py b/setuptools/tests/test_config.py index e53b5ffd..3fabfb94 100644 --- a/setuptools/tests/test_config.py +++ b/setuptools/tests/test_config.py @@ -86,6 +86,31 @@ class TestMetadata: assert metadata.name == 'fake_name' assert metadata.keywords == ['one', 'two'] + def test_aliases(self, tmpdir): + + fake_env( + tmpdir, + '[metadata]\n' + 'author-email = test@test.com\n' + 'home_page = http://test.test.com/test/\n' + 'summary = Short summary\n' + 'platform = a, b\n' + 'classifier =\n' + ' Framework :: Django\n' + ' Programming Language :: Python :: 3.5\n' + ) + + with get_dist(tmpdir) as dist: + metadata = dist.metadata + assert metadata.author_email == 'test@test.com' + assert metadata.url == 'http://test.test.com/test/' + assert metadata.description == 'Short summary' + assert metadata.platforms == ['a', 'b'] + assert metadata.classifiers == [ + 'Framework :: Django', + 'Programming Language :: Python :: 3.5', + ] + def test_multiline(self, tmpdir): fake_env( -- cgit v1.2.3