Merge pull request #7907 from bluetech/mypy-790

Update mypy 0.782 -> 0.790, iniconfig typing
This commit is contained in:
Ran Benita 2020-10-19 00:28:04 +03:00 committed by GitHub
commit f61d4ed9d5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 28 additions and 30 deletions

View File

@ -49,11 +49,13 @@ repos:
hooks: hooks:
- id: python-use-type-annotations - id: python-use-type-annotations
- repo: https://github.com/pre-commit/mirrors-mypy - repo: https://github.com/pre-commit/mirrors-mypy
rev: v0.782 # NOTE: keep this in sync with setup.cfg. rev: v0.790 # NOTE: keep this in sync with setup.cfg.
hooks: hooks:
- id: mypy - id: mypy
files: ^(src/|testing/) files: ^(src/|testing/)
args: [] args: []
additional_dependencies:
- iniconfig>=1.1.0
- repo: local - repo: local
hooks: hooks:
- id: rst - id: rst

View File

@ -63,7 +63,7 @@ console_scripts =
[options.extras_require] [options.extras_require]
checkqa-mypy = checkqa-mypy =
mypy==0.780 mypy==0.790
testing = testing =
argcomplete argcomplete
hypothesis>=3.56 hypothesis>=3.56

View File

@ -382,7 +382,7 @@ class NFPlugin:
self.cached_nodeids.update(item.nodeid for item in items) self.cached_nodeids.update(item.nodeid for item in items)
def _get_increasing_order(self, items: Iterable[nodes.Item]) -> List[nodes.Item]: def _get_increasing_order(self, items: Iterable[nodes.Item]) -> List[nodes.Item]:
return sorted(items, key=lambda item: item.fspath.mtime(), reverse=True) return sorted(items, key=lambda item: item.fspath.mtime(), reverse=True) # type: ignore[no-any-return]
def pytest_sessionfinish(self) -> None: def pytest_sessionfinish(self) -> None:
config = self.config config = self.config

View File

@ -380,8 +380,7 @@ class FDCaptureBinary:
self.syscapture = SysCapture(targetfd) self.syscapture = SysCapture(targetfd)
else: else:
self.tmpfile = EncodedFile( self.tmpfile = EncodedFile(
# TODO: Remove type ignore, fixed in next mypy release. TemporaryFile(buffering=0),
TemporaryFile(buffering=0), # type: ignore[arg-type]
encoding="utf-8", encoding="utf-8",
errors="replace", errors="replace",
newline="", newline="",

View File

@ -150,9 +150,8 @@ def getfuncargnames(
p.name p.name
for p in parameters.values() for p in parameters.values()
if ( if (
# TODO: Remove type ignore after https://github.com/python/typeshed/pull/4383 p.kind is Parameter.POSITIONAL_OR_KEYWORD
p.kind is Parameter.POSITIONAL_OR_KEYWORD # type: ignore[unreachable] or p.kind is Parameter.KEYWORD_ONLY
or p.kind is Parameter.KEYWORD_ONLY # type: ignore[unreachable]
) )
and p.default is Parameter.empty and p.default is Parameter.empty
) )

View File

@ -27,7 +27,7 @@ def _parse_ini_config(path: Path) -> iniconfig.IniConfig:
Raise UsageError if the file cannot be parsed. Raise UsageError if the file cannot be parsed.
""" """
try: try:
return iniconfig.IniConfig(path) return iniconfig.IniConfig(str(path))
except iniconfig.ParseError as exc: except iniconfig.ParseError as exc:
raise UsageError(str(exc)) from exc raise UsageError(str(exc)) from exc

View File

@ -32,6 +32,7 @@ from weakref import WeakKeyDictionary
import attr import attr
import py import py
from iniconfig import IniConfig from iniconfig import IniConfig
from iniconfig import SectionWrapper
import pytest import pytest
from _pytest import timing from _pytest import timing
@ -785,10 +786,10 @@ class Pytester:
"""Write a tox.ini file with 'source' as contents.""" """Write a tox.ini file with 'source' as contents."""
return self.makefile(".ini", tox=source) return self.makefile(".ini", tox=source)
def getinicfg(self, source: str) -> IniConfig: def getinicfg(self, source: str) -> SectionWrapper:
"""Return the pytest section from the tox.ini config file.""" """Return the pytest section from the tox.ini config file."""
p = self.makeini(source) p = self.makeini(source)
return IniConfig(p)["pytest"] return IniConfig(str(p))["pytest"]
def makepyprojecttoml(self, source: str) -> Path: def makepyprojecttoml(self, source: str) -> Path:
"""Write a pyproject.toml file with 'source' as contents. """Write a pyproject.toml file with 'source' as contents.
@ -1321,8 +1322,10 @@ class Pytester:
""" """
__tracebackhide__ = True __tracebackhide__ = True
# TODO: Remove type ignore in next mypy release.
# https://github.com/python/typeshed/pull/4582
cmdargs = tuple( cmdargs = tuple(
os.fspath(arg) if isinstance(arg, os.PathLike) else arg for arg in cmdargs os.fspath(arg) if isinstance(arg, os.PathLike) else arg for arg in cmdargs # type: ignore[misc]
) )
p1 = self.path.joinpath("stdout") p1 = self.path.joinpath("stdout")
p2 = self.path.joinpath("stderr") p2 = self.path.joinpath("stderr")
@ -1541,9 +1544,9 @@ class Testdir:
"""See :meth:`Pytester.makeini`.""" """See :meth:`Pytester.makeini`."""
return py.path.local(str(self._pytester.makeini(source))) return py.path.local(str(self._pytester.makeini(source)))
def getinicfg(self, source) -> py.path.local: def getinicfg(self, source: str) -> SectionWrapper:
"""See :meth:`Pytester.getinicfg`.""" """See :meth:`Pytester.getinicfg`."""
return py.path.local(str(self._pytester.getinicfg(source))) return self._pytester.getinicfg(source)
def makepyprojecttoml(self, source) -> py.path.local: def makepyprojecttoml(self, source) -> py.path.local:
"""See :meth:`Pytester.makepyprojecttoml`.""" """See :meth:`Pytester.makepyprojecttoml`."""

View File

@ -210,7 +210,7 @@ class ApproxScalar(ApproxBase):
# tolerances, i.e. non-numerics and infinities. Need to call abs to # tolerances, i.e. non-numerics and infinities. Need to call abs to
# handle complex numbers, e.g. (inf + 1j). # handle complex numbers, e.g. (inf + 1j).
if (not isinstance(self.expected, (Complex, Decimal))) or math.isinf( if (not isinstance(self.expected, (Complex, Decimal))) or math.isinf(
abs(self.expected) abs(self.expected) # type: ignore[arg-type]
): ):
return str(self.expected) return str(self.expected)
@ -253,8 +253,8 @@ class ApproxScalar(ApproxBase):
# Allow the user to control whether NaNs are considered equal to each # Allow the user to control whether NaNs are considered equal to each
# other or not. The abs() calls are for compatibility with complex # other or not. The abs() calls are for compatibility with complex
# numbers. # numbers.
if math.isnan(abs(self.expected)): if math.isnan(abs(self.expected)): # type: ignore[arg-type]
return self.nan_ok and math.isnan(abs(actual)) return self.nan_ok and math.isnan(abs(actual)) # type: ignore[arg-type]
# Infinity shouldn't be approximately equal to anything but itself, but # Infinity shouldn't be approximately equal to anything but itself, but
# if there's a relative tolerance, it will be infinite and infinity # if there's a relative tolerance, it will be infinite and infinity
@ -262,7 +262,7 @@ class ApproxScalar(ApproxBase):
# case would have been short circuited above, so here we can just # case would have been short circuited above, so here we can just
# return false if the expected value is infinite. The abs() call is # return false if the expected value is infinite. The abs() call is
# for compatibility with complex numbers. # for compatibility with complex numbers.
if math.isinf(abs(self.expected)): if math.isinf(abs(self.expected)): # type: ignore[arg-type]
return False return False
# Return true if the two numbers are within the tolerance. # Return true if the two numbers are within the tolerance.

View File

@ -77,8 +77,7 @@ def pytest_terminal_summary(terminalreporter: "TerminalReporter") -> None:
dlist.append(rep) dlist.append(rep)
if not dlist: if not dlist:
return return
dlist.sort(key=lambda x: x.duration) dlist.sort(key=lambda x: x.duration, reverse=True) # type: ignore[no-any-return]
dlist.reverse()
if not durations: if not durations:
tr.write_sep("=", "slowest durations") tr.write_sep("=", "slowest durations")
else: else:

View File

@ -1595,7 +1595,7 @@ class TestPyCacheDir:
if prefix: if prefix:
if sys.version_info < (3, 8): if sys.version_info < (3, 8):
pytest.skip("pycache_prefix not available in py<38") pytest.skip("pycache_prefix not available in py<38")
monkeypatch.setattr(sys, "pycache_prefix", prefix) # type:ignore monkeypatch.setattr(sys, "pycache_prefix", prefix)
assert get_cache_dir(Path(source)) == Path(expected) assert get_cache_dir(Path(source)) == Path(expected)

View File

@ -1606,7 +1606,7 @@ def test_stderr_write_returns_len(capsys):
def test_encodedfile_writelines(tmpfile: BinaryIO) -> None: def test_encodedfile_writelines(tmpfile: BinaryIO) -> None:
ef = capture.EncodedFile(tmpfile, encoding="utf-8") ef = capture.EncodedFile(tmpfile, encoding="utf-8")
with pytest.raises(TypeError): with pytest.raises(TypeError):
ef.writelines([b"line1", b"line2"]) ef.writelines([b"line1", b"line2"]) # type: ignore[list-item]
assert ef.writelines(["line3", "line4"]) is None # type: ignore[func-returns-value] assert ef.writelines(["line3", "line4"]) is None # type: ignore[func-returns-value]
ef.flush() ef.flush()
tmpfile.seek(0) tmpfile.seek(0)

View File

@ -886,14 +886,9 @@ class TestPDB:
class TestDebuggingBreakpoints: class TestDebuggingBreakpoints:
def test_supports_breakpoint_module_global(self): def test_supports_breakpoint_module_global(self):
""" """Test that supports breakpoint global marks on Python 3.7+."""
Test that supports breakpoint global marks on Python 3.7+ and not on
CPython 3.5, 2.7
"""
if sys.version_info >= (3, 7): if sys.version_info >= (3, 7):
assert SUPPORTS_BREAKPOINT_BUILTIN is True assert SUPPORTS_BREAKPOINT_BUILTIN is True
if sys.version_info.major == 3 and sys.version_info.minor == 5:
assert SUPPORTS_BREAKPOINT_BUILTIN is False # type: ignore[comparison-overlap]
@pytest.mark.skipif( @pytest.mark.skipif(
not SUPPORTS_BREAKPOINT_BUILTIN, reason="Requires breakpoint() builtin" not SUPPORTS_BREAKPOINT_BUILTIN, reason="Requires breakpoint() builtin"

View File

@ -1049,7 +1049,7 @@ class TestLiterals:
("1e3", "999"), ("1e3", "999"),
# The current implementation doesn't understand that numbers inside # The current implementation doesn't understand that numbers inside
# strings shouldn't be treated as numbers: # strings shouldn't be treated as numbers:
pytest.param("'3.1416'", "'3.14'", marks=pytest.mark.xfail), # type: ignore pytest.param("'3.1416'", "'3.14'", marks=pytest.mark.xfail),
], ],
) )
def test_number_non_matches(self, pytester, expression, output): def test_number_non_matches(self, pytester, expression, output):

View File

@ -1,3 +1,4 @@
import io
from typing import List from typing import List
from typing import Union from typing import Union
@ -95,7 +96,7 @@ class TestPaste:
def mocked(url, data): def mocked(url, data):
calls.append((url, data)) calls.append((url, data))
raise urllib.error.HTTPError(url, 400, "Bad request", None, None) raise urllib.error.HTTPError(url, 400, "Bad request", {}, io.BytesIO())
monkeypatch.setattr(urllib.request, "urlopen", mocked) monkeypatch.setattr(urllib.request, "urlopen", mocked)
return calls return calls