forked from JOJ/Joint-Teapot
fix: canvas score file
This commit is contained in:
parent
48e67985d2
commit
e438f02b23
|
@ -6,6 +6,7 @@ from joint_teapot import Teapot, logger
|
||||||
|
|
||||||
class MyTeapot(Teapot):
|
class MyTeapot(Teapot):
|
||||||
def ve482p1(self) -> None:
|
def ve482p1(self) -> None:
|
||||||
|
fault_repos = []
|
||||||
for repo_name in self.gitea.get_all_repo_names():
|
for repo_name in self.gitea.get_all_repo_names():
|
||||||
if not repo_name.endswith("p1"):
|
if not repo_name.endswith("p1"):
|
||||||
continue
|
continue
|
||||||
|
@ -14,7 +15,7 @@ class MyTeapot(Teapot):
|
||||||
if succeed:
|
if succeed:
|
||||||
contain_c_file = False
|
contain_c_file = False
|
||||||
contain_readme_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)
|
basename = ntpath.basename(fn)
|
||||||
if basename.endswith(".c"):
|
if basename.endswith(".c"):
|
||||||
contain_c_file = True
|
contain_c_file = True
|
||||||
|
@ -44,6 +45,8 @@ class MyTeapot(Teapot):
|
||||||
"title": "p1 submission pre-check failed",
|
"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__":
|
if __name__ == "__main__":
|
||||||
|
|
|
@ -118,6 +118,7 @@ class Teapot:
|
||||||
release = first(repo_releases, lambda item: item.name == release_name)
|
release = first(repo_releases, lambda item: item.name == release_name)
|
||||||
if release is None or release.created_at.replace(tzinfo=None) >= due:
|
if release is None or release.created_at.replace(tzinfo=None) >= due:
|
||||||
return False
|
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}")
|
self.git.repo_clean_and_checkout(repo_name, f"tags/{release.tag_name}")
|
||||||
logger.info(
|
logger.info(
|
||||||
f"{self.gitea.org_name}/{repo_name} checkout to "
|
f"{self.gitea.org_name}/{repo_name} checkout to "
|
||||||
|
|
|
@ -49,6 +49,8 @@ class Canvas:
|
||||||
new_path = os.path.join(dir, v)
|
new_path = os.path.join(dir, v)
|
||||||
if not os.path.exists(new_path):
|
if not os.path.exists(new_path):
|
||||||
os.mkdir(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, "*")):
|
for path in glob(os.path.join(dir, "*")):
|
||||||
file_name = os.path.basename(path)
|
file_name = os.path.basename(path)
|
||||||
if "_" not in file_name:
|
if "_" not in file_name:
|
||||||
|
@ -68,8 +70,6 @@ class Canvas:
|
||||||
os.remove(path)
|
os.remove(path)
|
||||||
except PatoolError:
|
except PatoolError:
|
||||||
os.rename(path, os.path.join(target_dir, file_name))
|
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:
|
def upload_assignment_scores(self, dir: str, assignment_name: str) -> None:
|
||||||
assignment = first(self.assignments, lambda x: x.name == assignment_name)
|
assignment = first(self.assignments, lambda x: x.name == assignment_name)
|
||||||
|
@ -88,7 +88,9 @@ class Canvas:
|
||||||
"submission": {"posted_grade": float(score)},
|
"submission": {"posted_grade": float(score)},
|
||||||
"comment": {"text_comment": "".join(comments)},
|
"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)
|
submission.edit(**data)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -351,13 +351,14 @@ class Gitea:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def close_all_issues(self) -> None:
|
def close_all_issues(self) -> None:
|
||||||
for repo in list_all(self.organization_api.org_list_repos, self.org_name):
|
for repo_name in self.get_all_repo_names():
|
||||||
for issue in list_all(
|
issues = list_all(
|
||||||
self.issue_api.issue_list_issues, self.org_name, repo.name
|
self.issue_api.issue_list_issues, self.org_name, repo_name
|
||||||
):
|
)
|
||||||
|
for issue in issues:
|
||||||
if issue.state != "closed":
|
if issue.state != "closed":
|
||||||
self.issue_api.issue_edit_issue(
|
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:
|
def archieve_all_repos(self) -> None:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user