mirror of
https://github.com/Hopiu/django-modeltranslation.git
synced 2026-05-16 00:33:09 +00:00
chore: Update old syntax
pyupgrade --keep-percent-format --py38-plus modeltranslation/**/*.py
This commit is contained in:
parent
ec69a82a36
commit
3c6cbd59a7
13 changed files with 90 additions and 110 deletions
|
|
@ -1,4 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from copy import deepcopy
|
||||
|
||||
from django.contrib import admin
|
||||
|
|
@ -26,7 +25,7 @@ class TranslationBaseModelAdmin(BaseModelAdmin):
|
|||
both_empty_values_fields = ()
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(TranslationBaseModelAdmin, self).__init__(*args, **kwargs)
|
||||
super().__init__(*args, **kwargs)
|
||||
self.trans_opts = translator.get_options_for_model(self.model)
|
||||
self._patch_prepopulated_fields()
|
||||
|
||||
|
|
@ -47,7 +46,7 @@ class TranslationBaseModelAdmin(BaseModelAdmin):
|
|||
return None
|
||||
|
||||
def formfield_for_dbfield(self, db_field, request, **kwargs):
|
||||
field = super(TranslationBaseModelAdmin, self).formfield_for_dbfield(
|
||||
field = super().formfield_for_dbfield(
|
||||
db_field, request, **kwargs
|
||||
)
|
||||
self.patch_translation_field(db_field, field, request, **kwargs)
|
||||
|
|
@ -271,7 +270,7 @@ class TranslationAdmin(TranslationBaseModelAdmin, admin.ModelAdmin):
|
|||
group_fieldsets = False
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(TranslationAdmin, self).__init__(*args, **kwargs)
|
||||
super().__init__(*args, **kwargs)
|
||||
self._patch_list_editable()
|
||||
|
||||
def _patch_list_editable(self):
|
||||
|
|
@ -297,7 +296,7 @@ class TranslationAdmin(TranslationBaseModelAdmin, admin.ModelAdmin):
|
|||
flattened_fieldsets = flatten_fieldsets(fieldsets)
|
||||
|
||||
# Create a fieldset to group each translated field's localized fields
|
||||
fields = sorted((f for f in self.opts.get_fields() if f.concrete))
|
||||
fields = sorted(f for f in self.opts.get_fields() if f.concrete)
|
||||
untranslated_fields = [
|
||||
f.name
|
||||
for f in fields
|
||||
|
|
@ -352,7 +351,7 @@ class TranslationAdmin(TranslationBaseModelAdmin, admin.ModelAdmin):
|
|||
|
||||
def get_form(self, request, obj=None, **kwargs):
|
||||
kwargs = self._get_form_or_formset(request, obj, **kwargs)
|
||||
return super(TranslationAdmin, self).get_form(request, obj, **kwargs)
|
||||
return super().get_form(request, obj, **kwargs)
|
||||
|
||||
def get_fieldsets(self, request, obj=None):
|
||||
return self._get_fieldsets_pre_form_or_formset(request, obj) or self._group_fieldsets(
|
||||
|
|
@ -365,7 +364,7 @@ class TranslationAdmin(TranslationBaseModelAdmin, admin.ModelAdmin):
|
|||
class TranslationInlineModelAdmin(TranslationBaseModelAdmin, InlineModelAdmin):
|
||||
def get_formset(self, request, obj=None, **kwargs):
|
||||
kwargs = self._get_form_or_formset(request, obj, **kwargs)
|
||||
return super(TranslationInlineModelAdmin, self).get_formset(request, obj, **kwargs)
|
||||
return super().get_formset(request, obj, **kwargs)
|
||||
|
||||
def get_fieldsets(self, request, obj=None):
|
||||
# FIXME: If fieldsets are declared on an inline some kind of ghost
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -247,7 +247,7 @@ class TranslationField:
|
|||
return self.creation_counter == other.creation_counter and self.language == getattr(
|
||||
other, 'language', None
|
||||
)
|
||||
return super(TranslationField, self).__eq__(other)
|
||||
return super().__eq__(other)
|
||||
|
||||
def __ne__(self, other):
|
||||
return not self.__eq__(other)
|
||||
|
|
@ -278,7 +278,7 @@ class TranslationField:
|
|||
The ``forms.CharField`` somewhat surprising behaviour is documented as a
|
||||
"won't fix": https://code.djangoproject.com/ticket/9590.
|
||||
"""
|
||||
formfield = super(TranslationField, self).formfield(*args, **kwargs)
|
||||
formfield = super().formfield(*args, **kwargs)
|
||||
if isinstance(formfield, forms.CharField):
|
||||
if self.empty_value is None:
|
||||
from modeltranslation.forms import NullCharField
|
||||
|
|
@ -287,7 +287,7 @@ class TranslationField:
|
|||
kwargs['form_class'] = type(
|
||||
'Null%s' % form_class.__name__, (NullCharField, form_class), {}
|
||||
)
|
||||
formfield = super(TranslationField, self).formfield(*args, **kwargs)
|
||||
formfield = super().formfield(*args, **kwargs)
|
||||
elif self.empty_value == 'both':
|
||||
from modeltranslation.forms import NullableField
|
||||
|
||||
|
|
@ -295,7 +295,7 @@ class TranslationField:
|
|||
kwargs['form_class'] = type(
|
||||
'Nullable%s' % form_class.__name__, (NullableField, form_class), {}
|
||||
)
|
||||
formfield = super(TranslationField, self).formfield(*args, **kwargs)
|
||||
formfield = super().formfield(*args, **kwargs)
|
||||
if isinstance(formfield.widget, (forms.TextInput, forms.Textarea)):
|
||||
formfield.widget = ClearableWidgetWrapper(formfield.widget)
|
||||
return formfield
|
||||
|
|
@ -315,7 +315,7 @@ class TranslationField:
|
|||
instance._mt_form_pending_clear = {}
|
||||
instance._mt_form_pending_clear[self.name] = data
|
||||
else:
|
||||
super(TranslationField, self).save_form_data(instance, data)
|
||||
super().save_form_data(instance, data)
|
||||
|
||||
def deconstruct(self):
|
||||
name, path, args, kwargs = self.translated_field.deconstruct()
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from django import forms
|
||||
from django.core import validators
|
||||
|
||||
|
|
@ -7,7 +6,7 @@ from modeltranslation.fields import TranslationField
|
|||
|
||||
class TranslationModelForm(forms.ModelForm):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(TranslationModelForm, self).__init__(*args, **kwargs)
|
||||
super().__init__(*args, **kwargs)
|
||||
for f in self._meta.model._meta.fields:
|
||||
if f.name in self.fields and isinstance(f, TranslationField):
|
||||
del self.fields[f.name]
|
||||
|
|
@ -21,7 +20,7 @@ class NullCharField(forms.CharField):
|
|||
def to_python(self, value):
|
||||
if value in validators.EMPTY_VALUES:
|
||||
return None
|
||||
return super(NullCharField, self).to_python(value)
|
||||
return super().to_python(value)
|
||||
|
||||
|
||||
class NullableField(forms.Field):
|
||||
|
|
@ -33,7 +32,7 @@ class NullableField(forms.Field):
|
|||
def to_python(self, value):
|
||||
if value is None:
|
||||
return value
|
||||
return super(NullableField, self).to_python(value)
|
||||
return super().to_python(value)
|
||||
|
||||
# Django 1.6
|
||||
def _has_changed(self, initial, data):
|
||||
|
|
@ -42,7 +41,7 @@ class NullableField(forms.Field):
|
|||
def has_changed(self, initial, data):
|
||||
if (initial is None and data is not None) or (initial is not None and data is None):
|
||||
return True
|
||||
obj = super(NullableField, self)
|
||||
obj = super()
|
||||
if hasattr(obj, 'has_changed'):
|
||||
return obj.has_changed(initial, data)
|
||||
else: # Django < 1.9 compat
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ class Command(LoadDataCommand):
|
|||
check_mode(self, option_string, value, parser, namespace)
|
||||
|
||||
def add_arguments(self, parser):
|
||||
super(Command, self).add_arguments(parser)
|
||||
super().add_arguments(parser)
|
||||
parser.add_argument(
|
||||
'--populate',
|
||||
action=self.CheckAction,
|
||||
|
|
@ -44,6 +44,6 @@ class Command(LoadDataCommand):
|
|||
mode = options.get('populate')
|
||||
if mode is not None:
|
||||
with auto_populate(mode):
|
||||
return super(Command, self).handle(*fixture_labels, **options)
|
||||
return super().handle(*fixture_labels, **options)
|
||||
else:
|
||||
return super(Command, self).handle(*fixture_labels, **options)
|
||||
return super().handle(*fixture_labels, **options)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from django.db.models import F, Q, ManyToManyField
|
||||
from django.core.management.base import BaseCommand, CommandError
|
||||
|
||||
|
|
|
|||
|
|
@ -107,9 +107,9 @@ def append_lookup_key(model, lookup_key):
|
|||
if pieces[0] in fields_to_trans_models:
|
||||
transmodel = fields_to_trans_models[pieces[0]]
|
||||
rest = append_lookup_key(transmodel, pieces[1])
|
||||
fields = set('__'.join(pr) for pr in itertools.product(fields, rest))
|
||||
fields = {'__'.join(pr) for pr in itertools.product(fields, rest)}
|
||||
else:
|
||||
fields = set('%s__%s' % (f, pieces[1]) for f in fields)
|
||||
fields = {'%s__%s' % (f, pieces[1]) for f in fields}
|
||||
return fields
|
||||
|
||||
|
||||
|
|
@ -174,7 +174,7 @@ def get_field_by_colum_name(model, col):
|
|||
|
||||
class MultilingualQuerySet(QuerySet):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(MultilingualQuerySet, self).__init__(*args, **kwargs)
|
||||
super().__init__(*args, **kwargs)
|
||||
self._post_init()
|
||||
|
||||
def _post_init(self):
|
||||
|
|
@ -205,7 +205,7 @@ class MultilingualQuerySet(QuerySet):
|
|||
kwargs.setdefault('translation_fields', self.translation_fields)
|
||||
if hasattr(self, 'original_fields'):
|
||||
kwargs.setdefault('original_fields', self.original_fields)
|
||||
cloned = super(MultilingualQuerySet, self)._clone()
|
||||
cloned = super()._clone()
|
||||
cloned.__dict__.update(kwargs)
|
||||
return cloned
|
||||
|
||||
|
|
@ -230,7 +230,7 @@ class MultilingualQuerySet(QuerySet):
|
|||
# This method was not present in django-linguo
|
||||
def select_related(self, *fields, **kwargs):
|
||||
if not self._rewrite:
|
||||
return super(MultilingualQuerySet, self).select_related(*fields, **kwargs)
|
||||
return super().select_related(*fields, **kwargs)
|
||||
# TO CONSIDER: whether this should rewrite only current language, or all languages?
|
||||
# fk -> [fk, fk_en] (with en=active) VS fk -> [fk, fk_en, fk_de, fk_fr ...] (for all langs)
|
||||
|
||||
|
|
@ -241,7 +241,7 @@ class MultilingualQuerySet(QuerySet):
|
|||
new_args.append(None)
|
||||
else:
|
||||
new_args.append(rewrite_lookup_key(self.model, key))
|
||||
return super(MultilingualQuerySet, self).select_related(*new_args, **kwargs)
|
||||
return super().select_related(*new_args, **kwargs)
|
||||
|
||||
def update_or_create(self, defaults=None, **kwargs):
|
||||
"""
|
||||
|
|
@ -335,13 +335,13 @@ class MultilingualQuerySet(QuerySet):
|
|||
|
||||
def _filter_or_exclude(self, negate, args, kwargs):
|
||||
args, kwargs = self._rewrite_filter_or_exclude(args, kwargs)
|
||||
return super(MultilingualQuerySet, self)._filter_or_exclude(negate, args, kwargs)
|
||||
return super()._filter_or_exclude(negate, args, kwargs)
|
||||
|
||||
else:
|
||||
|
||||
def _filter_or_exclude(self, negate, *args, **kwargs):
|
||||
args, kwargs = self._rewrite_filter_or_exclude(args, kwargs)
|
||||
return super(MultilingualQuerySet, self)._filter_or_exclude(negate, *args, **kwargs)
|
||||
return super()._filter_or_exclude(negate, *args, **kwargs)
|
||||
|
||||
def _get_original_fields(self):
|
||||
source = (
|
||||
|
|
@ -357,11 +357,11 @@ class MultilingualQuerySet(QuerySet):
|
|||
to translation fields for the current language.
|
||||
"""
|
||||
if not self._rewrite:
|
||||
return super(MultilingualQuerySet, self).order_by(*field_names)
|
||||
return super().order_by(*field_names)
|
||||
new_args = []
|
||||
for key in field_names:
|
||||
new_args.append(rewrite_order_lookup_key(self.model, key))
|
||||
return super(MultilingualQuerySet, self).order_by(*new_args)
|
||||
return super().order_by(*new_args)
|
||||
|
||||
def distinct(self, *field_names):
|
||||
"""
|
||||
|
|
@ -369,20 +369,20 @@ class MultilingualQuerySet(QuerySet):
|
|||
to translation fields for the current language.
|
||||
"""
|
||||
if not self._rewrite:
|
||||
return super(MultilingualQuerySet, self).distinct(*field_names)
|
||||
return super().distinct(*field_names)
|
||||
new_args = []
|
||||
for key in field_names:
|
||||
new_args.append(rewrite_order_lookup_key(self.model, key))
|
||||
return super(MultilingualQuerySet, self).distinct(*new_args)
|
||||
return super().distinct(*new_args)
|
||||
|
||||
def update(self, **kwargs):
|
||||
if not self._rewrite:
|
||||
return super(MultilingualQuerySet, self).update(**kwargs)
|
||||
return super().update(**kwargs)
|
||||
for key, val in list(kwargs.items()):
|
||||
new_key = rewrite_lookup_key(self.model, key)
|
||||
del kwargs[key]
|
||||
kwargs[new_key] = self._rewrite_f(val)
|
||||
return super(MultilingualQuerySet, self).update(**kwargs)
|
||||
return super().update(**kwargs)
|
||||
|
||||
update.alters_data = True
|
||||
|
||||
|
|
@ -400,7 +400,7 @@ class MultilingualQuerySet(QuerySet):
|
|||
Allows to override population mode with a ``populate`` method.
|
||||
"""
|
||||
with auto_populate(self._populate_mode):
|
||||
return super(MultilingualQuerySet, self).create(**kwargs)
|
||||
return super().create(**kwargs)
|
||||
|
||||
# This method was not present in django-linguo
|
||||
def get_or_create(self, *args, **kwargs):
|
||||
|
|
@ -408,30 +408,30 @@ class MultilingualQuerySet(QuerySet):
|
|||
Allows to override population mode with a ``populate`` method.
|
||||
"""
|
||||
with auto_populate(self._populate_mode):
|
||||
return super(MultilingualQuerySet, self).get_or_create(*args, **kwargs)
|
||||
return super().get_or_create(*args, **kwargs)
|
||||
|
||||
# This method was not present in django-linguo
|
||||
def defer(self, *fields):
|
||||
fields = append_lookup_keys(self.model, fields)
|
||||
return super(MultilingualQuerySet, self).defer(*fields)
|
||||
return super().defer(*fields)
|
||||
|
||||
# This method was not present in django-linguo
|
||||
def only(self, *fields):
|
||||
fields = append_lookup_keys(self.model, fields)
|
||||
return super(MultilingualQuerySet, self).only(*fields)
|
||||
return super().only(*fields)
|
||||
|
||||
# This method was not present in django-linguo
|
||||
def raw_values(self, *fields, **expressions):
|
||||
return super(MultilingualQuerySet, self).values(*fields, **expressions)
|
||||
return super().values(*fields, **expressions)
|
||||
|
||||
def _values(self, *original, **kwargs):
|
||||
selects_all = kwargs.pop('selects_all', False)
|
||||
if not kwargs.pop('prepare', False):
|
||||
return super(MultilingualQuerySet, self)._values(*original, **kwargs)
|
||||
return super()._values(*original, **kwargs)
|
||||
new_fields, translation_fields = append_fallback(self.model, original)
|
||||
annotation_keys = set(self.query.annotation_select.keys()) if selects_all else set()
|
||||
new_fields.update(annotation_keys)
|
||||
clone = super(MultilingualQuerySet, self)._values(*list(new_fields), **kwargs)
|
||||
clone = super()._values(*list(new_fields), **kwargs)
|
||||
clone.original_fields = tuple(original)
|
||||
clone.translation_fields = translation_fields
|
||||
return clone
|
||||
|
|
@ -439,7 +439,7 @@ class MultilingualQuerySet(QuerySet):
|
|||
# This method was not present in django-linguo
|
||||
def values(self, *fields, **expressions):
|
||||
if not self._rewrite:
|
||||
return super(MultilingualQuerySet, self).values(*fields, **expressions)
|
||||
return super().values(*fields, **expressions)
|
||||
selects_all = not fields
|
||||
if not fields:
|
||||
# Emulate original queryset behaviour: get all fields that are not translation fields
|
||||
|
|
@ -452,7 +452,7 @@ class MultilingualQuerySet(QuerySet):
|
|||
# This method was not present in django-linguo
|
||||
def values_list(self, *fields, flat=False, named=False):
|
||||
if not self._rewrite:
|
||||
return super(MultilingualQuerySet, self).values_list(*fields, flat=flat, named=named)
|
||||
return super().values_list(*fields, flat=flat, named=named)
|
||||
if flat and named:
|
||||
raise TypeError("'flat' and 'named' can't be used together.")
|
||||
if flat and len(fields) > 1:
|
||||
|
|
@ -494,13 +494,13 @@ class MultilingualQuerySet(QuerySet):
|
|||
# This method was not present in django-linguo
|
||||
def dates(self, field_name, *args, **kwargs):
|
||||
if not self._rewrite:
|
||||
return super(MultilingualQuerySet, self).dates(field_name, *args, **kwargs)
|
||||
return super().dates(field_name, *args, **kwargs)
|
||||
new_key = rewrite_lookup_key(self.model, field_name)
|
||||
return super(MultilingualQuerySet, self).dates(new_key, *args, **kwargs)
|
||||
return super().dates(new_key, *args, **kwargs)
|
||||
|
||||
|
||||
class FallbackValuesIterable(ValuesIterable):
|
||||
class X(object):
|
||||
class X:
|
||||
# This stupid class is needed as object use __slots__ and has no __dict__.
|
||||
pass
|
||||
|
||||
|
|
@ -535,7 +535,7 @@ class FallbackNamedValuesListIterable(FallbackValuesIterable):
|
|||
|
||||
class FallbackFlatValuesListIterable(FallbackValuesListIterable):
|
||||
def __iter__(self):
|
||||
for row in super(FallbackFlatValuesListIterable, self).__iter__():
|
||||
for row in super().__iter__():
|
||||
yield row[0]
|
||||
|
||||
|
||||
|
|
@ -558,7 +558,7 @@ class MultilingualQuerysetManager(models.Manager):
|
|||
"""
|
||||
|
||||
def get_queryset(self):
|
||||
qs = super(MultilingualQuerysetManager, self).get_queryset()
|
||||
qs = super().get_queryset()
|
||||
return self._patch_queryset(qs)
|
||||
|
||||
def _patch_queryset(self, qs):
|
||||
|
|
@ -583,7 +583,7 @@ class MultilingualManager(MultilingualQuerysetManager):
|
|||
This method is repeated because some managers that don't use super() or alter queryset class
|
||||
may return queryset that is not subclass of MultilingualQuerySet.
|
||||
"""
|
||||
qs = super(MultilingualManager, self).get_queryset()
|
||||
qs = super().get_queryset()
|
||||
if isinstance(qs, MultilingualQuerySet):
|
||||
# Is already patched by MultilingualQuerysetManager - in most of the cases
|
||||
# when custom managers use super() properly in get_queryset.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
|
||||
def autodiscover():
|
||||
"""
|
||||
Auto-discover INSTALLED_APPS translation.py modules and fail silently when
|
||||
|
|
|
|||
|
|
@ -171,7 +171,7 @@ class OtherFieldsModel(models.Model):
|
|||
genericip = models.GenericIPAddressField(blank=True, null=True)
|
||||
|
||||
|
||||
class FancyDescriptor(object):
|
||||
class FancyDescriptor:
|
||||
"""
|
||||
Stupid demo descriptor, that store int in database and return string of that length on get.
|
||||
"""
|
||||
|
|
@ -197,14 +197,14 @@ class FancyDescriptor(object):
|
|||
class FancyField(models.PositiveIntegerField):
|
||||
def __init__(self, *args, **kwargs):
|
||||
kwargs.setdefault('default', '')
|
||||
super(FancyField, self).__init__(*args, **kwargs)
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def contribute_to_class(self, cls, name):
|
||||
super(FancyField, self).contribute_to_class(cls, name)
|
||||
super().contribute_to_class(cls, name)
|
||||
setattr(cls, self.name, FancyDescriptor(self))
|
||||
|
||||
def pre_save(self, model_instance, add):
|
||||
value = super(FancyField, self).pre_save(model_instance, add)
|
||||
value = super().pre_save(model_instance, add)
|
||||
# In this part value should be retrieved using descriptor and be a string
|
||||
assert isinstance(value, str)
|
||||
# We put an int to database
|
||||
|
|
@ -242,7 +242,7 @@ class AbstractModelA(models.Model):
|
|||
titlea = models.CharField(gettext_lazy('title a'), max_length=255)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(AbstractModelA, self).__init__(*args, **kwargs)
|
||||
super().__init__(*args, **kwargs)
|
||||
self.titlea = 'title_a'
|
||||
|
||||
class Meta:
|
||||
|
|
@ -253,7 +253,7 @@ class AbstractModelB(AbstractModelA):
|
|||
titleb = models.CharField(gettext_lazy('title b'), max_length=255)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(AbstractModelB, self).__init__(*args, **kwargs)
|
||||
super().__init__(*args, **kwargs)
|
||||
self.titleb = 'title_b'
|
||||
|
||||
|
||||
|
|
@ -335,7 +335,7 @@ class ThirdPartyRegisteredModel(models.Model):
|
|||
class FilteredManager(MultilingualManager):
|
||||
def get_queryset(self):
|
||||
# always return empty queryset
|
||||
return super(FilteredManager, self).get_queryset().filter(pk=None)
|
||||
return super().get_queryset().filter(pk=None)
|
||||
|
||||
|
||||
class FilteredTestModel(models.Model):
|
||||
|
|
@ -365,14 +365,14 @@ class ManagerTestModel(models.Model):
|
|||
class CustomManager(models.Manager):
|
||||
def get_queryset(self):
|
||||
return (
|
||||
super(CustomManager, self)
|
||||
super()
|
||||
.get_queryset()
|
||||
.filter(title__contains='a')
|
||||
.exclude(description__contains='x')
|
||||
)
|
||||
|
||||
def custom_qs(self):
|
||||
return super(CustomManager, self).get_queryset()
|
||||
return super().get_queryset()
|
||||
|
||||
def foo(self):
|
||||
return 'bar'
|
||||
|
|
|
|||
|
|
@ -49,11 +49,11 @@ class reload_override_settings(override_settings):
|
|||
"""Context manager that not only override settings, but also reload modeltranslation conf."""
|
||||
|
||||
def __enter__(self):
|
||||
super(reload_override_settings, self).__enter__()
|
||||
super().__enter__()
|
||||
importlib.reload(mt_settings)
|
||||
|
||||
def __exit__(self, exc_type, exc_value, traceback):
|
||||
super(reload_override_settings, self).__exit__(exc_type, exc_value, traceback)
|
||||
super().__exit__(exc_type, exc_value, traceback)
|
||||
importlib.reload(mt_settings)
|
||||
|
||||
|
||||
|
|
@ -120,7 +120,7 @@ class TestAutodiscover(ModeltranslationTestBase):
|
|||
# class B settings would be overwritten by class A settings (if some keys clash).
|
||||
# To solve this, override some settings after parents ``_pre_setup`` is called.
|
||||
def _pre_setup(self):
|
||||
super(TestAutodiscover, self)._pre_setup()
|
||||
super()._pre_setup()
|
||||
# Add test_app to INSTALLED_APPS
|
||||
new_installed_apps = django_settings.INSTALLED_APPS + ('modeltranslation.tests.test_app',)
|
||||
self.__override = override_settings(INSTALLED_APPS=new_installed_apps)
|
||||
|
|
@ -129,7 +129,7 @@ class TestAutodiscover(ModeltranslationTestBase):
|
|||
def _post_teardown(self):
|
||||
self.__override.disable()
|
||||
importlib.reload(mt_settings) # restore mt_settings.FALLBACK_LANGUAGES
|
||||
super(TestAutodiscover, self)._post_teardown()
|
||||
super()._post_teardown()
|
||||
|
||||
def tearDown(self):
|
||||
# Rollback model classes
|
||||
|
|
@ -140,7 +140,7 @@ class TestAutodiscover(ModeltranslationTestBase):
|
|||
# Delete translation modules from import cache
|
||||
sys.modules.pop('modeltranslation.tests.test_app.translation', None)
|
||||
sys.modules.pop('modeltranslation.tests.project_translation', None)
|
||||
super(TestAutodiscover, self).tearDown()
|
||||
super().tearDown()
|
||||
|
||||
def check_news(self):
|
||||
from .test_app.models import News
|
||||
|
|
@ -286,13 +286,13 @@ class ModeltranslationTest(ModeltranslationTestBase):
|
|||
assert hash(orig) != hash(en)
|
||||
assert hash(orig) != hash(de)
|
||||
assert hash(en) != hash(de)
|
||||
assert 3 == len(set([orig, en, de]))
|
||||
assert 3 == len({orig, en, de})
|
||||
# TranslationFields can compare equal if they have the same language
|
||||
de.language = 'en'
|
||||
assert orig != de
|
||||
assert en == de
|
||||
assert hash(en) == hash(de)
|
||||
assert 2 == len(set([orig, en, de]))
|
||||
assert 2 == len({orig, en, de})
|
||||
de.language = 'de'
|
||||
|
||||
def test_set_translation(self):
|
||||
|
|
@ -653,7 +653,7 @@ class FileFieldsTest(ModeltranslationTestBase):
|
|||
tests_dir = default_storage.path('modeltranslation_tests')
|
||||
if os.path.isdir(tests_dir):
|
||||
shutil.rmtree(tests_dir)
|
||||
super(FileFieldsTest, self).tearDown()
|
||||
super().tearDown()
|
||||
|
||||
def test_translated_models(self):
|
||||
field_names = dir(models.FileFieldsModel())
|
||||
|
|
@ -756,7 +756,7 @@ class ForeignKeyFieldsTest(ModeltranslationTestBase):
|
|||
def setUpClass(cls):
|
||||
# 'model' attribute cannot be assigned to class in its definition,
|
||||
# because ``models`` module will be reloaded and hence class would use old model classes.
|
||||
super(ForeignKeyFieldsTest, cls).setUpClass()
|
||||
super().setUpClass()
|
||||
cls.model = models.ForeignKeyModel
|
||||
|
||||
def test_translated_models(self):
|
||||
|
|
@ -1036,7 +1036,7 @@ class ManyToManyFieldsTest(ModeltranslationTestBase):
|
|||
def setUpClass(cls):
|
||||
# 'model' attribute cannot be assigned to class in its definition,
|
||||
# because ``models`` module will be reloaded and hence class would use old model classes.
|
||||
super(ManyToManyFieldsTest, cls).setUpClass()
|
||||
super().setUpClass()
|
||||
cls.model = models.ManyToManyFieldModel
|
||||
|
||||
def test_translated_models(self):
|
||||
|
|
@ -1082,19 +1082,15 @@ class ManyToManyFieldsTest(ModeltranslationTestBase):
|
|||
|
||||
def test_translated_models_instance(self):
|
||||
models.TestModel.objects.bulk_create(
|
||||
(
|
||||
models.TestModel(title_en='m2m_test_%s_en' % i, title_de='m2m_test_%s_de' % i)
|
||||
for i in range(10)
|
||||
)
|
||||
)
|
||||
self.model.objects.bulk_create(
|
||||
(
|
||||
self.model(title_en='m2m_test_%s_en' % i, title_de='m2m_test_%s_de' % i)
|
||||
for i in range(10)
|
||||
)
|
||||
)
|
||||
models.NonTranslated.objects.bulk_create(
|
||||
(models.NonTranslated(title='m2m_test_%s' % i) for i in range(10))
|
||||
models.NonTranslated(title='m2m_test_%s' % i) for i in range(10)
|
||||
)
|
||||
|
||||
testmodel_qs = models.TestModel.objects.all()
|
||||
|
|
@ -1210,19 +1206,15 @@ class ManyToManyFieldsTest(ModeltranslationTestBase):
|
|||
|
||||
def test_reverse_relations(self):
|
||||
models.TestModel.objects.bulk_create(
|
||||
(
|
||||
models.TestModel(title_en='m2m_test_%s_en' % i, title_de='m2m_test_%s_de' % i)
|
||||
for i in range(10)
|
||||
)
|
||||
)
|
||||
self.model.objects.bulk_create(
|
||||
(
|
||||
self.model(title_en='m2m_test_%s_en' % i, title_de='m2m_test_%s_de' % i)
|
||||
for i in range(10)
|
||||
)
|
||||
)
|
||||
models.NonTranslated.objects.bulk_create(
|
||||
(models.NonTranslated(title='m2m_test_%s' % i) for i in range(10))
|
||||
models.NonTranslated(title='m2m_test_%s' % i) for i in range(10)
|
||||
)
|
||||
inst_both = self.model(title_en="inst_both_en", title_de="inst_both_de")
|
||||
inst_both.save()
|
||||
|
|
@ -1314,7 +1306,7 @@ class OneToOneFieldsTest(ForeignKeyFieldsTest):
|
|||
def setUpClass(cls):
|
||||
# 'model' attribute cannot be assigned to class in its definition,
|
||||
# because ``models`` module will be reloaded and hence class would use old model classes.
|
||||
super(OneToOneFieldsTest, cls).setUpClass()
|
||||
super().setUpClass()
|
||||
cls.model = models.OneToOneFieldModel
|
||||
|
||||
def test_uniqueness(self):
|
||||
|
|
@ -2237,13 +2229,13 @@ class UpdateCommandTest(ModeltranslationTestBase):
|
|||
|
||||
class TranslationAdminTest(ModeltranslationTestBase):
|
||||
def setUp(self):
|
||||
super(TranslationAdminTest, self).setUp()
|
||||
super().setUp()
|
||||
self.test_obj = models.TestModel.objects.create(title='Testtitle', text='Testtext')
|
||||
self.site = AdminSite()
|
||||
|
||||
def tearDown(self):
|
||||
self.test_obj.delete()
|
||||
super(TranslationAdminTest, self).tearDown()
|
||||
super().tearDown()
|
||||
|
||||
def test_default_fields(self):
|
||||
class TestModelAdmin(admin.TranslationAdmin):
|
||||
|
|
@ -2471,7 +2463,7 @@ class TranslationAdminTest(ModeltranslationTestBase):
|
|||
if isinstance(db_field, TextField):
|
||||
kwargs["widget"] = forms.Textarea(attrs={'myprop': 'myval'})
|
||||
return db_field.formfield(**kwargs)
|
||||
return super(TestModelAdmin, self).formfield_for_dbfield(
|
||||
return super().formfield_for_dbfield(
|
||||
db_field, request, **kwargs
|
||||
)
|
||||
|
||||
|
|
@ -2744,7 +2736,7 @@ class ThirdPartyAppIntegrationTest(ModeltranslationTestBase):
|
|||
def setUpClass(cls):
|
||||
# 'model' attribute cannot be assigned to class in its definition,
|
||||
# because ``models`` module will be reloaded and hence class would use old model classes.
|
||||
super(ThirdPartyAppIntegrationTest, cls).setUpClass()
|
||||
super().setUpClass()
|
||||
cls.model = models.ThirdPartyModel
|
||||
|
||||
def test_form(self):
|
||||
|
|
@ -2765,14 +2757,14 @@ class ThirdPartyAppIntegrationRegisteredTest(ThirdPartyAppIntegrationTest):
|
|||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(ThirdPartyAppIntegrationRegisteredTest, cls).setUpClass()
|
||||
super().setUpClass()
|
||||
cls.model = models.ThirdPartyRegisteredModel
|
||||
|
||||
|
||||
class TestManager(ModeltranslationTestBase):
|
||||
def setUp(self):
|
||||
# In this test case the default language is en, not de.
|
||||
super(TestManager, self).setUp()
|
||||
super().setUp()
|
||||
trans_real.activate('en')
|
||||
|
||||
def test_filter_update(self):
|
||||
|
|
@ -3396,21 +3388,20 @@ class TestManager(ModeltranslationTestBase):
|
|||
def test_translation_fields_appending(self):
|
||||
from modeltranslation.manager import append_lookup_key, append_lookup_keys
|
||||
|
||||
assert set(['untrans']) == append_lookup_key(models.ForeignKeyModel, 'untrans')
|
||||
assert set(['title', 'title_en', 'title_de']) == append_lookup_key(
|
||||
assert {'untrans'} == append_lookup_key(models.ForeignKeyModel, 'untrans')
|
||||
assert {'title', 'title_en', 'title_de'} == append_lookup_key(
|
||||
models.ForeignKeyModel, 'title'
|
||||
)
|
||||
assert set(['test', 'test_en', 'test_de']) == append_lookup_key(
|
||||
assert {'test', 'test_en', 'test_de'} == append_lookup_key(
|
||||
models.ForeignKeyModel, 'test'
|
||||
)
|
||||
assert set(['title__eq', 'title_en__eq', 'title_de__eq']) == append_lookup_key(
|
||||
assert {'title__eq', 'title_en__eq', 'title_de__eq'} == append_lookup_key(
|
||||
models.ForeignKeyModel, 'title__eq'
|
||||
)
|
||||
assert set(['test__smt', 'test_en__smt', 'test_de__smt']) == append_lookup_key(
|
||||
assert {'test__smt', 'test_en__smt', 'test_de__smt'} == append_lookup_key(
|
||||
models.ForeignKeyModel, 'test__smt'
|
||||
)
|
||||
big_set = set(
|
||||
[
|
||||
big_set = {
|
||||
'test__url',
|
||||
'test__url_en',
|
||||
'test__url_de',
|
||||
|
|
@ -3420,10 +3411,9 @@ class TestManager(ModeltranslationTestBase):
|
|||
'test_de__url',
|
||||
'test_de__url_en',
|
||||
'test_de__url_de',
|
||||
]
|
||||
)
|
||||
}
|
||||
assert big_set == append_lookup_key(models.ForeignKeyModel, 'test__url')
|
||||
assert set(['untrans__url', 'untrans__url_en', 'untrans__url_de']) == append_lookup_key(
|
||||
assert {'untrans__url', 'untrans__url_en', 'untrans__url_de'} == append_lookup_key(
|
||||
models.ForeignKeyModel, 'untrans__url'
|
||||
)
|
||||
|
||||
|
|
@ -3585,7 +3575,7 @@ class TestRequired(ModeltranslationTestBase):
|
|||
inst.full_clean()
|
||||
except ValidationError as e:
|
||||
error_fields = set(e.message_dict.keys())
|
||||
assert set(('req_reg_en', 'req_en_reg', 'req_en_reg_en')) == error_fields
|
||||
assert {'req_reg_en', 'req_en_reg', 'req_en_reg_en'} == error_fields
|
||||
else:
|
||||
self.fail('ValidationError not raised!')
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import threading
|
||||
from typing import Union
|
||||
from typing_extensions import Literal
|
||||
from typing import Literal
|
||||
|
||||
from modeltranslation import settings
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from functools import partial
|
||||
from typing import Callable, Iterable
|
||||
|
||||
|
|
@ -51,7 +50,7 @@ class FieldsAggregationMetaClass(type):
|
|||
if isinstance(base, FieldsAggregationMetaClass):
|
||||
attrs['fields'].update(base.fields)
|
||||
attrs['fields'] = tuple(attrs['fields'])
|
||||
return super(FieldsAggregationMetaClass, cls).__new__(cls, name, bases, attrs)
|
||||
return super().__new__(cls, name, bases, attrs)
|
||||
|
||||
|
||||
class TranslationOptions(metaclass=FieldsAggregationMetaClass):
|
||||
|
|
@ -84,8 +83,8 @@ class TranslationOptions(metaclass=FieldsAggregationMetaClass):
|
|||
self.model = model
|
||||
self.registered = False
|
||||
self.related = False
|
||||
self.local_fields = dict((f, set()) for f in self.fields)
|
||||
self.fields = dict((f, set()) for f in self.fields)
|
||||
self.local_fields = {f: set() for f in self.fields}
|
||||
self.fields = {f: set() for f in self.fields}
|
||||
self.related_fields = []
|
||||
|
||||
def validate(self):
|
||||
|
|
@ -142,7 +141,7 @@ class TranslationOptions(metaclass=FieldsAggregationMetaClass):
|
|||
class MultilingualOptions(options.Options):
|
||||
@cached_property
|
||||
def base_manager(self):
|
||||
manager = super(MultilingualOptions, self).base_manager
|
||||
manager = super().base_manager
|
||||
patch_manager_class(manager)
|
||||
return manager
|
||||
|
||||
|
|
@ -436,7 +435,7 @@ def patch_related_object_descriptor_caching(ro_descriptor):
|
|||
ro_descriptor.__class__ = NewSingleObjectDescriptor
|
||||
|
||||
|
||||
class Translator(object):
|
||||
class Translator:
|
||||
"""
|
||||
A Translator object encapsulates an instance of a translator. Models are
|
||||
registered with the Translator using the register() method.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.forms.widgets import Media, Widget, CheckboxInput
|
||||
from django.utils.html import conditional_escape
|
||||
from django.utils.safestring import mark_safe
|
||||
|
|
|
|||
Loading…
Reference in a new issue