diff --git a/admin_tools/dashboard/dashboards.py b/admin_tools/dashboard/dashboards.py index 4e0358a..e2f8922 100644 --- a/admin_tools/dashboard/dashboards.py +++ b/admin_tools/dashboard/dashboards.py @@ -7,6 +7,11 @@ from django.utils.importlib import import_module from django.utils.translation import ugettext_lazy as _ from django.core.urlresolvers import reverse from django.contrib.contenttypes.models import ContentType +try: + from django.utils.encoding import force_text +except ImportError: + # Django < 1.5 + from django.utils.encoding import force_unicode as force_text from admin_tools.dashboard import modules from admin_tools.utils import get_admin_site_name, uniquify @@ -203,7 +208,7 @@ class AppIndexDashboard(Dashboard): """ Internal method used to distinguish different dashboards in js code. """ - return '%s-dashboard' % slugify(unicode(self.app_title)) + return '%s-dashboard' % slugify(force_text(self.app_title)) class DefaultIndexDashboard(Dashboard): diff --git a/admin_tools/dashboard/modules.py b/admin_tools/dashboard/modules.py index c0123fd..44e56c3 100644 --- a/admin_tools/dashboard/modules.py +++ b/admin_tools/dashboard/modules.py @@ -456,11 +456,9 @@ class AppList(DashboardModule, AppListElementMixin): model_dict['add_url'] = self._get_admin_add_url(model, context) apps[app_label]['models'].append(model_dict) - apps_sorted = apps.keys() - apps_sorted.sort() - for app in apps_sorted: + for app in sorted(apps.keys()): # sort model list alphabetically - apps[app]['models'].sort(lambda x, y: cmp(x['title'], y['title'])) + apps[app]['models'].sort(key=lambda x: x['title']) self.children.append(apps[app]) self._initialized = True diff --git a/admin_tools/dashboard/utils.py b/admin_tools/dashboard/utils.py index 5bc02db..e6c8574 100644 --- a/admin_tools/dashboard/utils.py +++ b/admin_tools/dashboard/utils.py @@ -1,8 +1,6 @@ """ Dashboard utilities. """ -import types - from django.conf import settings from django.utils.importlib import import_module from django.utils.text import capfirst @@ -23,7 +21,7 @@ def get_dashboard(context, location): raise ValueError('Invalid dashboard location: "%s"' % location) def _get_dashboard_cls(dashboard_cls, context): - if type(dashboard_cls) is types.DictType: + if isinstance(dashboard_cls, dict): curr_url = context.get('request').path for key in dashboard_cls: admin_site_mod, admin_site_inst = key.rsplit('.', 1) diff --git a/admin_tools/dashboard/views.py b/admin_tools/dashboard/views.py index 2be1223..121a583 100644 --- a/admin_tools/dashboard/views.py +++ b/admin_tools/dashboard/views.py @@ -9,8 +9,8 @@ try: except ImportError: from django.contrib.csrf.middleware import csrf_exempt -from forms import DashboardPreferencesForm -from models import DashboardPreferences +from .forms import DashboardPreferencesForm +from .models import DashboardPreferences @login_required diff --git a/admin_tools/menu/forms.py b/admin_tools/menu/forms.py index 7728cdb..4651114 100644 --- a/admin_tools/menu/forms.py +++ b/admin_tools/menu/forms.py @@ -1,4 +1,8 @@ -import urllib +try: + from urllib.parse import unquote +except ImportError: + # Python 2 compatibility + from urllib import unquote from django import forms @@ -16,7 +20,7 @@ class BookmarkForm(forms.ModelForm): def clean_url(self): url = self.cleaned_data['url'] - return urllib.unquote(url) + return unquote(url) def save(self, *args, **kwargs): bookmark = super(BookmarkForm, self).save(commit=False, *args, **kwargs) diff --git a/admin_tools/menu/items.py b/admin_tools/menu/items.py index 71f6bac..cdb8317 100644 --- a/admin_tools/menu/items.py +++ b/admin_tools/menu/items.py @@ -200,13 +200,11 @@ class AppList(MenuItem, AppListElementMixin): 'url': self._get_admin_change_url(model, context) }) - apps_sorted = apps.keys() - apps_sorted.sort() - for app in apps_sorted: + for app in sorted(apps.keys()): app_dict = apps[app] item = MenuItem(title=app_dict['title'], url=app_dict['url']) # sort model list alphabetically - apps[app]['models'].sort(lambda x, y: cmp(x['title'], y['title'])) + apps[app]['models'].sort(key=lambda x: x['title']) for model_dict in apps[app]['models']: item.children.append(MenuItem(**model_dict)) self.children.append(item) diff --git a/admin_tools/menu/utils.py b/admin_tools/menu/utils.py index 1c62197..1b3569c 100644 --- a/admin_tools/menu/utils.py +++ b/admin_tools/menu/utils.py @@ -2,15 +2,13 @@ Menu utilities. """ -import types - from django.conf import settings from django.utils.importlib import import_module from django.core.urlresolvers import reverse def _get_menu_cls(menu_cls, context): - if type(menu_cls) is types.DictType: + if isinstance(menu_cls, dict): curr_url = context.get('request').path for key in menu_cls: admin_site_mod, admin_site_inst = key.rsplit('.', 1) diff --git a/admin_tools/menu/views.py b/admin_tools/menu/views.py index e7e0b6a..00526f3 100644 --- a/admin_tools/menu/views.py +++ b/admin_tools/menu/views.py @@ -9,8 +9,8 @@ try: except ImportError: from django.contrib.csrf.middleware import csrf_exempt -from forms import BookmarkForm -from models import Bookmark +from .forms import BookmarkForm +from .models import Bookmark @login_required diff --git a/admin_tools/utils.py b/admin_tools/utils.py index 7f89df9..2af2c6c 100644 --- a/admin_tools/utils.py +++ b/admin_tools/utils.py @@ -1,7 +1,6 @@ """ Admin ui common utilities. """ -import types from fnmatch import fnmatch from django.conf import settings @@ -27,7 +26,7 @@ def get_admin_site(context=None, request=None): 'admin_tools.dashboard.dashboards.DefaultIndexDashboard' ) - if type(dashboard_cls) is types.DictType: + if isinstance(dashboard_cls, dict): if context: request = context.get('request') curr_url = request.path diff --git a/test_proj/dashboard.py b/test_proj/dashboard.py index 7263878..566443f 100644 --- a/test_proj/dashboard.py +++ b/test_proj/dashboard.py @@ -74,14 +74,14 @@ class CustomIndexDashboard(Dashboard): ] )) self.children.append(modules.Group( - title=u'Test group', + title='Test group', children=[ modules.ModelList( - u'Tab 1', + 'Tab 1', ['django.contrib.*'] ), modules.ModelList( - u'Tab 2', + 'Tab 2', ['test_app.*'] ), ]