import sys import py from py.__.test.session import Session from py.__.test.reporter import AbstractReporter from netstring import netstring class MyReporter(AbstractReporter): def __init__(self, *args, **kwds): super(MyReporter, self).__init__(*args, **kwds) # XXXXXXXXXXXXXXx SUPER HACK mostly broken only works if you run # py.test just how I run py.test, sorry. -exarkun self.name = filter(None, sys.argv[-1].split('/')[:-1]) # Marker so the peer can recognize our newline convention. >< # -exarkun self.out.write('\n') def report_unknown(self, event): pass def report_TestStarted(self, event): pass def report_TestFinished(self, event): pass def report_ReceivedItemOutcome(self, event): name = '.'.join(self.name) if event.outcome.passed: netstring(self.out, name, 'passed') elif event.outcome.skipped: netstring(self.out, name, 'skipped') elif event.outcome.excinfo is not None: netstring(self.out, name, 'failed', event.outcome.excinfo.value) else: netstring(self.out, name, 'failed', "no reason given") def report_ItemStart(self, event): self.name.append(event.item.name) def report_ItemFinish(self, event): self.name.pop() class MySession(Session): reporterclass = MyReporter