Commit f5754f6d by Victor Shnayder

Add some rudimentary error checking to forum views

[Hopefully fix #34992235]
parent 30543d45
from django.contrib.auth.decorators import login_required
from django.views.decorators.http import require_POST
from django.http import HttpResponse
from django.http import HttpResponse, Http404
from django.utils import simplejson
from django.core.context_processors import csrf
from django.core.urlresolvers import reverse
......@@ -98,6 +98,10 @@ def render_user_discussion(*args, **kwargs):
return render_discussion(discussion_type='user', *args, **kwargs)
def get_threads(request, course_id, discussion_id=None):
"""
This may raise cc.utils.CommentClientError or
cc.utils.CommentClientUnknownError if something goes wrong.
"""
default_query_params = {
'page': 1,
......@@ -122,7 +126,14 @@ def get_threads(request, course_id, discussion_id=None):
# discussion per page is fixed for now
def inline_discussion(request, course_id, discussion_id):
try:
threads, query_params = get_threads(request, course_id, discussion_id)
except (cc.utils.CommentClientError, cc.utils.CommentClientUnknownError) as err:
# TODO (vshnayder): since none of this code seems to be aware of the fact that
# sometimes things go wrong, I suspect that the js client is also not
# checking for errors on request. Check and fix as needed.
raise Http404
html = render_inline_discussion(request, course_id, threads, discussion_id=discussion_id, \
query_params=query_params)
......@@ -143,6 +154,7 @@ def render_search_bar(request, course_id, discussion_id=None, text=''):
def forum_form_discussion(request, course_id):
course = get_course_with_access(request.user, course_id, 'load')
try:
threads, query_params = get_threads(request, course_id)
content = render_forum_discussion(request, course_id, threads, discussion_id=_general_discussion_id(course_id), query_params=query_params)
......@@ -171,6 +183,9 @@ def forum_form_discussion(request, course_id):
}
# print "start rendering.."
return render_to_response('discussion/index.html', context)
except (cc.utils.CommentClientError, cc.utils.CommentClientUnknownError) as err:
raise Http404
def render_single_thread(request, discussion_id, course_id, thread_id):
......@@ -192,6 +207,7 @@ def render_single_thread(request, discussion_id, course_id, thread_id):
def single_thread(request, course_id, discussion_id, thread_id):
try:
if request.is_ajax():
user_info = cc.User.from_django_user(request.user).to_dict()
......@@ -231,10 +247,13 @@ def single_thread(request, course_id, discussion_id, thread_id):
}
return render_to_response('discussion/single_thread.html', context)
except (cc.utils.CommentClientError, cc.utils.CommentClientUnknownError) as err:
raise Http404
def user_profile(request, course_id, user_id):
course = get_course_with_access(request.user, course_id, 'load')
try:
profiled_user = cc.User(id=user_id, course_id=course_id)
query_params = {
......@@ -264,3 +283,5 @@ def user_profile(request, course_id, user_id):
}
return render_to_response('discussion/user_profile.html', context)
except (cc.utils.CommentClientError, cc.utils.CommentClientUnknownError) as err:
raise Http404
import requests
import json
import logging
import requests
import settings
log = logging.getLogger('mitx.' + __name__)
def strip_none(dic):
return dict([(k, v) for k, v in dic.iteritems() if v is not None])
......@@ -23,10 +26,17 @@ def perform_request(method, url, data_or_params=None, *args, **kwargs):
if data_or_params is None:
data_or_params = {}
data_or_params['api_key'] = settings.API_KEY
try:
if method in ['post', 'put', 'patch']:
response = requests.request(method, url, data=data_or_params)
else:
response = requests.request(method, url, params=data_or_params)
except Exception as err:
log.exception("Trying to call {method} on {url} with params {params}".format(
method=method, url=url, params=data_or_params))
# Reraise with a single exception type
raise CommentClientError(str(err))
if 200 < response.status_code < 500:
raise CommentClientError(response.text)
elif response.status_code == 500:
......
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