Skip to content

Commit 99c75c9

Browse files
Avasamabravalheri
andauthored
Ensured all methods in setuptools.modified raise a consistant distutils.error.DistutilsError type (#4567)
* Ensured all methods in `setuptools.modified` raise a consistant `distutils.error.DistutilsError` type * Update tests to reflect runtime behaviour with SETUPTOOLS_USE_DISTUTILS=stdlib * Update newsfragments/4567.bugfix.rst Co-authored-by: Anderson Bravalheri <[email protected]> * Attempt to fix setuptools/tests/test_distutils_adoption.py * can't use setuptoolsrelative import in test * Fix formatting error --------- Co-authored-by: Anderson Bravalheri <[email protected]> Co-authored-by: Anderson Bravalheri <[email protected]>
1 parent 884b845 commit 99c75c9

File tree

4 files changed

+64
-18
lines changed

4 files changed

+64
-18
lines changed

newsfragments/4567.bugfix.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Ensured methods in ``setuptools.modified`` preferably raise a consistent
2+
``distutils.errors.DistutilsError`` type
3+
(except in the deprecated use case of ``SETUPTOOLS_USE_DISTUTILS=stdlib``)
4+
-- by :user:`Avasam`

setuptools/command/build_clib.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,10 @@
11
from ..dist import Distribution
2+
from ..modified import newer_pairwise_group
23

34
import distutils.command.build_clib as orig
45
from distutils import log
56
from distutils.errors import DistutilsSetupError
67

7-
try:
8-
from distutils._modified import ( # pyright: ignore[reportMissingImports]
9-
newer_pairwise_group,
10-
)
11-
except ImportError:
12-
# fallback for SETUPTOOLS_USE_DISTUTILS=stdlib
13-
from .._distutils._modified import newer_pairwise_group
14-
158

169
class build_clib(orig.build_clib):
1710
"""

setuptools/modified.py

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
1-
from ._distutils._modified import (
2-
newer,
3-
newer_group,
4-
newer_pairwise,
5-
newer_pairwise_group,
6-
)
1+
try:
2+
# Ensure a DistutilsError raised by these methods is the same as distutils.errors.DistutilsError
3+
from distutils._modified import (
4+
newer,
5+
newer_group,
6+
newer_pairwise,
7+
newer_pairwise_group,
8+
)
9+
except ImportError:
10+
# fallback for SETUPTOOLS_USE_DISTUTILS=stdlib, because _modified never existed in stdlib
11+
from ._distutils._modified import (
12+
newer,
13+
newer_group,
14+
newer_pairwise,
15+
newer_pairwise_group,
16+
)
717

818
__all__ = ['newer', 'newer_pairwise', 'newer_group', 'newer_pairwise_group']

setuptools/tests/test_distutils_adoption.py

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ def test_distutils_has_origin():
114114
"""
115115

116116

117+
@pytest.mark.usefixtures("tmpdir_cwd")
117118
@pytest.mark.parametrize(
118119
"distutils_version, imported_module",
119120
[
@@ -125,9 +126,7 @@ def test_distutils_has_origin():
125126
("local", "archive_util"),
126127
],
127128
)
128-
def test_modules_are_not_duplicated_on_import(
129-
distutils_version, imported_module, tmpdir_cwd, venv
130-
):
129+
def test_modules_are_not_duplicated_on_import(distutils_version, imported_module, venv):
131130
env = dict(SETUPTOOLS_USE_DISTUTILS=distutils_version)
132131
script = ENSURE_IMPORTS_ARE_NOT_DUPLICATED.format(imported_module=imported_module)
133132
cmd = ['python', '-c', script]
@@ -145,15 +144,55 @@ def test_modules_are_not_duplicated_on_import(
145144
"""
146145

147146

147+
@pytest.mark.usefixtures("tmpdir_cwd")
148148
@pytest.mark.parametrize(
149149
"distutils_version",
150150
[
151151
"local",
152152
pytest.param("stdlib", marks=skip_without_stdlib_distutils),
153153
],
154154
)
155-
def test_log_module_is_not_duplicated_on_import(distutils_version, tmpdir_cwd, venv):
155+
def test_log_module_is_not_duplicated_on_import(distutils_version, venv):
156156
env = dict(SETUPTOOLS_USE_DISTUTILS=distutils_version)
157157
cmd = ['python', '-c', ENSURE_LOG_IMPORT_IS_NOT_DUPLICATED]
158158
output = venv.run(cmd, env=win_sr(env), **_TEXT_KWARGS).strip()
159159
assert output == "success"
160+
161+
162+
ENSURE_CONSISTENT_ERROR_FROM_MODIFIED_PY = r"""
163+
from setuptools.modified import newer
164+
from {imported_module}.errors import DistutilsError
165+
166+
# Can't use pytest.raises in this context
167+
try:
168+
newer("", "")
169+
except DistutilsError:
170+
print("success")
171+
else:
172+
raise AssertionError("Expected to raise")
173+
"""
174+
175+
176+
@pytest.mark.usefixtures("tmpdir_cwd")
177+
@pytest.mark.parametrize(
178+
"distutils_version, imported_module",
179+
[
180+
("local", "distutils"),
181+
# Unfortunately we still get ._distutils.errors.DistutilsError with SETUPTOOLS_USE_DISTUTILS=stdlib
182+
# But that's a deprecated use-case we don't mind not fully supporting in newer code
183+
pytest.param(
184+
"stdlib", "setuptools._distutils", marks=skip_without_stdlib_distutils
185+
),
186+
],
187+
)
188+
def test_consistent_error_from_modified_py(distutils_version, imported_module, venv):
189+
env = dict(SETUPTOOLS_USE_DISTUTILS=distutils_version)
190+
cmd = [
191+
'python',
192+
'-c',
193+
ENSURE_CONSISTENT_ERROR_FROM_MODIFIED_PY.format(
194+
imported_module=imported_module
195+
),
196+
]
197+
output = venv.run(cmd, env=win_sr(env), **_TEXT_KWARGS).strip()
198+
assert output == "success"

0 commit comments

Comments
 (0)