Patrick Williams | 4ea3413 | 2022-01-07 06:05:13 -0600 | [diff] [blame] | 1 | #!/usr/bin/python3 |
| 2 | |
| 3 | import argparse |
| 4 | import json |
| 5 | import os |
| 6 | |
| 7 | |
| 8 | class subcmd: |
| 9 | def __init__(self, parser: argparse._SubParsersAction) -> None: |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 10 | p = parser.add_parser("report", help="Create final report") |
Patrick Williams | 4ea3413 | 2022-01-07 06:05:13 -0600 | [diff] [blame] | 11 | |
| 12 | p.set_defaults(cmd=self) |
| 13 | |
Patrick Williams | 4ea3413 | 2022-01-07 06:05:13 -0600 | [diff] [blame] | 14 | def run(self, args: argparse.Namespace) -> int: |
| 15 | commits_fp = os.path.join(args.dir, "commits.json") |
| 16 | reviews_fp = os.path.join(args.dir, "reviews.json") |
| 17 | |
| 18 | results = {} |
| 19 | |
| 20 | if not os.path.isfile(commits_fp): |
Ed Tanous | 385fd07 | 2022-02-17 13:03:06 -0800 | [diff] [blame] | 21 | print("Missing commits.json; run analyze-commits?") |
Patrick Williams | 4ea3413 | 2022-01-07 06:05:13 -0600 | [diff] [blame] | 22 | return 1 |
| 23 | |
| 24 | if not os.path.isfile(reviews_fp): |
Ed Tanous | 385fd07 | 2022-02-17 13:03:06 -0800 | [diff] [blame] | 25 | print("Missing reviews.json; run analyze-reviews?") |
Patrick Williams | 4ea3413 | 2022-01-07 06:05:13 -0600 | [diff] [blame] | 26 | return 1 |
| 27 | |
| 28 | with open(commits_fp, "r") as commits_file: |
| 29 | commits = json.load(commits_file) |
| 30 | |
| 31 | with open(reviews_fp, "r") as reviews_file: |
| 32 | reviews = json.load(reviews_file) |
| 33 | |
Andrew Jeffery | ed5643f | 2023-05-22 12:38:59 +0930 | [diff] [blame] | 34 | contributions = commits | reviews |
| 35 | |
| 36 | for user in sorted(contributions.keys()): |
| 37 | user_commits = len(commits.get(user, {}).get("changes", [])) |
| 38 | user_reviews = len(reviews.get(user, {}).get("changes", [])) |
Patrick Williams | 4ea3413 | 2022-01-07 06:05:13 -0600 | [diff] [blame] | 39 | |
| 40 | points = user_commits * 3 + user_reviews |
| 41 | print(user, points, user_commits, user_reviews) |
| 42 | |
| 43 | qualified = points >= 15 |
| 44 | |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 45 | results[user] = { |
Andrew Jeffery | ed5643f | 2023-05-22 12:38:59 +0930 | [diff] [blame] | 46 | "name": contributions[user]["name"], |
| 47 | "email": contributions[user]["email"], |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 48 | "qualified": qualified, |
| 49 | "points": points, |
| 50 | "commits": user_commits, |
| 51 | "reviews": user_reviews, |
| 52 | } |
Patrick Williams | 4ea3413 | 2022-01-07 06:05:13 -0600 | [diff] [blame] | 53 | |
| 54 | with open(os.path.join(args.dir, "report.json"), "w") as outfile: |
Patrick Williams | a3db66b | 2022-12-04 16:27:08 -0600 | [diff] [blame] | 55 | outfile.write(json.dumps(results, indent=4)) |
Patrick Williams | 4ea3413 | 2022-01-07 06:05:13 -0600 | [diff] [blame] | 56 | |
| 57 | return 0 |