diff --git a/joint_teapot/app.py b/joint_teapot/app.py index 9c634fc..7e49169 100644 --- a/joint_teapot/app.py +++ b/joint_teapot/app.py @@ -6,6 +6,7 @@ from typing import List from git import Repo from typer import Argument, Option, Typer, echo +from joint_teapot.config import Settings, set_settings, settings from joint_teapot.teapot import Teapot from joint_teapot.utils import joj3 from joint_teapot.utils.logger import logger @@ -205,10 +206,11 @@ def unsubscribe_from_repos(pattern: str = Argument("")) -> None: @app.command( - "JOJ3-scoreboard", + "joj3-scoreboard", help="parse JOJ3 score json file into scoreboard and upload to gitea", ) def JOJ3_scoreboard( + env_path: str = Argument("", help="path to .env file"), scorefile_path: str = Argument( "", help="path to score json file generated by JOJ3" ), @@ -224,6 +226,7 @@ def JOJ3_scoreboard( "", help="name of scoreboard file in the gitea repo" ), ) -> None: + set_settings(Settings(_env_file=env_path)) repo_path = tea.pot.git.repo_clean_and_checkout(repo_name, "grading") repo: Repo = tea.pot.git.get_repo(repo_name) if "grading" not in repo.remote().refs: @@ -248,10 +251,11 @@ def JOJ3_scoreboard( @app.command( - "JOJ3-failed-table", + "joj3-failed-table", help="parse JOJ3 score json file into failed table markdown file and upload to gitea", ) def JOJ3_failed_table( + env_path: str = Argument("", help="path to .env file"), scorefile_path: str = Argument( "", help="path to score json file generated by JOJ3" ), @@ -271,6 +275,7 @@ def JOJ3_failed_table( "", help="name of failed table file in the gitea repo" ), ) -> None: + set_settings(Settings(_env_file=env_path)) repo_path = tea.pot.git.repo_clean_and_checkout(repo_name, "grading") repo: Repo = tea.pot.git.get_repo(repo_name) if "grading" not in repo.remote().refs: diff --git a/joint_teapot/config.py b/joint_teapot/config.py index 9d4a15c..c65a745 100644 --- a/joint_teapot/config.py +++ b/joint_teapot/config.py @@ -48,4 +48,9 @@ def get_settings() -> Settings: return Settings() +def set_settings(new_settings: Settings) -> None: + for field, value in new_settings.model_dump(exclude_unset=True).items(): + setattr(settings, field, value) + + settings: Settings = get_settings() diff --git a/joint_teapot/utils/joj3.py b/joint_teapot/utils/joj3.py index c101aae..6dd9695 100644 --- a/joint_teapot/utils/joj3.py +++ b/joint_teapot/utils/joj3.py @@ -57,10 +57,10 @@ def generate_scoreboard( # Update data with open(score_file_path) as json_file: - scorefile: List[Dict[str, Any]] = json.load(json_file) + stages: List[Dict[str, Any]] = json.load(json_file) exercise_total_score = 0 - for stage in scorefile: + for stage in stages: for result in stage["results"]: exercise_total_score += result["score"] submitter_row[columns.index(exercise_name)] = str(exercise_total_score)