| #!/usr/bin/python3 |
| |
| import argparse |
| import json |
| import os |
| |
| |
| class subcmd: |
| def __init__(self, parser: argparse._SubParsersAction) -> None: |
| p = parser.add_parser("report", help="Create final report") |
| |
| p.set_defaults(cmd=self) |
| |
| def run(self, args: argparse.Namespace) -> int: |
| commits_fp = os.path.join(args.dir, "commits.json") |
| reviews_fp = os.path.join(args.dir, "reviews.json") |
| |
| results = {} |
| |
| if not os.path.isfile(commits_fp): |
| print("Missing commits.json; run analyze-commits?") |
| return 1 |
| |
| if not os.path.isfile(reviews_fp): |
| print("Missing reviews.json; run analyze-reviews?") |
| return 1 |
| |
| with open(commits_fp, "r") as commits_file: |
| commits = json.load(commits_file) |
| |
| with open(reviews_fp, "r") as reviews_file: |
| reviews = json.load(reviews_file) |
| |
| contributions = commits | reviews |
| |
| for user in sorted(contributions.keys()): |
| user_commits = len(commits.get(user, {}).get("changes", [])) |
| user_reviews = len(reviews.get(user, {}).get("changes", [])) |
| |
| points = user_commits * 3 + user_reviews |
| print(user, points, user_commits, user_reviews) |
| |
| qualified = points >= 15 |
| |
| results[user] = { |
| "name": contributions[user]["name"], |
| "email": contributions[user]["email"], |
| "qualified": qualified, |
| "points": points, |
| "commits": user_commits, |
| "reviews": user_reviews, |
| } |
| |
| with open(os.path.join(args.dir, "report.json"), "w") as outfile: |
| outfile.write(json.dumps(results, indent=4)) |
| |
| return 0 |