def getStudents(): ''' Consult the students ''' db = connect() if db.students.count() > 0: return convert_raw_data({"data": list(db.students.find())}) else: return abort(404, "No students found")
def getStudentsStatus(status): db = connect() if status == "missing": status = False group = None students = list(db.students.find({"status": status, "group": None})) elif status == "empty": status = False files_nb = 0 students = list(db.students.find({"status": status, "files_nb": 0})) elif status in ["True", "true", "OK", "correct"]: status = True students = list(db.students.find({"status": status})) elif status in ["False", "false", "bug", "error", "wrong", "incorrect"]: status = False students = list(db.students.find({"status": status})) else: return abort(406, "Status {} is not supported".format(status)) if len(students) > 0: return convert_raw_data({"data": students}) else: return abort( 404, "No student with status {} has been found.".format(status))
def get_classroom_subject_chapter( classroom, subject): if int(classroom) not in range(1, 60): raise abort(406, "L'identifiant de la classe `{}` est incorrect, vérifiez votre identifiant.".format(classroom)) if int(classroom) not in db.students.distinct("classroom"): raise abort(404, "La classe `{}` n'a pas été trouvée".format(classroom)) if subject not in ["letters", "numbers"]: raise abort(406, "Le sujet `{}` n'existe pas encore.".format(subject)) if subject == "letters": subject_name = "Français" dataset = "gp" else: subject_name = "Maths" dataset = "numbers" dataset_ref = db.datasets.find_one({"dataset": dataset}) if dataset_ref is None: raise abort(406, "Le nom du dataset `{}` est incorrect.".format(dataset)) else: if dataset_ref["subject"] == "letters": subject_name = "Français" else: subject_name = "Maths" lessons_refs = list(db.path.find({"dataset": dataset}, {"_id":0})) class_lessons = list(db.student_lessons.find({"classroom": classroom, "dataset": dataset}, {"_id":0, "lessons":0})) if len(class_lessons) == 0: raise abort(404, "Pas de données pour la classe {} sur le sujet {}.".format(classroom, subject)) return convert_raw_data({"data": sorted(class_lessons, key=lambda x:x["student"])})
def get_classroom_chapters( classroom, subject): ''' For readibility purpose we do not expose the matrix graph but the raw data''' if int(classroom) not in range(1, 60): raise abort(406, "L'identifiant de la classe `{}` est incorrect, vérifiez votre identifiant.".format(classroom)) if int(classroom) not in db.students.distinct("classroom"): raise abort(404, "La classe `{}` n'a pas été trouvée".format(classroom)) if subject not in ["letters", "numbers"]: raise abort(406, "Le sujet `{}` n'existe pas encore.".format(subject)) if subject == "letters": subject_name = "Français" dataset = "gp" else: subject_name = "Maths" dataset = "numbers" dataset_ref = db.datasets.find_one({"dataset": dataset}) if dataset_ref is None: raise abort(406, "Le nom du dataset `{}` est incorrect.".format(dataset)) else: if dataset_ref["subject"] == "letters": subject_name = "Français" else: subject_name = "Maths" lessons_refs = list(db.path.find({"dataset": dataset}, {"_id":0})) lessons = db.path.distinct("lesson",{"dataset": dataset}) u_tags = sorted([(t,db.path.find_one({"tag":t}, {"lesson":1})["lesson"]) for t in db.path.distinct("tag", {"dataset": dataset})], key=lambda x: x[1]) tags = [n[0] for n in u_tags] class_lessons = list(db.student_lessons.find({"classroom": classroom, "dataset": dataset}, {"_id":0, "lessons":0})) students = [db.students.find_one({"student": n["student"]}, {"kid":1, "tablet":1}) for n in class_lessons] if len(class_lessons) == 0: raise abort(404, "Pas de données pour la classe {} sur le sujet {}.".format(classroom, subject)) return convert_raw_data({"data":sorted(class_lessons, key= lambda x:x["student"])})
def get_StudentDatasetConfusion(student, subject): if subject =="letters": dataset = "gp" else: dataset = "numbers" print(subject) chapter_confusion = list(db.student_confusion.find( {"student": student, "subject": subject}, {"_id":0,"title":0, "lessons":0})) # print(chapter_confusion) headers = list(chapter_confusion[0].keys()) confusion = [] for n in sorted(chapter_confusion, key = lambda x: x["chapter"]): n["timespent"] = round(n["timespent"], 2) if n["stimulus"] == n["target"]: n["miss_rate"] = n["WA_rate"] n["hit_rate"] = n["CA_rate"] n["fa_rate"] = None n["cr_rate"] = None else: n["miss_rate"] = None n["hit_rate"] = None n["fa_rate"] = n["WA_rate"] n["cr_rate"] = n["CA_rate"] n["dataset"] = dataset confusion.append(n) return convert_raw_data({"data": confusion})
def get_words(): """ Consult the words """ words = list(db.words.find({}, {"_id": 0})) if len(words) == 0: return abort(404, u"404 - No Data") return convert_raw_data( {"data": sorted(words, key=lambda x: x["nb_letters"])})
def getClassrooms(): db = connect() # for n in db.students.distinct("classroom"): # classroom = list(db.students.find("classroom")) return convert_raw_data({ "data": sorted(db.students.find({}, {"_id": 0}), key=lambda x: x["classroom"]) })
def getChapters(): db = connect() if db.path.count() == 0: raise abort(500, "Table path is empty: initialize the database") lessons = list( db.path.find({"chapter": { "$exists": True, "$ne": None }}, {"_id": 0})) if len(lessons) == 0: raise abort(404, "Pas de leçons") return convert_raw_data({"data": lessons})
def getStudent(student): db = connect() if int(student) not in range(110, 60820): return abort( 406, "L'identifiant de l'élève {} est incorrect".format(student)) if int(student) not in db.students.distinct("student"): return abort(404, "L'élève n'a pas été trouvé") student_line = db.students.find_one({"_id": int(student)}) if student_line is not None: return convert_raw_data({"data": student_line}) else: return abort( 404, "Aucune donnée disponible pour cet élève pour ce dataset")
def get_student_last_lesson( subject, student): if subject == "letters": subject_name = "Français" dataset = "gp" else: subject_name = "Maths" dataset = "numbers" lessons = db.student_lessons.find_one({"student": student, "dataset": dataset}, {"_id":0, "lessons":0}) last_lesson_id = lessons["lesson_ids"][-1] if len(chapters) == 0: raise abort(404, "Pas de données pour l'étudiant {} sur le sujet {}".format(student, subject)) last_lesson = db.student_lesson.find_one({"student": student, "dataset": dataset, "lesson":last_lesson_id}, {"_id":0, "records":0}) last_lesson["start"] = convert_datetime_to_str(last_chapter["start"]) last_lesson["end"] = convert_datetime_to_str(last_chapter["end"]) return convert_raw_data({"data": last_lesson})
def get_student_id(student_id): """ Consult the result on identification digits game specifying student id """ if int(student_id) not in range(111, 60820): return (406, "406 - Incorrect Student ID") if int(student_id) not in db.students.distinct("student"): return abort(406, "406 - Incorrect Student ID") student_id_digits = list( db.student_identification.find({"student": int(student_id)}, { "_id": 0, "games": 0 })) if len(student_id_digits) == 0: return abort(404, u"404 - No Data") return convert_raw_data({"data": student_id_digits})
def getStudentsGroup(group): ''' VIEW all students belonging to a specific group ''' db = connect() if group == "None" or group == "null": group = None if group not in db.students.distinct("group"): abort(406, "Group `{}` doesn't exists and is not accepted") else: students = list(db.students.find({"group": group})) if len(students) > 0: return convert_raw_data({"data": students}) else: return abort( 404, "No student with status {} has been found.".format(status))
def get_student_chapters_last( subject, student): if int(student) not in range(111, 60821): raise abort(406, "L'identifiant de l'élève `{}` est incorrect. Vérifiez son identifiant".format(student)) if student not in db.students.distinct("student"): raise abort(404, "L'élève `{}` n'a pas été trouvé".format(student)) if subject == "letters": subject_name = "Français" dataset = "gp" else: subject_name = "Maths" dataset = "numbers" chapters = db.student_chapters.find_one({"student": student, "dataset": dataset}, {"_id":0}) last_chapter_id = chapters["chapters_ids"][-1] if len(chapters) == 0: raise abort(404, "Pas de données pour l'étudiant {} sur le sujet {}".format(student, subject)) last_chapter = db.student_chapter.find_one({"student": student, "dataset": dataset, "chapter":last_chapter_id}, {"_id":0, "chapters":0}) return convert_raw_data({"data": last_chapter})
def get_student_words(student_id): """ Consult the words of a student specifying the student id student: an integer between 111 and 60820 """ if int(student_id) not in range(111, 60820): return (406, "406 - Incorrect Student ID") if int(student_id) not in db.students.distinct("student"): return abort(406, "406 - Incorrect Student ID") student_words = list( db.student_words.find({"student": int(student_id)}, { "records": 0, u"_id": 0 })) if len(student_words) == 0: return abort(404) return convert_raw_data( {"data": sorted(student_words, key=lambda x: x["nb_letters"])})
def get_student_lessons_subject(subject, student): if int(student) not in range(111, 60821): raise abort(406, "L'identifiant de l'élève `{}` est incorrect. Vérifiez son identifiant".format(student)) if student not in db.students.distinct("student"): raise abort(404, "L'élève `{}` n'a pas été trouvé".format(student)) if subject == "letters": subject_name = "Français" dataset = "gp" else: subject_name = "Maths" dataset = "numbers" lessons = db.student_lessons.find_one({"student": student, "dataset": dataset}, {"_id":0, "lessons":0}) progression = [] for n in lessons["lesson_ids"]: progression.extend(list(db.student_lesson.find({"lesson":n},{"records":0, "_id":0}))) if len(lessons) == 0: raise abort(404, "Pas de données pour l'étudiant {} sur le sujet {}".format(student, subject)) return convert_raw_data({"data":sorted(progression, key=lambda x:x["lesson"])})
def get_student_syllabs(student_id): """ Consult the words of a student specifying the student id student: an integer between 111 and 60820 """ if int(student_id) not in range(111, 60820): return (406, "406 - Incorrect Student ID") if int(student_id) not in db.students.distinct("student"): return abort(406, u"406 - Incorrect Student Not Found") student_syllabs = list( db.student_syllabs.find({"student": int(student_id)}, { "_id": 0, u"stimuli": 0 })) if len(student_syllabs) == 0: return abort(404, u"404 - No Data") return convert_raw_data( {"data": sorted(student_syllabs, key=lambda x: len(x["word"]))})
def get_DatasetConfusionMatrix(subject): if subject =="letters": dataset = "gp" else: dataset = "numbers" chapter_confusion = list(db.confusion.find( {"subject": subject}, {"_id":0})) # headers = list(students[0].keys()) confusion = [] for n in chapter_confusion: # n["timespent"] = round(n["timespent"], 2) if n["stimulus"] == n["target"]: n["miss_rate"] = n["avg_WA_rate"] n["hit_rate"] = n["avg_CA_rate"] n["fa_rate"] = None n["cr_rate"] = None else: n["miss_rate"] = None n["hit_rate"] = None n["fa_rate"] = n["avg_WA_rate"] n["cr_rate"] = n["avg_CA_rate"] n["dataset"] = dataset confusion.append(n) return convert_raw_data({"data": confusion})
def get_student_decision(student, subject): decision = list(db.student_decision.find({"student": int(student), "subject": subject},{"_id": 0})) return convert_raw_data({"data": decision})
def getPath(): db = connect() if db.path.count() == 0: raise abort(500, "Table path is empty: initialize the database") path = list(db.path.find({}, {"_id": 0})) if len(path) == 0: raise abort(404, "Pas de path") return convert_raw_data({"data": path}) # @csv_admin.route("/lessons/datasets/<string:dataset>/csv") # def getLessonsDatasetList(datasey): # dataset_ref = db.path.find_one({"dataset": dataset}) # if dataset_ref is None: # raise abort(406, "Le dataset `{}` n'existe pas".format(dataset)) # else: # if dataset_ref["subject"] == "letters": # subject_name = "Français" # else: # subject_name = "Maths" # lessons = list(db.path.find({"lesson":{"$exists": True, "$ne": None}, "dataset": dataset}, {"_id":0})) # if len(lessons) == 0: # raise abort(404, "Pas de leçons pour le dataset {}".format(dataset)) # return convert_raw_data({ # "data": lessons, # }) # @csv_admin.route("/lessons/subject/<string:subject>/csv") # def getLessonsSubjectList(dataset): # dataset_ref = db.path.find_one({"subject": subject}) # if dataset_ref is None: # raise abort(406, "Le sujet `{}` n'existe pas".format(subject)) # else: # if dataset_ref["subject"] == "letters": # subject_name = "Français" # else: # subject_name = "Maths" # lessons = list(db.path.find({"lesson":{"$exists": True, "$ne": None}, "subject": subject}, {"_id":0})) # if len(lessons) == 0: # raise abort(404, "Pas de leçons pour le dataset {}".format(dataset)) # return convert_raw_data({ # "data": lessons # }) # @csv_admin.route("/chapters/csv") # def getChaptersList(): # lessons = list(db.path.find({"lesson":{"$exists": True, "$ne": None}}, {"_id":0})) # if len(lessons) == 0: # raise abort(404, "Pas de chapitres") # return convert_raw_data({"data": lessons}) # @csv_admin.route("/chapters/subjects/<subject>/csv") # def getChaptersSubjectList(subject): # if subject not in ["letters", "numbers"]: # raise abort(406, "Le sujet `{}` n'existe pas".format(subject)) # else: # if subject == "letters": # subject_name = "Français" # else: # subject_name = "Maths" # lessons = list(db.path.find({"chapter":{"$exists": True, "$ne": None}, "subject": subject}, {"_id":0})) # if len(lessons) == 0: # raise abort(404, "Pas de chapitre pour le sujet `{}`".format(subject)) # return convert_raw_data({"data": lessons}) # @csv_admin.route("/chapters/datasets/<string:dataset>/csv") # def getChaptersDatasetList(dataset): # dataset_ref = db.datasets.find_one({"dataset": dataset}) # if dataset_ref is None: # raise abort(406, "Le dataset `{}` n'existe pas".format(dataset)) # else: # if dataset_ref["subject"] == "letters": # subject_name = "Français" # else: # subject_name = "Maths" # lessons = list(db.path.find({"chapter":{"$exists": True, "$ne": None}, "dataset": dataset}, {"_id":0})) # if len(lessons) == 0: # raise abort(404, "Pas de chapitre pour le dataset {}".format(dataset)) # return convert_raw_data({"data": lessons}) # @csv_admin.route("/datasets/csv") # def getDatasets(): # db = connect() # return convert_raw_data({"data":db.datasets.find({}, {"_id": 0})}) # @csv_admin.route("/subjects/csv") # def getSubjects(): # db = connect() # return convert_raw_data({"data": db.datasets.distinct("subject")}) # @csv_progression.route("/lessons/csv", methods=["GET"]) # def get_LessonsList(): # lessons = list(db.path.find({"lesson":{"$exists": True, "$ne":None}}, {"_id":0})) # return convert_raw_data({"data": lessons}) # @csv_progression.route("/chapters/csv", methods=["GET"]) # def get_ChaptersList(): # chapters = list(db.path.find({"chapter":{"$exists": True, "$ne":None}}, {"_id":0})) # return convert_raw_data({"data": chapters}) # @csv_progression.route("/lessons/subjects/<subject>/csv") # def get_LessonsSubjectList(subject): # lessons = list(db.path.find({"lesson":{"$exists": True, "$ne": None}, "subject": subject}, {"_id":0})) # if len(lessons) == 0: # raise abort(404, u"Pas de leçons pour le sujet {}".format(subject)) # return convert_raw_data({"data": lessons}) # @csv_progression.route("/lessons/datasets/<string:dataset>/csv") # def get_LessonsDatasetList(dataset): # lessons = list(db.path.find({"lesson":{"$exists": True, "$ne": None}, "dataset": dataset}, {"_id":0})) # if len(lessons) == 0: # raise abort(404, u"Pas de leçons pour le sujet {}".format(subject)) # return convert_raw_data({"data": lessons}) # @csv_progression.route("/chapters/subjects/<subject>/csv") # def get_ChaptersSubjectList(subject): # if subject not in ["letters", "numbers"]: # raise abort(406, "Le sujet `{}` n'existe pas".format(subject)) # lessons = list(db.path.find({"chapter":{"$exists": True, "$ne": None}, "subject": subject}, {"_id":0})) # if len(lessons) == 0: # raise abort(404, "Pas de chapitre pour le sujet `{}`".format(subject)) # return {"data": lessons, "subject":subject, "subject_name": subject_name} # @csv_progression.route("/chapters/datasets/<string:dataset>/csv") # def get_ChaptersDatasetList(dataset): # dataset_ref = db.datasets.find_one({"dataset": dataset}) # if dataset_ref is None: # raise abort(406, u"Le dataset `{}` n'existe pas".format(dataset)) # else: # lessons = list(db.path.find({"chapter":{"$exists": True, "$ne": None}, "dataset": dataset}, {"_id":0})) # if len(lessons) == 0: # raise abort(404, u"Pas de chapitre pour le dataset {}".format(dataset)) # return convert_raw_data({"data": lessons}) # @csv_progression.route("/students/<int:student>/datasets/<string:dataset>/csv") # def get_StudentChaptersDatasetList(student, dataset): # if int(student) not in range(111, 60821): # raise abort(406, u"L'identifiant de l'élève `{}` est incorrect. Vérifier son identifiant".format(student)) # if student not in db.students.distinct("student"): # raise abort(404, u"L'élève `{}` n'a pas été trouvé".format(student)) # dataset_ref = db.datasets.find_one({"dataset": dataset}) # if dataset_ref is None: # raise abort(406, "Le nom du dataset `{}` est incorrect.".format(dataset)) # else: # lessons = list(db.student_chapter.find({"student":student, "dataset": dataset}, {"_id":0, 'records':0})) # if len(lessons) == 0: # raise abort(404, u"Pas de données pour l'élève {} sur le dataset {}".format(student, dataset)) # return convert_raw_data({"data": lessons}) # @csv_progression.route("/students/<int:student>/subject/<string:subject>/csv") # def get_StudentChaptersSubjectList(student, subject): # if int(student) not in range(111, 60821): # raise abort(406, u"L'identifiant de l'élève `{}` est incorrect. Vérifier son identifiant".format(student)) # if student not in db.students.distinct("student"): # raise abort(404, u"L'élève `{}` n'a pas été trouvé".format(student)) # chapters = list(db.student_chapter.find({"student": student, "dataset": dataset}, {"_id":0,'records':0})) # if len(chapters) == 0: # raise abort(404, "Pas de données pour l'étudiant {} sur le sujet {}".format(student, subject)) # return convert_raw_data({"data": chapters}) # @csv_progression.route("/students/<int:student>/subject/<string:subject>/last/csv") # def get_StudentLastChaptersSubjectItem(student, subject): # if int(student) not in range(111, 60821): # raise abort(406, u"L'identifiant de l'élève `{}` est incorrect. Vérifiez son identifiant".format(student)) # if student not in db.students.distinct("student"): # raise abort(404, u"L'élève `{}` n'a pas été trouvé".format(student)) # if subject == "letters": # subject_name = "Français" # dataset = "gp" # else: # subject_name = "Maths" # dataset = "numbers" # chapters = db.student_chapters.find_one({"student": student, "dataset": dataset}, {"_id":0}) # last_chapter_id = chapters["chapters_ids"][-1] # if len(chapters) == 0: # raise abort(404, u"Pas de données pour l'étudiant {} sur le sujet {}".format(student, subject)) # last_chapter = db.student_chapter.find_one({"student": student, "dataset": dataset, "chapter":last_chapter_id}, {"_id":0, "chapters":0}) # return convert_raw_data({"data": last_chapter}) # @csv_progression.route("/classrooms/<int:classroom>/subjects/<string:subject>/csv") # def get_ClassroomSubjectProgressionList(classroom, subject): # if int(classroom) not in range(1, 60): # raise abort(406, u"L'identifiant de la classe `{}` est incorrect. Vérifiez votre identifiant".format(classroom)) # if subject not in ["letters", "numbers"]: # raise abort(406, u"Le nom du sujet `{}` est incorrect.".format(subject)) # if subject == "letters": # dataset = "gp" # else: # dataset="numbers" # if int(classroom) not in db.students.distinct("classroom"): # raise abort(404, u"La classe `{}` n'a pas été trouvée".format(classroom)) # class_lessons = list(db.student_lessons.find({"classroom": classroom, "dataset": dataset}, {"_id":0, "lessons":0})) # return convert_raw_data({"data": class_lessons}) # @csv_progression.route("/classrooms/<int:classroom>/datasets/<string:dataset>/csv") # def get_ClassroomDatasetProgressionList(classroom, dataset): # if int(classroom) not in range(1, 60): # raise abort(406, u"L'identifiant de la classe `{}` est incorrect. Vérifiez votre identifiant".format(classroom)) # if int(classroom) not in db.students.distinct("classroom"): # raise abort(404, u"La classe `{}` n'a pas été trouvée".format(classroom)) # dataset_ref = db.datasets.find_one({"dataset": dataset}) # if dataset_ref is None: # raise abort(406, u"Le nom du dataset `{}` est incorrect.".format(dataset)) # else: # class_lessons = list(db.student_lessons.find({"classroom": classroom, "dataset": dataset}, {"_id":0, "lessons":0})) # if len(class_lessons) == 0: # raise abort(404, u"Pas de données pour la classe {} sur le sujet {}".format(classroom, subject)) # return convert_raw_data({"data": class_lessons})