mirror of
https://github.com/gentoo-mirror/guru.git
synced 2026-07-09 23:23:00 -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