Пример #1
0
def getUserResults(req, courseId, assignmentId, username):
    """Get the results for a given username"""
    req.content_type = "text/html"
    strout = websutil.OutputString()
    try:
        vmcfg = config.CourseConfig(CourseList().course_config(courseId))
    except:
        traceback.print_exc(file=strout)
        return json.dumps({"errorType": ERR_EXCEPTION, "errorMessage": "", "errorTrace": strout.get()})

    vmpaths = paths.VmcheckerPaths(vmcfg.root_path())
    submission_dir = vmpaths.dir_submission_root(assignmentId, username)
    r_path = paths.dir_submission_results(submission_dir)

    strout = websutil.OutputString()
    try:
        result_files = []
        if os.path.isdir(r_path):
            update_db.update_all(courseId)
            for fname in os.listdir(r_path):
                # skill all files not ending in '.vmr'
                if not fname.endswith(".vmr"):
                    continue
                f_path = os.path.join(r_path, fname)
                if os.path.isfile(f_path):
                    with open(f_path, "r") as f:
                        result_files.append({fname: f.read()})

        if len(result_files) != 0:
            result_files = websutil.sortResultFiles(result_files)
        else:
            process = subprocess.Popen("/usr/games/fortune", shell=False, stdout=subprocess.PIPE)
            msg = "In the meantime have a fortune cookie: <blockquote>"
            msg += process.communicate()[0] + "</blockquote>"
            result_files = [{"Your results are not ready yet": msg}]
        return json.dumps(result_files)
    except:
        traceback.print_exc(file=strout)
        return json.dumps({"errorType": ERR_EXCEPTION, "errorMessage": "", "errorTrace": strout.get()})
Пример #2
0
def getAllGrades(req, courseId):
    """Returns a table with all the grades of all students for a given course"""
    req.content_type = "text/html"
    try:
        update_db.update_all(courseId)
        vmcfg = CourseConfig(CourseList().course_config(courseId))
        vmpaths = paths.VmcheckerPaths(vmcfg.root_path())
        db_conn = sqlite3.connect(vmpaths.db_file())
        assignments = vmcfg.assignments()
        sorted_assg = sorted(
            assignments, lambda x, y: int(assignments.get(x, "OrderNumber")) - int(assignments.get(y, "OrderNumber"))
        )

        grades = {}
        try:
            db_cursor = db_conn.cursor()
            db_cursor.execute(
                "SELECT users.name, assignments.name, grades.grade "
                "FROM users, assignments, grades "
                "WHERE 1 "
                "AND users.id = grades.user_id "
                "AND assignments.id = grades.assignment_id"
            )
            for row in db_cursor:
                user, assignment, grade = row
                grades.setdefault(user, {})[assignment] = grade
            db_cursor.close()
        finally:
            db_conn.close()

        ret = []
        for user in sorted(grades.keys()):
            ret.append({"studentName": user, "studentId": user, "results": grades.get(user)})
        return json.dumps(ret)
    except:
        strout = websutil.OutputString()
        traceback.print_exc(file=strout)
        return json.dumps({"errorType": ERR_EXCEPTION, "errorMessage": "", "errorTrace": strout.get()})