diff options
| author | Jason R. Coombs <jaraco@jaraco.com> | 2018-02-10 23:16:43 -0500 |
|---|---|---|
| committer | Jason R. Coombs <jaraco@jaraco.com> | 2018-02-10 23:16:43 -0500 |
| commit | 7d34b2d75fa19fa689fd3033a28fc53562ee6a98 (patch) | |
| tree | 0133e29f7b34fb4204fd64d83066e3c6862c7e67 /pkg_resources | |
| parent | 1bbafd871d1ea4419636ef0066af8afebf6f5d52 (diff) | |
| download | python-setuptools-git-7d34b2d75fa19fa689fd3033a28fc53562ee6a98.tar.gz | |
Extract method for filtering extras
Diffstat (limited to 'pkg_resources')
| -rw-r--r-- | pkg_resources/__init__.py | 34 |
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 |
