commit:     2d2203d8e8a62e3d74df4a028c0a357e95f0036f
Author:     Lucio Sauer <watermanpaint <AT> posteo <DOT> net>
AuthorDate: Mon Feb 26 01:35:42 2024 +0000
Commit:     Viorel Munteanu <ceamac <AT> gentoo <DOT> org>
CommitDate: Mon Feb 26 01:35:42 2024 +0000
URL:        https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=2d2203d8

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 <AT> posteo.net>

 ...test-mypy-plugins-2.0.0-compat-mypy-1.8.0.patch | 60 ++++++++++++++++++++++
 ...test-mypy-plugins-3.0.0-compat-mypy-1.8.0.patch | 51 ++++++++++++++++++
 .../pytest-mypy-plugins-2.0.0-r1.ebuild            | 35 +++++++++++++
 .../pytest-mypy-plugins-3.0.0-r1.ebuild            | 52 +++++++++++++++++++
 4 files changed, 198 insertions(+)

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 0000000000..e4885b93a5
--- /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 <watermanpa...@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 0000000000..c39c21d2ed
--- /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 <watermanpa...@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 0000000000..61c92e0d63
--- /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 0000000000..2564816f26
--- /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
+}

Reply via email to