diff options
author | Leif Johansson <leifj@sunet.se> | 2010-07-05 21:37:04 +0200 |
---|---|---|
committer | Leif Johansson <leifj@sunet.se> | 2010-07-05 21:37:04 +0200 |
commit | 8f7f4ff3a35ddeacea7d5530c7dc3c296907ab67 (patch) | |
tree | 7d481dc7030ad191314aa2569cca9f8301e1f997 /coip/multiresponse.py |
import
Diffstat (limited to 'coip/multiresponse.py')
-rw-r--r-- | coip/multiresponse.py | 78 |
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 |