diff --git a/authority/__init__.py b/authority/__init__.py index c4937b7..87b45d3 100644 --- a/authority/__init__.py +++ b/authority/__init__.py @@ -1,8 +1,3 @@ -import sys - -from authority.sites import site, get_check, get_choices_for, register, unregister # noqa - - LOADING = False @@ -16,19 +11,5 @@ def autodiscover(): return LOADING = True - import imp - from django.conf import settings - - for app in settings.INSTALLED_APPS: - try: - __import__(app) - app_path = sys.modules[app].__path__ - except AttributeError: - continue - try: - imp.find_module('permissions', app_path) - except ImportError: - continue - __import__("%s.permissions" % app) - app_path = sys.modules["%s.permissions" % app] - LOADING = False + from authority import utils + utils.autodiscover_modules() diff --git a/authority/admin.py b/authority/admin.py index 45c25bf..8981e0a 100644 --- a/authority/admin.py +++ b/authority/admin.py @@ -6,7 +6,7 @@ from django.utils.safestring import mark_safe from django.forms.formsets import all_valid from django.contrib import admin from django.contrib.admin import helpers -from django.contrib.contenttypes import generic +from django.contrib.contenttypes.admin import GenericTabularInline from django.contrib.contenttypes.models import ContentType from django.core.exceptions import PermissionDenied @@ -22,10 +22,10 @@ except ImportError: from authority.models import Permission from authority.widgets import GenericForeignKeyRawIdWidget -from authority import get_choices_for +from authority.utils import get_choices_for -class PermissionInline(generic.GenericTabularInline): +class PermissionInline(GenericTabularInline): model = Permission raw_id_fields = ('user', 'group', 'creator') extra = 1 diff --git a/authority/decorators.py b/authority/decorators.py index 733387b..fa5f582 100644 --- a/authority/decorators.py +++ b/authority/decorators.py @@ -2,12 +2,13 @@ import inspect from django.http import HttpResponseRedirect from django.utils.http import urlquote from django.utils.functional import wraps -from django.db.models import Model, get_model +from django.db.models import Model +from django.apps import apps from django.shortcuts import get_object_or_404 from django.conf import settings from django.contrib.auth import REDIRECT_FIELD_NAME -from authority import get_check +from authority.utils import get_check from authority.views import permission_denied @@ -36,7 +37,7 @@ def permission_required(perm, *lookup_variables, **kwargs): if value is None: continue if isinstance(model, basestring): - model_class = get_model(*model.split(".")) + model_class = apps.get_model(*model.split(".")) else: model_class = model if model_class is None: diff --git a/authority/forms.py b/authority/forms.py index 03a93dd..9fdcff1 100644 --- a/authority/forms.py +++ b/authority/forms.py @@ -4,7 +4,8 @@ from django.contrib.contenttypes.models import ContentType from django.contrib.auth.models import Group from django.utils.safestring import mark_safe -from authority import permissions, get_choices_for +from authority import permissions +from authority.utils import get_choices_for from authority.models import Permission from authority.compat import get_user_model diff --git a/authority/models.py b/authority/models.py index 6ed95e8..d6cca3b 100644 --- a/authority/models.py +++ b/authority/models.py @@ -1,7 +1,7 @@ from datetime import datetime from django.db import models from django.contrib.contenttypes.models import ContentType -from django.contrib.contenttypes import generic +from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.auth.models import Group from django.utils.translation import ugettext_lazy as _ @@ -18,7 +18,7 @@ class Permission(models.Model): codename = models.CharField(_('codename'), max_length=100) content_type = models.ForeignKey(ContentType, related_name="row_permissions") object_id = models.PositiveIntegerField() - content_object = generic.GenericForeignKey('content_type', 'object_id') + content_object = GenericForeignKey('content_type', 'object_id') user = models.ForeignKey( user_model_label, null=True, blank=True, related_name='granted_permissions') diff --git a/authority/templatetags/permissions.py b/authority/templatetags/permissions.py index e72646c..b341d59 100644 --- a/authority/templatetags/permissions.py +++ b/authority/templatetags/permissions.py @@ -3,7 +3,7 @@ from django.core.exceptions import ImproperlyConfigured from django.core.urlresolvers import reverse from django.contrib.auth.models import AnonymousUser -from authority import get_check +from authority.utils import get_check from authority import permissions from authority.compat import get_user_model from authority.models import Permission diff --git a/authority/utils.py b/authority/utils.py new file mode 100644 index 0000000..8b7eb07 --- /dev/null +++ b/authority/utils.py @@ -0,0 +1,26 @@ +import sys + +from authority.sites import site, get_check, get_choices_for, register, unregister # noqa + + +def autodiscover_modules(): + """ + Goes and imports the permissions submodule of every app in INSTALLED_APPS + to make sure the permission set classes are registered correctly. + """ + import imp + from django.conf import settings + + for app in settings.INSTALLED_APPS: + try: + __import__(app) + app_path = sys.modules[app].__path__ + except AttributeError: + continue + try: + imp.find_module('permissions', app_path) + except ImportError: + continue + __import__("%s.permissions" % app) + app_path = sys.modules["%s.permissions" % app] + LOADING = False \ No newline at end of file diff --git a/authority/views.py b/authority/views.py index 496ab72..a94389f 100644 --- a/authority/views.py +++ b/authority/views.py @@ -1,6 +1,6 @@ from django.shortcuts import render_to_response, get_object_or_404 from django.http import HttpResponseRedirect, HttpResponseForbidden -from django.db.models.loading import get_model +from django.apps import apps from django.utils.translation import ugettext as _ from django.template.context import RequestContext from django.template import loader @@ -26,7 +26,7 @@ def add_permission(request, app_label, module_name, pk, approved=False, template_name='authority/permission_form.html', extra_context=None, form_class=UserPermissionForm): codename = request.POST.get('codename', None) - model = get_model(app_label, module_name) + model = apps.get_model(app_label, module_name) if model is None: return permission_denied(request) obj = get_object_or_404(model, pk=pk)