summaryrefslogtreecommitdiff
path: root/_pytest/pastebin.py
diff options
context:
space:
mode:
authorholger krekel <holger@merlinux.eu>2010-11-13 11:10:45 +0100
committerholger krekel <holger@merlinux.eu>2010-11-13 11:10:45 +0100
commit929291775e38b32da89767e7016aa5736fa0ec69 (patch)
treec66ad0c2ec569d4c3cd5d8e8baa26a180d37dcfd /_pytest/pastebin.py
parent2e4e9eb7457622a498412301698d829329a01da9 (diff)
downloadpytest-929291775e38b32da89767e7016aa5736fa0ec69.tar.gz
flat is better than nested (cont'd):
- pytest.py is new module, making "python -m pytest" work always - _pytest/*.py now contains core.py, hookspec and the plugins, no sub packages
Diffstat (limited to '_pytest/pastebin.py')
-rw-r--r--_pytest/pastebin.py63
1 files changed, 63 insertions, 0 deletions
diff --git a/_pytest/pastebin.py b/_pytest/pastebin.py
new file mode 100644
index 000000000..52d7a65e6
--- /dev/null
+++ b/_pytest/pastebin.py
@@ -0,0 +1,63 @@
+""" submit failure or test session information to a pastebin service. """
+import py, sys
+
+class url:
+ base = "http://paste.pocoo.org"
+ xmlrpc = base + "/xmlrpc/"
+ show = base + "/show/"
+
+def pytest_addoption(parser):
+ group = parser.getgroup("terminal reporting")
+ group._addoption('--pastebin', metavar="mode",
+ action='store', dest="pastebin", default=None,
+ type="choice", choices=['failed', 'all'],
+ help="send failed|all info to Pocoo pastebin service.")
+
+def pytest_configure(__multicall__, config):
+ import tempfile
+ __multicall__.execute()
+ if config.option.pastebin == "all":
+ config._pastebinfile = tempfile.TemporaryFile('w+')
+ tr = config.pluginmanager.getplugin('terminalreporter')
+ oldwrite = tr._tw.write
+ def tee_write(s, **kwargs):
+ oldwrite(s, **kwargs)
+ config._pastebinfile.write(str(s))
+ tr._tw.write = tee_write
+
+def pytest_unconfigure(config):
+ if hasattr(config, '_pastebinfile'):
+ config._pastebinfile.seek(0)
+ sessionlog = config._pastebinfile.read()
+ config._pastebinfile.close()
+ del config._pastebinfile
+ proxyid = getproxy().newPaste("python", sessionlog)
+ pastebinurl = "%s%s" % (url.show, proxyid)
+ sys.stderr.write("pastebin session-log: %s\n" % pastebinurl)
+ tr = config.pluginmanager.getplugin('terminalreporter')
+ del tr._tw.__dict__['write']
+
+def getproxy():
+ return py.std.xmlrpclib.ServerProxy(url.xmlrpc).pastes
+
+def pytest_terminal_summary(terminalreporter):
+ if terminalreporter.config.option.pastebin != "failed":
+ return
+ tr = terminalreporter
+ if 'failed' in tr.stats:
+ terminalreporter.write_sep("=", "Sending information to Paste Service")
+ if tr.config.option.debug:
+ terminalreporter.write_line("xmlrpcurl: %s" %(url.xmlrpc,))
+ serverproxy = getproxy()
+ for rep in terminalreporter.stats.get('failed'):
+ try:
+ msg = rep.longrepr.reprtraceback.reprentries[-1].reprfileloc
+ except AttributeError:
+ msg = tr._getfailureheadline(rep)
+ tw = py.io.TerminalWriter(stringio=True)
+ rep.toterminal(tw)
+ s = tw.stringio.getvalue()
+ assert len(s)
+ proxyid = serverproxy.newPaste("python", s)
+ pastebinurl = "%s%s" % (url.show, proxyid)
+ tr.write_line("%s --> %s" %(msg, pastebinurl))