Commit 1cc5e615 by Vik Paruchuri

More fixes on error messages

parent 0627b7b9
...@@ -108,11 +108,13 @@ class CombinedOpenEndedModule(XModule): ...@@ -108,11 +108,13 @@ class CombinedOpenEndedModule(XModule):
instance_state = {} instance_state = {}
self.version = self.metadata.get('version', DEFAULT_VERSION) self.version = self.metadata.get('version', DEFAULT_VERSION)
version_error_string = "Version of combined open ended module {0} is not correct. Going with version {1}"
if not isinstance(self.version, basestring): if not isinstance(self.version, basestring):
try: try:
self.version = str(self.version) self.version = str(self.version)
except: except:
log.error("Version {0} is not correct. Going with version {1}".format(self.version, DEFAULT_VERSION)) #This is a dev_facing_error
log.info(version_error_string.format(self.version, DEFAULT_VERSION))
self.version = DEFAULT_VERSION self.version = DEFAULT_VERSION
versions = [i[0] for i in VERSION_TUPLES] versions = [i[0] for i in VERSION_TUPLES]
...@@ -122,7 +124,8 @@ class CombinedOpenEndedModule(XModule): ...@@ -122,7 +124,8 @@ class CombinedOpenEndedModule(XModule):
try: try:
version_index = versions.index(self.version) version_index = versions.index(self.version)
except: except:
log.error("Version {0} is not correct. Going with version {1}".format(self.version, DEFAULT_VERSION)) #This is a dev_facing_error
log.error(version_error_string.format(self.version, DEFAULT_VERSION))
self.version = DEFAULT_VERSION self.version = DEFAULT_VERSION
version_index = versions.index(self.version) version_index = versions.index(self.version)
......
...@@ -89,6 +89,8 @@ class @CombinedOpenEnded ...@@ -89,6 +89,8 @@ class @CombinedOpenEnded
@can_upload_files = false @can_upload_files = false
@open_ended_child= @$('.open-ended-child') @open_ended_child= @$('.open-ended-child')
@out_of_sync_message = 'The problem state got out of sync. Try reloading the page.'
if @task_number>1 if @task_number>1
@prompt_hide() @prompt_hide()
else if @task_number==1 and @child_state!='initial' else if @task_number==1 and @child_state!='initial'
...@@ -293,7 +295,7 @@ class @CombinedOpenEnded ...@@ -293,7 +295,7 @@ class @CombinedOpenEnded
$.ajaxWithPrefix("#{@ajax_url}/save_answer",settings) $.ajaxWithPrefix("#{@ajax_url}/save_answer",settings)
else else
@errors_area.html('Problem state got out of sync. Try reloading the page.') @errors_area.html(@out_of_sync_message)
save_assessment: (event) => save_assessment: (event) =>
event.preventDefault() event.preventDefault()
...@@ -315,7 +317,7 @@ class @CombinedOpenEnded ...@@ -315,7 +317,7 @@ class @CombinedOpenEnded
else else
@errors_area.html(response.error) @errors_area.html(response.error)
else else
@errors_area.html('Problem state got out of sync. Try reloading the page.') @errors_area.html(@out_of_sync_message)
save_hint: (event) => save_hint: (event) =>
event.preventDefault() event.preventDefault()
...@@ -330,7 +332,7 @@ class @CombinedOpenEnded ...@@ -330,7 +332,7 @@ class @CombinedOpenEnded
else else
@errors_area.html(response.error) @errors_area.html(response.error)
else else
@errors_area.html('Problem state got out of sync. Try reloading the page.') @errors_area.html(@out_of_sync_message)
skip_post_assessment: => skip_post_assessment: =>
if @child_state == 'post_assessment' if @child_state == 'post_assessment'
...@@ -342,7 +344,7 @@ class @CombinedOpenEnded ...@@ -342,7 +344,7 @@ class @CombinedOpenEnded
else else
@errors_area.html(response.error) @errors_area.html(response.error)
else else
@errors_area.html('Problem state got out of sync. Try reloading the page.') @errors_area.html(@out_of_sync_message)
reset: (event) => reset: (event) =>
event.preventDefault() event.preventDefault()
...@@ -362,7 +364,7 @@ class @CombinedOpenEnded ...@@ -362,7 +364,7 @@ class @CombinedOpenEnded
else else
@errors_area.html(response.error) @errors_area.html(response.error)
else else
@errors_area.html('Problem state got out of sync. Try reloading the page.') @errors_area.html(@out_of_sync_message)
next_problem: => next_problem: =>
if @child_state == 'done' if @child_state == 'done'
...@@ -385,7 +387,7 @@ class @CombinedOpenEnded ...@@ -385,7 +387,7 @@ class @CombinedOpenEnded
else else
@errors_area.html(response.error) @errors_area.html(response.error)
else else
@errors_area.html('Problem state got out of sync. Try reloading the page.') @errors_area.html(@out_of_sync_message)
gentle_alert: (msg) => gentle_alert: (msg) =>
if @el.find('.open-ended-alert').length if @el.find('.open-ended-alert').length
......
...@@ -90,7 +90,10 @@ class SelfAssessmentModule(openendedchild.OpenEndedChild): ...@@ -90,7 +90,10 @@ class SelfAssessmentModule(openendedchild.OpenEndedChild):
} }
if dispatch not in handlers: if dispatch not in handlers:
return 'Error' #This is a dev_facing_error
log.error("Cannot find {0} in handlers in handle_ajax function for open_ended_module.py".format(dispatch))
#This is a dev_facing_error
return json.dumps({'error': 'Error handling action. Please try again.', 'success' : False})
before = self.get_progress() before = self.get_progress()
d = handlers[dispatch](get, system) d = handlers[dispatch](get, system)
...@@ -223,7 +226,7 @@ class SelfAssessmentModule(openendedchild.OpenEndedChild): ...@@ -223,7 +226,7 @@ class SelfAssessmentModule(openendedchild.OpenEndedChild):
score_list[i] = int(score_list[i]) score_list[i] = int(score_list[i])
except ValueError: except ValueError:
#This is a dev_facing_error #This is a dev_facing_error
log.error("Non-integer score value passed to save_assessment , or no score list present.") log.error("Non-integer score value passed to save_assessment ,or no score list present.")
#This is a student_facing_error #This is a student_facing_error
return {'success': False, 'error': "Error saving your score. Please notify course staff."} return {'success': False, 'error': "Error saving your score. Please notify course staff."}
......
...@@ -21,6 +21,8 @@ TRUE_DICT = [True, "True", "true", "TRUE"] ...@@ -21,6 +21,8 @@ TRUE_DICT = [True, "True", "true", "TRUE"]
MAX_SCORE = 1 MAX_SCORE = 1
IS_GRADED = True IS_GRADED = True
EXTERNAL_GRADER_NO_CONTACT_ERROR = "Failed to contact external graders. Please notify course staff."
class PeerGradingModule(XModule): class PeerGradingModule(XModule):
_VERSION = 1 _VERSION = 1
...@@ -112,7 +114,10 @@ class PeerGradingModule(XModule): ...@@ -112,7 +114,10 @@ class PeerGradingModule(XModule):
} }
if dispatch not in handlers: if dispatch not in handlers:
return 'Error' #This is a dev_facing_error
log.error("Cannot find {0} in handlers in handle_ajax function for open_ended_module.py".format(dispatch))
#This is a dev_facing_error
return json.dumps({'error': 'Error handling action. Please try again.', 'success' : False})
d = handlers[dispatch](get) d = handlers[dispatch](get)
...@@ -130,6 +135,7 @@ class PeerGradingModule(XModule): ...@@ -130,6 +135,7 @@ class PeerGradingModule(XModule):
count_required = response['count_required'] count_required = response['count_required']
success = True success = True
except GradingServiceError: except GradingServiceError:
#This is a dev_facing_error
log.exception("Error getting location data from controller for location {0}, student {1}" log.exception("Error getting location data from controller for location {0}, student {1}"
.format(location, student_id)) .format(location, student_id))
...@@ -205,10 +211,12 @@ class PeerGradingModule(XModule): ...@@ -205,10 +211,12 @@ class PeerGradingModule(XModule):
response = self.peer_gs.get_next_submission(location, grader_id) response = self.peer_gs.get_next_submission(location, grader_id)
return response return response
except GradingServiceError: except GradingServiceError:
#This is a dev_facing_error
log.exception("Error getting next submission. server url: {0} location: {1}, grader_id: {2}" log.exception("Error getting next submission. server url: {0} location: {1}, grader_id: {2}"
.format(self.peer_gs.url, location, grader_id)) .format(self.peer_gs.url, location, grader_id))
#This is a student_facing_error
return {'success': False, return {'success': False,
'error': 'Could not connect to grading service'} 'error': EXTERNAL_GRADER_NO_CONTACT_ERROR}
def save_grade(self, get): def save_grade(self, get):
""" """
...@@ -245,14 +253,16 @@ class PeerGradingModule(XModule): ...@@ -245,14 +253,16 @@ class PeerGradingModule(XModule):
score, feedback, submission_key, rubric_scores, submission_flagged) score, feedback, submission_key, rubric_scores, submission_flagged)
return response return response
except GradingServiceError: except GradingServiceError:
log.exception("""Error saving grade. server url: {0}, location: {1}, submission_id:{2}, #This is a dev_facing_error
log.exception("""Error saving grade to open ended grading service. server url: {0}, location: {1}, submission_id:{2},
submission_key: {3}, score: {4}""" submission_key: {3}, score: {4}"""
.format(self.peer_gs.url, .format(self.peer_gs.url,
location, submission_id, submission_key, score) location, submission_id, submission_key, score)
) )
#This is a student_facing_error
return { return {
'success': False, 'success': False,
'error': 'Could not connect to grading service' 'error': EXTERNAL_GRADER_NO_CONTACT_ERROR
} }
def is_student_calibrated(self, get): def is_student_calibrated(self, get):
...@@ -285,11 +295,13 @@ class PeerGradingModule(XModule): ...@@ -285,11 +295,13 @@ class PeerGradingModule(XModule):
response = self.peer_gs.is_student_calibrated(location, grader_id) response = self.peer_gs.is_student_calibrated(location, grader_id)
return response return response
except GradingServiceError: except GradingServiceError:
log.exception("Error from grading service. server url: {0}, grader_id: {0}, location: {1}" #This is a dev_facing_error
log.exception("Error from open ended grading service. server url: {0}, grader_id: {0}, location: {1}"
.format(self.peer_gs.url, grader_id, location)) .format(self.peer_gs.url, grader_id, location))
#This is a student_facing_error
return { return {
'success': False, 'success': False,
'error': 'Could not connect to grading service' 'error': EXTERNAL_GRADER_NO_CONTACT_ERROR
} }
def show_calibration_essay(self, get): def show_calibration_essay(self, get):
...@@ -328,16 +340,20 @@ class PeerGradingModule(XModule): ...@@ -328,16 +340,20 @@ class PeerGradingModule(XModule):
response = self.peer_gs.show_calibration_essay(location, grader_id) response = self.peer_gs.show_calibration_essay(location, grader_id)
return response return response
except GradingServiceError: except GradingServiceError:
log.exception("Error from grading service. server url: {0}, location: {0}" #This is a dev_facing_error
log.exception("Error from open ended grading service. server url: {0}, location: {0}"
.format(self.peer_gs.url, location)) .format(self.peer_gs.url, location))
#This is a student_facing_error
return {'success': False, return {'success': False,
'error': 'Could not connect to grading service'} 'error': EXTERNAL_GRADER_NO_CONTACT_ERROR}
# if we can't parse the rubric into HTML, # if we can't parse the rubric into HTML,
except etree.XMLSyntaxError: except etree.XMLSyntaxError:
#This is a dev_facing_error
log.exception("Cannot parse rubric string. Raw string: {0}" log.exception("Cannot parse rubric string. Raw string: {0}"
.format(rubric)) .format(rubric))
#This is a student_facing_error
return {'success': False, return {'success': False,
'error': 'Error displaying submission'} 'error': 'Error displaying submission. Please notify course staff.'}
def save_calibration_essay(self, get): def save_calibration_essay(self, get):
...@@ -376,8 +392,10 @@ class PeerGradingModule(XModule): ...@@ -376,8 +392,10 @@ class PeerGradingModule(XModule):
submission_key, score, feedback, rubric_scores) submission_key, score, feedback, rubric_scores)
return response return response
except GradingServiceError: except GradingServiceError:
#This is a dev_facing_error
log.exception("Error saving calibration grade, location: {0}, submission_id: {1}, submission_key: {2}, grader_id: {3}".format(location, submission_id, submission_key, grader_id)) log.exception("Error saving calibration grade, location: {0}, submission_id: {1}, submission_key: {2}, grader_id: {3}".format(location, submission_id, submission_key, grader_id))
return self._err_response('Could not connect to grading service') #This is a student_facing_error
return self._err_response('')
def peer_grading(self, get=None): def peer_grading(self, get=None):
''' '''
...@@ -398,11 +416,13 @@ class PeerGradingModule(XModule): ...@@ -398,11 +416,13 @@ class PeerGradingModule(XModule):
problem_list = problem_list_dict['problem_list'] problem_list = problem_list_dict['problem_list']
except GradingServiceError: except GradingServiceError:
error_text = "Error occured while contacting the grading service" #This is a student_facing_error
error_text = EXTERNAL_GRADER_NO_CONTACT_ERROR
success = False success = False
# catch error if if the json loads fails # catch error if if the json loads fails
except ValueError: except ValueError:
error_text = "Could not get problem list" #This is a student_facing_error
error_text = "Could not get list of problems to peer grade. Please notify course staff."
success = False success = False
ajax_url = self.ajax_url ajax_url = self.ajax_url
...@@ -426,6 +446,8 @@ class PeerGradingModule(XModule): ...@@ -426,6 +446,8 @@ class PeerGradingModule(XModule):
if get == None or get.get('location') == None: if get == None or get.get('location') == None:
if not self.use_for_single_location: if not self.use_for_single_location:
#This is an error case, because it must be set to use a single location to be called without get parameters #This is an error case, because it must be set to use a single location to be called without get parameters
#This is a dev_facing_error
log.error("Peer grading problem in peer_grading_module called with no get parameters, but use_for_single_location is False.")
return {'html': "", 'success': False} return {'html': "", 'success': False}
problem_location = self.link_to_location problem_location = self.link_to_location
...@@ -490,6 +512,7 @@ class PeerGradingDescriptor(XmlDescriptor, EditingDescriptor): ...@@ -490,6 +512,7 @@ class PeerGradingDescriptor(XmlDescriptor, EditingDescriptor):
expected_children = [] expected_children = []
for child in expected_children: for child in expected_children:
if len(xml_object.xpath(child)) == 0: if len(xml_object.xpath(child)) == 0:
#This is a staff_facing_error
raise ValueError("Peer grading definition must include at least one '{0}' tag".format(child)) raise ValueError("Peer grading definition must include at least one '{0}' tag".format(child))
def parse_task(k): def parse_task(k):
......
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