Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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!"