Skip to content
Extraits de code Groupes Projets

New studies & tests logic

Fusionnées Brieuc Dubois a demandé de fusionner surveys vers dev
3 fichiers
+ 104
4
Comparer les modifications
  • Côte à côte
  • En ligne
Fichiers
3
@@ -3,6 +3,11 @@ from sqlalchemy.orm import Session
import models
import schemas
import crud
from io import StringIO
import csv
from fastapi.responses import StreamingResponse
from utils import extract_text_between_angle_bracket
def create_study(db: Session, study: schemas.StudyCreate) -> models.Study:
@@ -70,3 +75,86 @@ def update_study(db: Session, study: schemas.StudyCreate, study_id: int) -> None
def delete_study(db: Session, study_id: int) -> None:
db.query(models.Study).filter(models.Study.id == study_id).delete()
db.commit()
def download_study(db: Session, study_id: int):
output = StringIO()
writer = csv.writer(output)
header = [
"study",
"test",
"group",
"item_id",
"user id",
"item type",
"response",
"correct",
"response time",
]
writer.writerow(header)
# TODO filter on study_id
# db_entries = db.query(models.TestEntry).filter(models.TestEntry.study_id == study_id).all()
db_entries = db.query(models.TestEntry).all()
for entry in db_entries:
if entry.entry_task is None:
continue
test_id = entry.test_id
test = crud.get_test(db, test_id).title
group_id = entry.entry_task.test_group_id
group = crud.get_group(db, group_id).title
item = entry.entry_task.test_question_id
user_id = entry.user_id
response_time = entry.entry_task.response_time
if entry.entry_task.entry_task_qcm:
selected_id = entry.entry_task.entry_task_qcm.selected_id
correct_id = entry.entry_task.test_question.question_qcm.correct
correct_answer = selected_id == correct_id
item_type = "qcm"
row = [
study_id,
test,
group,
item,
user_id,
item_type,
selected_id,
correct_answer,
response_time,
]
writer.writerow(row)
if entry.entry_task.entry_task_gapfill:
answer = entry.entry_task.entry_task_gapfill.text
correct = extract_text_between_angle_bracket(
entry.entry_task.test_question.question
)
correct_answer = answer == correct
item_type = "gapfill"
row = [
study_id,
test,
group,
item,
user_id,
item_type,
answer,
correct_answer,
response_time,
]
writer.writerow(row)
output.seek(0)
return StreamingResponse(
output,
media_type="text/csv",
headers={"Content-Disposition": f"attachment; filename={study_id}-surveys.csv"},
)
Chargement en cours