Split commands and update printing of comments
This commit is contained in:
parent
1b527a7a6c
commit
6c53c3cdea
9 changed files with 201 additions and 140 deletions
114
commands.py
114
commands.py
|
@ -1,114 +0,0 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
|
||||
import re
|
||||
|
||||
|
||||
from constants import HOMEWORK, SUFFIX
|
||||
|
||||
from git import add_files, commit, push
|
||||
from gitlab import post_mr, get_mrs_for_branch, set_assignees, merge_mr, get_comments
|
||||
from utils import run_cmd, get_branch
|
||||
|
||||
|
||||
class MergeRequests:
|
||||
@staticmethod
|
||||
def get_files(submission: str) -> None:
|
||||
relative_path = f"/home/kontr/kontr/_tmp_/ib111/{HOMEWORK}/{submission}"
|
||||
files = f"{{master-naostro/LoadTest/{HOMEWORK}.py,teacher_email}}"
|
||||
|
||||
if run_cmd("rsync", "-avzP", f"aisa:{relative_path}/{files}", "./")[0] != 0:
|
||||
exit(1)
|
||||
|
||||
@staticmethod
|
||||
def call_flake() -> None:
|
||||
process = run_cmd("flake8", "--exit-zero", f"{HOMEWORK}.py")[1]
|
||||
with open("flake.log", "w") as f:
|
||||
print(process.stdout, file=f)
|
||||
|
||||
@staticmethod
|
||||
def get_mail() -> None:
|
||||
with open("teacher_email") as file:
|
||||
contents = file.read()
|
||||
match = re.search(r"<pre>((.*\s+)+)<\/pre>", contents)
|
||||
|
||||
return match.group(1) if match else contents
|
||||
|
||||
def __call__(self, login: str, submission: str) -> None:
|
||||
branch = get_branch(login)
|
||||
|
||||
self.get_files(submission)
|
||||
self.call_flake()
|
||||
|
||||
add_files(f"{HOMEWORK}.py", "flake.log")
|
||||
commit(f'"Add sources and flake log ({HOMEWORK}{SUFFIX} {login})"')
|
||||
push("origin", branch)
|
||||
|
||||
post_mr(
|
||||
source_branch=branch,
|
||||
target_branch="master",
|
||||
title=f"[{HOMEWORK}{SUFFIX}] {login}",
|
||||
description=f"```\n{self.get_mail()}\n```",
|
||||
labels=HOMEWORK,
|
||||
remove_source_branch="true",
|
||||
assignee_ids=["1772"],
|
||||
)
|
||||
|
||||
|
||||
class UpdateAssignees:
|
||||
def __call__(self, login: str, submission: str) -> None:
|
||||
branch = get_branch(login)
|
||||
iid = get_mrs_for_branch(branch)[0]["iid"]
|
||||
|
||||
print(f"{login} @ {branch} : {iid}")
|
||||
set_assignees(iid, ["39", "1772"])
|
||||
|
||||
|
||||
class Merge:
|
||||
def __call__(self, login: str, submission: str):
|
||||
branch = get_branch(login)
|
||||
iid = get_mrs_for_branch(branch)[0]["iid"]
|
||||
|
||||
merge_mr(iid)
|
||||
|
||||
|
||||
class Test:
|
||||
def __call__(self, login: str, submission: str):
|
||||
print(f"{login} - {submission}")
|
||||
|
||||
|
||||
class Comments:
|
||||
@staticmethod
|
||||
def sort_comments(comments):
|
||||
result = {}
|
||||
|
||||
for comment in comments:
|
||||
print(comment)
|
||||
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
|
||||
print(f"***** {name} ({login}) *****")
|
||||
|
||||
for comment in comments[author]:
|
||||
if comment["type"] == "DiffNote":
|
||||
print(f"""L{comment["position"]["new_line"]}: {comment["body"]}""")
|
||||
else:
|
||||
print(comment["body"])
|
||||
|
||||
def __call__(self, login: str, submission: str):
|
||||
branch = get_branch(login)
|
||||
iid = get_mrs_for_branch(branch)[0]["iid"]
|
||||
comments = get_comments(iid)
|
||||
|
||||
self.print_comments(comments)
|
17
commands/__init__.py
Normal file
17
commands/__init__.py
Normal file
|
@ -0,0 +1,17 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
|
||||
from commands.comments import Comments
|
||||
from commands.merge import Merge
|
||||
from commands.merge_requests import MergeRequests
|
||||
from commands.test import Test
|
||||
from commands.update_assignees import UpdateAssignees
|
||||
|
||||
|
||||
__all__ = [
|
||||
Comments.__name__,
|
||||
Merge.__name__,
|
||||
MergeRequests.__name__,
|
||||
Test.__name__,
|
||||
UpdateAssignees.__name__,
|
||||
]
|
38
commands/base.py
Normal file
38
commands/base.py
Normal file
|
@ -0,0 +1,38 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
|
||||
import os
|
||||
|
||||
|
||||
from constants import HOMEWORK
|
||||
from git import checkout_branch
|
||||
from utils import make_pair, get_branch, mkcd
|
||||
|
||||
|
||||
class BaseCommand:
|
||||
def __init__(self, submissions):
|
||||
self.submissions = map(make_pair, submissions)
|
||||
self.branch = None
|
||||
|
||||
def __call__(self):
|
||||
for login, submission in self.submissions:
|
||||
self.branch = get_branch(login)
|
||||
|
||||
self.exec(login, submission)
|
||||
|
||||
def exec(self, login: str, submission: str):
|
||||
raise NotImplementedError()
|
||||
|
||||
|
||||
class BaseGitCommand(BaseCommand):
|
||||
def __call__(self):
|
||||
for login, submission in self.submissions:
|
||||
self.branch = get_branch(login)
|
||||
|
||||
checkout_branch(self.branch)
|
||||
mkcd(f"{HOMEWORK}/{login}")
|
||||
|
||||
self.exec(login, submission)
|
||||
|
||||
os.chdir("../..")
|
||||
checkout_branch("master")
|
51
commands/comments.py
Normal file
51
commands/comments.py
Normal file
|
@ -0,0 +1,51 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
|
||||
from commands.base import BaseCommand
|
||||
from gitlab import get_mrs_for_branch, get_comments
|
||||
|
||||
|
||||
class Comments(BaseCommand):
|
||||
@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
|
||||
print(f"***** {name} ({login}) *****")
|
||||
|
||||
for comment in comments[author]:
|
||||
if comment["system"]:
|
||||
continue
|
||||
|
||||
if comment["type"] == "DiffNote":
|
||||
print(f"""L{comment["position"]["new_line"]}: {comment["body"]}""")
|
||||
else:
|
||||
print(f"""[{comment["created_at"]}]\n{comment["body"]}""")
|
||||
print()
|
||||
print()
|
||||
|
||||
def exec(self, login: str, submission: str):
|
||||
mrs = get_mrs_for_branch(self.branch)
|
||||
if not mrs:
|
||||
return
|
||||
|
||||
iid = mrs[0]["iid"]
|
||||
comments = get_comments(iid)
|
||||
|
||||
print(f"# {self.branch}")
|
||||
self.print_comments(comments)
|
||||
print(f"# {self.branch}")
|
12
commands/merge.py
Normal file
12
commands/merge.py
Normal file
|
@ -0,0 +1,12 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
|
||||
from commands.base import BaseCommand
|
||||
from gitlab import get_mrs_for_branch, merge_mr
|
||||
|
||||
|
||||
class Merge(BaseCommand):
|
||||
def exec(self, login: str, submission: str):
|
||||
iid = get_mrs_for_branch(self.branch)[0]["iid"]
|
||||
|
||||
merge_mr(iid)
|
53
commands/merge_requests.py
Normal file
53
commands/merge_requests.py
Normal file
|
@ -0,0 +1,53 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
|
||||
import re
|
||||
|
||||
|
||||
from constants import HOMEWORK, SUFFIX
|
||||
from commands.base import BaseGitCommand
|
||||
from git import add_files, commit, push
|
||||
from gitlab import post_mr
|
||||
from utils import run_cmd
|
||||
|
||||
|
||||
class MergeRequests(BaseGitCommand):
|
||||
@staticmethod
|
||||
def get_files(submission: str) -> None:
|
||||
relative_path = f"/home/kontr/kontr/_tmp_/ib111/{HOMEWORK}/{submission}"
|
||||
files = f"{{master-naostro/LoadTest/{HOMEWORK}.py,teacher_email}}"
|
||||
|
||||
if run_cmd("rsync", "-avzP", f"aisa:{relative_path}/{files}", "./")[0] != 0:
|
||||
exit(1)
|
||||
|
||||
@staticmethod
|
||||
def call_flake() -> None:
|
||||
process = run_cmd("flake8", "--exit-zero", f"{HOMEWORK}.py")[1]
|
||||
with open("flake.log", "w") as f:
|
||||
print(process.stdout, file=f)
|
||||
|
||||
@staticmethod
|
||||
def get_mail() -> None:
|
||||
with open("teacher_email") as file:
|
||||
contents = file.read()
|
||||
match = re.search(r"<pre>((.*\s+)+)<\/pre>", contents)
|
||||
|
||||
return match.group(1) if match else contents
|
||||
|
||||
def exec(self, login: str, submission: str) -> None:
|
||||
self.get_files(submission)
|
||||
self.call_flake()
|
||||
|
||||
add_files(f"{HOMEWORK}.py", "flake.log")
|
||||
commit(f'"Add sources and flake log ({HOMEWORK}{SUFFIX} {login})"')
|
||||
push("origin", self.branch)
|
||||
|
||||
post_mr(
|
||||
source_branch=self.branch,
|
||||
target_branch="master",
|
||||
title=f"[{HOMEWORK}{SUFFIX}] {login}",
|
||||
description=f"```\n{self.get_mail()}\n```",
|
||||
labels=HOMEWORK,
|
||||
remove_source_branch="true",
|
||||
assignee_ids=["1772"],
|
||||
)
|
9
commands/test.py
Normal file
9
commands/test.py
Normal file
|
@ -0,0 +1,9 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
|
||||
from commands.base import BaseCommand
|
||||
|
||||
|
||||
class Test(BaseCommand):
|
||||
def exec(self, login: str, submission: str):
|
||||
print(f"{login} - {submission}")
|
13
commands/update_assignees.py
Normal file
13
commands/update_assignees.py
Normal file
|
@ -0,0 +1,13 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
|
||||
from commands.base import BaseCommand
|
||||
from gitlab import get_mrs_for_branch, set_assignees
|
||||
|
||||
|
||||
class UpdateAssignees(BaseCommand):
|
||||
def exec(self, login: str, submission: str) -> None:
|
||||
iid = get_mrs_for_branch(self.branch)[0]["iid"]
|
||||
|
||||
print(f"{login} @ {self.branch} : {iid}")
|
||||
set_assignees(iid, ["39", "1772"])
|
34
reviews.py
34
reviews.py
|
@ -1,37 +1,19 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import os
|
||||
import re
|
||||
import requests
|
||||
from subprocess import run
|
||||
|
||||
import sys
|
||||
|
||||
|
||||
from commands import MergeRequests, UpdateAssignees, Comments, Merge, Test
|
||||
from constants import SUBMISSIONS, HOMEWORK
|
||||
from git import checkout_branch
|
||||
from utils import get_branch, mkcd, make_pair
|
||||
|
||||
|
||||
def iterate_logins(func):
|
||||
for login, submission in map(make_pair, SUBMISSIONS):
|
||||
branch = get_branch(login)
|
||||
|
||||
checkout_branch(branch)
|
||||
mkcd(f"{HOMEWORK}/{login}")
|
||||
|
||||
func(login, submission)
|
||||
|
||||
os.chdir("../..")
|
||||
checkout_branch("master")
|
||||
from constants import SUBMISSIONS
|
||||
|
||||
|
||||
COMMANDS = {
|
||||
"mrs": MergeRequests(),
|
||||
"update-assignees": UpdateAssignees(),
|
||||
"comments": Comments(),
|
||||
"merge": Merge(),
|
||||
"test": Test(),
|
||||
"mrs": MergeRequests,
|
||||
"update-assignees": UpdateAssignees,
|
||||
"comments": Comments,
|
||||
"merge": Merge,
|
||||
"test": Test,
|
||||
}
|
||||
|
||||
|
||||
|
@ -40,7 +22,7 @@ def main():
|
|||
print("Invalid command")
|
||||
exit(2)
|
||||
|
||||
iterate_logins(COMMANDS[sys.argv[1]])
|
||||
COMMANDS[sys.argv[1]](SUBMISSIONS)()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
Reference in a new issue