#!/usr/bin/env python3 import json from commands.base import BaseCommand from gitlab import get_mrs_for_branch, get_comments 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] = list() result[author].append(comment) 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 comment in comments[author]: 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 = get_mrs_for_branch(submission.branch) if not mrs: return iid = mrs[0]["iid"] comments = get_comments(iid) branch = f"### {submission.branch.center(20)} ###".upper().center(80, "#") print(branch) self.print_comments(comments) print(branch)