diff --git a/weblate/accounts/models.py b/weblate/accounts/models.py index 1872dfdff742..e6e8a1fd501c 100644 --- a/weblate/accounts/models.py +++ b/weblate/accounts/models.py @@ -34,7 +34,6 @@ from django.utils.translation import LANGUAGE_SESSION_KEY, ugettext from django.utils.translation import ugettext_lazy as _ from rest_framework.authtoken.models import Token -from six import python_2_unicode_compatible from social_django.models import UserSocialAuth from weblate.accounts.avatar import get_user_display @@ -50,7 +49,6 @@ from weblate.utils.request import get_ip_address, get_user_agent -@python_2_unicode_compatible class Subscription(models.Model): user = models.ForeignKey(User, on_delete=models.deletion.CASCADE) notification = models.CharField( @@ -178,7 +176,6 @@ def order(self): return self.order_by('-timestamp') -@python_2_unicode_compatible class AuditLog(models.Model): """User audit log storage.""" @@ -253,7 +250,6 @@ def save(self, *args, **kwargs): transaction.on_commit(lambda: notify_auditlog.delay(self.pk, email)) -@python_2_unicode_compatible class VerifiedEmail(models.Model): """Storage for verified e-mails from auth backends.""" @@ -268,7 +264,6 @@ def provider(self): return self.social.provider -@python_2_unicode_compatible class Profile(models.Model): """User profiles storage.""" diff --git a/weblate/addons/models.py b/weblate/addons/models.py index 53ffcd594fff..b94d225d8f2b 100644 --- a/weblate/addons/models.py +++ b/weblate/addons/models.py @@ -28,7 +28,6 @@ from django.dispatch import receiver from django.urls import reverse from django.utils.functional import cached_property -from six import python_2_unicode_compatible from weblate.addons.events import ( EVENT_CHOICES, @@ -83,7 +82,6 @@ def filter_event(self, component, event): return component.addons_cache[event] -@python_2_unicode_compatible class Addon(models.Model): component = models.ForeignKey(Component, on_delete=models.deletion.CASCADE) name = models.CharField(max_length=100) @@ -123,7 +121,6 @@ def delete(self, *args, **kwargs): super(Addon, self).delete(*args, **kwargs) -@python_2_unicode_compatible class Event(models.Model): addon = models.ForeignKey(Addon, on_delete=models.deletion.CASCADE) event = models.IntegerField(choices=EVENT_CHOICES) diff --git a/weblate/auth/models.py b/weblate/auth/models.py index 72354f0784fe..46101bb5f748 100644 --- a/weblate/auth/models.py +++ b/weblate/auth/models.py @@ -34,7 +34,6 @@ from django.utils.functional import cached_property from django.utils.translation import pgettext, ugettext from django.utils.translation import ugettext_lazy as _ -from six import python_2_unicode_compatible from weblate.auth.data import ( ACL_GROUPS, @@ -64,7 +63,6 @@ ) -@python_2_unicode_compatible class Permission(models.Model): codename = models.CharField(max_length=100, unique=True) name = models.CharField(max_length=200) @@ -77,7 +75,6 @@ def __str__(self): return ugettext(self.name) -@python_2_unicode_compatible class Role(models.Model): name = models.CharField(verbose_name=_('Name'), max_length=200) permissions = models.ManyToManyField( @@ -99,7 +96,6 @@ def for_project(self, project): ).order_by('name') -@python_2_unicode_compatible class Group(models.Model): SELECTION_MANUAL = 0 SELECTION_ALL = 1 @@ -276,7 +272,6 @@ def contribute_to_class(self, cls, name, **kwargs): related_manager_cls.remove = wrap_group(related_manager_cls.remove) -@python_2_unicode_compatible class User(AbstractBaseUser): username = models.CharField( _('username'), @@ -488,7 +483,6 @@ def get_author_name(self, email=True): return "{0} <{1}>".format(full_name, self.email) -@python_2_unicode_compatible class AutoGroup(models.Model): match = RegexField( verbose_name=_('E-mail regular expression'), diff --git a/weblate/billing/models.py b/weblate/billing/models.py index a407395284d0..7d7d343a34b7 100644 --- a/weblate/billing/models.py +++ b/weblate/billing/models.py @@ -32,7 +32,6 @@ from django.utils import timezone from django.utils.functional import cached_property from django.utils.translation import ugettext_lazy as _ -from six import python_2_unicode_compatible from weblate.auth.models import User from weblate.lang.models import Language @@ -53,7 +52,6 @@ def public(self, user=None): return result.distinct().order_by('price') -@python_2_unicode_compatible class Plan(models.Model): name = models.CharField(max_length=100, unique=True) price = models.IntegerField(default=0) @@ -119,7 +117,6 @@ def for_user(self, user): ) -@python_2_unicode_compatible class Billing(models.Model): STATE_ACTIVE = 0 STATE_TRIAL = 1 @@ -380,7 +377,6 @@ def order(self): return self.order_by('-start') -@python_2_unicode_compatible class Invoice(models.Model): CURRENCY_EUR = 0 CURRENCY_BTC = 1 diff --git a/weblate/checks/models.py b/weblate/checks/models.py index 159dd0dfb6f0..58d8baf083b8 100644 --- a/weblate/checks/models.py +++ b/weblate/checks/models.py @@ -26,7 +26,6 @@ from django.db.models.signals import post_save from django.dispatch import receiver from django.utils.functional import cached_property -from six import python_2_unicode_compatible from weblate.checks import CHECKS from weblate.utils.decorators import disable_for_loaddata @@ -111,7 +110,6 @@ def bulk_create_ignore(self, objs): continue -@python_2_unicode_compatible class Check(models.Model): unit = models.ForeignKey("trans.Unit", on_delete=models.deletion.CASCADE) check = models.CharField(max_length=50, choices=CHECKS.get_choices()) diff --git a/weblate/fonts/models.py b/weblate/fonts/models.py index e4e43bdefa5e..8be5d2f761bd 100644 --- a/weblate/fonts/models.py +++ b/weblate/fonts/models.py @@ -25,7 +25,6 @@ from django.db import models from django.urls import reverse from django.utils.translation import ugettext_lazy as _ -from six import python_2_unicode_compatible from weblate.fonts.utils import get_font_name from weblate.fonts.validators import validate_font @@ -37,7 +36,6 @@ FONT_STORAGE = FileSystemStorage(location=data_dir("fonts")) -@python_2_unicode_compatible class Font(models.Model, UserDisplayMixin): family = models.CharField(verbose_name=_("Font family"), max_length=100, blank=True) style = models.CharField(verbose_name=_("Font style"), max_length=100, blank=True) @@ -100,7 +98,6 @@ def order(self): return self.order_by("name") -@python_2_unicode_compatible class FontGroup(models.Model): name = models.SlugField( verbose_name=_("Font group name"), @@ -132,7 +129,6 @@ def get_absolute_url(self): ) -@python_2_unicode_compatible class FontOverride(models.Model): group = models.ForeignKey(FontGroup, on_delete=models.deletion.CASCADE) font = models.ForeignKey( diff --git a/weblate/lang/models.py b/weblate/lang/models.py index 91123e17cb7f..57ab469f0b27 100644 --- a/weblate/lang/models.py +++ b/weblate/lang/models.py @@ -36,7 +36,6 @@ from django.utils.translation import pgettext_lazy from django.utils.translation import ugettext as _ from django.utils.translation import ugettext_lazy -from six import python_2_unicode_compatible from weblate.lang import data from weblate.langdata.aliases import ALIASES @@ -377,7 +376,6 @@ def setup_lang(sender, **kwargs): Language.objects.setup(False) -@python_2_unicode_compatible class Language(models.Model): code = models.SlugField(unique=True, verbose_name=ugettext_lazy('Language code')) name = models.CharField(max_length=100, verbose_name=ugettext_lazy('Language name')) @@ -447,7 +445,6 @@ def order(self): return self.order_by('source') -@python_2_unicode_compatible class Plural(models.Model): PLURAL_CHOICES = ( (data.PLURAL_NONE, pgettext_lazy('Plural type', 'None')), diff --git a/weblate/legal/models.py b/weblate/legal/models.py index 27ff1c800134..9fa798db80b5 100644 --- a/weblate/legal/models.py +++ b/weblate/legal/models.py @@ -23,7 +23,6 @@ from django.conf import settings from django.db import models -from six import python_2_unicode_compatible from weblate.accounts.models import AuditLog from weblate.utils.request import get_ip_address, get_user_agent @@ -32,7 +31,6 @@ TOS_DATE = date(2017, 7, 2) -@python_2_unicode_compatible class Agreement(models.Model): user = models.OneToOneField( settings.AUTH_USER_MODEL, unique=True, on_delete=models.deletion.CASCADE diff --git a/weblate/screenshots/models.py b/weblate/screenshots/models.py index 763c4bb19a9c..8901bac904e4 100644 --- a/weblate/screenshots/models.py +++ b/weblate/screenshots/models.py @@ -23,7 +23,6 @@ from django.db import models from django.urls import reverse from django.utils.translation import ugettext_lazy as _ -from six import python_2_unicode_compatible from weblate.screenshots.fields import ScreenshotField from weblate.trans.mixins import UserDisplayMixin @@ -35,7 +34,6 @@ def order(self): return self.order_by('name') -@python_2_unicode_compatible class Screenshot(models.Model, UserDisplayMixin): name = models.CharField(verbose_name=_('Screenshot name'), max_length=200) image = ScreenshotField( diff --git a/weblate/trans/models/agreement.py b/weblate/trans/models/agreement.py index 9ae1059f536e..9e16560d7c28 100644 --- a/weblate/trans/models/agreement.py +++ b/weblate/trans/models/agreement.py @@ -21,7 +21,6 @@ from django.conf import settings from django.db import models -from six import python_2_unicode_compatible class ContributorAgreementManager(models.Manager): @@ -43,7 +42,6 @@ def order(self): return self.order_by('component__project__name', 'component__name') -@python_2_unicode_compatible class ContributorAgreement(models.Model): user = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.deletion.CASCADE diff --git a/weblate/trans/models/alert.py b/weblate/trans/models/alert.py index fb4618ba2725..5e05c50b26c8 100644 --- a/weblate/trans/models/alert.py +++ b/weblate/trans/models/alert.py @@ -25,7 +25,6 @@ from django.utils.encoding import force_text from django.utils.functional import cached_property from django.utils.translation import ugettext_lazy as _ -from six import python_2_unicode_compatible from weblate.langdata.countries import DEFAULT_LANGS from weblate.utils.fields import JSONField @@ -42,7 +41,6 @@ def register(cls): return cls -@python_2_unicode_compatible class Alert(models.Model): component = models.ForeignKey('Component', on_delete=models.deletion.CASCADE) timestamp = models.DateTimeField(auto_now_add=True) diff --git a/weblate/trans/models/change.py b/weblate/trans/models/change.py index 5d50fa923446..00bf7d0b0c6a 100644 --- a/weblate/trans/models/change.py +++ b/weblate/trans/models/change.py @@ -25,7 +25,6 @@ from django.utils import timezone from django.utils.translation import ugettext as _ from django.utils.translation import ugettext_lazy -from six import python_2_unicode_compatible from weblate.lang.models import Language from weblate.trans.mixins import UserDisplayMixin @@ -155,7 +154,6 @@ def create(self, user=None, **kwargs): return super(ChangeManager, self).create(user=user, **kwargs) -@python_2_unicode_compatible class Change(models.Model, UserDisplayMixin): ACTION_UPDATE = 0 ACTION_COMPLETE = 1 diff --git a/weblate/trans/models/comment.py b/weblate/trans/models/comment.py index 7a5c4656a624..a34477b8d015 100644 --- a/weblate/trans/models/comment.py +++ b/weblate/trans/models/comment.py @@ -21,7 +21,6 @@ from django.conf import settings from django.db import models -from six import python_2_unicode_compatible from weblate.trans.mixins import UserDisplayMixin from weblate.trans.models.change import Change @@ -48,7 +47,6 @@ def order(self): return self.order_by('timestamp') -@python_2_unicode_compatible class Comment(models.Model, UserDisplayMixin): unit = models.ForeignKey("trans.Unit", on_delete=models.deletion.CASCADE) comment = models.TextField() diff --git a/weblate/trans/models/component.py b/weblate/trans/models/component.py index 55ce1c457107..5d37721bae3c 100644 --- a/weblate/trans/models/component.py +++ b/weblate/trans/models/component.py @@ -40,7 +40,6 @@ from django.utils.functional import cached_property from django.utils.translation import ugettext as _ from django.utils.translation import ugettext_lazy, ungettext -from six import python_2_unicode_compatible from six.moves.urllib.parse import urlparse from weblate.checks.flags import Flags @@ -161,7 +160,6 @@ def with_repo(self): return self.exclude(repo__startswith="weblate:") -@python_2_unicode_compatible class Component(models.Model, URLMixin, PathMixin): name = models.CharField( verbose_name=ugettext_lazy("Component name"), diff --git a/weblate/trans/models/componentlist.py b/weblate/trans/models/componentlist.py index 50f98087e946..0400ec879acb 100644 --- a/weblate/trans/models/componentlist.py +++ b/weblate/trans/models/componentlist.py @@ -25,7 +25,6 @@ from django.db import models from django.urls import reverse from django.utils.translation import ugettext_lazy as _ -from six import python_2_unicode_compatible from weblate.trans.fields import RegexField from weblate.utils.stats import ComponentListStats @@ -36,7 +35,6 @@ def order(self): return self.order_by('name') -@python_2_unicode_compatible class ComponentList(models.Model): name = models.CharField( @@ -85,7 +83,6 @@ def get_absolute_url(self): return reverse('component-list', kwargs={'name': self.slug}) -@python_2_unicode_compatible class AutoComponentList(models.Model): project_match = RegexField( verbose_name=_('Project regular expression'), diff --git a/weblate/trans/models/dictionary.py b/weblate/trans/models/dictionary.py index 42f19e4bdfba..02eb7f231506 100644 --- a/weblate/trans/models/dictionary.py +++ b/weblate/trans/models/dictionary.py @@ -25,7 +25,6 @@ from django.db import models from django.db.models.functions import Lower from django.urls import reverse -from six import python_2_unicode_compatible from whoosh.analysis import LanguageAnalyzer, NgramAnalyzer, SimpleAnalyzer from whoosh.analysis.filters import StopFilter from whoosh.lang import NoStopWords @@ -171,7 +170,6 @@ def order(self): return self.order_by(Lower('source')) -@python_2_unicode_compatible class Dictionary(models.Model): project = models.ForeignKey(Project, on_delete=models.deletion.CASCADE) language = models.ForeignKey(Language, on_delete=models.deletion.CASCADE) diff --git a/weblate/trans/models/label.py b/weblate/trans/models/label.py index a5da9ed4b56a..8399d24fe68b 100644 --- a/weblate/trans/models/label.py +++ b/weblate/trans/models/label.py @@ -23,10 +23,8 @@ from django.utils.html import escape from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy -from six import python_2_unicode_compatible -@python_2_unicode_compatible class Label(models.Model): project = models.ForeignKey("Project", on_delete=models.deletion.CASCADE) name = models.CharField(verbose_name=ugettext_lazy("Label name"), max_length=190) diff --git a/weblate/trans/models/project.py b/weblate/trans/models/project.py index 855493260ea5..ddac79089b12 100644 --- a/weblate/trans/models/project.py +++ b/weblate/trans/models/project.py @@ -30,7 +30,6 @@ from django.utils.functional import cached_property from django.utils.translation import ugettext as _ from django.utils.translation import ugettext_lazy -from six import python_2_unicode_compatible from weblate.checks import CHECKS from weblate.checks.models import Check @@ -47,7 +46,6 @@ def order(self): return self.order_by('name') -@python_2_unicode_compatible class Project(models.Model, URLMixin, PathMixin): ACCESS_PUBLIC = 0 ACCESS_PROTECTED = 1 diff --git a/weblate/trans/models/shaping.py b/weblate/trans/models/shaping.py index d2db887d9a86..3354d0bc34f0 100644 --- a/weblate/trans/models/shaping.py +++ b/weblate/trans/models/shaping.py @@ -20,12 +20,10 @@ from django.db import models -from six import python_2_unicode_compatible from weblate.trans.fields import RegexField -@python_2_unicode_compatible class Shaping(models.Model): component = models.ForeignKey("Component", on_delete=models.deletion.CASCADE) shaping_regex = RegexField(max_length=190) diff --git a/weblate/trans/models/suggestion.py b/weblate/trans/models/suggestion.py index 80aa45b20f84..83ed8d0c4778 100644 --- a/weblate/trans/models/suggestion.py +++ b/weblate/trans/models/suggestion.py @@ -23,7 +23,6 @@ from django.db import models, transaction from django.db.models import Sum from django.utils.translation import ugettext as _ -from six import python_2_unicode_compatible from weblate.trans.mixins import UserDisplayMixin from weblate.trans.models.change import Change @@ -93,7 +92,6 @@ def order(self): return self.order_by('-timestamp') -@python_2_unicode_compatible class Suggestion(models.Model, UserDisplayMixin): unit = models.ForeignKey("trans.Unit", on_delete=models.deletion.CASCADE) target = models.TextField() @@ -168,7 +166,6 @@ def add_vote(self, translation, request, value): self.accept(translation, request, 'suggestion.vote') -@python_2_unicode_compatible class Vote(models.Model): """Suggestion voting.""" diff --git a/weblate/trans/models/translation.py b/weblate/trans/models/translation.py index 1a7ec4766426..615e22bcee20 100644 --- a/weblate/trans/models/translation.py +++ b/weblate/trans/models/translation.py @@ -30,7 +30,6 @@ from django.utils import timezone from django.utils.functional import cached_property from django.utils.translation import ugettext as _ -from six import python_2_unicode_compatible from weblate.checks import CHECKS from weblate.checks.flags import Flags @@ -99,7 +98,6 @@ def prefetch(self): ).prefetch_related('language__plural_set', 'component__alert_set') -@python_2_unicode_compatible class Translation(models.Model, URLMixin, LoggerMixin): component = models.ForeignKey('Component', on_delete=models.deletion.CASCADE) language = models.ForeignKey(Language, on_delete=models.deletion.CASCADE) diff --git a/weblate/trans/models/unit.py b/weblate/trans/models/unit.py index fac5253cad74..f08962ed977f 100644 --- a/weblate/trans/models/unit.py +++ b/weblate/trans/models/unit.py @@ -30,7 +30,6 @@ from django.utils import timezone from django.utils.functional import cached_property from django.utils.translation import ugettext_lazy -from six import python_2_unicode_compatible from weblate.checks import CHECKS from weblate.checks.flags import Flags @@ -161,7 +160,6 @@ def order(self): return self.order_by('-priority', 'position') -@python_2_unicode_compatible class Unit(models.Model, LoggerMixin): translation = models.ForeignKey('Translation', on_delete=models.deletion.CASCADE) diff --git a/weblate/trans/models/whiteboard.py b/weblate/trans/models/whiteboard.py index be249546159d..6ee2ad10001f 100644 --- a/weblate/trans/models/whiteboard.py +++ b/weblate/trans/models/whiteboard.py @@ -28,7 +28,6 @@ from django.utils.safestring import mark_safe from django.utils.translation import ugettext as _ from django.utils.translation import ugettext_lazy -from six import python_2_unicode_compatible from weblate.lang.models import Language @@ -62,7 +61,6 @@ def context_filter(self, project=None, component=None, language=None): return base.filter(project=None, component=None, language=None) -@python_2_unicode_compatible class WhiteboardMessage(models.Model): message = models.TextField(verbose_name=ugettext_lazy('Message')) message_html = models.BooleanField( # noqa: DJ02 diff --git a/weblate/wladmin/models.py b/weblate/wladmin/models.py index a3957e9e7e8e..2f7d789302e4 100644 --- a/weblate/wladmin/models.py +++ b/weblate/wladmin/models.py @@ -26,7 +26,6 @@ from django.db import models from django.utils import timezone from django.utils.translation import ugettext_lazy -from six import python_2_unicode_compatible from weblate import USER_AGENT from weblate.auth.models import User @@ -70,7 +69,6 @@ def remove(self, name): self.filter(name=name).delete() -@python_2_unicode_compatible class ConfigurationError(models.Model): name = models.CharField(unique=True, max_length=150) message = models.TextField() @@ -102,7 +100,6 @@ def get_current(self): return SupportStatus(name='community') -@python_2_unicode_compatible class SupportStatus(models.Model): name = models.CharField(max_length=150) secret = models.CharField(max_length=400) @@ -150,7 +147,6 @@ def refresh(self): ) -@python_2_unicode_compatible class BackupService(models.Model): repository = models.CharField( max_length=500, default='', verbose_name=ugettext_lazy('Backup repository') @@ -188,7 +184,6 @@ def prune(self): self.backuplog_set.create(event='error', log=str(error)) -@python_2_unicode_compatible class BackupLog(models.Model): service = models.ForeignKey(BackupService, on_delete=models.deletion.CASCADE) timestamp = models.DateTimeField(default=timezone.now)