diff options
author | Anderson Bravalheri <andersonbravalheri@gmail.com> | 2023-03-08 20:24:00 +0000 |
---|---|---|
committer | Anderson Bravalheri <andersonbravalheri@gmail.com> | 2023-05-03 14:09:17 +0100 |
commit | cbb4c28a1635551423a4731b0a3a0802555f0d14 (patch) | |
tree | 57cf2aa6a2f043ac23d28c4c7d3d08eeaea38f6b | |
parent | bc4b0568ccb5bda56c45adb0575afbbb4939d66a (diff) | |
download | python-setuptools-git-cbb4c28a1635551423a4731b0a3a0802555f0d14.tar.gz |
Re-use pre-parsed requirements when writing requires.txt
-rw-r--r-- | setuptools/command/_requirestxt.py | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/setuptools/command/_requirestxt.py b/setuptools/command/_requirestxt.py index 202db8e1..795ea451 100644 --- a/setuptools/command/_requirestxt.py +++ b/setuptools/command/_requirestxt.py @@ -11,7 +11,6 @@ from collections import defaultdict from itertools import filterfalse from typing import Dict, List, Tuple, Mapping, TypeVar -from .. import _reqs from ..extern.jaraco.text import yield_lines from ..extern.packaging.requirements import Requirement @@ -20,11 +19,11 @@ from ..extern.packaging.requirements import Requirement _T = TypeVar("_T") _Ordered = Dict[_T, None] _ordered = dict -_StrOrIter = _reqs._StrOrIter def _prepare( - install_requires: _StrOrIter, extras_require: Mapping[str, _StrOrIter] + install_requires: Dict[str, Requirement], + extras_require: Mapping[str, Dict[str, Requirement]], ) -> Tuple[List[str], Dict[str, List[str]]]: """Given values for ``install_requires`` and ``extras_require`` create modified versions in a way that can be written in ``requires.txt`` @@ -34,7 +33,7 @@ def _prepare( def _convert_extras_requirements( - extras_require: _StrOrIter, + extras_require: Dict[str, Dict[str, Requirement]], ) -> Mapping[str, _Ordered[Requirement]]: """ Convert requirements in `extras_require` of the form @@ -45,14 +44,15 @@ def _convert_extras_requirements( for section, v in extras_require.items(): # Do not strip empty sections. output[section] - for r in _reqs.parse(v): + for r in v.values(): output[section + _suffix_for(r)].setdefault(r) return output def _move_install_requirements_markers( - install_requires: _StrOrIter, extras_require: Mapping[str, _Ordered[Requirement]] + install_requires: Dict[str, Requirement], + extras_require: Mapping[str, _Ordered[Requirement]] ) -> Tuple[List[str], Dict[str, List[str]]]: """ The ``requires.txt`` file has an specific format: @@ -66,7 +66,7 @@ def _move_install_requirements_markers( # divide the install_requires into two sets, simple ones still # handled by install_requires and more complex ones handled by extras_require. - inst_reqs = list(_reqs.parse(install_requires)) + inst_reqs = install_requires.values() simple_reqs = filter(_no_marker, inst_reqs) complex_reqs = filterfalse(_no_marker, inst_reqs) simple_install_requires = list(map(str, simple_reqs)) @@ -90,8 +90,9 @@ def _suffix_for(req): def _clean_req(req): """Given a Requirement, remove environment markers and return it""" - req.marker = None - return req + r = Requirement(str(req)) # create a copy before modifying. + r.marker = None + return r def _no_marker(req): @@ -109,9 +110,10 @@ def _write_requirements(stream, reqs): def write_requirements(cmd, basename, filename): dist = cmd.distribution + meta = dist.metadata data = io.StringIO() install_requires, extras_require = _prepare( - dist.install_requires or (), dist.extras_require or {} + meta._normalized_install_requires, meta._normalized_extras_require ) _write_requirements(data, install_requires) for extra in sorted(extras_require): |