Recorrection GUI step ; LaTeX issues debugging

This commit is contained in:
sebastien committed 2026-10-10 20:40:48 +02:00
1 parent 2d0f7a219f
commit 48602c24f1
12 files changed
+306 -8

No files matched your search

+29
View File
@@ -30,6 +30,7 @@ from .scores import ScoreEditorPanel
from .notifications import notify_desktop
from .syncthing import SyncthingPanel
from .manual_resolution import ManualResolutionPanel
from .recorrection import prepare_selection_file
from .refaire import SECTION as REFAIRE_SECTION
from .refaire import (
RefaireSelection,
@@ -930,6 +931,14 @@ class CopienatorApp(tk.Tk):
self.arg_vars['target'].trace_add('write', lambda *_args: self._refresh_persp_inventory())
self._refresh_persp_inventory()
if step.id == "prepare_recorrection":
self.edit_recorrection_button = ttk.Button(
self.form, text="Ouvrir refaire.json (avec exemples)",
command=self._edit_recorrection,
)
self.edit_recorrection_button.grid(row=row, column=0, columnspan=2, sticky="w", pady=8)
row += 1
if step.id == "manual_resolution":
def manual_evaluation():
target = self.arg_vars.get("target")
@@ -1117,6 +1126,7 @@ class CopienatorApp(tk.Tk):
"cutleft",
"labels",
"plotting",
"splitting",
}
if step.id in copy_selection_steps:
evaluation = self.evaluation
@@ -1310,6 +1320,16 @@ class CopienatorApp(tk.Tk):
except (OSError, RuntimeError) as exc:
messagebox.showerror("Ouverture impossible", str(exc))
def _edit_recorrection(self) -> None:
if self.evaluation is None:
return
try:
path = prepare_selection_file(self.evaluation)
except OSError as exc:
messagebox.showerror("Préparation impossible", str(exc))
return
self._open_desktop_path(path, "fichier refaire.json")
def _select_variant(self, index: int) -> None:
if not self.current_step or index < 0:
return
@@ -1546,6 +1566,15 @@ class CopienatorApp(tk.Tk):
if step.id == "refaire_selection":
self._save_refaire_selection()
return
if step.id == "prepare_recorrection":
try:
load_selection(evaluation)
except (OSError, ValueError, TypeError) as exc:
messagebox.showerror("Sélection à vérifier", str(exc))
return
self._mark_step("success")
self._select_refaire_correction()
return
if step.section == REFAIRE_SECTION:
try:
self._refaire_selection()
+25
View File
@@ -0,0 +1,25 @@
"""Editable examples for the optional correction redo step."""
from pathlib import Path
from copienator import atomic_write_text
EXAMPLES = """// Exemples de sélection pour refaire la correction
// Les lignes commençant par // sont des commentaires et sont ignorées.
// Modifiez la liste JSON ci-dessous, puis enregistrez le fichier.
// Une copie entière : [["Copie46", []]]
// Certaines questions : [["Copie46", ["II)8)", "II)9)"]]
// Plusieurs copies : [["Copie46", []], ["Copie03", ["Ex 1"]]]
// Utilisez les noms exacts des copies et des labels de votre évaluation.
// [] après une copie signifie toutes ses questions ; [] seul ne sélectionne rien.
// Séparez les entrées par des virgules, sans virgule après la dernière.
"""
def prepare_selection_file(evaluation: Path) -> Path:
path = evaluation / "refaire.json"
existing = path.read_text(encoding="utf-8") if path.exists() else "[]\n"
if not existing.startswith(EXAMPLES):
atomic_write_text(path, EXAMPLES + existing)
return path
+15 -2
View File
@@ -371,12 +371,12 @@ def build_workflow(show_personal_steps: bool) -> list[StepDefinition]:
"splitting",
"Labels et regroupement",
"Découper les réponses par question",
"Découpe les copies à partir des coordonnées de labels vérifiées.",
"Découpe les copies à partir des coordonnées de labels vérifiées. "
"Ciblez une copie avec le sélecteur ou tout le dossier, puis cliquez sur Exécuter.",
(python("default", "Découpage", "split-answers"),),
arguments=(arg_target(),),
requires=("Copies",),
artifacts=("Copies/Copie*/*",),
auto_start_first_visit=True,
),
StepDefinition(
"crop_exercise_bottoms",
@@ -511,6 +511,19 @@ def build_workflow(show_personal_steps: bool) -> list[StepDefinition]:
requires=("manual_resolutions.txt", "correction.json"),
skip_without_manual_conflicts=True,
),
StepDefinition(
"prepare_recorrection",
"Correction",
"Choisir des copies à recorriger",
"Facultatif : ouvrez refaire.json et indiquez les copies entières ou les questions à recorriger. "
"Les exemples commentés expliquent la syntaxe. Enregistrez le fichier, puis marquez cette étape terminée : "
"vous reviendrez à Correction avec --refaire sélectionné, sans lancement automatique. "
"Les corrections sélectionnées seront remplacées ; celles des autres copies seront conservées. "
"Si vous avez modifié les découpes, régénérez les réponses avant la recorrection. "
"Ignorez cette étape si aucune reprise n’est nécessaire.",
(manual("default"),),
optional=True,
),
StepDefinition(
"post_correction",
"Correction",