rspamd/test/tools/dump_coveralls.py
Josh Soref 2b8e6958f4
Spelling (#4086)
[Rework] Massive spelling fix from @jsoref
2022-02-22 22:01:28 +00:00

67 lines
1.6 KiB
Python
Executable File

#!/usr/bin/env python3
# Small tool to dump JSON payload for coveralls.io API
import json
from operator import itemgetter
import os
import sys
def warn(*args, **kwargs):
print(*args, file=sys.stderr, **kwargs)
def dump_file(json_file):
"""Dumps coveralls.io API payload stored in json_file
Returns: 0 if successful, 1 otherwise
"""
try:
with open(json_file, encoding='utf8') as f:
data = json.load(f)
except OSError as err:
warn(err)
return os.EX_DATAERR
except json.decoder.JSONDecodeError:
warn("{}: json parsing error".format(json_file))
return 1
if 'source_files' not in data:
warn("{}: no source_files, not a coveralls.io payload?".format(json_file))
return 1
print("{} ({} source files)".format(json_file, len(data['source_files'])))
for src_file in sorted(data['source_files'], key=itemgetter('name')):
covered_lines = not_skipped_lines = 0
for cnt in src_file['coverage']:
if cnt is None:
continue
not_skipped_lines += 1
if cnt > 0:
covered_lines += 1
if not_skipped_lines > 0:
coverage = "{:.0%}".format(covered_lines / not_skipped_lines)
else:
coverage = 'N/A'
print("\t{:>3} {}".format(coverage, src_file['name']))
return 0
def main():
if (len(sys.argv) < 2):
warn("usage: {} file.json ...".format(sys.argv[0]))
return os.EX_USAGE
exit_status = 0
for f in sys.argv[1:]:
exit_status += dump_file(f)
return exit_status
if __name__ == '__main__':
sys.exit(main())