web/lib/django/core/context_processors.py
changeset 0 0d40e90630ef
child 29 cc9b7e14412b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/core/context_processors.py	Wed Jan 20 00:34:04 2010 +0100
@@ -0,0 +1,85 @@
+"""
+A set of request processors that return dictionaries to be merged into a
+template context. Each function takes the request object as its only parameter
+and returns a dictionary to add to the context.
+
+These are referenced from the setting TEMPLATE_CONTEXT_PROCESSORS and used by
+RequestContext.
+"""
+
+from django.conf import settings
+
+def auth(request):
+    """
+    Returns context variables required by apps that use Django's authentication
+    system.
+
+    If there is no 'user' attribute in the request, uses AnonymousUser (from
+    django.contrib.auth).
+    """
+    if hasattr(request, 'user'):
+        user = request.user
+    else:
+        from django.contrib.auth.models import AnonymousUser
+        user = AnonymousUser()
+    return {
+        'user': user,
+        'messages': user.get_and_delete_messages(),
+        'perms': PermWrapper(user),
+    }
+
+def debug(request):
+    "Returns context variables helpful for debugging."
+    context_extras = {}
+    if settings.DEBUG and request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS:
+        context_extras['debug'] = True
+        from django.db import connection
+        context_extras['sql_queries'] = connection.queries
+    return context_extras
+
+def i18n(request):
+    from django.utils import translation
+
+    context_extras = {}
+    context_extras['LANGUAGES'] = settings.LANGUAGES
+    context_extras['LANGUAGE_CODE'] = translation.get_language()
+    context_extras['LANGUAGE_BIDI'] = translation.get_language_bidi()
+
+    return context_extras
+
+def media(request):
+    """
+    Adds media-related context variables to the context.
+
+    """
+    return {'MEDIA_URL': settings.MEDIA_URL}
+
+def request(request):
+    return {'request': request}
+
+# PermWrapper and PermLookupDict proxy the permissions system into objects that
+# the template system can understand.
+
+class PermLookupDict(object):
+    def __init__(self, user, module_name):
+        self.user, self.module_name = user, module_name
+
+    def __repr__(self):
+        return str(self.user.get_all_permissions())
+
+    def __getitem__(self, perm_name):
+        return self.user.has_perm("%s.%s" % (self.module_name, perm_name))
+
+    def __nonzero__(self):
+        return self.user.has_module_perms(self.module_name)
+
+class PermWrapper(object):
+    def __init__(self, user):
+        self.user = user
+
+    def __getitem__(self, module_name):
+        return PermLookupDict(self.user, module_name)
+        
+    def __iter__(self):
+        # I am large, I contain multitudes.
+        raise TypeError("PermWrapper is not iterable.")