fix: resolve ruff linting issues and improve code formatting

This commit is contained in:
2025-09-26 08:25:02 +02:00
parent 28b1c80b50
commit 7284c60b93
2 changed files with 49 additions and 33 deletions
+23 -11
View File
@@ -1,21 +1,23 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import random import random
import io
from fpdf import FPDF from fpdf import FPDF
def generer_nombre(): def generer_nombre():
"""Génère un nombre naturel entre 1 et 9""" """Génère un nombre naturel entre 1 et 9"""
return random.randint(1, 9) return random.randint(1, 9)
def evaluer_expression(expr): def evaluer_expression(expr):
"""Évalue une expression mathématique en remplaçant × par *""" """Évalue une expression mathématique en remplaçant × par *"""
try: try:
# Remplacer × par * pour l'évaluation # Remplacer × par * pour l'évaluation
expr_eval = expr.replace('×', '*') expr_eval = expr.replace("×", "*")
return eval(expr_eval) return eval(expr_eval)
except: except Exception:
return -1 # En cas d'erreur, considérer comme négatif return -1 # En cas d'erreur, considérer comme négatif
def generer_expression(): def generer_expression():
"""Génère une expression aléatoire respectant les contraintes""" """Génère une expression aléatoire respectant les contraintes"""
# On choisit aléatoirement un type d'expression (avec ou sans parenthèses) # On choisit aléatoirement un type d'expression (avec ou sans parenthèses)
@@ -43,6 +45,7 @@ def generer_expression():
if resultat >= 0: if resultat >= 0:
return expr return expr
def generer_feuille_exercices(n_exercices=20): def generer_feuille_exercices(n_exercices=20):
"""Génère une feuille d'exercices en format 2 colonnes""" """Génère une feuille d'exercices en format 2 colonnes"""
expressions = [generer_expression() for _ in range(n_exercices)] expressions = [generer_expression() for _ in range(n_exercices)]
@@ -50,12 +53,13 @@ def generer_feuille_exercices(n_exercices=20):
# Format 2 colonnes : on affiche par paires # Format 2 colonnes : on affiche par paires
output = "" output = ""
for i in range(0, n_exercices, 2): for i in range(0, n_exercices, 2):
expr1 = f"{i+1}. {expressions[i]}" expr1 = f"{i + 1}. {expressions[i]}"
expr2 = f"{i+2}. {expressions[i+1]}" if i+1 < len(expressions) else "" expr2 = f"{i + 2}. {expressions[i + 1]}" if i + 1 < len(expressions) else ""
# Alignement pour deux colonnes # Alignement pour deux colonnes
output += f"{expr1:<36} {expr2}\n" + " " * 36 + " \n" * 3 output += f"{expr1:<36} {expr2}\n" + " " * 36 + " \n" * 3
return output return output
def generer_pdf_exercices_en_memoire(n_exercices=20): def generer_pdf_exercices_en_memoire(n_exercices=20):
"""Génère une feuille d'exercices au format PDF en mémoire""" """Génère une feuille d'exercices au format PDF en mémoire"""
pdf = FPDF() pdf = FPDF()
@@ -63,7 +67,14 @@ def generer_pdf_exercices_en_memoire(n_exercices=20):
pdf.set_font("Helvetica", size=12) pdf.set_font("Helvetica", size=12)
# Titre # Titre
pdf.cell(200, 10, text="Feuille d'exercices d'opérations", new_x="LMARGIN", new_y="NEXT", align='C') pdf.cell(
200,
10,
text="Feuille d'exercices d'opérations",
new_x="LMARGIN",
new_y="NEXT",
align="C",
)
pdf.ln(10) pdf.ln(10)
# Contenu en 2 colonnes # Contenu en 2 colonnes
@@ -71,13 +82,13 @@ def generer_pdf_exercices_en_memoire(n_exercices=20):
for i in range(0, n_exercices, 2): for i in range(0, n_exercices, 2):
# Colonne 1 # Colonne 1
expr1 = f"{i+1}. {expressions[i]}" expr1 = f"{i + 1}. {expressions[i]}"
pdf.cell(90, 10, text=expr1, border=0, align='L') pdf.cell(90, 10, text=expr1, border=0, align="L")
# Colonne 2 # Colonne 2
if i+1 < len(expressions): if i + 1 < len(expressions):
expr2 = f"{i+2}. {expressions[i+1]}" expr2 = f"{i + 2}. {expressions[i + 1]}"
pdf.cell(90, 10, text=expr2, border=0, align='L') pdf.cell(90, 10, text=expr2, border=0, align="L")
pdf.ln(10) pdf.ln(10)
# Espacement supplémentaire - ajout de deux lignes vides supplémentaires # Espacement supplémentaire - ajout de deux lignes vides supplémentaires
@@ -86,6 +97,7 @@ def generer_pdf_exercices_en_memoire(n_exercices=20):
# Retourner les données PDF en mémoire # Retourner les données PDF en mémoire
return pdf.output() return pdf.output()
def generer_pdf_exercices(n_exercices=20, output_file="exercices.pdf"): def generer_pdf_exercices(n_exercices=20, output_file="exercices.pdf"):
"""Génère une feuille d'exercices au format PDF""" """Génère une feuille d'exercices au format PDF"""
pdf_data = generer_pdf_exercices_en_memoire(n_exercices) pdf_data = generer_pdf_exercices_en_memoire(n_exercices)
+6 -2
View File
@@ -6,7 +6,6 @@ import io
import boto3 import boto3
import zipfile import zipfile
import tempfile import tempfile
import importlib.util
from botocore.exceptions import ClientError from botocore.exceptions import ClientError
from typing import List from typing import List
from fastapi import FastAPI, Request, Form from fastapi import FastAPI, Request, Form
@@ -20,12 +19,14 @@ import logging
# Import the functions from gen_op.py # Import the functions from gen_op.py
from app.gen_op import generer_pdf_exercices_en_memoire from app.gen_op import generer_pdf_exercices_en_memoire
# Custom filter to exclude health check logs # Custom filter to exclude health check logs
class HealthCheckFilter(logging.Filter): class HealthCheckFilter(logging.Filter):
def filter(self, record: logging.LogRecord) -> bool: def filter(self, record: logging.LogRecord) -> bool:
# Exclude health check requests from logs # Exclude health check requests from logs
return "GET /health " not in record.getMessage() return "GET /health " not in record.getMessage()
# Apply the filter to Uvicorn's access logger # Apply the filter to Uvicorn's access logger
logging.getLogger("uvicorn.access").addFilter(HealthCheckFilter()) logging.getLogger("uvicorn.access").addFilter(HealthCheckFilter())
@@ -167,6 +168,7 @@ class ExerciseRequest(BaseModel):
max_table: int max_table: int
num_exercises: int = 15 num_exercises: int = 15
class OperationExerciseRequest(BaseModel): class OperationExerciseRequest(BaseModel):
num_exercises: int = 20 num_exercises: int = 20
@@ -324,7 +326,9 @@ def create_operation_exercises_pdf(num_exercises: int = 20) -> str:
pdf_data = generer_pdf_exercices_en_memoire(num_exercises) pdf_data = generer_pdf_exercices_en_memoire(num_exercises)
# Upload to S3 # Upload to S3
upload_success = upload_to_s3(pdf_data, S3_BUCKET_NAME, pdf_filename, "application/pdf") upload_success = upload_to_s3(
pdf_data, S3_BUCKET_NAME, pdf_filename, "application/pdf"
)
if not upload_success: if not upload_success:
raise Exception("Failed to upload PDF to S3") raise Exception("Failed to upload PDF to S3")