forked from JOJ/Joint-Teapot
feat: support zip for prepare assignment & late file
This commit is contained in:
parent
ba88605f8e
commit
ec3346b9ba
|
@ -113,8 +113,8 @@ def get_repos_status(
|
||||||
"prepare-assignment-dir",
|
"prepare-assignment-dir",
|
||||||
help='prepare assignment dir from extracted canvas "Download Submissions" zip',
|
help='prepare assignment dir from extracted canvas "Download Submissions" zip',
|
||||||
)
|
)
|
||||||
def prepare_assignment_dir(dir: Path) -> None:
|
def prepare_assignment_dir(dir_or_zip_file: Path) -> None:
|
||||||
tea.pot.canvas.prepare_assignment_dir(str(dir))
|
tea.pot.canvas.prepare_assignment_dir(str(dir_or_zip_file))
|
||||||
|
|
||||||
|
|
||||||
@app.command(
|
@app.command(
|
||||||
|
|
|
@ -36,7 +36,14 @@ class Canvas:
|
||||||
self.score_filename = score_filename
|
self.score_filename = score_filename
|
||||||
logger.debug("Canvas initialized")
|
logger.debug("Canvas initialized")
|
||||||
|
|
||||||
def prepare_assignment_dir(self, dir: str, create_score_file: bool = True) -> None:
|
def prepare_assignment_dir(
|
||||||
|
self, dir_or_zip_file: str, create_score_file: bool = True
|
||||||
|
) -> None:
|
||||||
|
if os.path.isdir(dir_or_zip_file):
|
||||||
|
dir = dir_or_zip_file
|
||||||
|
else:
|
||||||
|
dir = os.path.splitext(dir_or_zip_file)[0]
|
||||||
|
extract_archive(dir_or_zip_file, outdir=dir, verbosity=-1)
|
||||||
login_ids = {stu.id: stu.login_id for stu in self.students}
|
login_ids = {stu.id: stu.login_id for stu in self.students}
|
||||||
for v in login_ids.values():
|
for v in login_ids.values():
|
||||||
new_path = os.path.join(dir, v)
|
new_path = os.path.join(dir, v)
|
||||||
|
@ -47,12 +54,14 @@ class Canvas:
|
||||||
if "_" not in file_name:
|
if "_" not in file_name:
|
||||||
continue
|
continue
|
||||||
segments = file_name.split("_")
|
segments = file_name.split("_")
|
||||||
|
is_late = False
|
||||||
if segments[1] == "late":
|
if segments[1] == "late":
|
||||||
file_id = int(segments[2])
|
file_id = int(segments[2])
|
||||||
student = first(
|
student = first(
|
||||||
self.students, lambda x: x.login_id == login_ids[file_id]
|
self.students, lambda x: x.login_id == login_ids[file_id]
|
||||||
)
|
)
|
||||||
logger.info(f"{student} submits late")
|
logger.info(f"{student} submits late")
|
||||||
|
is_late = True
|
||||||
else:
|
else:
|
||||||
file_id = int(segments[1])
|
file_id = int(segments[1])
|
||||||
target_dir = os.path.join(dir, login_ids[file_id])
|
target_dir = os.path.join(dir, login_ids[file_id])
|
||||||
|
@ -61,6 +70,8 @@ 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 is_late:
|
||||||
|
open(os.path.join(target_dir, "SUBMIT_LATE"), mode="w")
|
||||||
if create_score_file:
|
if create_score_file:
|
||||||
open(os.path.join(target_dir, self.score_filename), mode="w")
|
open(os.path.join(target_dir, self.score_filename), mode="w")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user