Merge pull request #43 from bocribbz/dj17-example

Updates for Django 1.7
This commit is contained in:
Bob Cribbs 2015-11-10 22:50:29 +02:00
commit 265ce90d86
9 changed files with 57 additions and 48 deletions

14
authority/compat.py Normal file
View file

@ -0,0 +1,14 @@
from django.conf import settings
# Django 1.5 compatibility utilities, providing support for custom User models.
# Since get_user_model() causes a circular import if called when app models are
# being loaded, the user_model_label should be used when possible, with calls
# to get_user_model deferred to execution time
user_model_label = getattr(settings, 'AUTH_USER_MODEL', 'auth.User')
try:
from django.contrib.auth import get_user_model
except ImportError:
from django.contrib.auth.models import User
get_user_model = lambda: User

View file

@ -6,7 +6,10 @@ from django.utils.safestring import mark_safe
from authority import permissions, get_choices_for
from authority.models import Permission
from authority.utils import User
from authority.compat import get_user_model
User = get_user_model()
class BasePermissionForm(forms.ModelForm):
@ -34,6 +37,7 @@ class BasePermissionForm(forms.ModelForm):
self.instance.approved = self.approved
return super(BasePermissionForm, self).save(commit)
class UserPermissionForm(BasePermissionForm):
user = forms.CharField(label=_('User'))

View file

@ -1,13 +1,12 @@
from datetime import datetime
from django.conf import settings
from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic
from django.contrib.auth.models import User, Group
from django.contrib.auth.models import Group
from django.utils.translation import ugettext_lazy as _
from authority.compat import user_model_label
from authority.managers import PermissionManager
from authority.utils import User
class Permission(models.Model):
@ -21,9 +20,9 @@ class Permission(models.Model):
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
user = models.ForeignKey(User, null=True, blank=True, related_name='granted_permissions')
user = models.ForeignKey(user_model_label, null=True, blank=True, related_name='granted_permissions')
group = models.ForeignKey(Group, null=True, blank=True)
creator = models.ForeignKey(User, null=True, blank=True, related_name='created_permissions')
creator = models.ForeignKey(user_model_label, null=True, blank=True, related_name='created_permissions')
approved = models.BooleanField(_('approved'), default=False, help_text=_("Designates whether the permission has been approved and treated as active. Unselect this instead of deleting permissions."))

View file

@ -1,30 +1,33 @@
from django import template
from django.core.urlresolvers import reverse
from django.core.exceptions import ImproperlyConfigured
from django.contrib.auth.models import AnonymousUser
from django.core.urlresolvers import reverse
from django.contrib.auth.models import AnonymousUser
from authority import get_check
from authority import permissions
from authority.compat import get_user_model
from authority.models import Permission
from authority.forms import UserPermissionForm
from authority.utils import User
User = get_user_model()
register = template.Library()
@register.simple_tag
def url_for_obj(view_name, obj):
return reverse(view_name, kwargs={
'app_label': obj._meta.app_label,
'module_name': obj._meta.module_name,
'pk': obj.pk})
'app_label': obj._meta.app_label,
'module_name': obj._meta.module_name,
'pk': obj.pk}
)
@register.simple_tag
def add_url_for_obj(obj):
return url_for_obj('authority-add-permission', obj)
@register.simple_tag
def request_url_for_obj(obj):
return url_for_obj('authority-add-permission-request', obj)
@ -59,21 +62,23 @@ class PermissionComparisonNode(ResolverNode):
def handle_token(cls, parser, token):
bits = token.contents.split()
if 5 < len(bits) < 3:
raise template.TemplateSyntaxError("'%s' tag takes three, "
"four or five arguments" % bits[0])
raise template.TemplateSyntaxError(
"'%s' tag takes three, "
"four or five arguments" % bits[0]
)
end_tag = 'endifhasperm'
nodelist_true = parser.parse(('else', end_tag))
token = parser.next_token()
if token.contents == 'else': # there is an 'else' clause in the tag
if token.contents == 'else': # there is an 'else' clause in the tag
nodelist_false = parser.parse((end_tag,))
parser.delete_first_token()
else:
nodelist_false = template.NodeList()
if len(bits) == 3: # this tag requires at most 2 objects . None is given
if len(bits) == 3: # this tag requires at most 2 objects . None is given
objs = (None, None)
elif len(bits) == 4:# one is given
elif len(bits) == 4: # one is given
objs = (bits[3], None)
else: #two are given
else: # two are given
objs = (bits[3], bits[4])
return cls(bits[2], bits[1], nodelist_true, nodelist_false, *objs)
@ -111,6 +116,7 @@ class PermissionComparisonNode(ResolverNode):
return ''
return self.nodelist_false.render(context)
@register.tag
def ifhasperm(parser, token):
"""
@ -253,7 +259,7 @@ def get_permissions(parser, token):
"""
Retrieves all permissions associated with the given obj and user
and assigns the result to a context variable.
Syntax::
{% get_permissions obj %}
@ -273,7 +279,7 @@ def get_permission_requests(parser, token):
"""
Retrieves all permissions requests associated with the given obj and user
and assigns the result to a context variable.
Syntax::
{% get_permission_requests obj %}
@ -343,7 +349,7 @@ def get_permission(parser, token):
{% get_permission "poll_permission.change_poll" for request.user and poll as "is_allowed" %}
{% get_permission "poll_permission.change_poll" for request.user and poll,second_poll as "is_allowed" %}
{% if is_allowed %}
I've got ze power to change ze pollllllzzz. Muahahaa.
{% else %}
@ -367,7 +373,7 @@ def get_permission_request(parser, token):
{% get_permission_request "poll_permission.change_poll" for request.user and poll as "asked_for_permissio" %}
{% get_permission_request "poll_permission.change_poll" for request.user and poll,second_poll as "asked_for_permissio" %}
{% if asked_for_permissio %}
Dude, you already asked for permission!
{% else %}
@ -402,7 +408,7 @@ def permission_delete_link(context, perm):
@register.inclusion_tag('authority/permission_request_delete_link.html', takes_context=True)
def permission_request_delete_link(context, perm):
"""
Renders a html link to the delete view of the given permission request.
Renders a html link to the delete view of the given permission request.
Returns no content if the request-user has no permission to delete foreign
permissions.
"""
@ -421,7 +427,7 @@ def permission_request_delete_link(context, perm):
@register.inclusion_tag('authority/permission_request_approve_link.html', takes_context=True)
def permission_request_approve_link(context, perm):
"""
Renders a html link to the approve view of the given permission request.
Renders a html link to the approve view of the given permission request.
Returns no content if the request-user has no permission to delete foreign
permissions.
"""

View file

@ -10,9 +10,10 @@ import authority
from authority import permissions
from authority.models import Permission
from authority.exceptions import NotAModel, UnsavedModelInstance
from authority.utils import User
from authority.compat import get_user_model
User = get_user_model()
if VERSION >= (1, 5):
FIXTURES = ['tests_custom.json']
QUERY = Q(email="jezdez@github.com")

View file

@ -1,20 +0,0 @@
import django
from django.conf import settings
from django.contrib import auth
def get_user_class():
"""
Returns the User model class. In Django 1.7 and above, get_user_model()
internally uses the App Registry, which may not be queried until it is ready.
We can break this cycle via indirection by returning a string instead.
"""
if django.VERSION[:2] >= (1, 7):
return settings.AUTH_USER_MODEL
elif hasattr(auth, "get_user_model"):
return auth.get_user_model()
else:
return auth.models.User
User = get_user_class()

View file

@ -47,7 +47,7 @@ MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
#'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
# 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
)
INTERNAL_IPS = ('127.0.0.1',)
@ -94,3 +94,7 @@ try:
from local_settings import * # noqa
except ImportError:
pass
if VERSION >= (1, 6):
TEST_RUNNER = 'django.test.runner.DiscoverRunner'

View file

@ -1,3 +1,4 @@
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from example.users.models import User

View file

@ -1,6 +1,6 @@
[tox]
envlist =
py26-django{13,14,15,16},
envlist =
py26-django{13,14,15,16},
py27-django{13,14,15,16,17},
py33-django{15,16,17}