-
Notifications
You must be signed in to change notification settings - Fork 86
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
dev-python/pytest-mypy-plugins: backport compatibility with >=mypy-1.8.0
Both versions were previously incompatible with dev-python/mypy-1.8.0 due to an incompatibility with mypy's new flush_errors signature. See also: typeddjango/pytest-mypy-plugins#139 Signed-off-by: Lucio Sauer <watermanpaint@posteo.net>
- Loading branch information
1 parent
90b0c16
commit 2d2203d
Showing
4 changed files
with
198 additions
and
0 deletions.
There are no files selected for viewing
60 changes: 60 additions & 0 deletions
60
dev-python/pytest-mypy-plugins/files/pytest-mypy-plugins-2.0.0-compat-mypy-1.8.0.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
Adapted from: | ||
https://github.com/typeddjango/pytest-mypy-plugins/commit/97aff1e9ae5022384542ce98b8a401c7f4c420e7 | ||
From: antecrescent <watermanpaint@posteo.net> | ||
Date: Sun, 25 Feb 2024 20:53:26 +0100 | ||
Subject: [PATCH] Test inline mypy configuration with more stable mypy option | ||
(#138) | ||
|
||
* Test inline mypy configuration with more stable mypy option | ||
|
||
The mypy configuration --no-strict-optional is discouraged and not much | ||
tested. It caused the test to fail with >=mypy-1.6.0. | ||
|
||
Closes #137 | ||
|
||
* Update flush_errors to match the signature of >=mypy-1.8.0 | ||
|
||
Necessity to bump to >=mypy-1.8.0 explained here: | ||
https://github.com/typeddjango/pytest-mypy-plugins/pull/139 | ||
--- a/pytest_mypy_plugins/item.py | ||
+++ b/pytest_mypy_plugins/item.py | ||
@@ -82,7 +82,10 @@ def run_mypy_typechecking(cmd_options: List[str], stdout: TextIO, stderr: TextIO | ||
|
||
error_messages = [] | ||
|
||
- def flush_errors(new_messages: List[str], serious: bool) -> None: | ||
+ # discard filename parameter '_'. Mypy uses it to generate | ||
+ # one junit-xml test entry per file with failures (--junit-format per_file) | ||
+ # and we don't support mypy's --junit-xml option in the first place. | ||
+ def flush_errors(_: str | None, new_messages: List[str], serious: bool) -> None: | ||
error_messages.extend(new_messages) | ||
f = stderr if serious else stdout | ||
try: | ||
--- a/pytest_mypy_plugins/tests/test-simple-cases.yml | ||
+++ b/pytest_mypy_plugins/tests/test-simple-cases.yml | ||
@@ -60,13 +60,13 @@ | ||
a.lower() # E: "int" has no attribute "lower" [attr-defined] | ||
|
||
|
||
-- case: custom_mypy_config_strict_optional_true_set | ||
+- case: custom_mypy_config_disallow_any_explicit_set | ||
+ expect_fail: yes | ||
main: | | ||
- from typing import Optional | ||
- a: Optional[int] = None | ||
- a + 1 | ||
+ from typing import Any | ||
+ a: Any = None # shoud raise an error | ||
mypy_config: | | ||
- strict_optional = False | ||
+ disallow_any_explicit = true | ||
|
||
|
||
- case: skip_incorrect_test_case | ||
@@ -101,4 +101,4 @@ | ||
a = 'abc' | ||
reveal_type(a) | ||
out: | | ||
- main:2: note: Some other message | ||
\ No newline at end of file | ||
+ main:2: note: Some other message |
51 changes: 51 additions & 0 deletions
51
dev-python/pytest-mypy-plugins/files/pytest-mypy-plugins-3.0.0-compat-mypy-1.8.0.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
https://github.com/typeddjango/pytest-mypy-plugins/commit/97aff1e9ae5022384542ce98b8a401c7f4c420e7 | ||
From: antecrescent <watermanpaint@posteo.net> | ||
Date: Sun, 25 Feb 2024 20:53:26 +0100 | ||
Subject: [PATCH] Test inline mypy configuration with more stable mypy option | ||
(#138) | ||
|
||
* Test inline mypy configuration with more stable mypy option | ||
|
||
The mypy configuration --no-strict-optional is discouraged and not much | ||
tested. It caused the test to fail with >=mypy-1.6.0. | ||
|
||
Closes #137 | ||
|
||
* Update flush_errors to match the signature of >=mypy-1.8.0 | ||
|
||
Necessity to bump to >=mypy-1.8.0 explained here: | ||
https://github.com/typeddjango/pytest-mypy-plugins/pull/139 | ||
--- a/pytest_mypy_plugins/item.py | ||
+++ b/pytest_mypy_plugins/item.py | ||
@@ -82,7 +82,10 @@ def run_mypy_typechecking(cmd_options: List[str], stdout: TextIO, stderr: TextIO | ||
|
||
error_messages = [] | ||
|
||
- def flush_errors(new_messages: List[str], serious: bool) -> None: | ||
+ # discard filename parameter '_'. Mypy uses it to generate | ||
+ # one junit-xml test entry per file with failures (--junit-format per_file) | ||
+ # and we don't support mypy's --junit-xml option in the first place. | ||
+ def flush_errors(_: str | None, new_messages: List[str], serious: bool) -> None: | ||
error_messages.extend(new_messages) | ||
f = stderr if serious else stdout | ||
try: | ||
--- a/pytest_mypy_plugins/tests/test-mypy-config.yml | ||
+++ b/pytest_mypy_plugins/tests/test-mypy-config.yml | ||
@@ -1,9 +1,9 @@ | ||
# Also used in `test_explicit_configs.py` | ||
|
||
-- case: custom_mypy_config_strict_optional_true_set | ||
+- case: custom_mypy_config_disallow_any_explicit_set | ||
+ expect_fail: yes | ||
main: | | ||
- from typing import Optional | ||
- a: Optional[int] = None | ||
- a + 1 # should not raise an error | ||
+ from typing import Any | ||
+ a: Any = None # should raise an error | ||
mypy_config: | | ||
- strict_optional = false | ||
+ disallow_any_explicit = true | ||
-- | ||
2.43.2 | ||
|
35 changes: 35 additions & 0 deletions
35
dev-python/pytest-mypy-plugins/pytest-mypy-plugins-2.0.0-r1.ebuild
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
# Copyright 2023-2024 Gentoo Authors | ||
# Distributed under the terms of the GNU General Public License v2 | ||
|
||
EAPI=8 | ||
|
||
DISTUTILS_USE_PEP517=setuptools | ||
PYTHON_COMPAT=( python3_{11,12} ) | ||
inherit distutils-r1 | ||
|
||
DESCRIPTION="pytest plugin for testing mypy types, stubs, plugins" | ||
HOMEPAGE=" | ||
https://pypi.org/project/pytest-mypy-plugins/ | ||
https://github.com/typeddjango/pytest-mypy-plugins/ | ||
" | ||
|
||
SRC_URI="https://github.com/typeddjango/pytest-mypy-plugins/archive/refs/tags/${PV}.tar.gz | ||
-> ${P}.gh.tar.gz" | ||
LICENSE="MIT" | ||
SLOT="0" | ||
KEYWORDS="~amd64" | ||
|
||
PATCHES="${FILESDIR}"/${P}-compat-mypy-1.8.0.patch | ||
DOCS="README* CHANGELOG*" | ||
|
||
RDEPEND=" | ||
>=dev-python/mypy-1.8.0[${PYTHON_USEDEP}] | ||
>=dev-python/pytest-7.0.0[${PYTHON_USEDEP}] | ||
dev-python/decorator[${PYTHON_USEDEP}] | ||
dev-python/jinja[${PYTHON_USEDEP}] | ||
dev-python/packaging[${PYTHON_USEDEP}] | ||
dev-python/pyyaml[${PYTHON_USEDEP}] | ||
dev-python/regex[${PYTHON_USEDEP}] | ||
" | ||
|
||
distutils_enable_tests pytest |
52 changes: 52 additions & 0 deletions
52
dev-python/pytest-mypy-plugins/pytest-mypy-plugins-3.0.0-r1.ebuild
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
# Copyright 2023-2024 Gentoo Authors | ||
# Distributed under the terms of the GNU General Public License v2 | ||
|
||
EAPI=8 | ||
|
||
DISTUTILS_USE_PEP517=setuptools | ||
PYTHON_COMPAT=( python3_{11,12} ) | ||
inherit distutils-r1 | ||
|
||
DESCRIPTION="pytest plugin for testing mypy types, stubs, plugins" | ||
HOMEPAGE=" | ||
https://pypi.org/project/pytest-mypy-plugins/ | ||
https://github.com/typeddjango/pytest-mypy-plugins/ | ||
" | ||
|
||
SRC_URI="https://github.com/typeddjango/pytest-mypy-plugins/archive/refs/tags/${PV}.tar.gz | ||
-> ${P}.gh.tar.gz" | ||
LICENSE="MIT" | ||
SLOT="0" | ||
KEYWORDS="~amd64" | ||
|
||
PATCHES="${FILESDIR}"/${P}-compat-mypy-1.8.0.patch | ||
DOCS="README* CHANGELOG*" | ||
|
||
RDEPEND=" | ||
>=dev-python/mypy-1.8.0[${PYTHON_USEDEP}] | ||
>=dev-python/pytest-7.0.0[${PYTHON_USEDEP}] | ||
>=dev-python/tomlkit-0.11[${PYTHON_USEDEP}] | ||
dev-python/decorator[${PYTHON_USEDEP}] | ||
dev-python/jinja[${PYTHON_USEDEP}] | ||
dev-python/packaging[${PYTHON_USEDEP}] | ||
dev-python/pyyaml[${PYTHON_USEDEP}] | ||
dev-python/regex[${PYTHON_USEDEP}] | ||
" | ||
|
||
distutils_enable_tests pytest | ||
|
||
python_prepare_all() { | ||
# tests need pytest_mypy_plugins.tests on the modules search path and | ||
# python -m pytest preprends sys.path with ${PWD}/${S} | ||
sed "s/\"pytest\"/\"MY_EPYTHON\", \"-m\", \"pytest\"/" \ | ||
-i pytest_mypy_plugins/tests/test_explicit_configs.py || die | ||
distutils-r1_python_prepare_all | ||
} | ||
|
||
python_test() { | ||
# substitute the correct interpreter | ||
sed "s/MY_EPYTHON/${EPYTHON}/" -i pytest_mypy_plugins/tests/test_explicit_configs.py || die | ||
distutils-r1_python_test | ||
# reset for next interpreter run | ||
sed "s/${EPYTHON}/MY_EPYTHON/" -i pytest_mypy_plugins/tests/test_explicit_configs.py || die | ||
} |