From d0b8e707ec4deeb21ccba0c5c0d268929817c691 Mon Sep 17 00:00:00 2001 From: Serhii Tereshchenko Date: Sat, 1 Jun 2024 10:27:08 +0300 Subject: [PATCH] chore: Remove code for old django versions --- modeltranslation/__init__.py | 8 ------- modeltranslation/fields.py | 23 ++----------------- .../commands/sync_translation_fields.py | 21 +++-------------- modeltranslation/manager.py | 15 +++--------- modeltranslation/translator.py | 10 ++++---- 5 files changed, 12 insertions(+), 65 deletions(-) diff --git a/modeltranslation/__init__.py b/modeltranslation/__init__.py index 0381050..39dd4f6 100644 --- a/modeltranslation/__init__.py +++ b/modeltranslation/__init__.py @@ -1,12 +1,4 @@ from modeltranslation._typing import monkeypatch -try: - from django import VERSION as _django_version - - if _django_version < (3, 2): - default_app_config = "modeltranslation.apps.ModeltranslationConfig" -except ImportError: - pass - # monkeypatch generic classes at runtime monkeypatch() diff --git a/modeltranslation/fields.py b/modeltranslation/fields.py index 658bc56..cd7be24 100644 --- a/modeltranslation/fields.py +++ b/modeltranslation/fields.py @@ -4,7 +4,7 @@ import copy from typing import Any, cast from collections.abc import Sequence -from django import VERSION, forms +from django import forms from django.core.exceptions import ImproperlyConfigured from django.db.models import Model, fields from django.utils.encoding import force_str @@ -49,8 +49,6 @@ SUPPORTED_FIELDS = ( fields.related.ManyToManyField, ) -NEW_RELATED_API = VERSION >= (1, 9) - class NONE: """ @@ -220,24 +218,7 @@ class TranslationField: if hasattr(self.remote_field.model._meta, "_related_objects_cache"): del self.remote_field.model._meta._related_objects_cache - # ForeignKey support - rewrite related_name - elif not NEW_RELATED_API and self.rel and self.related and not self.rel.is_hidden(): - current = self.related.get_accessor_name() - self.rel = copy.copy(self.rel) # Since fields cannot share the same rel object. - # self.related doesn't need to be copied, as it will be recreated in - # ``RelatedField.do_related_class`` - - if self.rel.related_name is None: - # For implicit related_name use different query field name - loc_related_query_name = build_localized_fieldname( - self.related_query_name(), self.language - ) - self.related_query_name = lambda: loc_related_query_name - self.rel.related_name = build_localized_fieldname(current, self.language) - self.rel.field = self - if hasattr(self.rel.to._meta, "_related_objects_cache"): - del self.rel.to._meta._related_objects_cache - elif NEW_RELATED_API and self.remote_field and not self.remote_field.is_hidden(): + elif self.remote_field and not self.remote_field.is_hidden(): current = self.remote_field.get_accessor_name() # Since fields cannot share the same rel object: self.remote_field = copy.copy(self.remote_field) diff --git a/modeltranslation/management/commands/sync_translation_fields.py b/modeltranslation/management/commands/sync_translation_fields.py index 86041c4..f3c376b 100644 --- a/modeltranslation/management/commands/sync_translation_fields.py +++ b/modeltranslation/management/commands/sync_translation_fields.py @@ -14,7 +14,6 @@ from __future__ import annotations from typing import Any, cast from collections.abc import Iterator -from django import VERSION from django.core.management.base import BaseCommand, CommandParser from django.core.management.color import no_style from django.db import connection @@ -59,11 +58,9 @@ class Command(BaseCommand): " languages or undeclared fields." ) - if VERSION < (1, 8): - from optparse import make_option - - option_list = BaseCommand.option_list + ( # type: ignore - make_option( + def add_arguments(self, parser: CommandParser) -> None: + ( + parser.add_argument( "--noinput", action="store_false", dest="interactive", @@ -71,18 +68,6 @@ class Command(BaseCommand): help="Do NOT prompt the user for input of any kind.", ), ) - else: - - def add_arguments(self, parser: CommandParser) -> None: - ( - parser.add_argument( - "--noinput", - action="store_false", - dest="interactive", - default=True, - help="Do NOT prompt the user for input of any kind.", - ), - ) def handle(self, *args: Any, **options: Any) -> None: """ diff --git a/modeltranslation/manager.py b/modeltranslation/manager.py index 1f7fca6..30a4736 100644 --- a/modeltranslation/manager.py +++ b/modeltranslation/manager.py @@ -12,7 +12,6 @@ from functools import reduce from typing import Any, Literal, TypeVar, cast, overload from collections.abc import Container, Iterator, Sequence, Iterable -from django import VERSION from django.contrib.admin.utils import get_model_from_relation from django.core.exceptions import FieldDoesNotExist from django.db import models @@ -328,17 +327,9 @@ class MultilingualQuerySet(QuerySet[_T]): kwargs[new_key] = self._rewrite_f(val) return args, kwargs - if VERSION >= (3, 2): - - def _filter_or_exclude(self, negate: bool, args: Any, kwargs: Any) -> Self: - args, kwargs = self._rewrite_filter_or_exclude(args, kwargs) - return super()._filter_or_exclude(negate, args, kwargs) - - else: - - def _filter_or_exclude(self, negate: bool, *args: Any, **kwargs: Any) -> Self: - args, kwargs = self._rewrite_filter_or_exclude(args, kwargs) - return super()._filter_or_exclude(negate, *args, **kwargs) + def _filter_or_exclude(self, negate: bool, args: Any, kwargs: Any) -> Self: + args, kwargs = self._rewrite_filter_or_exclude(args, kwargs) + return super()._filter_or_exclude(negate, args, kwargs) def _get_original_fields(self) -> list[str]: source = ( diff --git a/modeltranslation/translator.py b/modeltranslation/translator.py index 88373d7..8caaf08 100644 --- a/modeltranslation/translator.py +++ b/modeltranslation/translator.py @@ -4,7 +4,6 @@ from functools import partial from typing import Any, Callable, ClassVar, cast from collections.abc import Collection, Iterable, Sequence -import django from django.core.exceptions import ImproperlyConfigured from django.db.models import ( Field, @@ -460,11 +459,10 @@ def patch_related_object_descriptor_caching(ro_descriptor): class NewSingleObjectDescriptor(LanguageCacheSingleObjectDescriptor, ro_descriptor.__class__): pass - if django.VERSION[0] >= 2: - ro_descriptor.related.get_cache_name = partial( - NewSingleObjectDescriptor.get_cache_name, - ro_descriptor, - ) + ro_descriptor.related.get_cache_name = partial( + NewSingleObjectDescriptor.get_cache_name, + ro_descriptor, + ) ro_descriptor.accessor = ro_descriptor.related.get_accessor_name() ro_descriptor.__class__ = NewSingleObjectDescriptor