summaryrefslogtreecommitdiff
path: root/src/_pytest/debugging.py
diff options
context:
space:
mode:
authorDaniel Hahler <git@thequod.de>2019-04-03 21:37:27 +0200
committerDaniel Hahler <git@thequod.de>2019-04-03 22:35:18 +0200
commit757ada2fd2d0f9c5e6026f8ab2ef3c1415e1ade8 (patch)
tree1102630dbf158602338e1158c46f884c9b3d8051 /src/_pytest/debugging.py
parent46df1d5fcf12d3273ad5db353c68e1310916fa5f (diff)
downloadpytest-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.py40
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"):