Revert "Revert "Fix type errors after adding types to the `py` dependency""

Without changes to test_itemreport_reportinfo.

This reverts commit fb99b5c66e.

Conflicts:
	testing/test_nose.py
This commit is contained in:
Daniel Hahler 2020-01-21 12:29:22 +01:00
parent 8fa57c8384
commit ef112fd7dd
6 changed files with 22 additions and 15 deletions

View File

@ -82,8 +82,8 @@ class Parser:
self.optparser = self._getparser() self.optparser = self._getparser()
try_argcomplete(self.optparser) try_argcomplete(self.optparser)
args = [str(x) if isinstance(x, py.path.local) else x for x in args] strargs = [str(x) if isinstance(x, py.path.local) else x for x in args]
return self.optparser.parse_args(args, namespace=namespace) return self.optparser.parse_args(strargs, namespace=namespace)
def _getparser(self) -> "MyOptionParser": def _getparser(self) -> "MyOptionParser":
from _pytest._argcomplete import filescompleter from _pytest._argcomplete import filescompleter
@ -124,8 +124,8 @@ class Parser:
the remaining arguments unknown at this point. the remaining arguments unknown at this point.
""" """
optparser = self._getparser() optparser = self._getparser()
args = [str(x) if isinstance(x, py.path.local) else x for x in args] strargs = [str(x) if isinstance(x, py.path.local) else x for x in args]
return optparser.parse_known_args(args, namespace=namespace) return optparser.parse_known_args(strargs, namespace=namespace)
def addini(self, name, help, type=None, default=None): def addini(self, name, help, type=None, default=None):
""" register an ini-file option. """ register an ini-file option.

View File

@ -1,6 +1,9 @@
import os import os
from typing import Any
from typing import Iterable
from typing import List from typing import List
from typing import Optional from typing import Optional
from typing import Tuple
import py import py
@ -60,7 +63,7 @@ def getcfg(args, config=None):
return None, None, None return None, None, None
def get_common_ancestor(paths): def get_common_ancestor(paths: Iterable[py.path.local]) -> py.path.local:
common_ancestor = None common_ancestor = None
for path in paths: for path in paths:
if not path.exists(): if not path.exists():
@ -113,7 +116,7 @@ def determine_setup(
args: List[str], args: List[str],
rootdir_cmd_arg: Optional[str] = None, rootdir_cmd_arg: Optional[str] = None,
config: Optional["Config"] = None, config: Optional["Config"] = None,
): ) -> Tuple[py.path.local, Optional[str], Any]:
dirs = get_dirs_from_args(args) dirs = get_dirs_from_args(args)
if inifile: if inifile:
iniconfig = py.iniconfig.IniConfig(inifile) iniconfig = py.iniconfig.IniConfig(inifile)

View File

@ -308,7 +308,7 @@ class DoctestItem(pytest.Item):
else: else:
return super().repr_failure(excinfo) return super().repr_failure(excinfo)
def reportinfo(self) -> Tuple[str, int, str]: def reportinfo(self) -> Tuple[py.path.local, int, str]:
return self.fspath, self.dtest.lineno, "[doctest] %s" % self.name return self.fspath, self.dtest.lineno, "[doctest] %s" % self.name

View File

@ -351,7 +351,7 @@ class FixtureRequest:
self.fixturename = None self.fixturename = None
#: Scope string, one of "function", "class", "module", "session" #: Scope string, one of "function", "class", "module", "session"
self.scope = "function" self.scope = "function"
self._fixture_defs = {} # argname -> FixtureDef self._fixture_defs = {} # type: Dict[str, FixtureDef]
fixtureinfo = pyfuncitem._fixtureinfo fixtureinfo = pyfuncitem._fixtureinfo
self._arg2fixturedefs = fixtureinfo.name2fixturedefs.copy() self._arg2fixturedefs = fixtureinfo.name2fixturedefs.copy()
self._arg2index = {} self._arg2index = {}
@ -426,7 +426,8 @@ class FixtureRequest:
@scopeproperty() @scopeproperty()
def fspath(self) -> py.path.local: def fspath(self) -> py.path.local:
""" the file system path of the test module which collected this test. """ """ the file system path of the test module which collected this test. """
return self._pyfuncitem.fspath # TODO: Remove ignore once _pyfuncitem is properly typed.
return self._pyfuncitem.fspath # type: ignore
@property @property
def keywords(self): def keywords(self):
@ -549,7 +550,9 @@ class FixtureRequest:
source_lineno = frameinfo.lineno source_lineno = frameinfo.lineno
source_path = py.path.local(source_path) source_path = py.path.local(source_path)
if source_path.relto(funcitem.config.rootdir): if source_path.relto(funcitem.config.rootdir):
source_path = source_path.relto(funcitem.config.rootdir) source_path_str = source_path.relto(funcitem.config.rootdir)
else:
source_path_str = str(source_path)
msg = ( msg = (
"The requested fixture has no parameter defined for test:\n" "The requested fixture has no parameter defined for test:\n"
" {}\n\n" " {}\n\n"
@ -558,7 +561,7 @@ class FixtureRequest:
funcitem.nodeid, funcitem.nodeid,
fixturedef.argname, fixturedef.argname,
getlocation(fixturedef.func, funcitem.config.rootdir), getlocation(fixturedef.func, funcitem.config.rootdir),
source_path, source_path_str,
source_lineno, source_lineno,
) )
) )

View File

@ -376,9 +376,9 @@ class Failed(Exception):
@attr.s @attr.s
class _bestrelpath_cache(dict): class _bestrelpath_cache(dict):
path = attr.ib() path = attr.ib(type=py.path.local)
def __missing__(self, path: str) -> str: def __missing__(self, path: py.path.local) -> str:
r = self.path.bestrelpath(path) # type: str r = self.path.bestrelpath(path) # type: str
self[path] = r self[path] = r
return r return r
@ -412,7 +412,7 @@ class Session(nodes.FSCollector):
self._bestrelpathcache = _bestrelpath_cache( self._bestrelpathcache = _bestrelpath_cache(
config.rootdir config.rootdir
) # type: Dict[str, str] ) # type: Dict[py.path.local, str]
self.config.pluginmanager.register(self, name="session") self.config.pluginmanager.register(self, name="session")
@ -425,7 +425,7 @@ class Session(nodes.FSCollector):
self.testscollected, self.testscollected,
) )
def _node_location_to_relpath(self, node_path: str) -> str: def _node_location_to_relpath(self, node_path: py.path.local) -> str:
# bestrelpath is a quite slow function # bestrelpath is a quite slow function
return self._bestrelpathcache[node_path] return self._bestrelpathcache[node_path]

View File

@ -462,6 +462,7 @@ class Item(Node):
@cached_property @cached_property
def location(self) -> Tuple[str, Optional[int], str]: def location(self) -> Tuple[str, Optional[int], str]:
location = self.reportinfo() location = self.reportinfo()
assert isinstance(location[0], py.path.local), location[0]
fspath = self.session._node_location_to_relpath(location[0]) fspath = self.session._node_location_to_relpath(location[0])
assert type(location[2]) is str assert type(location[2]) is str
return (fspath, location[1], location[2]) return (fspath, location[1], location[2])