diff options
author | Lucio Sauer <watermanpaint@posteo.net> | 2024-02-26 02:35:42 +0100 |
---|---|---|
committer | Lucio Sauer <watermanpaint@posteo.net> | 2024-02-26 02:35:42 +0100 |
commit | 2d2203d8e8a62e3d74df4a028c0a357e95f0036f (patch) | |
tree | 27cfbc289fbe9c35d826756c5667b2bcdae54b79 /dev-python/pytest-mypy-plugins | |
parent | sys-apps/pnpm-bin: fix QA_PREBUILT (diff) | |
download | guru-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')
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 +} |