Windows compatibility

This commit is contained in:
2026-08-20 12:01:31 +02:00
parent 7c366a9ca4
commit ac4ab782b2
20 changed files with 634 additions and 134 deletions
+27 -18
View File
@@ -1,16 +1,29 @@
import argparse
import math
import sys
import os
import shutil
import sys
from pathlib import Path
import pandas as pd
from PIL import Image, ImageDraw, ImageFont
from config import FINAL_SCORE_FONT_PATH, FINAL_SCORE_ODS_PATH, FINAL_SCORE_OUTPUT_DIR
# Configuration constants
ODS_PATH = "/home/sebastien/Rust/gestion_classe/Staging/simple_eval.ods"
OUTPUT_DIR = Path("/home/sebastien/Rust/Server/copies")
FONT_PATH = "/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf" # Standard Linux font path
ODS_PATH = Path(FINAL_SCORE_ODS_PATH).expanduser()
OUTPUT_DIR = Path(FINAL_SCORE_OUTPUT_DIR).expanduser()
def score_font(size):
candidates = [FINAL_SCORE_FONT_PATH, "DejaVuSans-Bold.ttf", "arial.ttf"]
for candidate in candidates:
if not candidate:
continue
try:
return ImageFont.truetype(str(candidate), size)
except OSError:
continue
return ImageFont.load_default()
def get_rounded_score(score):
"""Round score to one decimal place below (floor)."""
@@ -20,7 +33,7 @@ def get_rounded_score(score):
except (ValueError, TypeError):
return None
def process_images(base_dir):
def process_images(base_dir, output_dir):
# 1. Load Data
try:
# header=None assumes the file starts directly with data.
@@ -33,7 +46,7 @@ def process_images(base_dir):
sys.exit(1)
# 2. Prepare Output Directory
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
output_dir.mkdir(parents=True, exist_ok=True)
# 3. Iterate Files
# Structure: Dir/A Rendre/{name}/{name}.jpg
@@ -68,12 +81,7 @@ def process_images(base_dir):
# Dynamic font size (15% of image height)
font_size = int(width * 0.08)
try:
font = ImageFont.truetype(FONT_PATH, font_size)
except IOError:
# Fallback if specific font not found
font = ImageFont.load_default()
print(f"Warning: System font not found, using default for {student_name}")
font = score_font(font_size)
text = str(score)
@@ -90,7 +98,7 @@ def process_images(base_dir):
draw.text((x, y), text, fill=(255, 0, 0), font=font)
# Save
save_path = OUTPUT_DIR / f"{student_name}.jpg"
save_path = output_dir / f"{student_name}.jpg"
img.save(save_path)
print(f"Processed: {student_name} -> {score}")
@@ -99,7 +107,7 @@ def process_images(base_dir):
for pdf_path in sorted(search_path.glob("*/*.pdf")):
student_name = pdf_path.stem # Filename without extension
save_path = OUTPUT_DIR / f"{student_name}.pdf"
save_path = output_dir / f"{student_name}.pdf"
shutil.copy(str(pdf_path), str(save_path))
@@ -111,6 +119,7 @@ if __name__ == "__main__":
args = parser.parse_args()
OUTPUT_DIR = OUTPUT_DIR / args.dir
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
process_images(args.dir)
base_dir = args.dir.expanduser().resolve()
output_dir = OUTPUT_DIR / base_dir.name
output_dir.mkdir(parents=True, exist_ok=True)
process_images(base_dir, output_dir)