#!/usr/bin/env python3 import json import math from commands.base import BaseCommand from submission import Submission class Comments(BaseCommand): width = 5 @staticmethod def sort_comments(comments): result = {} for comment in comments: author = comment["author"]["username"], comment["author"]["name"] if author not in result: result[author] = dict() file_path = comment["position"]["new_path"] if "position" in comment else None if file_path not in result[author]: result[author][file_path] = list() result[author][file_path].append(comment) # sort by lines for author in result: for file_path in result[author]: result[author][file_path].sort(key=lambda comment: comment["position"]["new_line"] if "position" in comment else math.inf) return result @staticmethod def print_comments(comments): comments = Comments.sort_comments(comments) for author in comments: login, name = author header = f"***** {name} ({login}) *****".center(40, "*").center(80) print(header) for file_path in comments[author]: if file_path is not None: print(f"# `{file_path.split('/')[-1]}`") for comment in comments[author][file_path]: if comment["system"]: continue if comment["type"] == "DiffNote": body = comment["body"].replace( "\n", "\n" + " " * (Comments.width + 2) ) print( f"""{f'L{comment["position"]["new_line"]}':>{Comments.width}}: {body}""" ) else: print(f"""[{comment["created_at"]}]\n{comment["body"]}""") print(header) def exec(self, submission: Submission) -> None: mrs = self.gitlab.get_mrs_for_branch(submission.branch) if not mrs: return iid = mrs[0]["iid"] comments = self.gitlab.get_comments(iid) branch = f"### {submission.branch.center(20)} ###".upper().center(80, "#") print(branch) self.print_comments(comments) print(branch)