diff --git a/examples/ve482.py b/examples/ve482.py index 86ed9fb..2270d0e 100644 --- a/examples/ve482.py +++ b/examples/ve482.py @@ -6,6 +6,7 @@ from joint_teapot import Teapot, logger class MyTeapot(Teapot): def ve482p1(self) -> None: + fault_repos = [] for repo_name in self.gitea.get_all_repo_names(): if not repo_name.endswith("p1"): continue @@ -14,7 +15,7 @@ class MyTeapot(Teapot): if succeed: contain_c_file = False contain_readme_file = False - for fn in glob.glob(f"{self.git.repos_dir}/{repo_name}/*.*"): + for fn in glob.glob(f"{self.git.repos_dir}/{repo_name}/*"): basename = ntpath.basename(fn) if basename.endswith(".c"): contain_c_file = True @@ -44,6 +45,8 @@ class MyTeapot(Teapot): "title": "p1 submission pre-check failed", }, ) + fault_repos.append(repo_name) + logger.info(f"{len(fault_repos)} fault repo(s): {fault_repos}") if __name__ == "__main__": diff --git a/joint_teapot/teapot.py b/joint_teapot/teapot.py index bfc0542..1ff6e88 100644 --- a/joint_teapot/teapot.py +++ b/joint_teapot/teapot.py @@ -118,6 +118,7 @@ class Teapot: release = first(repo_releases, lambda item: item.name == release_name) if release is None or release.created_at.replace(tzinfo=None) >= due: return False + # TODO: checkout by commit hash to prevent re-create tag self.git.repo_clean_and_checkout(repo_name, f"tags/{release.tag_name}") logger.info( f"{self.gitea.org_name}/{repo_name} checkout to " diff --git a/joint_teapot/workers/canvas.py b/joint_teapot/workers/canvas.py index b2f5d48..55c1edc 100644 --- a/joint_teapot/workers/canvas.py +++ b/joint_teapot/workers/canvas.py @@ -49,6 +49,8 @@ class Canvas: new_path = os.path.join(dir, v) if not os.path.exists(new_path): os.mkdir(new_path) + if create_score_file: + open(os.path.join(new_path, self.score_filename), mode="w") for path in glob(os.path.join(dir, "*")): file_name = os.path.basename(path) if "_" not in file_name: @@ -68,8 +70,6 @@ class Canvas: os.remove(path) except PatoolError: os.rename(path, os.path.join(target_dir, file_name)) - if create_score_file: - open(os.path.join(target_dir, self.score_filename), mode="w") def upload_assignment_scores(self, dir: str, assignment_name: str) -> None: assignment = first(self.assignments, lambda x: x.name == assignment_name) @@ -88,7 +88,9 @@ class Canvas: "submission": {"posted_grade": float(score)}, "comment": {"text_comment": "".join(comments)}, } - logger.info(f"{assignment} {student} {data.__repr__()}") + logger.info( + f"Uploading grade for {assignment} {student}: {data.__repr__()}" + ) submission.edit(**data) diff --git a/joint_teapot/workers/gitea.py b/joint_teapot/workers/gitea.py index 897b424..959765c 100644 --- a/joint_teapot/workers/gitea.py +++ b/joint_teapot/workers/gitea.py @@ -351,13 +351,14 @@ class Gitea: return False def close_all_issues(self) -> None: - for repo in list_all(self.organization_api.org_list_repos, self.org_name): - for issue in list_all( - self.issue_api.issue_list_issues, self.org_name, repo.name - ): + for repo_name in self.get_all_repo_names(): + issues = list_all( + self.issue_api.issue_list_issues, self.org_name, repo_name + ) + for issue in issues: if issue.state != "closed": self.issue_api.issue_edit_issue( - self.org_name, repo.name, issue.number, body={"state": "closed"} + self.org_name, repo_name, issue.number, body={"state": "closed"} ) def archieve_all_repos(self) -> None: