diff options
author | Anderson Bravalheri <andersonbravalheri@gmail.com> | 2023-03-07 18:18:07 +0000 |
---|---|---|
committer | Anderson Bravalheri <andersonbravalheri@gmail.com> | 2023-05-03 14:06:38 +0100 |
commit | f5ca18b4836ccfc29b2e84932d774aa3054e9a82 (patch) | |
tree | 427e23ddaac86456c3ad9358c5ef34c270b2a50e | |
parent | 9cecaca97ce19e5e08304532d0ab7a034155d56c (diff) | |
download | python-setuptools-git-f5ca18b4836ccfc29b2e84932d774aa3054e9a82.tar.gz |
Use _requirestxt logic for writing 'requires.txt'
This change extracts the logic for writing 'requires.txt' from
the ``egg_info`` module into ``_requirestxt``.
It also adds the missing pre-processing for ``install_requires`` and
``extras_require`` previously done in ``dist`` but now implemented in
``_requires.txt``.
-rw-r--r-- | setuptools/command/_requirestxt.py | 30 | ||||
-rw-r--r-- | setuptools/command/egg_info.py | 29 |
2 files changed, 34 insertions, 25 deletions
diff --git a/setuptools/command/_requirestxt.py b/setuptools/command/_requirestxt.py index ebed70bc..202db8e1 100644 --- a/setuptools/command/_requirestxt.py +++ b/setuptools/command/_requirestxt.py @@ -6,11 +6,13 @@ The ``requires.txt`` file has an specific format: See https://setuptools.pypa.io/en/latest/deprecated/python_eggs.html#requires-txt """ +import io 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 @@ -94,3 +96,31 @@ def _clean_req(req): def _no_marker(req): return not req.marker + + +def _write_requirements(stream, reqs): + lines = yield_lines(reqs or ()) + + def append_cr(line): + return line + '\n' + lines = map(append_cr, lines) + stream.writelines(lines) + + +def write_requirements(cmd, basename, filename): + dist = cmd.distribution + data = io.StringIO() + install_requires, extras_require = _prepare( + dist.install_requires or (), dist.extras_require or {} + ) + _write_requirements(data, install_requires) + for extra in sorted(extras_require): + data.write('\n[{extra}]\n'.format(**vars())) + _write_requirements(data, extras_require[extra]) + cmd.write_or_delete_file("requirements", filename, data.getvalue()) + + +def write_setup_requirements(cmd, basename, filename): + data = io.StringIO() + _write_requirements(data, cmd.distribution.setup_requires) + cmd.write_or_delete_file("setup-requirements", filename, data.getvalue()) diff --git a/setuptools/command/egg_info.py b/setuptools/command/egg_info.py index f5163ae7..c1accca6 100644 --- a/setuptools/command/egg_info.py +++ b/setuptools/command/egg_info.py @@ -18,6 +18,7 @@ import collections from .._importlib import metadata from .. import _entry_points, _normalization +from . import _requirestxt from setuptools import Command from setuptools.command.sdist import sdist @@ -28,7 +29,6 @@ import setuptools.unicode_utils as unicode_utils from setuptools.glob import glob from setuptools.extern import packaging -from setuptools.extern.jaraco.text import yield_lines from ..warnings import SetuptoolsDeprecationWarning @@ -719,30 +719,9 @@ def warn_depends_obsolete(cmd, basename, filename): ) -def _write_requirements(stream, reqs): - lines = yield_lines(reqs or ()) - - def append_cr(line): - return line + '\n' - lines = map(append_cr, lines) - stream.writelines(lines) - - -def write_requirements(cmd, basename, filename): - dist = cmd.distribution - data = io.StringIO() - _write_requirements(data, dist.install_requires) - extras_require = dist.extras_require or {} - for extra in sorted(extras_require): - data.write('\n[{extra}]\n'.format(**vars())) - _write_requirements(data, extras_require[extra]) - cmd.write_or_delete_file("requirements", filename, data.getvalue()) - - -def write_setup_requirements(cmd, basename, filename): - data = io.StringIO() - _write_requirements(data, cmd.distribution.setup_requires) - cmd.write_or_delete_file("setup-requirements", filename, data.getvalue()) +# Export API used in entry_points +write_requirements = _requirestxt.write_requirements +write_setup_requirements = _requirestxt.write_setup_requirements def write_toplevel_names(cmd, basename, filename): |