Skip to content

Instantly share code, notes, and snippets.

@sapamja
Forked from MacMaru/wrap_view.py
Created October 30, 2015 07:02
Show Gist options
  • Save sapamja/7e35d497f93e74b26634 to your computer and use it in GitHub Desktop.
Save sapamja/7e35d497f93e74b26634 to your computer and use it in GitHub Desktop.
Override Tastypie wrap_view() to return custom (JSON) response
class YourResource(ModelResource):
def wrap_view(self, view):
"""
Wraps views to return custom error codes instead of generic 500's
"""
@csrf_exempt
def wrapper(request, *args, **kwargs):
try:
callback = getattr(self, view)
response = callback(request, *args, **kwargs)
if request.is_ajax():
patch_cache_control(response, no_cache=True)
# response is a HttpResponse object, so follow Django's instructions
# to change it to your needs before you return it.
# https://docs.djangoproject.com/en/dev/ref/request-response/
return response
except (BadRequest, ApiFieldError), e:
return HttpBadRequest({'code': 666, 'message':e.args[0]})
except ValidationError, e:
# Or do some JSON wrapping around the standard 500
return HttpBadRequest({'code': 777, 'message':', '.join(e.messages)})
except Exception, e:
# Rather than re-raising, we're going to things similar to
# what Django does. The difference is returning a serialized
# error message.
return self._handle_500(request, e)
return wrapper
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment