from __future__ import division
from __future__ import print_function
import sys
import warnings
import py
from pytest import PytestWarning
class PytestBenchmarkWarning(PytestWarning):
pass
class Logger(object):
def __init__(self, verbose, config=None):
self.verbose = verbose
self.term = py.io.TerminalWriter(file=sys.stderr)
self.suspend_capture = None
self.resume_capture = None
if config:
capman = config.pluginmanager.getplugin("capturemanager")
if capman:
self.suspend_capture = getattr(capman,
'suspend_global_capture',
getattr('capman', 'suspendcapture', None))
self.resume_capture = getattr(capman,
'resume_global_capture',
getattr('capman', 'resumecapture', None))
def warn(self, text, warner=None, suspend=False):
if self.verbose:
if suspend and self.suspend_capture:
self.suspend_capture(in_=True)
self.term.line("")
self.term.sep("-", red=True, bold=True)
self.term.write(" WARNING: ", red=True, bold=True)
self.term.line(text, red=True)
self.term.sep("-", red=True, bold=True)
if suspend and self.resume_capture:
self.resume_capture()
if warner is None:
warner = warnings.warn
warner(PytestBenchmarkWarning(text))
def error(self, text):
self.term.line("")
self.term.sep("-", red=True, bold=True)
self.term.line(text, red=True, bold=True)
self.term.sep("-", red=True, bold=True)
def info(self, text, newline=True, **kwargs):
if not kwargs or kwargs == {'bold': True}:
kwargs['purple'] = True
if newline:
self.term.line("")
self.term.line(text, **kwargs)
def debug(self, text, newline=False, **kwargs):
if self.verbose:
if self.suspend_capture:
self.suspend_capture(in_=True)
self.info(text, newline=newline, **kwargs)
if self.resume_capture:
self.resume_capture()