From 3ab340f6888cf08dd85282dd7e3c337dc44e8ae7 Mon Sep 17 00:00:00 2001 From: mQzLjP <91550006+mQzLjP@users.noreply.github.com> Date: Sun, 23 Feb 2025 21:31:02 +0800 Subject: [PATCH] feat: csv export (#50) --- joint_teapot/app.py | 5 +++++ joint_teapot/workers/canvas.py | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/joint_teapot/app.py b/joint_teapot/app.py index 6cbe4eb..aabb970 100644 --- a/joint_teapot/app.py +++ b/joint_teapot/app.py @@ -35,6 +35,11 @@ class Tea: tea = Tea() # lazy loader +@app.command("export-students", help="export students from canvas to csv file") +def export_students_to_csv(output_file: Path) -> None: + tea.pot.canvas.export_students_to_csv(output_file) + + @app.command( "invite-to-teams", help="invite all canvas students to gitea teams by team name" ) diff --git a/joint_teapot/workers/canvas.py b/joint_teapot/workers/canvas.py index 2c818d4..9be1d54 100644 --- a/joint_teapot/workers/canvas.py +++ b/joint_teapot/workers/canvas.py @@ -1,6 +1,8 @@ +import csv import os import re from glob import glob +from pathlib import Path from typing import cast from canvasapi import Canvas as PyCanvas @@ -58,6 +60,13 @@ class Canvas: self.grade_filename = grade_filename logger.debug("Canvas initialized") + def export_students_to_csv(self, filename: Path) -> None: + with open(filename, mode="w", newline="") as file: + writer = csv.writer(file) + for student in self.students: + writer.writerow([student.name, student.sis_id, student.login_id]) + logger.info(f"Students exported to {filename}") + def prepare_assignment_dir( self, dir_or_zip_file: str, create_grade_file: bool = True ) -> None: