Fixed #15299 -- Started the process of migrating the auth context processor support classes into the auth context processor module. Thanks to shailesh for the report, and v1v3kn for the draft patch.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@15635 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Russell Keith-Magee 2011-02-23 13:36:58 +00:00
parent 6ce03dd888
commit 7aa84917a4
6 changed files with 85 additions and 29 deletions

View File

@ -1,7 +1,34 @@
from django.core.context_processors import PermWrapper
from django.utils.functional import lazy, memoize, SimpleLazyObject from django.utils.functional import lazy, memoize, SimpleLazyObject
from django.contrib import messages from django.contrib import messages
# 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.")
def auth(request): def auth(request):
""" """
Returns context variables required by apps that use Django's authentication Returns context variables required by apps that use Django's authentication

View File

@ -84,28 +84,30 @@ def request(request):
return {'request': request} return {'request': request}
# PermWrapper and PermLookupDict proxy the permissions system into objects that # PermWrapper and PermLookupDict proxy the permissions system into objects that
# the template system can understand. # the template system can understand. They once lived here -- they have
# been moved to django.contrib.auth.context_processors.
class PermLookupDict(object): from django.contrib.auth.context_processors import PermLookupDict as RealPermLookupDict
def __init__(self, user, module_name): from django.contrib.auth.context_processors import PermWrapper as RealPermWrapper
self.user, self.module_name = user, module_name
def __repr__(self): class PermLookupDict(RealPermLookupDict):
return str(self.user.get_all_permissions()) def __init__(self, *args, **kwargs):
import warnings
warnings.warn(
"`django.core.context_processors.PermLookupDict` is " \
"deprecated; use `django.contrib.auth.context_processors.PermLookupDict` " \
"instead.",
PendingDeprecationWarning
)
super(PermLookupDict, self).__init__(*args, **kwargs)
def __getitem__(self, perm_name): class PermWrapper(RealPermWrapper):
return self.user.has_perm("%s.%s" % (self.module_name, perm_name)) def __init__(self, *args, **kwargs):
import warnings
def __nonzero__(self): warnings.warn(
return self.user.has_module_perms(self.module_name) "`django.core.context_processors.PermWrapper` is " \
"deprecated; use `django.contrib.auth.context_processors.PermWrapper` " \
class PermWrapper(object): "instead.",
def __init__(self, user): PendingDeprecationWarning
self.user = user )
super(PermWrapper, self).__init__(*args, **kwargs)
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.")

View File

@ -151,13 +151,19 @@ their deprecation, as per the :ref:`Django deprecation policy
The ``supports_inactive_user`` variable is not checked any The ``supports_inactive_user`` variable is not checked any
longer and can be removed. longer and can be removed.
* :meth:`~django.contrib.gis.geos.GEOSGeometry.transform` will raise * :meth:`~django.contrib.gis.geos.GEOSGeometry.transform` will raise
a :class:`~django.contrib.gis.geos.GEOSException` when called a :class:`~django.contrib.gis.geos.GEOSException` when called
on a geometry with no SRID value. on a geometry with no SRID value.
* :class:`~django.http.CompatCookie` will be removed in favour of * :class:`~django.http.CompatCookie` will be removed in favour of
:class:`~django.http.SimpleCookie`. :class:`~django.http.SimpleCookie`.
* :class:`django.core.context_processors.PermWrapper` and
:class:`django.core.context_processors.PermLookupDict`
will be moved to :class:`django.contrib.auth.context_processors.PermWrapper`
and :class:`django.contrib.auth.context_processors.PermLookupDict`,
respectively.
* 2.0 * 2.0
* ``django.views.defaults.shortcut()``. This function has been moved * ``django.views.defaults.shortcut()``. This function has been moved
to ``django.contrib.contenttypes.views.shortcut()`` as part of the to ``django.contrib.contenttypes.views.shortcut()`` as part of the

View File

@ -423,7 +423,7 @@ If :setting:`TEMPLATE_CONTEXT_PROCESSORS` contains this processor, every
via the :doc:`messages framework </ref/contrib/messages>`. via the :doc:`messages framework </ref/contrib/messages>`.
* ``perms`` -- An instance of * ``perms`` -- An instance of
``django.core.context_processors.PermWrapper``, representing the ``django.contrib.auth.context_processors.PermWrapper``, representing the
permissions that the currently logged-in user has. permissions that the currently logged-in user has.
.. versionchanged:: 1.2 .. versionchanged:: 1.2
@ -435,6 +435,11 @@ If :setting:`TEMPLATE_CONTEXT_PROCESSORS` contains this processor, every
``user.get_and_delete_messages()``. It has been changed to include any ``user.get_and_delete_messages()``. It has been changed to include any
messages added via the :doc:`messages framework </ref/contrib/messages>`. messages added via the :doc:`messages framework </ref/contrib/messages>`.
.. versionchanged:: 1.3
Prior to version 1.3, ``PermWrapper`` was located in
``django.contrib.auth.context_processors``.
django.core.context_processors.debug django.core.context_processors.debug
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@ -828,3 +828,15 @@ Rationale for this decision:
* This location wasn't included in the translation building process for * This location wasn't included in the translation building process for
JavaScript literals. JavaScript literals.
``PermWrapper`` moved to ``django.contrib.auth.context_processors``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In Django 1.2, we began the process of changing the location of the
``auth`` context processor from ``django.core.context_processors`` to
``django.contrib.auth.context_processors``. However, the
``PermWrapper`` support class was mistakenly omitted from that
migration. In Django 1.3, the ``PermWrapper`` class has also been
moved to ``django.contrib.auth.context_processors``, along with the
``PermLookupDict`` support class. The new classes are functionally
identical to their old versions; only the module location has changed.

View File

@ -661,7 +661,7 @@ How to log a user out
Login and logout signals Login and logout signals
------------------------ ------------------------
.. versionadded:: 1.3 .. versionadded:: 1.3
The auth framework uses two :doc:`signals </topics/signals>` that can be used The auth framework uses two :doc:`signals </topics/signals>` that can be used
for notification when a user logs in or out. for notification when a user logs in or out.
@ -949,7 +949,7 @@ includes a few other useful built-in views located in
Allows a user to reset their password by generating a one-time use link Allows a user to reset their password by generating a one-time use link
that can be used to reset the password, and sending that link to the that can be used to reset the password, and sending that link to the
user's registered e-mail address. user's registered e-mail address.
.. versionchanged:: 1.3 .. versionchanged:: 1.3
The ``from_email`` argument was added. The ``from_email`` argument was added.
@ -1334,9 +1334,13 @@ Permissions
The currently logged-in user's permissions are stored in the template variable The currently logged-in user's permissions are stored in the template variable
``{{ perms }}``. This is an instance of ``{{ perms }}``. This is an instance of
:class:`django.core.context_processors.PermWrapper`, which is a :class:`django.contrib.auth.context_processors.PermWrapper`, which is a
template-friendly proxy of permissions. template-friendly proxy of permissions.
.. versionchanged:: 1.3
Prior to version 1.3, ``PermWrapper`` was located in
``django.contrib.auth.context_processors``.
In the ``{{ perms }}`` object, single-attribute lookup is a proxy to In the ``{{ perms }}`` object, single-attribute lookup is a proxy to
:meth:`User.has_module_perms <django.contrib.auth.models.User.has_module_perms>`. :meth:`User.has_module_perms <django.contrib.auth.models.User.has_module_perms>`.
This example would display ``True`` if the logged-in user had any permissions This example would display ``True`` if the logged-in user had any permissions