diff --git a/constance/admin.py b/constance/admin.py index 6e68ee4..aba238b 100644 --- a/constance/admin.py +++ b/constance/admin.py @@ -4,6 +4,7 @@ import hashlib from operator import itemgetter from django import forms +from django.conf.urls import url from django.contrib import admin, messages from django.contrib.admin import widgets from django.contrib.admin.options import csrf_protect_m @@ -13,19 +14,10 @@ from django.http import HttpResponseRedirect from django.shortcuts import render_to_response from django.template.context import RequestContext from django.utils import six +from django.utils.encoding import smart_bytes from django.utils.formats import localize from django.utils.translation import ugettext_lazy as _ -try: - from django.utils.encoding import smart_bytes -except ImportError: - from django.utils.encoding import smart_str as smart_bytes - -try: - from django.conf.urls import patterns, url -except ImportError: # Django < 1.4 - from django.conf.urls.defaults import patterns, url - from . import LazyConfig, settings @@ -97,14 +89,14 @@ class ConstanceAdmin(admin.ModelAdmin): def get_urls(self): info = self.model._meta.app_label, self.model._meta.module_name - return patterns('', + return [ url(r'^$', self.admin_site.admin_view(self.changelist_view), name='%s_%s_changelist' % info), url(r'^$', self.admin_site.admin_view(self.changelist_view), name='%s_%s_add' % info), - ) + ] @csrf_protect_m def changelist_view(self, request, extra_context=None): diff --git a/constance/apps.py b/constance/apps.py index 77226f7..bd8a894 100644 --- a/constance/apps.py +++ b/constance/apps.py @@ -1,3 +1,5 @@ +from django.db.models import signals +from django import VERSION from django.apps import AppConfig from django.utils.translation import ugettext_lazy as _ @@ -5,3 +7,28 @@ from django.utils.translation import ugettext_lazy as _ class ConstanceConfig(AppConfig): name = 'constance' verbose_name = _('Constance') + + def ready(self): + super(ConstanceConfig, self).ready() + signals.post_migrate.connect(self.create_perm, + dispatch_uid='constance.create_perm') + + def create_perm(self, *args, **kwargs): + """ + Creates a fake content type and permission + to be able to check for permissions + """ + from django.contrib.auth.models import Permission + from django.contrib.contenttypes.models import ContentType + + if ContentType._meta.installed and Permission._meta.installed: + extra = {} if VERSION >= (1, 8) else {'name': 'config'} + content_type, created = ContentType.objects.get_or_create( + app_label='constance', + model='config', + **extra) + + permission, created = Permission.objects.get_or_create( + name='Can change config', + content_type=content_type, + codename='change_config') diff --git a/constance/backends/database/__init__.py b/constance/backends/database/__init__.py index 4cd6a3b..59882d8 100644 --- a/constance/backends/database/__init__.py +++ b/constance/backends/database/__init__.py @@ -1,18 +1,8 @@ +from django.core.cache import caches +from django.core.cache.backends.locmem import LocMemCache from django.core.exceptions import ImproperlyConfigured from django.db.models.signals import post_save -try: - from django.core.cache import get_cache -except ImportError: - from django.core.cache import caches - def get_cache(name): - return caches[name] - -try: - from django.core.cache.backends.locmem import LocMemCache -except ImportError: - from django.core.cache.backends.locmem import CacheClass as LocMemCache - from .. import Backend from ... import settings @@ -31,7 +21,7 @@ class DatabaseBackend(Backend): "correctly. Make sure it's in your INSTALLED_APPS setting.") if settings.DATABASE_CACHE_BACKEND: - self._cache = get_cache(settings.DATABASE_CACHE_BACKEND) + self._cache = caches[settings.DATABASE_CACHE_BACKEND] if isinstance(self._cache, LocMemCache): raise ImproperlyConfigured( "The CONSTANCE_DATABASE_CACHE_BACKEND setting refers to a " diff --git a/constance/models.py b/constance/models.py deleted file mode 100644 index f137982..0000000 --- a/constance/models.py +++ /dev/null @@ -1,29 +0,0 @@ -from django.db.models import signals -from django import VERSION - - -def create_perm(*args, **kwargs): - """ - Creates a fake content type and permission - to be able to check for permissions - """ - from django.contrib.auth.models import Permission - from django.contrib.contenttypes.models import ContentType - - if ContentType._meta.installed and Permission._meta.installed: - extra = {} if VERSION >= (1, 8) else {'name': 'config'} - content_type, created = ContentType.objects.get_or_create( - app_label='constance', - model='config', - **extra) - - permission, created = Permission.objects.get_or_create( - name='Can change config', - content_type=content_type, - codename='change_config') - - -if hasattr(signals, 'post_syncdb'): - signals.post_syncdb.connect(create_perm, dispatch_uid="constance.create_perm") -else: - signals.post_migrate.connect(create_perm, dispatch_uid="constance.create_perm") diff --git a/constance/utils.py b/constance/utils.py index 572d84a..8d8d341 100644 --- a/constance/utils.py +++ b/constance/utils.py @@ -1,7 +1,4 @@ -try: - from importlib import import_module -except ImportError: - from django.utils.importlib import import_module +from importlib import import_module def import_module_attr(path): diff --git a/tests/test_admin.py b/tests/test_admin.py index 5ac9521..51ebe74 100644 --- a/tests/test_admin.py +++ b/tests/test_admin.py @@ -44,3 +44,10 @@ class TestAdmin(TestCase): response = self.options.changelist_view(request, {}) self.assertEqual(response.status_code, 200) + + def test_str(self): + from django.utils import six + from django.contrib.contenttypes.models import ContentType + ct = ContentType.objects.get(app_label='constance', model='config') + + self.assertEqual(six.text_type(ct), 'config') diff --git a/tests/urls.py b/tests/urls.py index 6927e0e..12fe50c 100644 --- a/tests/urls.py +++ b/tests/urls.py @@ -1,11 +1,8 @@ from django.contrib import admin -try: - from django.conf.urls import patterns, include -except ImportError: - from django.conf.urls.defaults import patterns, include +from django.conf.urls import url, include -urlpatterns = patterns('', - (r'^admin/', include(admin.site.urls)), -) +urlpatterns = [ + url(r'^admin/', include(admin.site.urls)), +] diff --git a/tox.ini b/tox.ini index 0841688..479758d 100644 --- a/tox.ini +++ b/tox.ini @@ -1,16 +1,11 @@ [tox] envlist = - py26-django-14, - py27-django-14, - {py26,py27,py32,py33,py34,pypy}-django-{15,16}, - {py27,py32,py33,py34,pypy}-django-{17,18} - {py27,py34,py35,pypy}-django-master + {py27,py33,py34,pypy}-django-{17,18}, + {py27,py34,35,pypy}-django-{master} [testenv] basepython = - py26: python2.6 py27: python2.7 - py32: python3.2 py33: python3.3 py34: python3.4 py35: python3.5 @@ -19,11 +14,6 @@ deps = redis coverage django-picklefield - py26: unittest2 - django-{14,15}: django-discover-runner - django-14: Django>=1.4,<1.5 - django-15: Django>=1.5,<1.6 - django-16: Django>=1.6,<1.7 django-17: Django>=1.7,<1.8 django-18: Django>=1.8,<1.9 django-master: https://github.com/django/django/archive/master.tar.gz