summaryrefslogtreecommitdiff
path: root/meetingtools/multiresponse.py
diff options
context:
space:
mode:
authorLeif Johansson <leifj@sunet.se>2011-02-08 20:46:40 +0100
committerLeif Johansson <leifj@sunet.se>2011-02-08 20:46:40 +0100
commit0fb514f0a73aef806b826348d043c68534af2745 (patch)
treebd388ab8e3de4c93a6ba0a5e1b83a4087a14b6e2 /meetingtools/multiresponse.py
parenta20ff434501a099b259da903d88b47bb77e07469 (diff)
v1
Diffstat (limited to 'meetingtools/multiresponse.py')
-rw-r--r--meetingtools/multiresponse.py62
1 files changed, 62 insertions, 0 deletions
diff --git a/meetingtools/multiresponse.py b/meetingtools/multiresponse.py
new file mode 100644
index 0000000..b8c0960
--- /dev/null
+++ b/meetingtools/multiresponse.py
@@ -0,0 +1,62 @@
+import meetingtools.mimeparse as mimeparse
+import re
+import rfc822
+from django.conf import settings
+from django.shortcuts import render_to_response
+from django.http import HttpResponse, HttpResponseForbidden
+from django.utils import simplejson
+from django.template import loader
+
+default_suffix_mapping = {"\.htm(l?)$": "text/html",
+ "\.json$": "application/json",
+ "\.rss$": "application/rss+xml",
+ "\.torrent$": "application/x-bittorrent"}
+
+def _accept_types(request, suffix):
+ for r in suffix.keys():
+ p = re.compile(r)
+ if p.search(request.path):
+ return suffix.get(r)
+ return None
+
+
+def timeAsrfc822 ( theTime ) :
+ return rfc822 . formatdate ( rfc822 . mktime_tz ( rfc822 . parsedate_tz ( theTime . strftime ( "%a, %d %b %Y %H:%M:%S" ) ) ) )
+
+def make_response_dict(request,d={}):
+
+ if request.user.is_authenticated():
+ d['user'] = request.user
+
+ return d
+
+def json_response(data):
+ r = HttpResponse(simplejson.dumps(data),content_type='application/json')
+ r['Cache-Control'] = 'no-cache, must-revalidate'
+ r['Pragma'] = 'no-cache'
+
+ return r
+
+def render403(message="You don't seem to have enough rights for what you are trying to do....",dict={}):
+ dict['message'] = message
+ return HttpResponseForbidden(loader.render_to_string("403.html",dict))
+
+def respond_to(request, template_mapping, dict={}, suffix_mapping=default_suffix_mapping):
+ accept = _accept_types(request, suffix_mapping)
+ if accept is None:
+ accept = (request.META['HTTP_ACCEPT'].split(','))[0]
+ content_type = mimeparse.best_match(template_mapping.keys(), accept)
+ template = None
+ if template_mapping.has_key(content_type):
+ template = template_mapping[content_type]
+ else:
+ template = template_mapping["text/html"]
+ if callable(template):
+ response = template(make_response_dict(request,dict))
+ elif isinstance(template, HttpResponse):
+ response = template
+ response['Content-Type'] = "%s; charset=%s" % (content_type, settings.DEFAULT_CHARSET)
+ else:
+ response = render_to_response(template,make_response_dict(request,dict))
+ response['Content-Type'] = "%s; charset=%s" % (content_type, settings.DEFAULT_CHARSET)
+ return response