From b5fd6c90121f39a26016f6dc07aed3b76b63af44 Mon Sep 17 00:00:00 2001 From: Don Mitchell Date: Tue, 18 Dec 2012 15:22:07 -0500 Subject: [PATCH] Send back error to client if failed to save malformed update and have it show an alert. --- cms/djangoapps/contentstore/course_info_model.py | 9 +++------ cms/djangoapps/contentstore/views.py | 11 ++++++----- cms/static/js/views/course_info_edit.js | 5 ++++- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/cms/djangoapps/contentstore/course_info_model.py b/cms/djangoapps/contentstore/course_info_model.py index 374b69121b..6ff915eeb9 100644 --- a/cms/djangoapps/contentstore/course_info_model.py +++ b/cms/djangoapps/contentstore/course_info_model.py @@ -65,12 +65,9 @@ def update_course_updates(location, update, passed_id=None): except etree.XMLSyntaxError: course_html_parsed = etree.fromstring("
    ") - try: - new_html_parsed = etree.fromstring('
  1. ' + update['date'] + '

    ' + update['content'] + '
  2. ', - etree.XMLParser(remove_blank_text=True)) - except etree.XMLSyntaxError: - logging.debug("Mashing malformed update") - new_html_parsed = '
  3. ' + update['date'] + '

    ' + update['content'] + '
  4. ' + # No try/catch b/c failure generates an error back to client + new_html_parsed = etree.fromstring('
  5. ' + update['date'] + '

    ' + update['content'] + '
  6. ', + etree.XMLParser(remove_blank_text=True)) # Confirm that root is
      , iterate over
    1. , pull out

      subs and then rest of val if course_html_parsed.tag == 'ol': diff --git a/cms/djangoapps/contentstore/views.py b/cms/djangoapps/contentstore/views.py index 83ee46c8c4..8705fc2bc6 100644 --- a/cms/djangoapps/contentstore/views.py +++ b/cms/djangoapps/contentstore/views.py @@ -54,6 +54,7 @@ from cms.djangoapps.models.settings.course_details import CourseDetails,\ CourseSettingsEncoder from cms.djangoapps.models.settings.course_grading import CourseGradingModel from cms.djangoapps.contentstore.utils import get_modulestore +from lxml import etree # to install PIL on MacOSX: 'easy_install http://dist.repoze.org/PIL-1.1.6.tar.gz' @@ -979,13 +980,13 @@ def course_info_updates(request, org, course, provided_id=None): if request.method == 'GET': return HttpResponse(json.dumps(get_course_updates(location)), mimetype="application/json") - elif real_method == 'POST': - # new instance (unless django makes PUT a POST): updates are coming as POST. Not sure why. - return HttpResponse(json.dumps(update_course_updates(location, request.POST, provided_id)), mimetype="application/json") - elif real_method == 'PUT': - return HttpResponse(json.dumps(update_course_updates(location, request.POST, provided_id)), mimetype="application/json") elif real_method == 'DELETE': # coming as POST need to pull from Request Header X-HTTP-Method-Override DELETE return HttpResponse(json.dumps(delete_course_update(location, request.POST, provided_id)), mimetype="application/json") + elif request.method == 'POST': + try: + return HttpResponse(json.dumps(update_course_updates(location, request.POST, provided_id)), mimetype="application/json") + except etree.XMLSyntaxError: + return HttpResponse("Failed to save: malformed html", status=515, content_type="text/plain") @expect_json diff --git a/cms/static/js/views/course_info_edit.js b/cms/static/js/views/course_info_edit.js index 4aa56cfb8a..0ad02215db 100644 --- a/cms/static/js/views/course_info_edit.js +++ b/cms/static/js/views/course_info_edit.js @@ -99,7 +99,10 @@ CMS.Views.ClassInfoUpdateView = Backbone.View.extend({ var targetModel = this.eventModel(event); targetModel.set({ date : this.dateEntry(event).val(), content : this.$codeMirror.getValue() }); // push change to display, hide the editor, submit the change - targetModel.save(); + targetModel.save({}, {error : function(model, xhr) { + // TODO use a standard component + window.alert(xhr.responseText); + }}); this.closeEditor(this); },