From 1bbb027f369fb7dbf58a939bca57a9c8e9ecf8c7 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Thu, 13 Jul 2017 21:43:49 -0400 Subject: Use filter and next to directly extract a single failure. --- setuptools/dist.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'setuptools') diff --git a/setuptools/dist.py b/setuptools/dist.py index 5adbfd4e..619318f3 100644 --- a/setuptools/dist.py +++ b/setuptools/dist.py @@ -9,13 +9,14 @@ import distutils.core import distutils.cmd import distutils.dist import itertools +import operator from collections import defaultdict from distutils.errors import (DistutilsOptionError, DistutilsPlatformError, DistutilsSetupError) from distutils.util import rfc822_escape from setuptools.extern import six -from setuptools.extern.six.moves import map +from setuptools.extern.six.moves import map, filter from pkg_resources.extern import packaging __import__('pkg_resources.extern.packaging.specifiers') @@ -145,13 +146,16 @@ def _check_extra(extra, reqs): if marker and pkg_resources.invalid_marker(marker): raise DistutilsSetupError("Invalid environment marker: " + marker) - for r in pkg_resources.parse_requirements(reqs): - if r.marker: - tmpl = ( - "'extras_require' requirements cannot include " - "environment markers, in {section!r}: '{req!s}'" - ) - raise DistutilsSetupError(tmpl.format(section=name, req=r)) + # 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())) def assert_bool(dist, attr, value): -- cgit v1.2.1