220 lines
8.4 KiB
Python
220 lines
8.4 KiB
Python
import click
|
|
from flask.cli import with_appcontext
|
|
from models import db, ClassGroup, Student, Assessment, Exercise, GradingElement
|
|
|
|
@click.command()
|
|
@with_appcontext
|
|
def init_db():
|
|
"""Initialize the database with sample data."""
|
|
db.create_all()
|
|
|
|
# Check if data already exists
|
|
if ClassGroup.query.first():
|
|
click.echo("Database already initialized!")
|
|
return
|
|
|
|
# Create sample class groups
|
|
classe_6a = ClassGroup(name="6ème A", description="Classe de 6ème A", year="2024-2025")
|
|
classe_5b = ClassGroup(name="5ème B", description="Classe de 5ème B", year="2024-2025")
|
|
|
|
db.session.add(classe_6a)
|
|
db.session.add(classe_5b)
|
|
db.session.commit()
|
|
|
|
# Create sample students
|
|
students_data = [
|
|
("Dupont", "Marie", "marie.dupont@email.com", classe_6a.id),
|
|
("Martin", "Pierre", "pierre.martin@email.com", classe_6a.id),
|
|
("Durand", "Sophie", "sophie.durand@email.com", classe_6a.id),
|
|
("Moreau", "Lucas", "lucas.moreau@email.com", classe_5b.id),
|
|
("Bernard", "Emma", "emma.bernard@email.com", classe_5b.id),
|
|
]
|
|
|
|
for last_name, first_name, email, class_group_id in students_data:
|
|
student = Student(
|
|
last_name=last_name,
|
|
first_name=first_name,
|
|
email=email,
|
|
class_group_id=class_group_id
|
|
)
|
|
db.session.add(student)
|
|
|
|
db.session.commit()
|
|
|
|
# Create sample assessment
|
|
assessment = Assessment(
|
|
title="Évaluation de mathématiques",
|
|
description="Évaluation sur les fractions et les décimaux",
|
|
trimester=1,
|
|
class_group_id=classe_6a.id,
|
|
coefficient=2.0
|
|
)
|
|
db.session.add(assessment)
|
|
db.session.commit()
|
|
|
|
# Create sample exercise
|
|
exercise = Exercise(
|
|
assessment_id=assessment.id,
|
|
title="Exercice 1 - Fractions",
|
|
description="Calculs avec les fractions",
|
|
order=1
|
|
)
|
|
db.session.add(exercise)
|
|
db.session.commit()
|
|
|
|
# Create sample grading elements
|
|
elements_data = [
|
|
("Calcul de base", "Addition et soustraction de fractions", "Calculer", 4.0, "notes"),
|
|
("Méthode", "Justification de la méthode utilisée", "Raisonner", 2.0, "score"),
|
|
("Présentation", "Clarté de la présentation", "Communiquer", 2.0, "score"),
|
|
]
|
|
|
|
for label, description, skill, max_points, grading_type in elements_data:
|
|
element = GradingElement(
|
|
exercise_id=exercise.id,
|
|
label=label,
|
|
description=description,
|
|
skill=skill,
|
|
max_points=max_points,
|
|
grading_type=grading_type
|
|
)
|
|
db.session.add(element)
|
|
|
|
db.session.commit()
|
|
click.echo("Database initialized with sample data!")
|
|
|
|
@click.command()
|
|
@with_appcontext
|
|
def create_large_test_data():
|
|
"""Create large test data: 30 students and complex assessment."""
|
|
|
|
# Create a large class with 30 students
|
|
classe_test = ClassGroup(name="3ème Test", description="Classe de test avec 30 élèves", year="2024-2025")
|
|
db.session.add(classe_test)
|
|
db.session.commit()
|
|
|
|
# Generate 30 students with realistic French names
|
|
first_names = ["Alice", "Antoine", "Amélie", "Alexandre", "Anna", "Adrien", "Camille", "Clément", "Charlotte", "Clément",
|
|
"Emma", "Ethan", "Elise", "Enzo", "Eva", "Fabien", "Fanny", "Gabriel", "Giulia", "Hugo",
|
|
"Inès", "Jules", "Jade", "Kévin", "Léa", "Louis", "Marie", "Mathis", "Nina", "Oscar"]
|
|
|
|
last_names = ["Martin", "Bernard", "Dubois", "Thomas", "Robert", "Richard", "Petit", "Durand", "Leroy", "Moreau",
|
|
"Simon", "Laurent", "Lefebvre", "Michel", "Garcia", "David", "Bertrand", "Roux", "Vincent", "Fournier",
|
|
"Morel", "Girard", "André", "Lefèvre", "Mercier", "Dupont", "Lambert", "Bonnet", "François", "Martinez"]
|
|
|
|
for i in range(30):
|
|
student = Student(
|
|
last_name=last_names[i],
|
|
first_name=first_names[i],
|
|
email=f"{first_names[i].lower()}.{last_names[i].lower()}@test.com",
|
|
class_group_id=classe_test.id
|
|
)
|
|
db.session.add(student)
|
|
|
|
db.session.commit()
|
|
|
|
# Create a complex assessment with 4 exercises, 5 elements each
|
|
assessment = Assessment(
|
|
title="Contrôle de Mathématiques - Fonctions et Statistiques",
|
|
description="Évaluation complète sur les fonctions affines et les statistiques descriptives",
|
|
trimester=2,
|
|
class_group_id=classe_test.id,
|
|
coefficient=3.0
|
|
)
|
|
db.session.add(assessment)
|
|
db.session.commit()
|
|
|
|
# Exercise 1: Fonctions affines
|
|
ex1 = Exercise(
|
|
assessment_id=assessment.id,
|
|
title="Ex1 - Fonctions affines",
|
|
description="Calculs et représentations graphiques",
|
|
order=1
|
|
)
|
|
db.session.add(ex1)
|
|
db.session.commit()
|
|
|
|
ex1_elements = [
|
|
("1a - Calcul image", "Calculer f(3)", "Calculer", 2.0, "notes"),
|
|
("1b - Antécédent", "Résoudre f(x)=5", "Calculer", 3.0, "notes"),
|
|
("1c - Graphique", "Tracer la droite", "Représenter", 3.0, "score"),
|
|
("1d - Lecture graph", "Lire coordonnées", "Modéliser", 2.0, "notes"),
|
|
("1e - Méthode", "Justification", "Raisonner", 2.0, "score")
|
|
]
|
|
|
|
for label, desc, skill, points, gtype in ex1_elements:
|
|
elem = GradingElement(exercise_id=ex1.id, label=label, description=desc,
|
|
skill=skill, max_points=points, grading_type=gtype)
|
|
db.session.add(elem)
|
|
|
|
# Exercise 2: Équations
|
|
ex2 = Exercise(
|
|
assessment_id=assessment.id,
|
|
title="Ex2 - Équations du 1er degré",
|
|
description="Résolution d'équations",
|
|
order=2
|
|
)
|
|
db.session.add(ex2)
|
|
db.session.commit()
|
|
|
|
ex2_elements = [
|
|
("2a - Équation simple", "Résoudre 2x+3=7", "Calculer", 2.0, "notes"),
|
|
("2b - Avec parenthèses", "3(x-1)=2x+5", "Calculer", 4.0, "notes"),
|
|
("2c - Vérification", "Contrôler solution", "Raisonner", 1.0, "score"),
|
|
("2d - Méthode", "Étapes de résolution", "Communiquer", 2.0, "score"),
|
|
("2e - Application", "Problème concret", "Modéliser", 3.0, "score")
|
|
]
|
|
|
|
for label, desc, skill, points, gtype in ex2_elements:
|
|
elem = GradingElement(exercise_id=ex2.id, label=label, description=desc,
|
|
skill=skill, max_points=points, grading_type=gtype)
|
|
db.session.add(elem)
|
|
|
|
# Exercise 3: Statistiques
|
|
ex3 = Exercise(
|
|
assessment_id=assessment.id,
|
|
title="Ex3 - Statistiques descriptives",
|
|
description="Moyennes, médianes, quartiles",
|
|
order=3
|
|
)
|
|
db.session.add(ex3)
|
|
db.session.commit()
|
|
|
|
ex3_elements = [
|
|
("3a - Moyenne", "Calculer moyenne", "Calculer", 3.0, "notes"),
|
|
("3b - Médiane", "Déterminer médiane", "Calculer", 2.0, "notes"),
|
|
("3c - Quartiles", "Q1 et Q3", "Calculer", 4.0, "notes"),
|
|
("3d - Interprétation", "Analyser résultats", "Raisonner", 3.0, "score"),
|
|
("3e - Graphique", "Diagramme en boîte", "Représenter", 2.0, "score")
|
|
]
|
|
|
|
for label, desc, skill, points, gtype in ex3_elements:
|
|
elem = GradingElement(exercise_id=ex3.id, label=label, description=desc,
|
|
skill=skill, max_points=points, grading_type=gtype)
|
|
db.session.add(elem)
|
|
|
|
# Exercise 4: Problème de synthèse
|
|
ex4 = Exercise(
|
|
assessment_id=assessment.id,
|
|
title="Ex4 - Problème de synthèse",
|
|
description="Application des notions",
|
|
order=4
|
|
)
|
|
db.session.add(ex4)
|
|
db.session.commit()
|
|
|
|
ex4_elements = [
|
|
("4a - Modélisation", "Mise en équation", "Modéliser", 4.0, "score"),
|
|
("4b - Résolution", "Calculs", "Calculer", 5.0, "notes"),
|
|
("4c - Interprétation", "Sens du résultat", "Raisonner", 3.0, "score"),
|
|
("4d - Communication", "Rédaction", "Communiquer", 3.0, "score"),
|
|
("4e - Démarche", "Organisation", "Raisonner", 3.0, "score")
|
|
]
|
|
|
|
for label, desc, skill, points, gtype in ex4_elements:
|
|
elem = GradingElement(exercise_id=ex4.id, label=label, description=desc,
|
|
skill=skill, max_points=points, grading_type=gtype)
|
|
db.session.add(elem)
|
|
|
|
db.session.commit()
|
|
click.echo(f"Created test data: {classe_test.name} with 30 students and complex assessment with 4 exercises (20 grading elements total)!") |