diff options
author | Benoit Pierre <benoit.pierre@gmail.com> | 2017-07-15 03:32:57 +0200 |
---|---|---|
committer | Benoit Pierre <benoit.pierre@gmail.com> | 2017-07-15 06:37:00 +0200 |
commit | 2328be3cc556076b91c8ec74da7b85b178dbc574 (patch) | |
tree | 0826fcfd2eaeae8c56a10cc9708f764818349d50 /setuptools/dist.py | |
parent | 7c2df64c8558ac71c20d86d3cb2a05daad99cc87 (diff) | |
download | external_python_setuptools-2328be3cc556076b91c8ec74da7b85b178dbc574.tar.gz external_python_setuptools-2328be3cc556076b91c8ec74da7b85b178dbc574.tar.bz2 external_python_setuptools-2328be3cc556076b91c8ec74da7b85b178dbc574.zip |
fix `extras_require` handling
Allow requirements of the form `"extra": ["barbazquux; {marker}"]`
by internally converting them to `"extra:{marker}": ["barbazquux"]`.
Diffstat (limited to 'setuptools/dist.py')
-rw-r--r-- | setuptools/dist.py | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/setuptools/dist.py b/setuptools/dist.py index 1bd89ddd..d77d56b1 100644 --- a/setuptools/dist.py +++ b/setuptools/dist.py @@ -9,7 +9,6 @@ import distutils.core import distutils.cmd import distutils.dist import itertools -import operator from collections import defaultdict from distutils.errors import ( DistutilsOptionError, DistutilsPlatformError, DistutilsSetupError, @@ -17,7 +16,7 @@ from distutils.errors import ( from distutils.util import rfc822_escape from setuptools.extern import six -from setuptools.extern.six.moves import map, filter +from setuptools.extern.six.moves import map from pkg_resources.extern import packaging from setuptools.depends import Require @@ -146,17 +145,7 @@ def _check_extra(extra, reqs): name, sep, marker = extra.partition(':') if marker and pkg_resources.invalid_marker(marker): raise DistutilsSetupError("Invalid environment marker: " + marker) - - # extras requirements cannot themselves have markers - parsed = pkg_resources.parse_requirements(reqs) - marked_reqs = filter(operator.attrgetter('marker'), parsed) - bad_req = next(marked_reqs, None) - if bad_req: - tmpl = ( - "'extras_require' requirements cannot include " - "environment markers, in {name!r}: '{bad_req!s}'" - ) - raise DistutilsSetupError(tmpl.format(**locals())) + list(pkg_resources.parse_requirements(reqs)) def assert_bool(dist, attr, value): @@ -366,18 +355,29 @@ class Distribution(Distribution_parse_config_files, _Distribution): def _finalize_requires(self): """ - Move requirements in `install_requires` that - are using environment markers to `extras_require`. + Fix environment markers in `install_requires` and `extras_require`. + + - move requirements in `install_requires` that are using environment + markers to `extras_require`. + - convert requirements in `extras_require` of the form + `"extra": ["barbazquux; {marker}"]` to + `"extra:{marker}": ["barbazquux"]`. """ - if not getattr(self, 'install_requires', None): - return - extras_require = getattr(self, 'extras_require', None) - extras_require = defaultdict(list, ( - (k, list(pkg_resources.parse_requirements(v))) - for k, v in (extras_require or {}).items() - )) + extras_require = defaultdict(list) + for k, v in ( + getattr(self, 'extras_require', None) or {} + ).items(): + for r in pkg_resources.parse_requirements(v): + marker = r.marker + if marker: + r.marker = None + extras_require[k + ':' + str(marker)].append(r) + else: + extras_require[k].append(r) install_requires = [] - for r in pkg_resources.parse_requirements(self.install_requires): + for r in pkg_resources.parse_requirements( + getattr(self, 'install_requires', None) or () + ): marker = r.marker if not marker: install_requires.append(r) |