diff --git a/docs/migrating.rst b/docs/migrating.rst index 866da3b..2db2355 100644 --- a/docs/migrating.rst +++ b/docs/migrating.rst @@ -29,7 +29,6 @@ can be included in a single Django migration. For example: .. code-block:: python # -*- coding: utf-8 -*- - from __future__ import unicode_literals from django.db import migrations, models diff --git a/polymorphic/admin/parentadmin.py b/polymorphic/admin/parentadmin.py index c9f7598..7addfde 100644 --- a/polymorphic/admin/parentadmin.py +++ b/polymorphic/admin/parentadmin.py @@ -1,8 +1,6 @@ """ The parent admin displays the list view of the base model. """ -import sys - from django.contrib import admin from django.contrib.admin.helpers import AdminErrorList, AdminForm from django.contrib.admin.templatetags.admin_urls import add_preserved_filters @@ -11,6 +9,7 @@ from django.core.exceptions import ImproperlyConfigured, PermissionDenied from django.db import models from django.http import Http404, HttpResponseRedirect from django.template.response import TemplateResponse +from django.urls import URLResolver from django.utils.encoding import force_text from django.utils.http import urlencode from django.utils.safestring import mark_safe @@ -20,17 +19,6 @@ from polymorphic.utils import get_base_polymorphic_model from .forms import PolymorphicModelChoiceForm -try: - # Django 2.0+ - from django.urls import URLResolver -except ImportError: - # Django < 2.0 - from django.urls import RegexURLResolver as URLResolver - - -if sys.version_info[0] >= 3: - long = int - class RegistrationClosed(RuntimeError): "The admin model can't be registered anymore at this point." @@ -293,9 +281,9 @@ class PolymorphicParentModelAdmin(admin.ModelAdmin): try: pos = path.find("/") if pos == -1: - object_id = long(path) + object_id = int(path) else: - object_id = long(path[0:pos]) + object_id = int(path[0:pos]) except ValueError: raise Http404( "No ct_id parameter, unable to find admin subclass for path '{0}'.".format( diff --git a/polymorphic/base.py b/polymorphic/base.py index 81d988a..1bf6059 100644 --- a/polymorphic/base.py +++ b/polymorphic/base.py @@ -2,8 +2,6 @@ """ PolymorphicModel Meta Class """ -from __future__ import absolute_import - import inspect import os import sys diff --git a/polymorphic/compat.py b/polymorphic/compat.py index 094b161..1589eb2 100644 --- a/polymorphic/compat.py +++ b/polymorphic/compat.py @@ -1,22 +1,4 @@ """Compatibility with Python 2 (taken from 'django.utils.six')""" -import sys - -PY2 = sys.version_info[0] == 2 -PY3 = sys.version_info[0] == 3 - - -if PY3: - string_types = (str,) - integer_types = (int,) - class_types = (type,) - text_type = str - binary_type = bytes - - MAXSIZE = sys.maxsize -else: - string_types = (basestring,) - integer_types = (int, long) - def with_metaclass(meta, *bases): class metaclass(type): diff --git a/polymorphic/contrib/extra_views.py b/polymorphic/contrib/extra_views.py index f3e050d..9822c47 100644 --- a/polymorphic/contrib/extra_views.py +++ b/polymorphic/contrib/extra_views.py @@ -4,8 +4,6 @@ The ``extra_views.advanced`` provides a method to combine that with a create/upd This package provides classes that support both options for polymorphic formsets. """ -from __future__ import absolute_import - import extra_views from django.core.exceptions import ImproperlyConfigured diff --git a/polymorphic/managers.py b/polymorphic/managers.py index 901f086..5e894d4 100644 --- a/polymorphic/managers.py +++ b/polymorphic/managers.py @@ -2,7 +2,6 @@ """ The manager class for use in the models. """ -from __future__ import unicode_literals from django.db import models diff --git a/polymorphic/models.py b/polymorphic/models.py index 63731e8..5c34ff7 100644 --- a/polymorphic/models.py +++ b/polymorphic/models.py @@ -2,8 +2,6 @@ """ Seamless Polymorphic Inheritance for Django Models """ -from __future__ import absolute_import - from django.contrib.contenttypes.models import ContentType from django.db import models from django.db.models.fields.related import ( diff --git a/polymorphic/query.py b/polymorphic/query.py index 4dc4d30..7277f6c 100644 --- a/polymorphic/query.py +++ b/polymorphic/query.py @@ -2,8 +2,6 @@ """ QuerySet for PolymorphicModel """ -from __future__ import absolute_import - import copy from collections import defaultdict @@ -177,7 +175,7 @@ class PolymorphicQuerySet(QuerySet): """translate the field paths in the args, then call vanilla order_by.""" field_names = [ translate_polymorphic_field_path(self.model, a) - if isinstance(a, compat.string_types) + if isinstance(a, str) else a # allow expressions to pass unchanged for a in field_names ] diff --git a/polymorphic/query_translate.py b/polymorphic/query_translate.py index cbecf10..08798bc 100644 --- a/polymorphic/query_translate.py +++ b/polymorphic/query_translate.py @@ -2,8 +2,6 @@ """ PolymorphicQuerySet support functions """ -from __future__ import absolute_import - import copy from collections import deque @@ -144,7 +142,7 @@ def translate_polymorphic_field_path(queryset_model, field_path): into modela__modelb__modelc__field3. Returns: translated path (unchanged, if no translation needed) """ - if not isinstance(field_path, compat.string_types): + if not isinstance(field_path, str): raise ValueError("Expected field name as string: {0}".format(field_path)) classname, sep, pure_field_path = field_path.partition("___") diff --git a/polymorphic/showfields.py b/polymorphic/showfields.py index 0d62d88..d4c21b5 100644 --- a/polymorphic/showfields.py +++ b/polymorphic/showfields.py @@ -40,7 +40,7 @@ class ShowFieldBase(object): out += content.__class__.__name__ elif issubclass(field_type, models.ManyToManyField): out += "%d" % content.count() - elif isinstance(content, compat.integer_types): + elif isinstance(content, int): out += str(content) elif content is None: out += "None" diff --git a/polymorphic/templatetags/polymorphic_admin_tags.py b/polymorphic/templatetags/polymorphic_admin_tags.py index 9914b84..87057d6 100644 --- a/polymorphic/templatetags/polymorphic_admin_tags.py +++ b/polymorphic/templatetags/polymorphic_admin_tags.py @@ -31,7 +31,7 @@ class BreadcrumbScope(Node): # Instead, have an assignment tag that inserts that in the template. base_opts = self.base_opts.resolve(context) new_vars = {} - if base_opts and not isinstance(base_opts, compat.string_types): + if base_opts and not isinstance(base_opts, str): new_vars = { "app_label": base_opts.app_label, # What this is all about "opts": base_opts, diff --git a/polymorphic/tests/test_multidb.py b/polymorphic/tests/test_multidb.py index eec9e5a..b70a8d5 100644 --- a/polymorphic/tests/test_multidb.py +++ b/polymorphic/tests/test_multidb.py @@ -1,5 +1,3 @@ -from __future__ import print_function - from django.contrib.contenttypes.models import ContentType from django.db.models import Q from django.test import TestCase diff --git a/polymorphic/utils.py b/polymorphic/utils.py index 14c9a9f..8c00758 100644 --- a/polymorphic/utils.py +++ b/polymorphic/utils.py @@ -1,5 +1,3 @@ -import sys - from django.contrib.contenttypes.models import ContentType from django.db import DEFAULT_DB_ALIAS @@ -59,12 +57,9 @@ def sort_by_subclass(*classes): """ Sort a series of models by their inheritance order. """ - if sys.version_info[0] == 2: - return sorted(classes, cmp=_compare_mro) - else: - from functools import cmp_to_key + from functools import cmp_to_key - return sorted(classes, key=cmp_to_key(_compare_mro)) + return sorted(classes, key=cmp_to_key(_compare_mro)) def get_base_polymorphic_model(ChildModel, allow_abstract=False):