summaryrefslogtreecommitdiff
path: root/pkg_resources
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2018-02-10 23:16:43 -0500
committerJason R. Coombs <jaraco@jaraco.com>2018-02-10 23:16:43 -0500
commit7d34b2d75fa19fa689fd3033a28fc53562ee6a98 (patch)
tree0133e29f7b34fb4204fd64d83066e3c6862c7e67 /pkg_resources
parent1bbafd871d1ea4419636ef0066af8afebf6f5d52 (diff)
downloadpython-setuptools-git-7d34b2d75fa19fa689fd3033a28fc53562ee6a98.tar.gz
Extract method for filtering extras
Diffstat (limited to 'pkg_resources')
-rw-r--r--pkg_resources/__init__.py34
1 files changed, 24 insertions, 10 deletions
diff --git a/pkg_resources/__init__.py b/pkg_resources/__init__.py
index af65c249..7635a901 100644
--- a/pkg_resources/__init__.py
+++ b/pkg_resources/__init__.py
@@ -2683,22 +2683,36 @@ class Distribution(object):
try:
return self.__dep_map
except AttributeError:
- self.__dep_map = self._build_dep_map()
+ self.__dep_map = self._filter_extras(self._build_dep_map())
return self.__dep_map
+ @staticmethod
+ def _filter_extras(dm):
+ """
+ Given a mapping of extras to dependencies, strip off
+ environment markers and filter out any dependencies
+ not matching the markers.
+ """
+ for extra in list(dm):
+ if extra:
+ new_extra = extra
+ reqs = dm.pop(extra)
+ if ':' in extra:
+ new_extra, marker = extra.split(':', 1)
+ if invalid_marker(marker):
+ # XXX warn
+ reqs = []
+ elif not evaluate_marker(marker):
+ reqs = []
+ new_extra = safe_extra(new_extra) or None
+
+ dm.setdefault(new_extra, []).extend(reqs)
+ return dm
+
def _build_dep_map(self):
dm = {}
for name in 'requires.txt', 'depends.txt':
for extra, reqs in split_sections(self._get_metadata(name)):
- if extra:
- if ':' in extra:
- extra, marker = extra.split(':', 1)
- if invalid_marker(marker):
- # XXX warn
- reqs = []
- elif not evaluate_marker(marker):
- reqs = []
- extra = safe_extra(extra) or None
dm.setdefault(extra, []).extend(parse_requirements(reqs))
return dm