1111from itertools import filterfalse
1212from typing import Dict , List , Tuple , Mapping , TypeVar
1313
14- from .. import _reqs
1514from ..extern .jaraco .text import yield_lines
1615from ..extern .packaging .requirements import Requirement
1716
2019_T = TypeVar ("_T" )
2120_Ordered = Dict [_T , None ]
2221_ordered = dict
23- _StrOrIter = _reqs ._StrOrIter
2422
2523
2624def _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
3635def _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
5453def _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
9191def _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
9798def _no_marker (req ):
@@ -109,9 +110,10 @@ def append_cr(line):
109110
110111def write_requirements (cmd , basename , filename ):
111112 dist = cmd .distribution
113+ meta = dist .metadata
112114 data = io .StringIO ()
113115 install_requires , extras_require = _prepare (
114- dist . install_requires or (), dist . extras_require or {}
116+ meta . _normalized_install_requires , meta . _normalized_extras_require
115117 )
116118 _write_requirements (data , install_requires )
117119 for extra in sorted (extras_require ):
0 commit comments