summaryrefslogtreecommitdiff
path: root/coip/multiresponse.py
diff options
context:
space:
mode:
authorLeif Johansson <leifj@sunet.se>2010-07-05 21:37:04 +0200
committerLeif Johansson <leifj@sunet.se>2010-07-05 21:37:04 +0200
commit8f7f4ff3a35ddeacea7d5530c7dc3c296907ab67 (patch)
tree7d481dc7030ad191314aa2569cca9f8301e1f997 /coip/multiresponse.py
import
Diffstat (limited to 'coip/multiresponse.py')
-rw-r--r--coip/multiresponse.py78
1 files changed, 78 insertions, 0 deletions
diff --git a/coip/multiresponse.py b/coip/multiresponse.py
new file mode 100644
index 0000000..9a3d965
--- /dev/null
+++ b/coip/multiresponse.py
@@ -0,0 +1,78 @@
+import coip.mimeparse as mimeparse
+import re
+from django.conf import settings
+from django.shortcuts import render_to_response
+from django.core.exceptions import ObjectDoesNotExist
+from datetime import datetime
+from pprint import pprint
+from django.http import HttpResponse
+from django.core import serializers
+
+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 ) :
+ import rfc822
+ 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
+ profile = None
+ try:
+ profile = request.user.profile.get();
+ except ObjectDoesNotExist:
+ profile = UserProfile()
+ d['profile'] = profile
+
+ #d['stomp_host'] = STOMP_HOST
+ #d['stomp_port'] = STOMP_PORT
+ #d['orbited_prefix'] = ORBITED_PREFIX
+ #d['announce_url'] = ANNOUNCE_URL
+ #d['date'] = timeAsrfc822(datetime.now())
+ #if DEBUG is not None:
+ # d['debug'] = True
+
+ return d
+
+def json_response(data):
+ json_serializer = serializers.get_serializer("json")()
+ json_serializer.serialize()
+ json_serializer.serialize(data)
+
+ r = HttpResponse(data.getvalue(),content_type='application/json')
+ r['Cache-Control'] = 'no-cache, must-revalidate'
+ r['Pragma'] = 'no-cache'
+
+ return r
+
+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