Commit 6e492aba by Victor Shnayder

Merge pull request #1128 from MITx/diana/instructor-skip-button

Add skip button to instructor grading
parents 785974da 59829a89
...@@ -53,7 +53,7 @@ class MockStaffGradingService(object): ...@@ -53,7 +53,7 @@ class MockStaffGradingService(object):
]}) ]})
def save_grade(self, course_id, grader_id, submission_id, score, feedback): def save_grade(self, course_id, grader_id, submission_id, score, feedback, skipped):
return self.get_next(course_id, 'fake location', grader_id) return self.get_next(course_id, 'fake location', grader_id)
...@@ -109,7 +109,8 @@ class StaffGradingService(object): ...@@ -109,7 +109,8 @@ class StaffGradingService(object):
log.warning("Couldn't log into staff_grading backend. Response: %s", log.warning("Couldn't log into staff_grading backend. Response: %s",
r) r)
# try again # try again
return operation() response = operation()
response.raise_for_status()
return response return response
...@@ -173,7 +174,7 @@ class StaffGradingService(object): ...@@ -173,7 +174,7 @@ class StaffGradingService(object):
return r.text return r.text
def save_grade(self, course_id, grader_id, submission_id, score, feedback): def save_grade(self, course_id, grader_id, submission_id, score, feedback, skipped):
""" """
Save a score and feedback for a submission. Save a score and feedback for a submission.
...@@ -190,7 +191,8 @@ class StaffGradingService(object): ...@@ -190,7 +191,8 @@ class StaffGradingService(object):
'submission_id': submission_id, 'submission_id': submission_id,
'score': score, 'score': score,
'feedback': feedback, 'feedback': feedback,
'grader_id': grader_id} 'grader_id': grader_id,
'skipped': skipped}
op = lambda: self.session.post(self.save_grade_url, data=data, op = lambda: self.session.post(self.save_grade_url, data=data,
allow_redirects=False) allow_redirects=False)
...@@ -350,7 +352,6 @@ def save_grade(request, course_id): ...@@ -350,7 +352,6 @@ def save_grade(request, course_id):
required = set(['score', 'feedback', 'submission_id', 'location']) required = set(['score', 'feedback', 'submission_id', 'location'])
actual = set(request.POST.keys()) actual = set(request.POST.keys())
log.debug(actual)
missing = required - actual missing = required - actual
if len(missing) > 0: if len(missing) > 0:
return _err_response('Missing required keys {0}'.format( return _err_response('Missing required keys {0}'.format(
...@@ -358,14 +359,17 @@ def save_grade(request, course_id): ...@@ -358,14 +359,17 @@ def save_grade(request, course_id):
grader_id = request.user.id grader_id = request.user.id
p = request.POST p = request.POST
location = p['location']
location = p['location']
skipped = 'skipped' in p
try: try:
result_json = grading_service().save_grade(course_id, result_json = grading_service().save_grade(course_id,
grader_id, grader_id,
p['submission_id'], p['submission_id'],
p['score'], p['score'],
p['feedback']) p['feedback'],
skipped)
except GradingServiceError: except GradingServiceError:
log.exception("Error saving grade") log.exception("Error saving grade")
return _err_response('Could not connect to grading service') return _err_response('Could not connect to grading service')
......
...@@ -112,6 +112,7 @@ The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for t ...@@ -112,6 +112,7 @@ The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for t
else else
# TODO: replace with postWithPrefix when that's loaded # TODO: replace with postWithPrefix when that's loaded
$.post(@ajax_url + cmd, data, callback) $.post(@ajax_url + cmd, data, callback)
.error => callback({success: false, error: "Error occured while performing this operation"})
class StaffGrading class StaffGrading
...@@ -139,8 +140,10 @@ class StaffGrading ...@@ -139,8 +140,10 @@ class StaffGrading
@feedback_area = $('.feedback-area') @feedback_area = $('.feedback-area')
@score_selection_container = $('.score-selection-container') @score_selection_container = $('.score-selection-container')
@submit_button = $('.submit-button') @submit_button = $('.submit-button')
@action_button = $('.action-button') @action_button = $('.action-button')
@skip_button = $('.skip-button')
@problem_meta_info = $('.problem-meta-info-container') @problem_meta_info = $('.problem-meta-info-container')
@meta_info_wrapper = $('.meta-info-wrapper') @meta_info_wrapper = $('.meta-info-wrapper')
...@@ -171,6 +174,7 @@ class StaffGrading ...@@ -171,6 +174,7 @@ class StaffGrading
@submit_button.click @submit @submit_button.click @submit
# TODO: fix this to do something more intelligent # TODO: fix this to do something more intelligent
@action_button.click @submit @action_button.click @submit
@skip_button.click @skip_and_get_next
# send initial request automatically # send initial request automatically
@get_problem_list() @get_problem_list()
...@@ -225,6 +229,15 @@ class StaffGrading ...@@ -225,6 +229,15 @@ class StaffGrading
@list_view = false @list_view = false
@backend.post('get_next', {location: location}, @ajax_callback) @backend.post('get_next', {location: location}, @ajax_callback)
skip_and_get_next: () =>
data =
score: @score
feedback: @feedback_area.val()
submission_id: @submission_id
location: @location
skipped: true
@backend.post('save_grade', data, @ajax_callback)
get_problem_list: () -> get_problem_list: () ->
@list_view = true @list_view = true
@backend.post('get_problem_list', {}, @ajax_callback) @backend.post('get_problem_list', {}, @ajax_callback)
...@@ -342,7 +355,7 @@ class StaffGrading ...@@ -342,7 +355,7 @@ class StaffGrading
meta_list = $("<ul>") meta_list = $("<ul>")
meta_list.append("<li><span class='meta-info'>Pending - </span> #{@num_pending}</li>") meta_list.append("<li><span class='meta-info'>Pending - </span> #{@num_pending}</li>")
meta_list.append("<li><span class='meta-info'>Graded - </span> #{@num_graded}</li>") meta_list.append("<li><span class='meta-info'>Graded - </span> #{@num_graded}</li>")
meta_list.append("<li><span class='meta-info'>Needed for ML - </span> #{Math.max(@min_for_ml - @num_graded)}</li>") meta_list.append("<li><span class='meta-info'>Needed for ML - </span> #{Math.max(@min_for_ml - @num_graded, 0)}</li>")
@problem_meta_info.html(meta_list) @problem_meta_info.html(meta_list)
@prompt_container.html(@prompt) @prompt_container.html(@prompt)
......
...@@ -36,30 +36,25 @@ ...@@ -36,30 +36,25 @@
</section> </section>
<section class="prompt-wrapper"> <section class="prompt-wrapper">
<h2 class="prompt-name"></h2> <h2 class="prompt-name"></h2>
<div class="meta-info-wrapper"> <div class="meta-info-wrapper">
<h3>Problem Information</h3> <h3>Problem Information</h3>
<div class="problem-meta-info-container"> <div class="problem-meta-info-container">
</div> </div>
<h3>Maching Learning Information</h3> <h3>Maching Learning Information</h3>
<div class="ml-error-info-container"> <div class="ml-error-info-container">
</div> </div>
</div> </div>
<div class="prompt-information-container"> <div class="prompt-information-container">
<h3>Question</h3> <h3>Question</h3>
<div class="prompt-container"> <div class="prompt-container">
</div> </div>
</div> </div>
<div class="rubric-wrapper"> <div class="rubric-wrapper">
<h3>Grading Rubric</h3> <h3>Grading Rubric</h3>
<div class="rubric-container"> <div class="rubric-container">
</div> </div>
</div> </div>
<div class="submission-wrapper">
<h3>Student Submission</h3>
<div class="submission-container">
</div>
</div>
</section> </section>
...@@ -71,6 +66,11 @@ ...@@ -71,6 +66,11 @@
<h2>Grading</h2> <h2>Grading</h2>
<div class="grading-container"> <div class="grading-container">
<div class="submission-wrapper">
<h3>Student Submission</h3>
<div class="submission-container">
</div>
</div>
<div class="evaluation"> <div class="evaluation">
<p class="score-selection-container"> <p class="score-selection-container">
</p> </p>
...@@ -81,6 +81,7 @@ ...@@ -81,6 +81,7 @@
<div class="submission"> <div class="submission">
<input type="button" value="Submit" class="submit-button" name="show"/> <input type="button" value="Submit" class="submit-button" name="show"/>
<input type="button" value="Skip" class="skip-button" name="skip"/>
</div> </div>
</div> </div>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment