eric7/DebugClients/Python/coverage/report.py

Sat, 20 Nov 2021 16:47:38 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 20 Nov 2021 16:47:38 +0100
branch
eric7
changeset 8775
0802ae193343
parent 8312
800c432b34c8
child 8929
fcca2fa618bf
permissions
-rw-r--r--

Upgraded coverage to 6.1.2.

4489
d0d6e4ad31bd Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3495
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: 3495
diff changeset
3
d0d6e4ad31bd Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3495
diff changeset
4 """Reporter foundation for coverage.py."""
8775
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
5
7427
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
6 import sys
4489
d0d6e4ad31bd Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3495
diff changeset
7
8775
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
8 from coverage.exceptions import CoverageException, NotPython
4489
d0d6e4ad31bd Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3495
diff changeset
9 from coverage.files import prep_patterns, FnmatchMatcher
8775
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
10 from coverage.misc import ensure_dir_for_file, file_be_gone
4489
d0d6e4ad31bd Updated coverage to 4.0 (breaks with Python 3.2 support).
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 3495
diff changeset
11
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12
8775
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
13 def render_report(output_path, reporter, morfs, msgfn):
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
14 """Run a one-file report generator, managing the output file.
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15
8775
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
16 This function ensures the output file is ready to be written to. Then writes
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
17 the report to it. Then closes the file and cleans up.
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
18
7427
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
19 """
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
20 file_to_close = None
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
21 delete_file = False
8775
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
22
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
23 if output_path == "-":
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
24 outfile = sys.stdout
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
25 else:
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
26 # Ensure that the output directory is created; done here
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
27 # because this report pre-opens the output file.
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
28 # HTMLReport does this using the Report plumbing because
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
29 # its task is more complex, being multiple files.
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
30 ensure_dir_for_file(output_path)
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
31 outfile = open(output_path, "w", encoding="utf-8")
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
32 file_to_close = outfile
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
33
7427
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
34 try:
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
35 return reporter.report(morfs, outfile=outfile)
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
36 except CoverageException:
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
37 delete_file = True
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
38 raise
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
39 finally:
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
40 if file_to_close:
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
41 file_to_close.close()
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
42 if delete_file:
8775
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
43 file_be_gone(output_path) # pragma: part covered (doesn't return)
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
44 else:
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
45 msgfn(f"Wrote {reporter.report_type} to {output_path}")
5051
3586ebd9fac8 Updated coverage.py to version 4.1.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4489
diff changeset
46
3586ebd9fac8 Updated coverage.py to version 4.1.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4489
diff changeset
47
7427
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
48 def get_analysis_to_report(coverage, morfs):
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
49 """Get the files to report on.
3495
fac17a82b431 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 29
diff changeset
50
7427
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
51 For each morf in `morfs`, if it should be reported on (based on the omit
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
52 and include configuration options), yield a pair, the `FileReporter` and
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
53 `Analysis` for the morf.
3495
fac17a82b431 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 29
diff changeset
54
7427
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
55 """
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
56 file_reporters = coverage._get_file_reporters(morfs)
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
57 config = coverage.config
0
de9c2efb9d02 Started porting eric4 to Python3
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58
7427
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
59 if config.report_include:
8775
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
60 matcher = FnmatchMatcher(prep_patterns(config.report_include), "report_include")
7427
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
61 file_reporters = [fr for fr in file_reporters if matcher.match(fr.filename)]
29
391dc0bc4ae5 Updated coverage.py to version 3.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 0
diff changeset
62
7427
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
63 if config.report_omit:
8775
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
64 matcher = FnmatchMatcher(prep_patterns(config.report_omit), "report_omit")
7427
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
65 file_reporters = [fr for fr in file_reporters if not matcher.match(fr.filename)]
3495
fac17a82b431 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 29
diff changeset
66
7427
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
67 if not file_reporters:
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
68 raise CoverageException("No data to report.")
29
391dc0bc4ae5 Updated coverage.py to version 3.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 0
diff changeset
69
7427
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
70 for fr in sorted(file_reporters):
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
71 try:
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
72 analysis = coverage._analyze(fr)
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
73 except NotPython:
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
74 # Only report errors for .py files, and only if we didn't
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
75 # explicitly suppress those errors.
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
76 # NotPython is only raised by PythonFileReporter, which has a
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
77 # should_be_python() method.
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
78 if fr.should_be_python():
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
79 if config.ignore_errors:
8775
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
80 msg = f"Couldn't parse Python file '{fr.filename}'"
7427
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
81 coverage._warn(msg, slug="couldnt-parse")
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
82 else:
3495
fac17a82b431 updated coverage to 3.7.1
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 29
diff changeset
83 raise
8775
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
84 except Exception as exc:
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
85 if config.ignore_errors:
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
86 msg = f"Couldn't parse '{fr.filename}': {exc}".rstrip()
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
87 coverage._warn(msg, slug="couldnt-parse")
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
88 else:
0802ae193343 Upgraded coverage to 6.1.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8312
diff changeset
89 raise
7427
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
90 else:
362cd1b6f81a coverage: updated coverage.py to 5.0.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6942
diff changeset
91 yield (fr, analysis)

eric ide

mercurial