Miscs improvements (Interro02)

This commit is contained in:
2026-09-15 14:18:22 +02:00
parent 0a86403ca6
commit 9b22a8a137
15 changed files with 893 additions and 118 deletions
+49 -4
View File
@@ -7,6 +7,7 @@ from collections.abc import Iterable
from dataclasses import dataclass
from pathlib import Path
from copienator import configuration
from copienator.configuration import ALWAYS_CROP
EVALUATION = "${evaluation}"
@@ -18,6 +19,7 @@ class ArgumentSpec:
label: str
kind: str = "text" # text, int, bool, choice, path
flag: str | None = None
false_flag: str | None = None
default: object = ""
choices: tuple[str, ...] = ()
help: str = ""
@@ -87,6 +89,38 @@ def build_workflow(show_personal_steps: bool) -> list[StepDefinition]:
ident, label, None, "manual"
)
return_answer_arguments = ()
if configuration.RETURN_ANSWERS_ENABLED:
return_answer_arguments = (
ArgumentSpec(
"return_answers_context",
"Inclure le contexte dans answers",
"bool",
"--return-answers-context",
"--no-return-answers-context",
default=configuration.RETURN_ANSWERS_CONTEXT,
help="Inclut les pages de contexte applicables avant chaque réponse individuelle publiée dans answers.",
),
ArgumentSpec(
"return_answers_question",
"Inclure l’énoncé dans answers",
"bool",
"--return-answers-question",
"--no-return-answers-question",
default=configuration.RETURN_ANSWERS_QUESTION,
help="Inclut l’énoncé actuel avant chaque réponse individuelle publiée dans answers.",
),
ArgumentSpec(
"return_answers_solution",
"Inclure la correction dans answers",
"bool",
"--return-answers-solution",
"--no-return-answers-solution",
default=configuration.RETURN_ANSWERS_SOLUTION,
help="Inclut la correction actuelle avant chaque réponse individuelle publiée dans answers.",
),
)
steps = [
StepDefinition(
"inputs",
@@ -533,10 +567,10 @@ def build_workflow(show_personal_steps: bool) -> list[StepDefinition]:
arg_target("le dossier de l’évaluation"),
ArgumentSpec(
"update_score",
"appliquer les score.json",
"générer avec les nouveaux énoncés/corrigés et les score.json",
"bool",
"--update-score",
help="utilise les valeurs présentes dans les fichiers score.json pour remplacer les scores lus dans les annotations.",
help="génère les images avec les PDF actuels d’énoncé et de correction ; pour chaque label, le score.json existant prévaut sur le score relu dans lannotation manuscrite.",
),
ArgumentSpec(
"refaire",
@@ -556,7 +590,7 @@ def build_workflow(show_personal_steps: bool) -> list[StepDefinition]:
help="Indique le dossier dannotations du passage principal dans lequel intégrer les questions refaites.",
variants=("grouped",),
),
),
) + return_answer_arguments,
),
StepDefinition(
"giving_names",
@@ -575,6 +609,13 @@ def build_workflow(show_personal_steps: bool) -> list[StepDefinition]:
help="Choisissez le dossier dannotations utilisé pour construire les fichiers nommés dans A Rendre.",
positional=True,
),
ArgumentSpec(
"update",
"Mettre à jour uniquement les images de answers",
"bool",
"--update",
help="Met à jour uniquement les images du dossier answers de chaque élève existant, en identifiant la copie par le numéro final entre parenthèses et sans modifier le nom du dossier ni les autres fichiers.",
),
),
artifacts=("A Rendre",),
),
@@ -632,7 +673,9 @@ def build_workflow(show_personal_steps: bool) -> list[StepDefinition]:
"final_score",
"Étapes personnelles",
"Ajouter le score final",
"Génère les fichiers de diffusion avec le score final.",
"Prérequis immédiat : gestion_classe wse doit avoir été exécuté juste avant. "
"Génère ensuite les dossiers de diffusion avec le score final, puis copie "
"gestion_classe/Staging/histogramme.pdf dans le dossier Server/copies de l’évaluation.",
(python("default", "Score final", "add-final-score", supports_verbose=False),),
arguments=(arg_target("le dossier de l’évaluation"),),
personal=True,
@@ -782,6 +825,8 @@ def build_command(
if spec.kind == "bool":
if bool(value) and spec.flag:
options.append(spec.flag)
elif not bool(value) and spec.false_flag:
options.append(spec.false_flag)
continue
if value is None or str(value).strip() == "":
continue