You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@community.apache.org by ni...@apache.org on 2012/02/03 01:05:11 UTC

svn commit: r1239947 - /comdev/nearby_people/nearby/shortcuts.py

Author: nick
Date: Fri Feb  3 00:05:11 2012
New Revision: 1239947

URL: http://svn.apache.org/viewvc?rev=1239947&view=rev
Log:
Helper for identifying the requested response type, from either HTTP Request Headers or a URL parameter, initially for HTML+JSON+RDF (where requested by a supporting page)

Modified:
    comdev/nearby_people/nearby/shortcuts.py

Modified: comdev/nearby_people/nearby/shortcuts.py
URL: http://svn.apache.org/viewvc/comdev/nearby_people/nearby/shortcuts.py?rev=1239947&r1=1239946&r2=1239947&view=diff
==============================================================================
--- comdev/nearby_people/nearby/shortcuts.py (original)
+++ comdev/nearby_people/nearby/shortcuts.py Fri Feb  3 00:05:11 2012
@@ -21,6 +21,11 @@ from django.http import HttpRequest, Htt
 from django.shortcuts import render_to_response
 from django.template import RequestContext
 
+mimetypes = {
+   "json": "application/json",
+   "rdf":  "application/rdf+xml"
+}
+
 def render(request, template_name, data_dict=None, content_type=None):
     assert isinstance(request, HttpRequest)
     return render_to_response(
@@ -29,6 +34,31 @@ def render(request, template_name, data_
         mimetype=content_type
     )
 
+def identify_type(request, allowed_types=None):
+    """Identifies, based on Content Type, Accept Headers etc, the required
+       response type, such as HTML or JSON"""
+    if allowed_types == None or len(allowed_types) == 0:
+        allowed_types = ["html", "json"]
+
+    # Did they specify a format?
+    if request.GET.has_key("format"):
+        format = request.GET.get("format")
+        if format in allowed_types:
+            return format
+
+    # Check the inbound Content Type, then the Accept Header
+    meta_checks = ["CONTENT_TYPE", "HTTP_ACCEPT"]
+    for meta in meta_checks:
+        meta_value = request.META.get(meta, "")
+        if meta_value in mimetypes.values():
+            for type in mimetypes.keys():
+                if mimetypes[type] == meta_value:
+                   if type in allowed_types:
+                      return type
+
+    # Otherwise default to the first allowed type (normally html)
+    return allowed_types[0]
+
 def add_message(request, message):
     "Adds a message to be shown on next page load."
     request.user.message_set.create(message=message)