summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnderson Bravalheri <andersonbravalheri@gmail.com>2023-03-07 18:18:07 +0000
committerAnderson Bravalheri <andersonbravalheri@gmail.com>2023-05-03 14:06:38 +0100
commitf5ca18b4836ccfc29b2e84932d774aa3054e9a82 (patch)
tree427e23ddaac86456c3ad9358c5ef34c270b2a50e
parent9cecaca97ce19e5e08304532d0ab7a034155d56c (diff)
downloadpython-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.py30
-rw-r--r--setuptools/command/egg_info.py29
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):