mirror of
https://github.com/rspamd/rspamd.git
synced 2024-08-27 17:55:15 +02:00
67 lines
1.6 KiB
Python
67 lines
1.6 KiB
Python
![]() |
#!/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("{} ({} soource 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())
|