Exemple #1
0
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")
Exemple #2
0
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))
Exemple #3
0
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"])})
        
Exemple #4
0
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"])})
Exemple #5
0
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})
Exemple #6
0
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"])})
Exemple #7
0
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"])
    })
Exemple #8
0
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})
Exemple #9
0
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")
Exemple #10
0
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})
Exemple #11
0
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})
Exemple #12
0
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))
Exemple #13
0
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})
Exemple #14
0
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"])})
Exemple #15
0
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"])})
Exemple #16
0
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"]))})
Exemple #17
0
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})
Exemple #18
0
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})
Exemple #19
0
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})