- Split monolithic app.py (400+ lines) into organized modules - Extract models, forms, and commands into separate files - Implement Flask blueprints for route organization - Maintain full functionality with cleaner architecture - Update all templates to use new blueprint URLs - Enhance README with technical documentation Structure: ├── app.py (50 lines) - Flask app factory ├── models.py (62 lines) - SQLAlchemy models ├── forms.py (43 lines) - WTForms definitions ├── commands.py (74 lines) - CLI commands └── routes/ - Blueprint modules for each feature 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
83 lines
2.7 KiB
Python
83 lines
2.7 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",
|
|
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, "points"),
|
|
("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!") |