Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-pytest-mypy for 
openSUSE:Factory checked in at 2022-01-10 23:53:47
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pytest-mypy (Old)
 and      /work/SRC/openSUSE:Factory/.python-pytest-mypy.new.1892 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-pytest-mypy"

Mon Jan 10 23:53:47 2022 rev:2 rq:945367 version:0.8.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pytest-mypy/python-pytest-mypy.changes    
2021-02-23 20:23:32.691822267 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-pytest-mypy.new.1892/python-pytest-mypy.changes
  2022-01-10 23:54:24.540846710 +0100
@@ -1,0 +2,10 @@
+Mon Jan 10 14:05:23 UTC 2022 - Matej Cepl <[email protected]>
+
+- Update to 0.8.1:
+  - Implement MypyItem.collect for pytest < 6.0
+  - Update dev deps and extend static checks
+  - Test with mypy 0.8
+- Add 121-recent-mypy.patch to make the test suite pass with the
+  recent mypy.
+
+-------------------------------------------------------------------
@@ -5 +15,5 @@
-- Update to v0.8.0
+- Update to v0.8.0:
+  - Stop injecting MypyStatusItem in
+    pytest_collection_modifyitems to fix --looponfail
+  - Add support for Python 3.9
+  - Create MypyResults

Old:
----
  pytest-mypy-0.8.0.tar.gz

New:
----
  121-recent-mypy.patch
  pytest-mypy-0.8.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-pytest-mypy.spec ++++++
--- /var/tmp/diff_new_pack.oc1p9b/_old  2022-01-10 23:54:24.920847043 +0100
+++ /var/tmp/diff_new_pack.oc1p9b/_new  2022-01-10 23:54:24.924847046 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-pytest-mypy
 #
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2022 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -19,23 +19,27 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %define         skip_python2 1
 Name:           python-pytest-mypy
-Version:        0.8.0
+Version:        0.8.1
 Release:        0
 Summary:        Mypy static type checker plugin for Pytest
 License:        MIT
 Group:          Development/Languages/Python
 URL:            https://github.com/dbader/pytest-mypy
 Source:         
https://files.pythonhosted.org/packages/source/p/pytest-mypy/pytest-mypy-%{version}.tar.gz
+# PATCH-FIX-UPSTREAM 121-recent-mypy.patch gh#dbader/pytest-mypy#126 
[email protected]
+# this patch makes things totally awesome
+Patch0:         121-recent-mypy.patch
 BuildRequires:  %{python_module setuptools_scm >= 3.5}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
 Requires:       python-filelock
-Requires:       python-mypy >= 0.500
+Requires:       python-mypy >= 0.900
 Requires:       python-pytest >= 2.8
 BuildArch:      noarch
 # SECTION test requirements
 BuildRequires:  %{python_module filelock}
-BuildRequires:  %{python_module mypy >= 0.500}
+BuildRequires:  %{python_module mypy >= 0.900}
+BuildRequires:  %{python_module pexpect}
 BuildRequires:  %{python_module pytest >= 2.8}
 BuildRequires:  %{python_module pytest-xdist}
 # /SECTION
@@ -46,6 +50,7 @@
 
 %prep
 %setup -q -n pytest-mypy-%{version}
+%autopatch -p1
 
 %build
 %python_build

++++++ 121-recent-mypy.patch ++++++
>From 4b0a8bf541bd9218c8704d0faea501f3811a4504 Mon Sep 17 00:00:00 2001
From: David Tucker <[email protected]>
Date: Tue, 15 Jun 2021 20:10:36 -0700
Subject: [PATCH 1/3] Test with mypy 0.9x

---
 tests/test_pytest_mypy.py |    2 +-
 tox.ini                   |   32 +++++++++++++++++---------------
 2 files changed, 18 insertions(+), 16 deletions(-)

--- a/tests/test_pytest_mypy.py
+++ b/tests/test_pytest_mypy.py
@@ -118,7 +118,7 @@ def test_mypy_ignore_missings_imports(te
     result.assert_outcomes(failed=mypy_checks)
     result.stdout.fnmatch_lines(
         [
-            "2: error: Cannot find *module named '{module_name}'".format(
+            "2: error: Cannot find *module named *{module_name}*".format(
                 module_name=module_name,
             ),
         ],
--- a/tox.ini
+++ b/tox.ini
@@ -3,21 +3,21 @@
 minversion = 3.20
 isolated_build = true
 envlist =
-    py35-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.50, 0.5x, 0.60, 
0.6x, 0.70, 0.7x, 0.80, 0.8x}
-    py36-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.50, 0.5x, 0.60, 
0.6x, 0.70, 0.7x, 0.80, 0.8x}
-    py37-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.50, 0.5x, 0.60, 
0.6x, 0.70, 0.7x, 0.80, 0.8x}
-    py38-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.71, 0.7x, 0.80, 
0.8x}
-    py39-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.78, 0.7x, 0.80, 
0.8x}
+    py35-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.50, 0.5x, 0.60, 
0.6x, 0.70, 0.7x, 0.80, 0.8x, 0.90, 0.9x}
+    py36-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.50, 0.5x, 0.60, 
0.6x, 0.70, 0.7x, 0.80, 0.8x, 0.90, 0.9x}
+    py37-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.50, 0.5x, 0.60, 
0.6x, 0.70, 0.7x, 0.80, 0.8x, 0.90, 0.9x}
+    py38-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.71, 0.7x, 0.80, 
0.8x, 0.90, 0.9x}
+    py39-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.78, 0.7x, 0.80, 
0.8x, 0.90, 0.9x}
     publish
     static
 
 [gh-actions]
 python =
-    3.5: py35-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.50, 0.5x, 
0.60, 0.6x, 0.70, 0.7x, 0.80, 0.8x}
-    3.6: py36-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.50, 0.5x, 
0.60, 0.6x, 0.70, 0.7x, 0.80, 0.8x}
-    3.7: py37-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.50, 0.5x, 
0.60, 0.6x, 0.70, 0.7x, 0.80, 0.8x}
-    3.8: py38-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.71, 0.7x, 
0.80, 0.8x}, publish, static
-    3.9: py39-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.78, 0.7x, 
0.80, 0.8x}
+    3.5: py35-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.50, 0.5x, 
0.60, 0.6x, 0.70, 0.7x, 0.80, 0.8x, 0.90, 0.9x}
+    3.6: py36-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.50, 0.5x, 
0.60, 0.6x, 0.70, 0.7x, 0.80, 0.8x, 0.90, 0.9x}
+    3.7: py37-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.50, 0.5x, 
0.60, 0.6x, 0.70, 0.7x, 0.80, 0.8x, 0.90, 0.9x}
+    3.8: py38-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.71, 0.7x, 
0.80, 0.8x, 0.90, 0.9x}, publish, static
+    3.9: py39-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.78, 0.7x, 
0.80, 0.8x, 0.90, 0.9x}
 
 [testenv]
 deps =
@@ -134,6 +134,8 @@ deps =
     mypy0.80: mypy >= 0.800, < 0.810
     mypy0.81: mypy >= 0.810, < 0.820
     mypy0.8x: mypy >= 0.800, < 0.900
+    mypy0.90: mypy >= 0.900, < 0.910
+    mypy0.9x: mypy >= 0.900, <= 0.999
 
     pexpect ~= 4.8.0
 
@@ -145,8 +147,8 @@ testpaths = tests
 [testenv:publish]
 passenv = TWINE_*
 deps =
-    build ~= 0.3.0
-    twine ~= 3.3.0
+    build ~= 0.4.0
+    twine ~= 3.4.0
 commands =
     {envpython} -m build --outdir {distdir} .
     twine {posargs:check} {distdir}/*
@@ -154,10 +156,10 @@ commands =
 [testenv:static]
 deps =
     bandit ~= 1.7.0
-    black ~= 20.8b
-    flake8 ~= 3.8.3
+    black ~= 21.6b
+    flake8 ~= 3.9.0
     flake8-commas ~= 2.0.0
-    mypy >= 0.810, < 0.820
+    mypy >= 0.900, < 0.910
 commands =
     black --check src setup.py tests
     flake8 src setup.py tests

++++++ pytest-mypy-0.8.0.tar.gz -> pytest-mypy-0.8.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-mypy-0.8.0/PKG-INFO 
new/pytest-mypy-0.8.1/PKG-INFO
--- old/pytest-mypy-0.8.0/PKG-INFO      2020-11-14 02:36:40.222181800 +0100
+++ new/pytest-mypy-0.8.1/PKG-INFO      2021-03-21 16:51:09.074518000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: pytest-mypy
-Version: 0.8.0
+Version: 0.8.1
 Summary: Mypy static type checker plugin for Pytest
 Home-page: https://github.com/dbader/pytest-mypy
 Author: Daniel Bader
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-mypy-0.8.0/changelog.md 
new/pytest-mypy-0.8.1/changelog.md
--- old/pytest-mypy-0.8.0/changelog.md  2020-11-14 02:35:50.000000000 +0100
+++ new/pytest-mypy-0.8.1/changelog.md  2021-03-21 16:50:11.000000000 +0100
@@ -1,5 +1,8 @@
 # Changelog
 
+## [0.8.1](https://github.com/dbader/pytest-mypy/milestone/16)
+* Add a partial workaround for 
https://github.com/pytest-dev/pytest/issues/8016.
+
 ## [0.8.0](https://github.com/dbader/pytest-mypy/milestone/15)
 * Add support for Python 3.9.
 * Stop injecting `MypyStatusItem` in `pytest_collection_modifyitems` to fix 
`--looponfail`.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-mypy-0.8.0/pyproject.toml 
new/pytest-mypy-0.8.1/pyproject.toml
--- old/pytest-mypy-0.8.0/pyproject.toml        2020-11-14 02:35:50.000000000 
+0100
+++ new/pytest-mypy-0.8.1/pyproject.toml        2021-03-21 16:50:11.000000000 
+0100
@@ -1,3 +1,5 @@
 [build-system]
-requires = ['setuptools ~= 45.2.0', 'setuptools-scm ~= 3.5.0', 'wheel ~= 
0.34.0']
+requires = ['setuptools ~= 50.3.0', 'setuptools-scm[toml] ~= 5.0.0', 'wheel ~= 
0.36.0']
 build-backend = 'setuptools.build_meta'
+
+[tool.setuptools_scm]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-mypy-0.8.0/setup.py 
new/pytest-mypy-0.8.1/setup.py
--- old/pytest-mypy-0.8.0/setup.py      2020-11-14 02:35:50.000000000 +0100
+++ new/pytest-mypy-0.8.1/setup.py      2021-03-21 16:50:11.000000000 +0100
@@ -4,63 +4,56 @@
 import glob
 import os
 import codecs
-from setuptools import setup, find_packages
+from setuptools import setup, find_packages  # type: ignore
 
 
 def read(fname):
     file_path = os.path.join(os.path.dirname(__file__), fname)
-    return codecs.open(file_path, encoding='utf-8').read()
+    return codecs.open(file_path, encoding="utf-8").read()
 
 
 setup(
-    name='pytest-mypy',
+    name="pytest-mypy",
     use_scm_version=True,
-    author='Daniel Bader',
-    author_email='[email protected]',
-    maintainer='David Tucker',
-    maintainer_email='[email protected]',
-    license='MIT',
-    url='https://github.com/dbader/pytest-mypy',
-    description='Mypy static type checker plugin for Pytest',
-    long_description=read('README.rst'),
-    long_description_content_type='text/x-rst',
-    packages=find_packages('src'),
-    package_dir={'': 'src'},
+    author="Daniel Bader",
+    author_email="[email protected]",
+    maintainer="David Tucker",
+    maintainer_email="[email protected]",
+    license="MIT",
+    url="https://github.com/dbader/pytest-mypy";,
+    description="Mypy static type checker plugin for Pytest",
+    long_description=read("README.rst"),
+    long_description_content_type="text/x-rst",
+    packages=find_packages("src"),
+    package_dir={"": "src"},
     py_modules=[
-        os.path.splitext(os.path.basename(path))[0]
-        for path in glob.glob('src/*.py')
-    ],
-    python_requires='>=3.5',
-    setup_requires=[
-        'setuptools-scm>=3.5',
+        os.path.splitext(os.path.basename(path))[0] for path in 
glob.glob("src/*.py")
     ],
+    python_requires=">=3.5",
+    setup_requires=["setuptools-scm>=3.5"],
     install_requires=[
-        'attrs>=19.0',
-        'filelock>=3.0',
-        'pytest>=3.5',
+        "attrs>=19.0",
+        "filelock>=3.0",
+        "pytest>=3.5",
         'mypy>=0.500; python_version<"3.8"',
         'mypy>=0.700; python_version>="3.8" and python_version<"3.9"',
         'mypy>=0.780; python_version>="3.9"',
     ],
     classifiers=[
-        'Development Status :: 4 - Beta',
-        'Framework :: Pytest',
-        'Intended Audience :: Developers',
-        'Topic :: Software Development :: Testing',
-        'Programming Language :: Python',
-        'Programming Language :: Python :: 3',
-        'Programming Language :: Python :: 3.5',
-        'Programming Language :: Python :: 3.6',
-        'Programming Language :: Python :: 3.7',
-        'Programming Language :: Python :: 3.8',
-        'Programming Language :: Python :: 3.9',
-        'Programming Language :: Python :: Implementation :: CPython',
-        'Operating System :: OS Independent',
-        'License :: OSI Approved :: MIT License',
+        "Development Status :: 4 - Beta",
+        "Framework :: Pytest",
+        "Intended Audience :: Developers",
+        "Topic :: Software Development :: Testing",
+        "Programming Language :: Python",
+        "Programming Language :: Python :: 3",
+        "Programming Language :: Python :: 3.5",
+        "Programming Language :: Python :: 3.6",
+        "Programming Language :: Python :: 3.7",
+        "Programming Language :: Python :: 3.8",
+        "Programming Language :: Python :: 3.9",
+        "Programming Language :: Python :: Implementation :: CPython",
+        "Operating System :: OS Independent",
+        "License :: OSI Approved :: MIT License",
     ],
-    entry_points={
-        'pytest11': [
-            'mypy = pytest_mypy',
-        ],
-    },
+    entry_points={"pytest11": ["mypy = pytest_mypy"]},
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-mypy-0.8.0/src/pytest_mypy.egg-info/PKG-INFO 
new/pytest-mypy-0.8.1/src/pytest_mypy.egg-info/PKG-INFO
--- old/pytest-mypy-0.8.0/src/pytest_mypy.egg-info/PKG-INFO     2020-11-14 
02:36:40.000000000 +0100
+++ new/pytest-mypy-0.8.1/src/pytest_mypy.egg-info/PKG-INFO     2021-03-21 
16:51:08.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: pytest-mypy
-Version: 0.8.0
+Version: 0.8.1
 Summary: Mypy static type checker plugin for Pytest
 Home-page: https://github.com/dbader/pytest-mypy
 Author: Daniel Bader
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-mypy-0.8.0/src/pytest_mypy.py 
new/pytest-mypy-0.8.1/src/pytest_mypy.py
--- old/pytest-mypy-0.8.0/src/pytest_mypy.py    2020-11-14 02:35:50.000000000 
+0100
+++ new/pytest-mypy-0.8.1/src/pytest_mypy.py    2021-03-21 16:50:11.000000000 
+0100
@@ -12,12 +12,12 @@
 
 
 mypy_argv = []
-nodeid_name = 'mypy'
+nodeid_name = "mypy"
 
 
 def default_file_error_formatter(item, results, errors):
     """Create a string to be displayed when mypy finds errors in a file."""
-    return '\n'.join(errors)
+    return "\n".join(errors)
 
 
 file_error_formatter = default_file_error_formatter
@@ -25,19 +25,19 @@
 
 def pytest_addoption(parser):
     """Add options for enabling and running mypy."""
-    group = parser.getgroup('mypy')
+    group = parser.getgroup("mypy")
+    group.addoption("--mypy", action="store_true", help="run mypy on .py 
files")
     group.addoption(
-        '--mypy', action='store_true',
-        help='run mypy on .py files')
-    group.addoption(
-        '--mypy-ignore-missing-imports', action='store_true',
-        help="suppresses error messages about imports that cannot be resolved")
+        "--mypy-ignore-missing-imports",
+        action="store_true",
+        help="suppresses error messages about imports that cannot be resolved",
+    )
 
 
 XDIST_WORKERINPUT_ATTRIBUTE_NAMES = (
-    'workerinput',
+    "workerinput",
     # xdist < 2.0.0:
-    'slaveinput',
+    "slaveinput",
 )
 
 
@@ -76,12 +76,15 @@
 
         # If xdist is enabled, then the results path should be exposed to
         # the workers so that they know where to read parsed results from.
-        if config.pluginmanager.getplugin('xdist'):
+        if config.pluginmanager.getplugin("xdist"):
+
             class _MypyXdistPlugin:
                 def pytest_configure_node(self, node):  # xdist hook
                     """Pass config._mypy_results_path to workers."""
-                    _get_xdist_workerinput(node)['_mypy_results_path'] = \
-                        node.config._mypy_results_path
+                    _get_xdist_workerinput(node)[
+                        "_mypy_results_path"
+                    ] = node.config._mypy_results_path
+
             config.pluginmanager.register(_MypyXdistPlugin())
 
     # pytest_terminal_summary cannot accept config before pytest 4.2.
@@ -89,25 +92,22 @@
     _pytest_terminal_summary_config = config
 
     config.addinivalue_line(
-        'markers',
-        '{marker}: mark tests to be checked by mypy.'.format(
-            marker=MypyItem.MARKER,
-        ),
+        "markers",
+        "{marker}: mark tests to be checked by 
mypy.".format(marker=MypyItem.MARKER),
     )
-    if config.getoption('--mypy-ignore-missing-imports'):
-        mypy_argv.append('--ignore-missing-imports')
+    if config.getoption("--mypy-ignore-missing-imports"):
+        mypy_argv.append("--ignore-missing-imports")
 
 
 def pytest_collect_file(path, parent):
     """Create a MypyFileItem for every file mypy should run on."""
-    if path.ext in {'.py', '.pyi'} and any([
-            parent.config.option.mypy,
-            parent.config.option.mypy_ignore_missing_imports,
-    ]):
+    if path.ext in {".py", ".pyi"} and any(
+        [parent.config.option.mypy, 
parent.config.option.mypy_ignore_missing_imports],
+    ):
         # Do not create MypyFile instance for a .py file if a
         # .pyi file with the same name already exists;
         # pytest will complain about duplicate modules otherwise
-        if path.ext == '.pyi' or not path.new(ext='.pyi').isfile():
+        if path.ext == ".pyi" or not path.new(ext=".pyi").isfile():
             return MypyFile.from_parent(parent=parent, fspath=path)
     return None
 
@@ -120,7 +120,7 @@
     def from_parent(cls, *args, **kwargs):
         """Override from_parent for compatibility."""
         # pytest.File.from_parent did not exist before pytest 5.4.
-        return getattr(super(), 'from_parent', cls)(*args, **kwargs)
+        return getattr(super(), "from_parent", cls)(*args, **kwargs)
 
     def collect(self):
         """Create a MypyFileItem for the File."""
@@ -128,9 +128,7 @@
         # Since mypy might check files that were not collected,
         # pytest could pass even though mypy failed!
         # To prevent that, add an explicit check for the mypy exit status.
-        if not any(
-                isinstance(item, MypyStatusItem) for item in self.session.items
-        ):
+        if not any(isinstance(item, MypyStatusItem) for item in 
self.session.items):
             yield MypyStatusItem.from_parent(
                 parent=self,
                 name=nodeid_name + "-status",
@@ -141,17 +139,24 @@
 
     """A Mypy-related test Item."""
 
-    MARKER = 'mypy'
+    MARKER = "mypy"
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         self.add_marker(self.MARKER)
 
+    def collect(self):
+        """
+        Partially work around https://github.com/pytest-dev/pytest/issues/8016
+        for pytest < 6.0 with --looponfail.
+        """
+        yield self
+
     @classmethod
     def from_parent(cls, *args, **kwargs):
         """Override from_parent for compatibility."""
         # pytest.Item.from_parent did not exist before pytest 5.4.
-        return getattr(super(), 'from_parent', cls)(*args, **kwargs)
+        return getattr(super(), "from_parent", cls)(*args, **kwargs)
 
     def repr_failure(self, excinfo):
         """
@@ -193,7 +198,7 @@
         results = MypyResults.from_session(self.session)
         if results.status:
             raise MypyError(
-                'mypy exited with status {status}.'.format(
+                "mypy exited with status {status}.".format(
                     status=results.status,
                 ),
             )
@@ -218,33 +223,32 @@
         return json.dump(vars(self), results_f)
 
     @classmethod
-    def load(cls, results_f: TextIO) -> 'MypyResults':
+    def load(cls, results_f: TextIO) -> "MypyResults":
         """Get results cached by dump()."""
         return cls(**json.load(results_f))
 
     @classmethod
     def from_mypy(
-            cls,
-            items: List[MypyFileItem],
-            *,
-            opts: Optional[List[str]] = None
-    ) -> 'MypyResults':
+        cls,
+        items: List[MypyFileItem],
+        *,
+        opts: Optional[List[str]] = None  # noqa: C816
+    ) -> "MypyResults":
         """Generate results from mypy."""
 
         if opts is None:
             opts = mypy_argv[:]
         abspath_errors = {
-            os.path.abspath(str(item.fspath)): []
-            for item in items
+            os.path.abspath(str(item.fspath)): [] for item in items
         }  # type: MypyResults._abspath_errors_type
 
         stdout, stderr, status = mypy.api.run(opts + list(abspath_errors))
 
         unmatched_lines = []
-        for line in stdout.split('\n'):
+        for line in stdout.split("\n"):
             if not line:
                 continue
-            path, _, error = line.partition(':')
+            path, _, error = line.partition(":")
             abspath = os.path.abspath(path)
             try:
                 abspath_errors[abspath].append(error)
@@ -257,27 +261,26 @@
             stderr=stderr,
             status=status,
             abspath_errors=abspath_errors,
-            unmatched_stdout='\n'.join(unmatched_lines),
+            unmatched_stdout="\n".join(unmatched_lines),
         )
 
     @classmethod
-    def from_session(cls, session) -> 'MypyResults':
+    def from_session(cls, session) -> "MypyResults":
         """Load (or generate) cached mypy results for a pytest session."""
         results_path = (
             session.config._mypy_results_path
-            if _is_master(session.config) else
-            _get_xdist_workerinput(session.config)['_mypy_results_path']
+            if _is_master(session.config)
+            else _get_xdist_workerinput(session.config)["_mypy_results_path"]
         )
-        with FileLock(results_path + '.lock'):
+        with FileLock(results_path + ".lock"):
             try:
-                with open(results_path, mode='r') as results_f:
+                with open(results_path, mode="r") as results_f:
                     results = cls.load(results_f)
             except FileNotFoundError:
-                results = cls.from_mypy([
-                    item for item in session.items
-                    if isinstance(item, MypyFileItem)
-                ])
-                with open(results_path, mode='w') as results_f:
+                results = cls.from_mypy(
+                    [item for item in session.items if isinstance(item, 
MypyFileItem)],
+                )
+                with open(results_path, mode="w") as results_f:
                     results.dump(results_f)
         return results
 
@@ -293,15 +296,15 @@
     """Report stderr and unrecognized lines from stdout."""
     config = _pytest_terminal_summary_config
     try:
-        with open(config._mypy_results_path, mode='r') as results_f:
+        with open(config._mypy_results_path, mode="r") as results_f:
             results = MypyResults.load(results_f)
     except FileNotFoundError:
         # No MypyItems executed.
         return
     if results.unmatched_stdout or results.stderr:
-        terminalreporter.section('mypy')
+        terminalreporter.section("mypy")
         if results.unmatched_stdout:
-            color = {'red': True} if results.status else {'green': True}
+            color = {"red": True} if results.status else {"green": True}
             terminalreporter.write_line(results.unmatched_stdout, **color)
         if results.stderr:
             terminalreporter.write_line(results.stderr, yellow=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-mypy-0.8.0/tests/conftest.py 
new/pytest-mypy-0.8.1/tests/conftest.py
--- old/pytest-mypy-0.8.0/tests/conftest.py     2020-11-14 02:35:50.000000000 
+0100
+++ new/pytest-mypy-0.8.1/tests/conftest.py     2021-03-21 16:50:11.000000000 
+0100
@@ -1 +1 @@
-pytest_plugins = 'pytester'
+pytest_plugins = "pytester"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-mypy-0.8.0/tests/test_pytest_mypy.py 
new/pytest-mypy-0.8.1/tests/test_pytest_mypy.py
--- old/pytest-mypy-0.8.0/tests/test_pytest_mypy.py     2020-11-14 
02:35:50.000000000 +0100
+++ new/pytest-mypy-0.8.1/tests/test_pytest_mypy.py     2021-03-21 
16:50:11.000000000 +0100
@@ -1,9 +1,13 @@
 import signal
 import textwrap
 
+import pexpect
 import pytest
 
 
+PYTEST_VERSION = tuple(int(v) for v in pytest.__version__.split(".")[:2])
+
+
 @pytest.fixture(
     params=[
         True,  # xdist enabled, active
@@ -13,25 +17,27 @@
 )
 def xdist_args(request):
     if request.param is None:
-        return ['-p', 'no:xdist']
-    return ['-n', 'auto'] if request.param else []
+        return ["-p", "no:xdist"]
+    return ["-n", "auto"] if request.param else []
 
 
[email protected]('pyfile_count', [1, 2])
[email protected]("pyfile_count", [1, 2])
 def test_mypy_success(testdir, pyfile_count, xdist_args):
     """Verify that running on a module with no type errors passes."""
     testdir.makepyfile(
         **{
-            'pyfile_' + str(pyfile_i): '''
+            "pyfile_{0}".format(
+                pyfile_i,
+            ): """
                 def pyfunc(x: int) -> int:
                     return x * 2
-            '''
+            """
             for pyfile_i in range(pyfile_count)
-        }
+        },
     )
     result = testdir.runpytest_subprocess(*xdist_args)
     result.assert_outcomes()
-    result = testdir.runpytest_subprocess('--mypy', *xdist_args)
+    result = testdir.runpytest_subprocess("--mypy", *xdist_args)
     mypy_file_checks = pyfile_count
     mypy_status_check = 1
     mypy_checks = mypy_file_checks + mypy_status_check
@@ -46,22 +52,23 @@
     """
     # The incorrect signature below should be ignored
     # as the .pyi file takes priority
-    testdir.makefile(
-        '.py', pyfile='''
+    testdir.makepyfile(
+        pyfile="""
             def pyfunc(x: int) -> str:
                 return x * 2
-        '''
+        """,
     )
 
     testdir.makefile(
-        '.pyi', pyfile='''
+        ".pyi",
+        pyfile="""
             def pyfunc(x: int) -> int: ...
-        '''
+        """,
     )
 
     result = testdir.runpytest_subprocess(*xdist_args)
     result.assert_outcomes()
-    result = testdir.runpytest_subprocess('--mypy', *xdist_args)
+    result = testdir.runpytest_subprocess("--mypy", *xdist_args)
     mypy_file_checks = 1
     mypy_status_check = 1
     mypy_checks = mypy_file_checks + mypy_status_check
@@ -71,20 +78,20 @@
 
 def test_mypy_error(testdir, xdist_args):
     """Verify that running on a module with type errors fails."""
-    testdir.makepyfile('''
-        def pyfunc(x: int) -> str:
-            return x * 2
-    ''')
+    testdir.makepyfile(
+        """
+            def pyfunc(x: int) -> str:
+                return x * 2
+        """,
+    )
     result = testdir.runpytest_subprocess(*xdist_args)
     result.assert_outcomes()
-    result = testdir.runpytest_subprocess('--mypy', *xdist_args)
+    result = testdir.runpytest_subprocess("--mypy", *xdist_args)
     mypy_file_checks = 1
     mypy_status_check = 1
     mypy_checks = mypy_file_checks + mypy_status_check
     result.assert_outcomes(failed=mypy_checks)
-    result.stdout.fnmatch_lines([
-        '2: error: Incompatible return value*',
-    ])
+    result.stdout.fnmatch_lines(["2: error: Incompatible return value*"])
     assert result.ret != 0
 
 
@@ -93,188 +100,240 @@
     Verify that --mypy-ignore-missing-imports
     causes mypy to ignore missing imports.
     """
-    module_name = 'is_always_missing'
-    testdir.makepyfile('''
-        try:
-            import {module_name}
-        except ImportError:
-            pass
-    '''.format(module_name=module_name))
-    result = testdir.runpytest_subprocess('--mypy', *xdist_args)
+    module_name = "is_always_missing"
+    testdir.makepyfile(
+        """
+            try:
+                import {module_name}
+            except ImportError:
+                pass
+        """.format(
+            module_name=module_name,
+        ),
+    )
+    result = testdir.runpytest_subprocess("--mypy", *xdist_args)
     mypy_file_checks = 1
     mypy_status_check = 1
     mypy_checks = mypy_file_checks + mypy_status_check
     result.assert_outcomes(failed=mypy_checks)
-    result.stdout.fnmatch_lines([
-        "2: error: Cannot find *module named '{module_name}'".format(
-            module_name=module_name,
-        ),
-    ])
-    assert result.ret != 0
-    result = testdir.runpytest_subprocess(
-        '--mypy-ignore-missing-imports',
-        *xdist_args
+    result.stdout.fnmatch_lines(
+        [
+            "2: error: Cannot find *module named '{module_name}'".format(
+                module_name=module_name,
+            ),
+        ],
     )
+    assert result.ret != 0
+    result = testdir.runpytest_subprocess("--mypy-ignore-missing-imports", 
*xdist_args)
     result.assert_outcomes(passed=mypy_checks)
     assert result.ret == 0
 
 
 def test_mypy_marker(testdir, xdist_args):
     """Verify that -m mypy only runs the mypy tests."""
-    testdir.makepyfile('''
-        def test_fails():
-            assert False
-    ''')
-    result = testdir.runpytest_subprocess('--mypy', *xdist_args)
+    testdir.makepyfile(
+        """
+            def test_fails():
+                assert False
+        """,
+    )
+    result = testdir.runpytest_subprocess("--mypy", *xdist_args)
     test_count = 1
     mypy_file_checks = 1
     mypy_status_check = 1
     mypy_checks = mypy_file_checks + mypy_status_check
     result.assert_outcomes(failed=test_count, passed=mypy_checks)
     assert result.ret != 0
-    result = testdir.runpytest_subprocess('--mypy', '-m', 'mypy', *xdist_args)
+    result = testdir.runpytest_subprocess("--mypy", "-m", "mypy", *xdist_args)
     result.assert_outcomes(passed=mypy_checks)
     assert result.ret == 0
 
 
 def test_non_mypy_error(testdir, xdist_args):
     """Verify that non-MypyError exceptions are passed through the plugin."""
-    message = 'This is not a MypyError.'
-    testdir.makepyfile(conftest='''
-        def pytest_configure(config):
-            plugin = config.pluginmanager.getplugin('mypy')
-
-            class PatchedMypyFileItem(plugin.MypyFileItem):
-                def runtest(self):
-                    raise Exception('{message}')
-
-            plugin.MypyFileItem = PatchedMypyFileItem
-    '''.format(message=message))
+    message = "This is not a MypyError."
+    testdir.makepyfile(
+        conftest="""
+            def pytest_configure(config):
+                plugin = config.pluginmanager.getplugin('mypy')
+
+                class PatchedMypyFileItem(plugin.MypyFileItem):
+                    def runtest(self):
+                        raise Exception('{message}')
+
+                plugin.MypyFileItem = PatchedMypyFileItem
+        """.format(
+            message=message,
+        ),
+    )
     result = testdir.runpytest_subprocess(*xdist_args)
     result.assert_outcomes()
-    result = testdir.runpytest_subprocess('--mypy', *xdist_args)
+    result = testdir.runpytest_subprocess("--mypy", *xdist_args)
     mypy_file_checks = 1  # conftest.py
     mypy_status_check = 1
     result.assert_outcomes(
         failed=mypy_file_checks,  # patched to raise an Exception
         passed=mypy_status_check,  # conftest.py has no type errors.
     )
-    result.stdout.fnmatch_lines(['*' + message])
+    result.stdout.fnmatch_lines(["*" + message])
     assert result.ret != 0
 
 
 def test_mypy_stderr(testdir, xdist_args):
     """Verify that stderr from mypy is printed."""
-    stderr = 'This is stderr from mypy.'
-    testdir.makepyfile(conftest='''
-        import mypy.api
-
-        def _patched_run(*args, **kwargs):
-            return '', '{stderr}', 1
-
-        mypy.api.run = _patched_run
-    '''.format(stderr=stderr))
-    result = testdir.runpytest_subprocess('--mypy', *xdist_args)
+    stderr = "This is stderr from mypy."
+    testdir.makepyfile(
+        conftest="""
+            import mypy.api
+
+            def _patched_run(*args, **kwargs):
+                return '', '{stderr}', 1
+
+            mypy.api.run = _patched_run
+        """.format(
+            stderr=stderr,
+        ),
+    )
+    result = testdir.runpytest_subprocess("--mypy", *xdist_args)
     result.stdout.fnmatch_lines([stderr])
 
 
 def test_mypy_unmatched_stdout(testdir, xdist_args):
     """Verify that unexpected output on stdout from mypy is printed."""
-    stdout = 'This is unexpected output on stdout from mypy.'
-    testdir.makepyfile(conftest='''
-        import mypy.api
-
-        def _patched_run(*args, **kwargs):
-            return '{stdout}', '', 1
-
-        mypy.api.run = _patched_run
-    '''.format(stdout=stdout))
-    result = testdir.runpytest_subprocess('--mypy', *xdist_args)
+    stdout = "This is unexpected output on stdout from mypy."
+    testdir.makepyfile(
+        conftest="""
+            import mypy.api
+
+            def _patched_run(*args, **kwargs):
+                return '{stdout}', '', 1
+
+            mypy.api.run = _patched_run
+        """.format(
+            stdout=stdout,
+        ),
+    )
+    result = testdir.runpytest_subprocess("--mypy", *xdist_args)
     result.stdout.fnmatch_lines([stdout])
 
 
 def test_api_mypy_argv(testdir, xdist_args):
     """Ensure that the plugin can be configured in a conftest.py."""
-    testdir.makepyfile(conftest='''
-        def pytest_configure(config):
-            plugin = config.pluginmanager.getplugin('mypy')
-            plugin.mypy_argv.append('--version')
-    ''')
-    result = testdir.runpytest_subprocess('--mypy', *xdist_args)
+    testdir.makepyfile(
+        conftest="""
+            def pytest_configure(config):
+                plugin = config.pluginmanager.getplugin('mypy')
+                plugin.mypy_argv.append('--version')
+        """,
+    )
+    result = testdir.runpytest_subprocess("--mypy", *xdist_args)
     assert result.ret == 0
 
 
 def test_api_nodeid_name(testdir, xdist_args):
     """Ensure that the plugin can be configured in a conftest.py."""
-    nodeid_name = 'UnmistakableNodeIDName'
-    testdir.makepyfile(conftest='''
-        def pytest_configure(config):
-            plugin = config.pluginmanager.getplugin('mypy')
-            plugin.nodeid_name = '{}'
-    '''.format(nodeid_name))
-    result = testdir.runpytest_subprocess('--mypy', '--verbose', *xdist_args)
-    result.stdout.fnmatch_lines(['*conftest.py::' + nodeid_name + '*'])
+    nodeid_name = "UnmistakableNodeIDName"
+    testdir.makepyfile(
+        conftest="""
+            def pytest_configure(config):
+                plugin = config.pluginmanager.getplugin('mypy')
+                plugin.nodeid_name = '{}'
+        """.format(
+            nodeid_name,
+        ),
+    )
+    result = testdir.runpytest_subprocess("--mypy", "--verbose", *xdist_args)
+    result.stdout.fnmatch_lines(["*conftest.py::" + nodeid_name + "*"])
     assert result.ret == 0
 
 
-def test_mypy_indirect(testdir, xdist_args):
[email protected](
+    "module_name",
+    [
+        pytest.param(
+            "__init__",
+            marks=pytest.mark.xfail(
+                (3, 10) <= PYTEST_VERSION < (6, 2),
+                raises=AssertionError,
+                reason="https://github.com/pytest-dev/pytest/issues/8016";,
+            ),
+        ),
+        "good",
+    ],
+)
+def test_mypy_indirect(testdir, xdist_args, module_name):
     """Verify that uncollected files checked by mypy cause a failure."""
-    testdir.makepyfile(bad='''
-        def pyfunc(x: int) -> str:
-            return x * 2
-    ''')
-    testdir.makepyfile(good='''
-        import bad
-    ''')
-    result = testdir.runpytest_subprocess('--mypy', *xdist_args, 'good.py')
+    testdir.makepyfile(
+        bad="""
+            def pyfunc(x: int) -> str:
+                return x * 2
+        """,
+    )
+    pyfile = testdir.makepyfile(
+        **{
+            module_name: """
+                import bad
+            """,
+        },
+    )
+    result = testdir.runpytest_subprocess("--mypy", *xdist_args, str(pyfile))
+    mypy_file_checks = 1
+    mypy_status_check = 1
+    result.assert_outcomes(passed=mypy_file_checks, failed=mypy_status_check)
     assert result.ret != 0
 
 
 def test_api_error_formatter(testdir, xdist_args):
     """Ensure that the plugin can be configured in a conftest.py."""
-    testdir.makepyfile(bad='''
-        def pyfunc(x: int) -> str:
-            return x * 2
-    ''')
-    testdir.makepyfile(conftest='''
-        def custom_file_error_formatter(item, results, errors):
-            return '\\n'.join(
-                '{path}:{error}'.format(
-                    path=item.fspath,
-                    error=error,
+    testdir.makepyfile(
+        bad="""
+            def pyfunc(x: int) -> str:
+                return x * 2
+        """,
+    )
+    testdir.makepyfile(
+        conftest="""
+            def custom_file_error_formatter(item, results, errors):
+                return '\\n'.join(
+                    '{path}:{error}'.format(
+                        path=item.fspath,
+                        error=error,
+                    )
+                    for error in errors
                 )
-                for error in errors
-            )
 
-        def pytest_configure(config):
-            plugin = config.pluginmanager.getplugin('mypy')
-            plugin.file_error_formatter = custom_file_error_formatter
-    ''')
-    result = testdir.runpytest_subprocess('--mypy', *xdist_args)
-    result.stdout.fnmatch_lines([
-        '*/bad.py:2: error: Incompatible return value*',
-    ])
+            def pytest_configure(config):
+                plugin = config.pluginmanager.getplugin('mypy')
+                plugin.file_error_formatter = custom_file_error_formatter
+        """,
+    )
+    result = testdir.runpytest_subprocess("--mypy", *xdist_args)
+    result.stdout.fnmatch_lines(["*/bad.py:2: error: Incompatible return 
value*"])
     assert result.ret != 0
 
 
 def test_setup_cfg(testdir, xdist_args):
     """Ensure that the plugin allows configuration with setup.cfg."""
-    testdir.makefile('.cfg', setup='''
-        [mypy]
-        disallow_untyped_defs = True
-    ''')
-    testdir.makepyfile(conftest='''
-        def pyfunc(x):
-            return x * 2
-    ''')
-    result = testdir.runpytest_subprocess('--mypy', *xdist_args)
-    result.stdout.fnmatch_lines([
-        '1: error: Function is missing a type annotation',
-    ])
+    testdir.makefile(
+        ".cfg",
+        setup="""
+            [mypy]
+            disallow_untyped_defs = True
+        """,
+    )
+    testdir.makepyfile(
+        conftest="""
+            def pyfunc(x):
+                return x * 2
+        """,
+    )
+    result = testdir.runpytest_subprocess("--mypy", *xdist_args)
+    result.stdout.fnmatch_lines(["1: error: Function is missing a type 
annotation"])
     assert result.ret != 0
 
 
-def test_looponfail(testdir):
[email protected]("module_name", ["__init__", "test_demo"])
+def test_looponfail(testdir, module_name):
     """Ensure that the plugin works with --looponfail."""
 
     pass_source = textwrap.dedent(
@@ -289,7 +348,7 @@
             return x * 2
         """,
     )
-    pyfile = testdir.makepyfile(fail_source)
+    pyfile = testdir.makepyfile(**{module_name: fail_source})
     looponfailroot = testdir.mkdir("looponfailroot")
     looponfailroot_pyfile = looponfailroot.join(pyfile.basename)
     pyfile.move(looponfailroot_pyfile)
@@ -310,6 +369,14 @@
         expect_timeout=30.0,
     )
 
+    num_tests = 2
+    if module_name == "__init__" and (3, 10) <= PYTEST_VERSION < (6, 2):
+        # https://github.com/pytest-dev/pytest/issues/8016
+        # Pytest had a bug where it assumed only a Package would have a 
basename of
+        # __init__.py. In this test, Pytest mistakes MypyFile for a Package and
+        # returns after collecting only one object (the MypyFileItem).
+        num_tests = 1
+
     def _expect_session():
         child.expect("==== test session starts ====")
 
@@ -318,10 +385,11 @@
         child.expect("==== FAILURES ====")
         child.expect(pyfile.basename + " ____")
         child.expect("2: error: Incompatible return value")
-        # These only show with mypy>=0.730:
-        # child.expect("==== mypy ====")
-        # child.expect("Found 1 error in 1 file (checked 1 source file)")
-        child.expect("2 failed")
+        # if num_tests == 2:
+        #     # These only show with mypy>=0.730:
+        #     child.expect("==== mypy ====")
+        #     child.expect("Found 1 error in 1 file (checked 1 source file)")
+        child.expect(str(num_tests) + " failed")
         child.expect("#### LOOPONFAILING ####")
         _expect_waiting()
 
@@ -340,10 +408,27 @@
     def _expect_success():
         for _ in range(2):
             _expect_session()
-            # These only show with mypy>=0.730:
-            # child.expect("==== mypy ====")
-            # child.expect("Success: no issues found in 1 source file")
-            child.expect("2 passed")
+            # if num_tests == 2:
+            #     # These only show with mypy>=0.730:
+            #     child.expect("==== mypy ====")
+            #     child.expect("Success: no issues found in 1 source file")
+            try:
+                child.expect(str(num_tests) + " passed")
+            except pexpect.exceptions.TIMEOUT:
+                if module_name == "__init__" and (6, 0) <= PYTEST_VERSION < 
(6, 2):
+                    # MypyItems hit the __init__.py bug too when --looponfail
+                    # re-collects them after the failing file is modified.
+                    # Unlike MypyFile, MypyItem is not a Collector, so this 
used
+                    # to cause an AttributeError until a workaround was added
+                    # (MypyItem.collect was defined to yield itself).
+                    # Mypy probably noticed the __init__.py problem during the
+                    # development of Pytest 6.0, but the error was addressed
+                    # with an isinstance assertion, which broke the workaround.
+                    # Here, we hit that assertion:
+                    child.expect("AssertionError")
+                    child.expect("1 error")
+                    
pytest.xfail("https://github.com/pytest-dev/pytest/issues/8016";)
+                raise
         _expect_waiting()
 
     def _break():
@@ -356,3 +441,27 @@
     _break()
     _fix()
     child.kill(signal.SIGTERM)
+
+
+def test_mypy_item_collect(testdir, xdist_args):
+    """Ensure coverage for a 3.10<=pytest<6.0 workaround."""
+    testdir.makepyfile(
+        """
+        def test_mypy_item_collect(request):
+            plugin = request.config.pluginmanager.getplugin("mypy")
+            mypy_items = [
+                item
+                for item in request.session.items
+                if isinstance(item, plugin.MypyItem)
+            ]
+            assert mypy_items
+            for mypy_item in mypy_items:
+                assert all(item is mypy_item for item in mypy_item.collect())
+        """,
+    )
+    result = testdir.runpytest_subprocess("--mypy", *xdist_args)
+    test_count = 1
+    mypy_file_checks = 1
+    mypy_status_check = 1
+    result.assert_outcomes(passed=test_count + mypy_file_checks + 
mypy_status_check)
+    assert result.ret == 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest-mypy-0.8.0/tox.ini 
new/pytest-mypy-0.8.1/tox.ini
--- old/pytest-mypy-0.8.0/tox.ini       2020-11-14 02:35:50.000000000 +0100
+++ new/pytest-mypy-0.8.1/tox.ini       2021-03-21 16:50:11.000000000 +0100
@@ -3,21 +3,21 @@
 minversion = 3.20
 isolated_build = true
 envlist =
-    py35-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.50, 0.5x, 0.60, 
0.6x, 0.70, 0.7x}
-    py36-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.50, 0.5x, 0.60, 
0.6x, 0.70, 0.7x}
-    py37-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.50, 0.5x, 0.60, 
0.6x, 0.70, 0.7x}
-    py38-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.71, 0.7x}
-    py39-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.78, 0.7x}
+    py35-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.50, 0.5x, 0.60, 
0.6x, 0.70, 0.7x, 0.80, 0.8x}
+    py36-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.50, 0.5x, 0.60, 
0.6x, 0.70, 0.7x, 0.80, 0.8x}
+    py37-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.50, 0.5x, 0.60, 
0.6x, 0.70, 0.7x, 0.80, 0.8x}
+    py38-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.71, 0.7x, 0.80, 
0.8x}
+    py39-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.78, 0.7x, 0.80, 
0.8x}
     publish
     static
 
 [gh-actions]
 python =
-    3.5: py35-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.50, 0.5x, 
0.60, 0.6x, 0.70, 0.7x}
-    3.6: py36-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.50, 0.5x, 
0.60, 0.6x, 0.70, 0.7x}
-    3.7: py37-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.50, 0.5x, 
0.60, 0.6x, 0.70, 0.7x}
-    3.8: py38-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.71, 0.7x}, 
publish, static
-    3.9: py39-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.78, 0.7x}
+    3.5: py35-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.50, 0.5x, 
0.60, 0.6x, 0.70, 0.7x, 0.80, 0.8x}
+    3.6: py36-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.50, 0.5x, 
0.60, 0.6x, 0.70, 0.7x, 0.80, 0.8x}
+    3.7: py37-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.50, 0.5x, 
0.60, 0.6x, 0.70, 0.7x, 0.80, 0.8x}
+    3.8: py38-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.71, 0.7x, 
0.80, 0.8x}, publish, static
+    3.9: py39-pytest{3.5, 3.x, 4.0, 4.x, 5.0, 5.x, 6.0, 6.x}-mypy{0.78, 0.7x, 
0.80, 0.8x}
 
 [testenv]
 deps =
@@ -131,26 +131,39 @@
     mypy0.78: mypy >= 0.780, < 0.790
     mypy0.79: mypy >= 0.790, < 0.800
     mypy0.7x: mypy >= 0.700, < 0.800
+    mypy0.80: mypy >= 0.800, < 0.810
+    mypy0.81: mypy >= 0.810, < 0.820
+    mypy0.8x: mypy >= 0.800, < 0.900
 
     pexpect ~= 4.8.0
 
-commands = py.test -p no:mypy --cov pytest_mypy --cov-fail-under 100 
--cov-report term-missing {posargs:-n auto} tests
+commands = py.test -p no:mypy {posargs:--cov pytest_mypy --cov-fail-under 100 
--cov-report term-missing -n auto}
+
+[pytest]
+testpaths = tests
 
 [testenv:publish]
 passenv = TWINE_*
 deps =
-    pep517 ~= 0.8.0
-    twine ~= 3.2.0
+    build ~= 0.3.0
+    twine ~= 3.3.0
 commands =
-    {envpython} -m pep517.build --out-dir {distdir} .
+    {envpython} -m build --outdir {distdir} .
     twine {posargs:check} {distdir}/*
 
 [testenv:static]
 deps =
-    bandit ~= 1.6.2
+    bandit ~= 1.7.0
+    black ~= 20.8b
     flake8 ~= 3.8.3
-    mypy >= 0.790, < 0.800
+    flake8-commas ~= 2.0.0
+    mypy >= 0.810, < 0.820
 commands =
-    bandit --recursive src
-    flake8 setup.py src tests
-    mypy src
+    black --check src setup.py tests
+    flake8 src setup.py tests
+    mypy src setup.py
+    bandit --recursive src setup.py
+
+[flake8]
+max-line-length = 88
+extend-ignore = E203

Reply via email to