Sun, 20 Mar 2022 17:49:44 +0100
Third Party packages
- upgraded coverage to 6.3.2
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
1 | # Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 |
7427
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
2 | # For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
3 | |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
4 | """Raw data collector for coverage.py.""" |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
5 | |
6219
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
6 | import atexit |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
7 | import dis |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
8 | import sys |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
9 | |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
10 | from coverage import env |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
11 | |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
12 | # We need the YIELD_VALUE opcode below, in a comparison-friendly form. |
8991
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
13 | RESUME = dis.opmap.get('RESUME') |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
14 | RETURN_VALUE = dis.opmap['RETURN_VALUE'] |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
15 | if RESUME is None: |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
16 | YIELD_VALUE = dis.opmap['YIELD_VALUE'] |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
17 | YIELD_FROM = dis.opmap['YIELD_FROM'] |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
18 | YIELD_FROM_OFFSET = 0 if env.PYPY else 2 |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
19 | |
8527
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
20 | # When running meta-coverage, this file can try to trace itself, which confuses |
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
21 | # everything. Don't trace ourselves. |
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
22 | |
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
23 | THIS_FILE = __file__.rstrip("co") |
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
24 | |
8775
0802ae193343
Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8527
diff
changeset
|
25 | class PyTracer: |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
26 | """Python implementation of the raw data tracer.""" |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
27 | |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
28 | # Because of poor implementations of trace-function-manipulating tools, |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
29 | # the Python trace function must be kept very simple. In particular, there |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
30 | # must be only one function ever set as the trace function, both through |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
31 | # sys.settrace, and as the return value from the trace function. Put |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
32 | # another way, the trace function must always return itself. It cannot |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
33 | # swap in other functions, or return None to avoid tracing a particular |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
34 | # frame. |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
35 | # |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
36 | # The trace manipulator that introduced this restriction is DecoratorTools, |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
37 | # which sets a trace function, and then later restores the pre-existing one |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
38 | # by calling sys.settrace with a function it found in the current frame. |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
39 | # |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
40 | # Systems that use DecoratorTools (or similar trace manipulations) must use |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
41 | # PyTracer to get accurate results. The command-line --timid argument is |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
42 | # used to force the use of this tracer. |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
43 | |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
44 | def __init__(self): |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
45 | # Attributes set from the collector: |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
46 | self.data = None |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
47 | self.trace_arcs = False |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
48 | self.should_trace = None |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
49 | self.should_trace_cache = None |
7427
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
50 | self.should_start_context = None |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
51 | self.warn = None |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
52 | # The threading module to use, if any. |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
53 | self.threading = None |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
54 | |
8775
0802ae193343
Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8527
diff
changeset
|
55 | self.cur_file_data = None |
6219
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
56 | self.last_line = 0 # int, but uninitialized. |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
57 | self.cur_file_name = None |
7427
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
58 | self.context = None |
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
59 | self.started_context = False |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
60 | |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
61 | self.data_stack = [] |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
62 | self.thread = None |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
63 | self.stopped = False |
6219
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
64 | self._activity = False |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
65 | |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
66 | self.in_atexit = False |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
67 | # On exit, self.in_atexit = True |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
68 | atexit.register(setattr, self, 'in_atexit', True) |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
69 | |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
70 | def __repr__(self): |
8991
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
71 | return "<PyTracer at 0x{:x}: {} lines in {} files>".format( |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
72 | id(self), |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
73 | sum(len(v) for v in self.data.values()), |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
74 | len(self.data), |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
75 | ) |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
76 | |
6219
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
77 | def log(self, marker, *args): |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
78 | """For hard-core logging of what this tracer is doing.""" |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
79 | with open("/tmp/debug_trace.txt", "a") as f: |
8527
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
80 | f.write("{} {}[{}]".format( |
6219
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
81 | marker, |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
82 | id(self), |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
83 | len(self.data_stack), |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
84 | )) |
8991
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
85 | if 0: # if you want thread ids.. |
8527
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
86 | f.write(".{:x}.{:x}".format( |
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
87 | self.thread.ident, |
8775
0802ae193343
Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8527
diff
changeset
|
88 | self.threading.current_thread().ident, |
8527
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
89 | )) |
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
90 | f.write(" {}".format(" ".join(map(str, args)))) |
8991
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
91 | if 0: # if you want callers.. |
8527
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
92 | f.write(" | ") |
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
93 | stack = " / ".join( |
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
94 | (fname or "???").rpartition("/")[-1] |
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
95 | for _, fname, _, _ in self.data_stack |
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
96 | ) |
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
97 | f.write(stack) |
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
98 | f.write("\n") |
6219
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
99 | |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
100 | def _trace(self, frame, event, arg_unused): |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
101 | """The trace function passed to sys.settrace.""" |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
102 | |
8527
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
103 | if THIS_FILE in frame.f_code.co_filename: |
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
104 | return None |
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
105 | |
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
106 | #self.log(":", frame.f_code.co_filename, frame.f_lineno, frame.f_code.co_name + "()", event) |
6219
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
107 | |
7427
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
108 | if (self.stopped and sys.gettrace() == self._trace): # pylint: disable=comparison-with-callable |
6219
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
109 | # The PyTrace.stop() method has been called, possibly by another |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
110 | # thread, let's deactivate ourselves now. |
8527
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
111 | if 0: |
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
112 | self.log("---\nX", frame.f_code.co_filename, frame.f_lineno) |
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
113 | f = frame |
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
114 | while f: |
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
115 | self.log(">", f.f_code.co_filename, f.f_lineno, f.f_code.co_name, f.f_trace) |
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
116 | f = f.f_back |
6219
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
117 | sys.settrace(None) |
8775
0802ae193343
Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8527
diff
changeset
|
118 | self.cur_file_data, self.cur_file_name, self.last_line, self.started_context = ( |
8527
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
119 | self.data_stack.pop() |
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
120 | ) |
6219
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
121 | return None |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
122 | |
8527
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
123 | # if event != 'call' and frame.f_code.co_filename != self.cur_file_name: |
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
124 | # self.log("---\n*", frame.f_code.co_filename, self.cur_file_name, frame.f_lineno) |
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
125 | |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
126 | if event == 'call': |
7427
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
127 | # Should we start a new context? |
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
128 | if self.should_start_context and self.context is None: |
8527
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
129 | context_maybe = self.should_start_context(frame) |
7427
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
130 | if context_maybe is not None: |
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
131 | self.context = context_maybe |
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
132 | self.started_context = True |
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
133 | self.switch_context(self.context) |
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
134 | else: |
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
135 | self.started_context = False |
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
136 | else: |
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
137 | self.started_context = False |
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
138 | |
8991
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
139 | # Entering a new frame. Decide if we should trace in this file. |
6219
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
140 | self._activity = True |
7427
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
141 | self.data_stack.append( |
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
142 | ( |
8775
0802ae193343
Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8527
diff
changeset
|
143 | self.cur_file_data, |
7427
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
144 | self.cur_file_name, |
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
145 | self.last_line, |
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
146 | self.started_context, |
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
147 | ) |
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
148 | ) |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
149 | filename = frame.f_code.co_filename |
6219
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
150 | self.cur_file_name = filename |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
151 | disp = self.should_trace_cache.get(filename) |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
152 | if disp is None: |
8527
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
153 | disp = self.should_trace(filename, frame) |
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
154 | self.should_trace_cache[filename] = disp |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
155 | |
8775
0802ae193343
Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8527
diff
changeset
|
156 | self.cur_file_data = None |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
157 | if disp.trace: |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
158 | tracename = disp.source_filename |
8527
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
159 | if tracename not in self.data: |
8775
0802ae193343
Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8527
diff
changeset
|
160 | self.data[tracename] = set() |
0802ae193343
Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8527
diff
changeset
|
161 | self.cur_file_data = self.data[tracename] |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
162 | # The call event is really a "start frame" event, and happens for |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
163 | # function calls and re-entering generators. The f_lasti field is |
5051
3586ebd9fac8
Updated coverage.py to version 4.1.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4489
diff
changeset
|
164 | # -1 for calls, and a real offset for generators. Use <0 as the |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
165 | # line number for calls, and the real line number for generators. |
8991
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
166 | if RESUME is not None: |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
167 | # The current opcode is guaranteed to be RESUME. The argument |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
168 | # determines what kind of resume it is. |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
169 | oparg = frame.f_code.co_code[frame.f_lasti + 1] |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
170 | real_call = (oparg == 0) |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
171 | else: |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
172 | real_call = (getattr(frame, 'f_lasti', -1) < 0) |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
173 | if real_call: |
5051
3586ebd9fac8
Updated coverage.py to version 4.1.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4489
diff
changeset
|
174 | self.last_line = -frame.f_code.co_firstlineno |
3586ebd9fac8
Updated coverage.py to version 4.1.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4489
diff
changeset
|
175 | else: |
3586ebd9fac8
Updated coverage.py to version 4.1.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4489
diff
changeset
|
176 | self.last_line = frame.f_lineno |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
177 | elif event == 'line': |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
178 | # Record an executed line. |
8775
0802ae193343
Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8527
diff
changeset
|
179 | if self.cur_file_data is not None: |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
180 | lineno = frame.f_lineno |
8527
2bd1325d727e
Upgraded the included code coverage library to v5.5.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8312
diff
changeset
|
181 | |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
182 | if self.trace_arcs: |
8775
0802ae193343
Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8527
diff
changeset
|
183 | self.cur_file_data.add((self.last_line, lineno)) |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
184 | else: |
8775
0802ae193343
Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8527
diff
changeset
|
185 | self.cur_file_data.add(lineno) |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
186 | self.last_line = lineno |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
187 | elif event == 'return': |
8775
0802ae193343
Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8527
diff
changeset
|
188 | if self.trace_arcs and self.cur_file_data: |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
189 | # Record an arc leaving the function, but beware that a |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
190 | # "return" event might just mean yielding from a generator. |
6219
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
191 | code = frame.f_code.co_code |
8991
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
192 | lasti = frame.f_lasti |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
193 | if RESUME is not None: |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
194 | if len(code) == lasti + 2: |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
195 | # A return from the end of a code object is a real return. |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
196 | real_return = True |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
197 | else: |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
198 | # it's a real return. |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
199 | real_return = (code[lasti + 2] != RESUME) |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
200 | else: |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
201 | if code[lasti] == RETURN_VALUE: |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
202 | real_return = True |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
203 | elif code[lasti] == YIELD_VALUE: |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
204 | real_return = False |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
205 | elif len(code) <= lasti + YIELD_FROM_OFFSET: |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
206 | real_return = True |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
207 | elif code[lasti + YIELD_FROM_OFFSET] == YIELD_FROM: |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
208 | real_return = False |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
209 | else: |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
210 | real_return = True |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
211 | if real_return: |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
212 | first = frame.f_code.co_firstlineno |
8775
0802ae193343
Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8527
diff
changeset
|
213 | self.cur_file_data.add((self.last_line, -first)) |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
214 | # Leaving this function, pop the filename stack. |
8775
0802ae193343
Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8527
diff
changeset
|
215 | self.cur_file_data, self.cur_file_name, self.last_line, self.started_context = ( |
7427
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
216 | self.data_stack.pop() |
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
217 | ) |
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
218 | # Leaving a context? |
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
219 | if self.started_context: |
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
220 | self.context = None |
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
221 | self.switch_context(None) |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
222 | return self._trace |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
223 | |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
224 | def start(self): |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
225 | """Start this Tracer. |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
226 | |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
227 | Return a Python function suitable for use with sys.settrace(). |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
228 | |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
229 | """ |
6219
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
230 | self.stopped = False |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
231 | if self.threading: |
6219
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
232 | if self.thread is None: |
8775
0802ae193343
Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8527
diff
changeset
|
233 | self.thread = self.threading.current_thread() |
6219
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
234 | else: |
8775
0802ae193343
Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8527
diff
changeset
|
235 | if self.thread.ident != self.threading.current_thread().ident: |
6219
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
236 | # Re-starting from a different thread!? Don't set the trace |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
237 | # function, but we are marked as running again, so maybe it |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
238 | # will be ok? |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
239 | #self.log("~", "starting on different threads") |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
240 | return self._trace |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
241 | |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
242 | sys.settrace(self._trace) |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
243 | return self._trace |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
244 | |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
245 | def stop(self): |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
246 | """Stop this Tracer.""" |
7427
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
247 | # Get the active tracer callback before setting the stop flag to be |
6219
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
248 | # able to detect if the tracer was changed prior to stopping it. |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
249 | tf = sys.gettrace() |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
250 | |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
251 | # Set the stop flag. The actual call to sys.settrace(None) will happen |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
252 | # in the self._trace callback itself to make sure to call it from the |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
253 | # right thread. |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
254 | self.stopped = True |
6219
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
255 | |
8775
0802ae193343
Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8527
diff
changeset
|
256 | if self.threading and self.thread.ident != self.threading.current_thread().ident: |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
257 | # Called on a different thread than started us: we can't unhook |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
258 | # ourselves, but we've set the flag that we should stop, so we |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
259 | # won't do any more tracing. |
6219
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
260 | #self.log("~", "stopping on different threads") |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
261 | return |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
262 | |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
263 | if self.warn: |
6219
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
264 | # PyPy clears the trace function before running atexit functions, |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
265 | # so don't warn if we are in atexit on PyPy and the trace function |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
266 | # has changed to None. |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
267 | dont_warn = (env.PYPY and env.PYPYVERSION >= (5, 4) and self.in_atexit and tf is None) |
7427
362cd1b6f81a
coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
268 | if (not dont_warn) and tf != self._trace: # pylint: disable=comparison-with-callable |
8991
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
269 | self.warn( |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
270 | f"Trace function changed, data is likely wrong: {tf!r} != {self._trace!r}", |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
271 | slug="trace-changed", |
2fc945191992
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
8775
diff
changeset
|
272 | ) |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
273 | |
6219
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
274 | def activity(self): |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
275 | """Has there been any activity?""" |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
276 | return self._activity |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
277 | |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
278 | def reset_activity(self): |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
279 | """Reset the activity() flag.""" |
d6c795b5ce33
Third Party, coverage: updated coverage.py to 4.5.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5178
diff
changeset
|
280 | self._activity = False |
4489
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
281 | |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
282 | def get_stats(self): |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
283 | """Return a dictionary of statistics, or None.""" |
d0d6e4ad31bd
Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
diff
changeset
|
284 | return None |