summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnderson Bravalheri <andersonbravalheri@gmail.com>2023-03-08 20:24:00 +0000
committerAnderson Bravalheri <andersonbravalheri@gmail.com>2023-05-03 14:09:17 +0100
commitcbb4c28a1635551423a4731b0a3a0802555f0d14 (patch)
tree57cf2aa6a2f043ac23d28c4c7d3d08eeaea38f6b
parentbc4b0568ccb5bda56c45adb0575afbbb4939d66a (diff)
downloadpython-setuptools-git-cbb4c28a1635551423a4731b0a3a0802555f0d14.tar.gz
Re-use pre-parsed requirements when writing requires.txt
-rw-r--r--setuptools/command/_requirestxt.py22
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):