aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLucio Sauer <watermanpaint@posteo.net>2024-02-26 02:35:42 +0100
committerLucio Sauer <watermanpaint@posteo.net>2024-02-26 02:35:42 +0100
commit2d2203d8e8a62e3d74df4a028c0a357e95f0036f (patch)
tree27cfbc289fbe9c35d826756c5667b2bcdae54b79 /dev-python/pytest-mypy-plugins
parentsys-apps/pnpm-bin: fix QA_PREBUILT (diff)
downloadguru-2d2203d8e8a62e3d74df4a028c0a357e95f0036f.tar.gz
guru-2d2203d8e8a62e3d74df4a028c0a357e95f0036f.tar.bz2
guru-2d2203d8e8a62e3d74df4a028c0a357e95f0036f.zip
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>
Diffstat (limited to 'dev-python/pytest-mypy-plugins')
-rw-r--r--dev-python/pytest-mypy-plugins/files/pytest-mypy-plugins-2.0.0-compat-mypy-1.8.0.patch60
-rw-r--r--dev-python/pytest-mypy-plugins/files/pytest-mypy-plugins-3.0.0-compat-mypy-1.8.0.patch51
-rw-r--r--dev-python/pytest-mypy-plugins/pytest-mypy-plugins-2.0.0-r1.ebuild35
-rw-r--r--dev-python/pytest-mypy-plugins/pytest-mypy-plugins-3.0.0-r1.ebuild52
4 files changed, 198 insertions, 0 deletions
diff --git a/dev-python/pytest-mypy-plugins/files/pytest-mypy-plugins-2.0.0-compat-mypy-1.8.0.patch b/dev-python/pytest-mypy-plugins/files/pytest-mypy-plugins-2.0.0-compat-mypy-1.8.0.patch
new file mode 100644
index 000000000..e4885b93a
--- /dev/null
+++ b/dev-python/pytest-mypy-plugins/files/pytest-mypy-plugins-2.0.0-compat-mypy-1.8.0.patch
@@ -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
diff --git a/dev-python/pytest-mypy-plugins/files/pytest-mypy-plugins-3.0.0-compat-mypy-1.8.0.patch b/dev-python/pytest-mypy-plugins/files/pytest-mypy-plugins-3.0.0-compat-mypy-1.8.0.patch
new file mode 100644
index 000000000..c39c21d2e
--- /dev/null
+++ b/dev-python/pytest-mypy-plugins/files/pytest-mypy-plugins-3.0.0-compat-mypy-1.8.0.patch
@@ -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
+
diff --git a/dev-python/pytest-mypy-plugins/pytest-mypy-plugins-2.0.0-r1.ebuild b/dev-python/pytest-mypy-plugins/pytest-mypy-plugins-2.0.0-r1.ebuild
new file mode 100644
index 000000000..61c92e0d6
--- /dev/null
+++ b/dev-python/pytest-mypy-plugins/pytest-mypy-plugins-2.0.0-r1.ebuild
@@ -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
diff --git a/dev-python/pytest-mypy-plugins/pytest-mypy-plugins-3.0.0-r1.ebuild b/dev-python/pytest-mypy-plugins/pytest-mypy-plugins-3.0.0-r1.ebuild
new file mode 100644
index 000000000..2564816f2
--- /dev/null
+++ b/dev-python/pytest-mypy-plugins/pytest-mypy-plugins-3.0.0-r1.ebuild
@@ -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
+}