Skip to content

Commit 3c9d6ac

Browse files
committed
Re-use pre-parsed requirements when writing requires.txt
1 parent 2239b8a commit 3c9d6ac

File tree

1 file changed

+12
-10
lines changed

1 file changed

+12
-10
lines changed

setuptools/command/_requirestxt.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
from itertools import filterfalse
1212
from typing import Dict, List, Tuple, Mapping, TypeVar
1313

14-
from .. import _reqs
1514
from ..extern.jaraco.text import yield_lines
1615
from ..extern.packaging.requirements import Requirement
1716

@@ -20,11 +19,11 @@
2019
_T = TypeVar("_T")
2120
_Ordered = Dict[_T, None]
2221
_ordered = dict
23-
_StrOrIter = _reqs._StrOrIter
2422

2523

2624
def _prepare(
27-
install_requires: _StrOrIter, extras_require: Mapping[str, _StrOrIter]
25+
install_requires: Dict[str, Requirement],
26+
extras_require: Mapping[str, Dict[str, Requirement]],
2827
) -> Tuple[List[str], Dict[str, List[str]]]:
2928
"""Given values for ``install_requires`` and ``extras_require``
3029
create modified versions in a way that can be written in ``requires.txt``
@@ -34,7 +33,7 @@ def _prepare(
3433

3534

3635
def _convert_extras_requirements(
37-
extras_require: _StrOrIter,
36+
extras_require: Dict[str, Dict[str, Requirement]],
3837
) -> Mapping[str, _Ordered[Requirement]]:
3938
"""
4039
Convert requirements in `extras_require` of the form
@@ -45,14 +44,15 @@ def _convert_extras_requirements(
4544
for section, v in extras_require.items():
4645
# Do not strip empty sections.
4746
output[section]
48-
for r in _reqs.parse(v):
47+
for r in v.values():
4948
output[section + _suffix_for(r)].setdefault(r)
5049

5150
return output
5251

5352

5453
def _move_install_requirements_markers(
55-
install_requires: _StrOrIter, extras_require: Mapping[str, _Ordered[Requirement]]
54+
install_requires: Dict[str, Requirement],
55+
extras_require: Mapping[str, _Ordered[Requirement]],
5656
) -> Tuple[List[str], Dict[str, List[str]]]:
5757
"""
5858
The ``requires.txt`` file has an specific format:
@@ -66,7 +66,7 @@ def _move_install_requirements_markers(
6666
# divide the install_requires into two sets, simple ones still
6767
# handled by install_requires and more complex ones handled by extras_require.
6868

69-
inst_reqs = list(_reqs.parse(install_requires))
69+
inst_reqs = install_requires.values()
7070
simple_reqs = filter(_no_marker, inst_reqs)
7171
complex_reqs = filterfalse(_no_marker, inst_reqs)
7272
simple_install_requires = list(map(str, simple_reqs))
@@ -90,8 +90,9 @@ def _suffix_for(req):
9090

9191
def _clean_req(req):
9292
"""Given a Requirement, remove environment markers and return it"""
93-
req.marker = None
94-
return req
93+
r = Requirement(str(req)) # create a copy before modifying.
94+
r.marker = None
95+
return r
9596

9697

9798
def _no_marker(req):
@@ -110,9 +111,10 @@ def append_cr(line):
110111

111112
def write_requirements(cmd, basename, filename):
112113
dist = cmd.distribution
114+
meta = dist.metadata
113115
data = io.StringIO()
114116
install_requires, extras_require = _prepare(
115-
dist.install_requires or (), dist.extras_require or {}
117+
meta._normalized_install_requires, meta._normalized_extras_require
116118
)
117119
_write_requirements(data, install_requires)
118120
for extra in sorted(extras_require):

0 commit comments

Comments
 (0)