feat: joj3 commands load settings from file
This commit is contained in:
parent
5426d4c0b2
commit
0c2fdaaa34
|
@ -6,6 +6,7 @@ from typing import List
|
||||||
from git import Repo
|
from git import Repo
|
||||||
from typer import Argument, Option, Typer, echo
|
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.teapot import Teapot
|
||||||
from joint_teapot.utils import joj3
|
from joint_teapot.utils import joj3
|
||||||
from joint_teapot.utils.logger import logger
|
from joint_teapot.utils.logger import logger
|
||||||
|
@ -205,10 +206,11 @@ def unsubscribe_from_repos(pattern: str = Argument("")) -> None:
|
||||||
|
|
||||||
|
|
||||||
@app.command(
|
@app.command(
|
||||||
"JOJ3-scoreboard",
|
"joj3-scoreboard",
|
||||||
help="parse JOJ3 score json file into scoreboard and upload to gitea",
|
help="parse JOJ3 score json file into scoreboard and upload to gitea",
|
||||||
)
|
)
|
||||||
def JOJ3_scoreboard(
|
def JOJ3_scoreboard(
|
||||||
|
env_path: str = Argument("", help="path to .env file"),
|
||||||
scorefile_path: str = Argument(
|
scorefile_path: str = Argument(
|
||||||
"", help="path to score json file generated by JOJ3"
|
"", 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"
|
"", help="name of scoreboard file in the gitea repo"
|
||||||
),
|
),
|
||||||
) -> None:
|
) -> None:
|
||||||
|
set_settings(Settings(_env_file=env_path))
|
||||||
repo_path = tea.pot.git.repo_clean_and_checkout(repo_name, "grading")
|
repo_path = tea.pot.git.repo_clean_and_checkout(repo_name, "grading")
|
||||||
repo: Repo = tea.pot.git.get_repo(repo_name)
|
repo: Repo = tea.pot.git.get_repo(repo_name)
|
||||||
if "grading" not in repo.remote().refs:
|
if "grading" not in repo.remote().refs:
|
||||||
|
@ -248,10 +251,11 @@ def JOJ3_scoreboard(
|
||||||
|
|
||||||
|
|
||||||
@app.command(
|
@app.command(
|
||||||
"JOJ3-failed-table",
|
"joj3-failed-table",
|
||||||
help="parse JOJ3 score json file into failed table markdown file and upload to gitea",
|
help="parse JOJ3 score json file into failed table markdown file and upload to gitea",
|
||||||
)
|
)
|
||||||
def JOJ3_failed_table(
|
def JOJ3_failed_table(
|
||||||
|
env_path: str = Argument("", help="path to .env file"),
|
||||||
scorefile_path: str = Argument(
|
scorefile_path: str = Argument(
|
||||||
"", help="path to score json file generated by JOJ3"
|
"", 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"
|
"", help="name of failed table file in the gitea repo"
|
||||||
),
|
),
|
||||||
) -> None:
|
) -> None:
|
||||||
|
set_settings(Settings(_env_file=env_path))
|
||||||
repo_path = tea.pot.git.repo_clean_and_checkout(repo_name, "grading")
|
repo_path = tea.pot.git.repo_clean_and_checkout(repo_name, "grading")
|
||||||
repo: Repo = tea.pot.git.get_repo(repo_name)
|
repo: Repo = tea.pot.git.get_repo(repo_name)
|
||||||
if "grading" not in repo.remote().refs:
|
if "grading" not in repo.remote().refs:
|
||||||
|
|
|
@ -48,4 +48,9 @@ def get_settings() -> Settings:
|
||||||
return 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()
|
settings: Settings = get_settings()
|
||||||
|
|
|
@ -57,10 +57,10 @@ def generate_scoreboard(
|
||||||
|
|
||||||
# Update data
|
# Update data
|
||||||
with open(score_file_path) as json_file:
|
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
|
exercise_total_score = 0
|
||||||
for stage in scorefile:
|
for stage in stages:
|
||||||
for result in stage["results"]:
|
for result in stage["results"]:
|
||||||
exercise_total_score += result["score"]
|
exercise_total_score += result["score"]
|
||||||
submitter_row[columns.index(exercise_name)] = str(exercise_total_score)
|
submitter_row[columns.index(exercise_name)] = str(exercise_total_score)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user