mirror of
https://github.com/gentoo-mirror/guru.git
synced 2026-07-22 05:23:01 -04:00
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: https://github.com/typeddjango/pytest-mypy-plugins/pull/139 Signed-off-by: Lucio Sauer <watermanpaint@posteo.net>
This commit is contained in:
@@ -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
|
||||||
@@ -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
|
||||||
|
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user