support for `--update-score' after manual update of score.json

This commit is contained in:
2026-06-06 10:10:53 +02:00
parent 80d06e4693
commit a80187ba80
3 changed files with 58 additions and 13 deletions
+22 -2
View File
@@ -91,7 +91,8 @@ def save_paginated_pdf(image_groups, output_path):
pages[0].save(output_path, "PDF", resolution=100.0, save_all=True, append_images=pages[1:])
def apply_actions_and_regenerate_grouped(root_dir, data, student_id,
actions, label_notes, all_labels):
actions, label_notes, all_labels,
update_score=False):
"""
Modifies data based on actions, pastes label-specific note crops,
regenerates label images for consistency, saves dirty ones,
@@ -155,6 +156,23 @@ def apply_actions_and_regenerate_grouped(root_dir, data, student_id,
logs.append(f" > Deleted rect in {label}")
dirty_labels.add(label)
# --- 1.5 Override with existing score.json if requested ---
if update_score and os.path.exists(score_path):
try:
with open(score_path, "r") as f:
existing_scores = json.load(f)
for label, existing_score in existing_scores.items():
if label in labels_data:
current_score = str(labels_data[label]['result'].get('score', 0))
# If manually modified, override the result and mark dirty
if current_score != str(existing_score):
labels_data[label]['result']['score'] = existing_score
dirty_labels.add(label)
logs.append(f" > Overrode score for {label} to {existing_score} from existing score.json")
except json.JSONDecodeError:
logs.append(f" > Warning: Could not read existing {score_path}")
# --- 2. Process Images (Regenerate & Concatenate) ---
concat_list = []
concat_list_F = []
@@ -258,6 +276,7 @@ if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Read grouped annotations and compile PDFs")
parser.add_argument("input_path", help="Directory path")
parser.add_argument("--refaire", action="store_true", help="Merge refaire annotations from Bnot")
parser.add_argument("--update-score", action="store_true", help="Override scores with values from existing score.json")
args = parser.parse_args()
root_dir = sys.argv[1]
@@ -396,7 +415,8 @@ if __name__ == "__main__":
sid,
actions_by_student[sid],
notes_by_student[sid],
all_labels
all_labels,
update_score=args.update_score
)
# --- 2. Process each student concurrently using 4 threads ---