123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- #!/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())
|