summaryrefslogtreecommitdiff
path: root/lib/spack/external/_pytest/debugging.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/spack/external/_pytest/debugging.py')
-rw-r--r--lib/spack/external/_pytest/debugging.py41
1 files changed, 20 insertions, 21 deletions
diff --git a/lib/spack/external/_pytest/debugging.py b/lib/spack/external/_pytest/debugging.py
index d96170bd8b..aa9c9a3863 100644
--- a/lib/spack/external/_pytest/debugging.py
+++ b/lib/spack/external/_pytest/debugging.py
@@ -1,10 +1,8 @@
""" interactive debugging with PDB, the Python Debugger. """
-from __future__ import absolute_import
+from __future__ import absolute_import, division, print_function
import pdb
import sys
-import pytest
-
def pytest_addoption(parser):
group = parser.getgroup("general")
@@ -16,19 +14,17 @@ def pytest_addoption(parser):
help="start a custom interactive Python debugger on errors. "
"For example: --pdbcls=IPython.terminal.debugger:TerminalPdb")
-def pytest_namespace():
- return {'set_trace': pytestPDB().set_trace}
def pytest_configure(config):
- if config.getvalue("usepdb") or config.getvalue("usepdb_cls"):
+ if config.getvalue("usepdb_cls"):
+ modname, classname = config.getvalue("usepdb_cls").split(":")
+ __import__(modname)
+ pdb_cls = getattr(sys.modules[modname], classname)
+ else:
+ pdb_cls = pdb.Pdb
+
+ if config.getvalue("usepdb"):
config.pluginmanager.register(PdbInvoke(), 'pdbinvoke')
- if config.getvalue("usepdb_cls"):
- modname, classname = config.getvalue("usepdb_cls").split(":")
- __import__(modname)
- pdb_cls = getattr(sys.modules[modname], classname)
- else:
- pdb_cls = pdb.Pdb
- pytestPDB._pdb_cls = pdb_cls
old = (pdb.set_trace, pytestPDB._pluginmanager)
@@ -37,30 +33,33 @@ def pytest_configure(config):
pytestPDB._config = None
pytestPDB._pdb_cls = pdb.Pdb
- pdb.set_trace = pytest.set_trace
+ pdb.set_trace = pytestPDB.set_trace
pytestPDB._pluginmanager = config.pluginmanager
pytestPDB._config = config
+ pytestPDB._pdb_cls = pdb_cls
config._cleanup.append(fin)
+
class pytestPDB:
""" Pseudo PDB that defers to the real pdb. """
_pluginmanager = None
_config = None
_pdb_cls = pdb.Pdb
- def set_trace(self):
+ @classmethod
+ def set_trace(cls):
""" invoke PDB set_trace debugging, dropping any IO capturing. """
import _pytest.config
frame = sys._getframe().f_back
- if self._pluginmanager is not None:
- capman = self._pluginmanager.getplugin("capturemanager")
+ if cls._pluginmanager is not None:
+ capman = cls._pluginmanager.getplugin("capturemanager")
if capman:
capman.suspendcapture(in_=True)
- tw = _pytest.config.create_terminal_writer(self._config)
+ tw = _pytest.config.create_terminal_writer(cls._config)
tw.line()
tw.sep(">", "PDB set_trace (IO-capturing turned off)")
- self._pluginmanager.hook.pytest_enter_pdb(config=self._config)
- self._pdb_cls().set_trace(frame)
+ cls._pluginmanager.hook.pytest_enter_pdb(config=cls._config)
+ cls._pdb_cls().set_trace(frame)
class PdbInvoke:
@@ -74,7 +73,7 @@ class PdbInvoke:
def pytest_internalerror(self, excrepr, excinfo):
for line in str(excrepr).split("\n"):
- sys.stderr.write("INTERNALERROR> %s\n" %line)
+ sys.stderr.write("INTERNALERROR> %s\n" % line)
sys.stderr.flush()
tb = _postmortem_traceback(excinfo)
post_mortem(tb)