Files
edx-platform/cms/djangoapps/contentstore/views/error.py
Usama Sadiq 3949c73b35 fix: fix request.is_ajax() deprecation warning (#33055)
* fix: fix request.is_ajax() deprecation warning
2023-08-21 15:59:00 +05:00

51 lines
1.9 KiB
Python

# lint-amnesty, pylint: disable=missing-module-docstring
import functools
from django.http import HttpResponse, HttpResponseNotFound, HttpResponseServerError
from common.djangoapps.edxmako.shortcuts import render_to_response, render_to_string
from common.djangoapps.util.views import fix_crum_request
from openedx.core.djangolib.js_utils import dump_js_escaped_json
__all__ = ['not_found', 'server_error', 'render_404', 'render_500']
def jsonable_error(status=500, message="The Studio servers encountered an error"):
"""
A decorator to make an error view return an JSON-formatted message if
it was requested via AJAX.
"""
def outer(func):
@functools.wraps(func)
def inner(request, *args, **kwargs):
if request.headers.get('x-requested-with') == 'XMLHttpRequest':
content = dump_js_escaped_json({"error": message})
return HttpResponse(content, content_type="application/json", # lint-amnesty, pylint: disable=http-response-with-content-type-json
status=status)
else:
return func(request, *args, **kwargs)
return inner
return outer
@jsonable_error(404, "Resource not found")
def not_found(request, exception): # lint-amnesty, pylint: disable=unused-argument
return render_to_response('error.html', {'error': '404'})
@jsonable_error(500, "The Studio servers encountered an error")
def server_error(request):
return render_to_response('error.html', {'error': '500'})
@fix_crum_request
@jsonable_error(404, "Resource not found")
def render_404(request, exception): # lint-amnesty, pylint: disable=unused-argument
return HttpResponseNotFound(render_to_string('404.html', {}, request=request))
@fix_crum_request
@jsonable_error(500, "The Studio servers encountered an error")
def render_500(request):
return HttpResponseServerError(render_to_string('500.html', {}, request=request))