def studentAPI():
    username = request.form.get('username')
    password = request.form.get('password')

    user = User(username)

    # check if user actually exists
    # take the user supplied password, hash it, and compare it to the hashed password in database
    if check_password_hash(user.password, password):
        if user.isStudent():
            sID = user.getId()
            classIDs = Backend.getStudentClasses(sID)
            classes = []
            for cID in classIDs:
                classes.append(
                    {
                        "Name": Backend.getClassName(cID),
                        "Time": Backend.getClassTimes(cID),
                        "Location": Backend.getClassLocations(cID),
                        "ClassID": cID,
                        "Teacher": Backend.getName(Backend.getClassTeacher(cID)),
                        "FinalGrade": Backend.getFinalGrade(cID, sID)
                    }
                )
            output = {
                "Name": Backend.getName(sID),
                "Classes": classes
            }
            return json.dumps(output)
def classHomepageTeacher():
    cID = int(request.args.get("classID"))

    if Backend.checkTeacherHasClass(current_user.id, cID):
        assignments = []
        for assignmentID in Backend.getClassAssignments(cID):
            assignments.append(
                Backend.getAssignmentInfo(assignmentID)
            )
        students = []
        grades= []
        for studentID in Backend.getStudentsForClass(cID):
            grade = Backend.getFinalGrade(cID, studentID)
            students.append(
                {
                    "StudentID":studentID,
                    "StudentName": Backend.getName(studentID),
                    "StudentGrade": grade if grade != -1 else "-"
                }
            )
            if grade > -1:
                grades.append(grade)

        pageData = {
            "ClassID" : cID,
            "Name" : Backend.getClassName(cID),
            "Time" : Backend.getClassTimes(cID),
            "Location" : Backend.getClassLocations(cID),
            "Assignments" : assignments,
            "Announcements": Backend.getAnnouncementsForClass(cID),
            "Students": students
        }

        n = len(grades)
        if n > 1:
            pageData["Mean"] = str("%.3f" % mean(grades))
            pageData["SD"] = str("%.3f" % stdev(grades))
            pageData["Median"] = median(grades)
        else:
            pageData["Mean"] = "-"
            pageData["SD"] = "-"
            pageData["Median"] = "-"
        return render_template('classHomepageTeacher.html', pageData=pageData)
    else:
        return '', 403
def classHomepageStudent():
    cID = int(request.args.get("classID"))

    if Backend.checkStudentHasClass(current_user.id, cID):
        assignments = []
        for assignmentID in Backend.getClassAssignments(cID):
            assignments.append(
                Backend.getAssignmentInfo(assignmentID)
            )

        pageData = {
            "ClassID" : cID,
            "Name" : Backend.getClassName(cID),
            "Time" : Backend.getClassTimes(cID),
            "Location" : Backend.getClassLocations(cID),
            "Assignments" : assignments,
            "Announcements": Backend.getAnnouncementsForClass(cID),
            "CurrentFinalGrade": Backend.getFinalGrade(cID, current_user.id)
        }
        return render_template('classHomepageStudent.html', pageData=pageData)
    else:
        return '', 403
def studentHomepage():
    pageData = {
    }

    classIDs = Backend.getStudentClasses(current_user.id)
    classes = []
    for cID in classIDs:
        classes.append(
            {
                "Name": Backend.getClassName(cID),
                "Time": Backend.getClassTimes(cID),
                "Location": Backend.getClassLocations(cID),
                "ClassID": cID,
                "Teacher": Backend.getName(Backend.getClassTeacher(cID)),
                "FinalGrade": Backend.getFinalGrade(cID, current_user.id)
            }
        )

    pageData["Classes"] = classes

    if current_user.attempts >= 3:
        pageData["attempts"] = current_user.attempts
        db.db.Logins.update({"ID": current_user.id}, {"$set": {"attempts": 0}})
    return render_template('studentHomepage.html', pageData=pageData)