def submissions_filter(course_id): ''' List all the users in the course ''' is_grader = g.user.is_grader(int(course_id)) if not is_grader: return "You are not an instructor or TA in this course!" course_id = int(course_id) course = Course.by_id(course_id) students = natsorted(course.get_students(), key=lambda r: r.name()) assignments = natsorted([a for a, m in course.get_submitted_assignments()], key=lambda r: r.name) criteria = request.values.get("criteria", "none") search_key = int(request.values.get("search_key", "-1")) submissions = [] if criteria == "student": all_subs = Submission.by_student(search_key, course_id) all_subs = {s[0].assignment_id: s for s in all_subs} submissions = [all_subs.get(assignment.id, (None, None, assignment)) for assignment in assignments] elif criteria == "assignment": all_subs = Submission.by_assignment(search_key, course_id) all_subs = {s[0].user_id: s for s in all_subs} submissions = [all_subs.get(student.id, (None, student, None)) for student in students] return render_template('courses/submissions_filter.html', course_id=course_id, assignments=assignments, students=students, submissions= submissions, criteria = criteria, search_key = search_key, is_instructor=is_grader)
def browse_submissions(): assignment_id = request.values.get('assignment_id', None) if assignment_id is None: return failure("No Assignment ID given!") assignment_id = int(assignment_id) course_id = request.values.get('course_id', g.course.id if 'course' in g else None) if course_id == None or course_id == "": return failure("No Course ID given!") if g.user is None or not g.user.is_instructor(int(course_id)): return failure( "You are not an instructor in this assignments' course.") submissions = Submission.by_assignment(assignment_id, int(course_id)) formatter = HtmlFormatter(linenos=True, noclasses=True) python_lexer = PythonLexer() for submission, user, assignment in submissions: submission.highlighted_code = highlight(submission.code, python_lexer, formatter) submission.history = process_history( [h['time'] for h in submission.get_history()]) return render_template('blockpy/browse_submissions.html', course_id=course_id, assignment_id=assignment_id, submissions=submissions, ip=request.remote_addr)
def watch(): assignment_list = request.values.get('assignments', '') assignments = [int(aid) for aid in assignment_list.split(',') if len(aid) > 0] course_id = request.values.get('course_id', g.course.id if 'course' in g else None) if course_id == None or course_id == "": return jsonify(success=False, message="No Course ID given!") if g.user is None or not g.user.is_instructor(int(course_id)): return jsonify(success=False, message="You are not an instructor in this assignments' course.") update = request.values.get('update', 'false') == "true" if update: data = [] for aid in assignments: submissions = Submission.by_assignment(aid, int(course_id)) completions = sum([int(sua[0].correct) for sua in submissions]) workings = len(Submission.get_latest(aid, int(course_id))) histories = [process_history([h['time'] for h in sua[0].get_history()]) for sua in submissions] touches = [int(sua[0].version) for sua in submissions] feedbacks = [l[0] for l in Log.calculate_feedbacks(aid, course_id)] data.append({'id': aid, 'Completions': completions, 'Workings': workings, 'Time': histories, 'Touches': touches, 'Feedbacks': feedbacks}) return jsonify(success=True, data=data) else: assignments = [Assignment.by_id(aid) for aid in assignments] return render_template('blockpy/watch.html', course_id=course_id, assignments=assignments, assignment_list=assignment_list)