def get_report(mode, name, submission, image="", hide_correctness=False): url = url_for('blockpy.get_submission_code', submission_id=submission.id, _external=True) if hide_correctness: status = "????" elif submission.correct: status = "Success!" elif submission.status: status = "Incomplete ({}%)".format(submission.status) else: status = "Incomplete" if mode == 'maze': return """ <h2 id='{slug}'>Maze {name}</h2> <strong>Status:</strong><span> {status}</span> """.format(name=name, status=status, slug=slugify(name)) else: code = highlight_python_code(submission.code) if image: image = "Submitted Blocks:<br><img alt='Block version of code' src='{0}'>".format( image) #time = process_history([h['time'] for h in submission.get_history()]) time = submission.version / 60.0 return ''' <div xml:lang="en"> <h2 id='{slug}'>{name}</h2> <div>Status: {status}</div> <div>Latest work in progress: <a href='{url}' target='_blank'>View</a></div> <div>Touches: {touches}</div> <div>Estimated Duration: {time:.2f} minutes</div> {image} <br> Submitted code:<br> {code} </div> '''.format(name=name, slug=slugify(name), status=status, url=url, time=time, touches=submission.version, code=code, image=image)
def browse_submissions(): assignment_id = request.values.get('assignment_id', None) if assignment_id is None: return ajax_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 ajax_failure("No Course ID given!") if g.user is None or not g.user.is_instructor(int(course_id)): return ajax_failure("You are not an instructor in this assignments' course.") submissions = Submission.by_assignment(assignment_id, int(course_id)) for submission, user, assignment in submissions: submission.highlighted_code = highlight_python_code(submission.code) submission.history = process_history([h['time'] for h in reversed(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 get_submission_code(lti=lti): submission_id = request.values.get('submission_id', None) if submission_id is None: return "Sorry, no submission ID was given." submission = Submission.query.get(submission_id) if 'user' not in g or not g.user: return "You are not logged in as a grader! Make sure you've visited a BlockPy Canvas." if 'course' not in g or not g.course: return "You're not in a course context! Make sure you've visited a BlockPy Canvas." if not submission: return '#No submission found!' if g.user.is_grader(g.course.id) or submission.user_id == g.user.id: if submission.code: status = "100%" if submission.correct else str( submission.status) + "%" body = "<strong>Status: " + status + "</strong><hr>" body += "<pre>" + highlight_python_code(submission.code) + "</pre>" return body else: return "<strong>Status: 0%</strong><hr>#No code given!" else: return "Sorry, you do not have sufficient permissions to spy!"