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 ):
@@ -110,9 +111,10 @@ def append_cr(line):
110111
111112def  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