zulip/zephyr/lib/response.py

50 lines
1.7 KiB
Python

from __future__ import absolute_import
from django.http import HttpResponse, HttpResponseNotAllowed
from django.conf import settings
import django.shortcuts
import simplejson
class HttpResponseUnauthorized(HttpResponse):
status_code = 401
def __init__(self, realm):
HttpResponse.__init__(self)
self["WWW-Authenticate"] = 'Basic realm="%s"' % realm
def json_method_not_allowed(methods):
resp = HttpResponseNotAllowed(methods)
resp.content = simplejson.dumps({"result": "error",
"msg": "Method Not Allowed",
"allowed_methods": methods})
return resp
def json_response(res_type="success", msg="", data={}, status=200):
content = {"result": res_type, "msg": msg}
content.update(data)
return HttpResponse(content=simplejson.dumps(content),
mimetype='application/json', status=status)
def json_success(data={}):
return json_response(data=data)
def json_error(msg, data={}, status=400):
return json_response(res_type="error", msg=msg, data=data, status=status)
# We wrap render_to_response so that we can always add some data to
# the template context dictionary. In particular, we add the
# mixpanel token (which varies based on whether we're deployed or
# not) because the mixpanel code is included in base.html.
def render_to_response(template, *args, **kwargs):
if args:
dictionary = args[0]
else:
try:
dictionary = kwargs['dictionary']
except KeyError:
dictionary = {}
kwargs['dictionary'] = dictionary
dictionary['mixpanel_token'] = settings.MIXPANEL_TOKEN
return django.shortcuts.render_to_response(template, *args, **kwargs)