diff options
author | Daniel Hahler <git@thequod.de> | 2019-04-03 21:37:27 +0200 |
---|---|---|
committer | Daniel Hahler <git@thequod.de> | 2019-04-03 22:35:18 +0200 |
commit | 757ada2fd2d0f9c5e6026f8ab2ef3c1415e1ade8 (patch) | |
tree | 1102630dbf158602338e1158c46f884c9b3d8051 /src/_pytest/debugging.py | |
parent | 46df1d5fcf12d3273ad5db353c68e1310916fa5f (diff) | |
download | pytest-757ada2fd2d0f9c5e6026f8ab2ef3c1415e1ade8.tar.gz |
pdb: try to import --pdbcls in pytest_configure only
Fixes https://github.com/pytest-dev/pytest/issues/5039.
Diffstat (limited to 'src/_pytest/debugging.py')
-rw-r--r-- | src/_pytest/debugging.py | 40 |
1 files changed, 23 insertions, 17 deletions
diff --git a/src/_pytest/debugging.py b/src/_pytest/debugging.py index cb1c964c3..3bfd5465f 100644 --- a/src/_pytest/debugging.py +++ b/src/_pytest/debugging.py @@ -10,31 +10,18 @@ from doctest import UnexpectedException from _pytest import outcomes from _pytest.config import hookimpl +from _pytest.config.exceptions import UsageError def _validate_usepdb_cls(value): + """Validate syntax of --pdbcls option.""" try: modname, classname = value.split(":") except ValueError: raise argparse.ArgumentTypeError( "{!r} is not in the format 'modname:classname'".format(value) ) - - try: - __import__(modname) - mod = sys.modules[modname] - - # Handle --pdbcls=pdb:pdb.Pdb (useful e.g. with pdbpp). - parts = classname.split(".") - pdb_cls = getattr(mod, parts[0]) - for part in parts[1:]: - pdb_cls = getattr(pdb_cls, part) - - return pdb_cls - except Exception as exc: - raise argparse.ArgumentTypeError( - "could not get pdb class for {!r}: {}".format(value, exc) - ) + return (modname, classname) def pytest_addoption(parser): @@ -61,9 +48,28 @@ def pytest_addoption(parser): ) +def _import_pdbcls(modname, classname): + try: + __import__(modname) + mod = sys.modules[modname] + + # Handle --pdbcls=pdb:pdb.Pdb (useful e.g. with pdbpp). + parts = classname.split(".") + pdb_cls = getattr(mod, parts[0]) + for part in parts[1:]: + pdb_cls = getattr(pdb_cls, part) + + return pdb_cls + except Exception as exc: + value = ":".join((modname, classname)) + raise UsageError("--pdbcls: could not import {!r}: {}".format(value, exc)) + + def pytest_configure(config): pdb_cls = config.getvalue("usepdb_cls") - if not pdb_cls: + if pdb_cls: + pdb_cls = _import_pdbcls(*pdb_cls) + else: pdb_cls = pdb.Pdb if config.getvalue("trace"): |