84 lines
2.5 KiB
Python
84 lines
2.5 KiB
Python
#!/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:
|
|
filename = file_path.split("/")[-1]
|
|
print(f"\n`{filename}`\n{'-'*(len(filename) + 2)}")
|
|
for comment in comments[author][file_path]:
|
|
if comment["system"]:
|
|
continue
|
|
|
|
if comment["type"] == "DiffNote":
|
|
body = comment["body"].replace(
|
|
"\n",
|
|
"\n"
|
|
+ " " * (len(str(comment["position"]["new_line"])) + 5),
|
|
)
|
|
|
|
print(f"""- L{comment["position"]["new_line"]}: {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)
|