diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2013-09-08 14:49:35 -0400 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2013-09-08 14:49:35 -0400 |
commit | 83411f84debeefa313a1b61121ef4fc9c9607fd6 (patch) | |
tree | e2e74a89ff3ae8ed330a3f33c96fc645700848bf /coverage/debug.py | |
parent | 7540342d61b42d689cf824f8f4dfd674c474f909 (diff) | |
download | python-coveragepy-83411f84debeefa313a1b61121ef4fc9c9607fd6.tar.gz |
More --debug options, split code into separate objects.
Diffstat (limited to 'coverage/debug.py')
-rw-r--r-- | coverage/debug.py | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/coverage/debug.py b/coverage/debug.py new file mode 100644 index 0000000..104f3b1 --- /dev/null +++ b/coverage/debug.py @@ -0,0 +1,54 @@ +"""Control of and utilities for debugging.""" + +import os + + +# When debugging, it can be helpful to force some options, especially when +# debugging the configuration mechanisms you usually use to control debugging! +# This is a list of forced debugging options. +FORCED_DEBUG = [] + + +class DebugControl(object): + """Control and output for debugging.""" + + def __init__(self, options, output): + """Configure the options and output file for debugging.""" + self.options = options + self.output = output + + def should(self, option): + """Decide whether to output debug information in category `option`.""" + return (option in self.options or option in FORCED_DEBUG) + + def write(self, msg): + """Write a line of debug output.""" + if self.should('pid'): + msg = "pid %5d: %s" % (os.getpid(), msg) + self.output.write(msg+"\n") + self.output.flush() + + def write_formatted_info(self, info): + """Write a sequence of (label,data) pairs nicely.""" + for line in info_formatter(info): + self.write(" %s" % line) + + +def info_formatter(info): + """Produce a sequence of formatted lines from info. + + `info` is a sequence of pairs (label, data). The produced lines are + nicely formatted, ready to print. + + """ + label_len = max([len(l) for l, _d in info]) + for label, data in info: + if data == []: + data = "-none-" + if isinstance(data, (list, tuple)): + prefix = "%*s:" % (label_len, label) + for e in data: + yield "%*s %s" % (label_len+1, prefix, e) + prefix = "" + else: + yield "%*s: %s" % (label_len, label, data) |