DebugClients/Python/coverage/debug.py

Sat, 12 Apr 2014 16:57:18 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 12 Apr 2014 16:57:18 +0200
changeset 3499
f2d4b02c7e88
parent 3497
7f51ab29a1a2
child 4489
d0d6e4ad31bd
permissions
-rw-r--r--

Modified the Python2 coverage files to include the Python2 eflags line and fixed an issue in both variants.

3497
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
1 """Control of and utilities for debugging."""
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
2
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
3 import os
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
4
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
5
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
6 # When debugging, it can be helpful to force some options, especially when
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
7 # debugging the configuration mechanisms you usually use to control debugging!
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
8 # This is a list of forced debugging options.
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
9 FORCED_DEBUG = []
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
10
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
11
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
12 class DebugControl(object):
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
13 """Control and output for debugging."""
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
14
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
15 def __init__(self, options, output):
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
16 """Configure the options and output file for debugging."""
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
17 self.options = options
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
18 self.output = output
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
19
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
20 def should(self, option):
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
21 """Decide whether to output debug information in category `option`."""
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
22 return (option in self.options or option in FORCED_DEBUG)
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
23
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
24 def write(self, msg):
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
25 """Write a line of debug output."""
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
26 if self.should('pid'):
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
27 msg = "pid %5d: %s" % (os.getpid(), msg)
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
28 self.output.write(msg+"\n")
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
29 self.output.flush()
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
30
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
31 def write_formatted_info(self, info):
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
32 """Write a sequence of (label,data) pairs nicely."""
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
33 for line in info_formatter(info):
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
34 self.write(" %s" % line)
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
35
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
36
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
37 def info_formatter(info):
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
38 """Produce a sequence of formatted lines from info.
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
39
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
40 `info` is a sequence of pairs (label, data). The produced lines are
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
41 nicely formatted, ready to print.
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
42
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
43 """
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
44 label_len = max([len(l) for l, _d in info])
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
45 for label, data in info:
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
46 if data == []:
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
47 data = "-none-"
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
48 if isinstance(data, (list, tuple)):
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
49 prefix = "%*s:" % (label_len, label)
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
50 for e in data:
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
51 yield "%*s %s" % (label_len+1, prefix, e)
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
52 prefix = ""
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
53 else:
7f51ab29a1a2 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff changeset
54 yield "%*s: %s" % (label_len, label, data)
3499
f2d4b02c7e88 Modified the Python2 coverage files to include the Python2 eflags line and fixed an issue in both variants.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3497
diff changeset
55
f2d4b02c7e88 Modified the Python2 coverage files to include the Python2 eflags line and fixed an issue in both variants.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3497
diff changeset
56 #
f2d4b02c7e88 Modified the Python2 coverage files to include the Python2 eflags line and fixed an issue in both variants.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3497
diff changeset
57 # eflag: FileType = Python2

eric ide

mercurial