diff --git a/.travis.yml b/.travis.yml index bd2a64415..aa10d1193 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,5 @@ language: python python: - - '2.7' - '3.5' - '3.6' - '3.7' diff --git a/README.rst b/README.rst index bd6bdde52..90bd2416f 100644 --- a/README.rst +++ b/README.rst @@ -17,7 +17,7 @@ is used as a central point of communication between all components. Modoboa is developed with modularity in mind, expanding it is really easy. Actually, all current features are extensions. -It is written in Python and uses the `Django +It is written in Python 3 and uses the `Django `_, `jQuery `_ and `Bootstrap `_ frameworks. @@ -68,4 +68,4 @@ The following external libraries are provided with Modoboa: .. |codecov| image:: http://codecov.io/github/modoboa/modoboa/coverage.svg?branch=master :target: http://codecov.io/github/modoboa/modoboa?branch=master .. |codacy| image:: https://api.codacy.com/project/badge/Grade/82fd10127ac3468899ca75f04e9862b6 - :target: https://www.codacy.com/app/modoboa/modoboa?utm_source=github.com&utm_medium=referral&utm_content=modoboa/modoboa&utm_campaign=Badge_Grade \ No newline at end of file + :target: https://www.codacy.com/app/modoboa/modoboa?utm_source=github.com&utm_medium=referral&utm_content=modoboa/modoboa&utm_campaign=Badge_Grade diff --git a/bin/modoboa-admin.py b/bin/modoboa-admin.py index 78de64d39..53bf9ac8e 100644 --- a/bin/modoboa-admin.py +++ b/bin/modoboa-admin.py @@ -1,7 +1,4 @@ #!/usr/bin/env python -# coding: utf-8 - -from __future__ import unicode_literals from modoboa.core.commands import handle_command_line diff --git a/doc/manual_installation/webserver.rst b/doc/manual_installation/webserver.rst index 8f528fb88..648f4bb38 100644 --- a/doc/manual_installation/webserver.rst +++ b/doc/manual_installation/webserver.rst @@ -50,7 +50,7 @@ This is just one possible configuration. To use mod_wsgi daemon mode, add the two following directives just under ``WSGIScriptAlias``:: - WSGIDaemonProcess example.com python-path=:/lib/python2.7/site-packages + WSGIDaemonProcess example.com python-path=:/lib/python3.7/site-packages WSGIProcessGroup example.com Replace values between ``<>`` with yours. If you don't use a diff --git a/modoboa/__init__.py b/modoboa/__init__.py index ad361c484..4044639f7 100644 --- a/modoboa/__init__.py +++ b/modoboa/__init__.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Modoboa - Mail hosting made simple.""" -from __future__ import unicode_literals - from pkg_resources import DistributionNotFound, get_distribution try: diff --git a/modoboa/admin/__init__.py b/modoboa/admin/__init__.py index 80f7ae2d3..4002eb9dd 100644 --- a/modoboa/admin/__init__.py +++ b/modoboa/admin/__init__.py @@ -1,5 +1 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - default_app_config = "modoboa.admin.apps.AdminConfig" diff --git a/modoboa/admin/api.py b/modoboa/admin/api.py index 3ca68504b..dd74ecf10 100644 --- a/modoboa/admin/api.py +++ b/modoboa/admin/api.py @@ -1,14 +1,10 @@ -# -*- coding: utf-8 -*- - """Admin API.""" -from __future__ import unicode_literals - from django import http from django.contrib.contenttypes.models import ContentType from rest_framework import filters, status, viewsets -from rest_framework.decorators import detail_route, list_route +from rest_framework.decorators import action from rest_framework.exceptions import ParseError from rest_framework.permissions import DjangoModelPermissions, IsAuthenticated from rest_framework.response import Response @@ -86,7 +82,7 @@ class AccountViewSet(viewsets.ModelViewSet): queryset = queryset.filter(mailbox__domain__name=domain) return queryset - @detail_route(methods=["put"]) + @action(methods=["put"], detail=True) def password(self, request, pk=None): """Change account password.""" try: @@ -100,7 +96,7 @@ class AccountViewSet(viewsets.ModelViewSet): return Response( serializer.errors, status=status.HTTP_400_BAD_REQUEST) - @list_route() + @action(detail=False) def exists(self, request): """Check if account exists. diff --git a/modoboa/admin/app_settings.py b/modoboa/admin/app_settings.py index 8b343910a..c2618e64e 100644 --- a/modoboa/admin/app_settings.py +++ b/modoboa/admin/app_settings.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Modoboa admin settings.""" -from __future__ import unicode_literals - import os from django import forms diff --git a/modoboa/admin/apps.py b/modoboa/admin/apps.py index 77ba62271..e39753524 100644 --- a/modoboa/admin/apps.py +++ b/modoboa/admin/apps.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """AppConfig for admin.""" -from __future__ import unicode_literals - from django.apps import AppConfig from .app_settings import load_admin_settings diff --git a/modoboa/admin/constants.py b/modoboa/admin/constants.py index 623d9b6b5..bfedf1eed 100644 --- a/modoboa/admin/constants.py +++ b/modoboa/admin/constants.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Admin constants.""" -from __future__ import unicode_literals - from django.utils.translation import ugettext_lazy as _ DNSBL_PROVIDERS = [ diff --git a/modoboa/admin/factories.py b/modoboa/admin/factories.py index e0d5780c8..cadd4907f 100644 --- a/modoboa/admin/factories.py +++ b/modoboa/admin/factories.py @@ -1,11 +1,7 @@ -# -*- coding: utf-8 -*- - """ Fixtures factories. """ -from __future__ import unicode_literals - import factory from modoboa.core.factories import PermissionFactory, UserFactory diff --git a/modoboa/admin/forms/__init__.py b/modoboa/admin/forms/__init__.py index bb1ded79a..e5cc34c9d 100644 --- a/modoboa/admin/forms/__init__.py +++ b/modoboa/admin/forms/__init__.py @@ -1,7 +1,3 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - from .account import ( AccountForm, AccountFormGeneral, AccountFormMail, AccountPermissionsForm, AccountWizard diff --git a/modoboa/admin/forms/account.py b/modoboa/admin/forms/account.py index 644ddabec..66935db14 100644 --- a/modoboa/admin/forms/account.py +++ b/modoboa/admin/forms/account.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Forms related to accounts management.""" -from __future__ import unicode_literals - from collections import OrderedDict from functools import reduce diff --git a/modoboa/admin/forms/alias.py b/modoboa/admin/forms/alias.py index 09ee606e4..3a5238ac6 100644 --- a/modoboa/admin/forms/alias.py +++ b/modoboa/admin/forms/alias.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Forms related to aliases management.""" -from __future__ import unicode_literals - from collections import OrderedDict from django import forms diff --git a/modoboa/admin/forms/domain.py b/modoboa/admin/forms/domain.py index 6a05eba45..7e2a6a95d 100644 --- a/modoboa/admin/forms/domain.py +++ b/modoboa/admin/forms/domain.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Forms related to domains management.""" -from __future__ import unicode_literals - from functools import reduce from django import forms diff --git a/modoboa/admin/forms/export.py b/modoboa/admin/forms/export.py index 1a295c599..ca1a46c14 100644 --- a/modoboa/admin/forms/export.py +++ b/modoboa/admin/forms/export.py @@ -1,7 +1,3 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - from django import forms from django.utils.translation import ugettext_lazy diff --git a/modoboa/admin/forms/forward.py b/modoboa/admin/forms/forward.py index b270fb32d..5cd7b1b7c 100644 --- a/modoboa/admin/forms/forward.py +++ b/modoboa/admin/forms/forward.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Forms related to forwards management.""" -from __future__ import unicode_literals - from django import forms from django.core import validators from django.utils.translation import ugettext_lazy diff --git a/modoboa/admin/forms/import_.py b/modoboa/admin/forms/import_.py index db50913ff..e598658e7 100644 --- a/modoboa/admin/forms/import_.py +++ b/modoboa/admin/forms/import_.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Forms related to import operations.""" -from __future__ import unicode_literals - from django import forms from django.utils.translation import ugettext_lazy diff --git a/modoboa/admin/handlers.py b/modoboa/admin/handlers.py index 2159f5dd8..f73996c71 100644 --- a/modoboa/admin/handlers.py +++ b/modoboa/admin/handlers.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Django signal handlers for admin.""" -from __future__ import unicode_literals - from django.contrib.contenttypes.models import ContentType from django.db.models import signals from django.dispatch import receiver diff --git a/modoboa/admin/lib.py b/modoboa/admin/lib.py index f2ac6f556..3fe459e66 100644 --- a/modoboa/admin/lib.py +++ b/modoboa/admin/lib.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Internal library for admin.""" -from __future__ import unicode_literals - import ipaddress import logging import random diff --git a/modoboa/admin/management/commands/handle_mailbox_operations.py b/modoboa/admin/management/commands/handle_mailbox_operations.py index 15d8f6e11..b7d9c3b99 100644 --- a/modoboa/admin/management/commands/handle_mailbox_operations.py +++ b/modoboa/admin/management/commands/handle_mailbox_operations.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """A management command to apply mailbox operations.""" -from __future__ import print_function, unicode_literals - import logging import os import shutil diff --git a/modoboa/admin/management/commands/modo.py b/modoboa/admin/management/commands/modo.py index b4f3495f5..94c7e6482 100644 --- a/modoboa/admin/management/commands/modo.py +++ b/modoboa/admin/management/commands/modo.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Modoboa main management command.""" -from __future__ import unicode_literals - from subcommand.base import SubcommandCommand from .subcommands._export import ExportCommand diff --git a/modoboa/admin/management/commands/subcommands/_export.py b/modoboa/admin/management/commands/subcommands/_export.py index 947f81d37..91c40d929 100644 --- a/modoboa/admin/management/commands/subcommands/_export.py +++ b/modoboa/admin/management/commands/subcommands/_export.py @@ -1,24 +1,14 @@ -# -*- coding: utf-8 -*- - """Django management command to export admin objects.""" -from __future__ import unicode_literals - -import sys +import csv from django.core.management.base import BaseCommand -from django.utils import six from django.utils.encoding import smart_text from modoboa.core.extensions import exts_pool from modoboa.core.models import User from .... import models -if six.PY2: - from backports import csv -else: - import csv - class ExportCommand(BaseCommand): """Command class.""" diff --git a/modoboa/admin/management/commands/subcommands/_import.py b/modoboa/admin/management/commands/subcommands/_import.py index a202fe22b..d4b7054db 100644 --- a/modoboa/admin/management/commands/subcommands/_import.py +++ b/modoboa/admin/management/commands/subcommands/_import.py @@ -1,9 +1,6 @@ -# -*- coding: utf-8 -*- - """Django management command to import admin objects.""" -from __future__ import unicode_literals - +import csv import io import os @@ -12,7 +9,6 @@ from chardet.universaldetector import UniversalDetector from django.core.management.base import BaseCommand, CommandError from django.db import transaction -from django.utils import six from django.utils.translation import ugettext as _ from modoboa.core import models as core_models @@ -20,11 +16,6 @@ from modoboa.core.extensions import exts_pool from modoboa.lib.exceptions import Conflict from .... import signals -if six.PY2: - from backports import csv -else: - import csv - class ImportCommand(BaseCommand): """Command class.""" @@ -35,7 +26,7 @@ class ImportCommand(BaseCommand): def add_arguments(self, parser): """Add extra arguments to command.""" parser.add_argument( - "--sepchar", type=six.text_type, default=";", + "--sepchar", type=str, default=";", help="Separator used in file.") parser.add_argument( "--continue-if-exists", action="store_true", @@ -45,7 +36,7 @@ class ImportCommand(BaseCommand): "--crypt-password", action="store_true", default=False, help="Encrypt provided passwords.") parser.add_argument( - "files", type=six.text_type, nargs="+", help="CSV files to import.") + "files", type=str, nargs="+", help="CSV files to import.") def _import(self, filename, options, encoding="utf-8"): """Import domains or identities.""" @@ -121,10 +112,7 @@ class ImportCommand(BaseCommand): encoding=detector.result["encoding"] ) except UnicodeDecodeError as exc: - six.raise_from( - CommandError( - _("Unable to decode CSV file using %(encoding)s " - "encoding") % detector.result - ), - exc - ) + raise CommandError( + _("Unable to decode CSV file using %(encoding)s " + "encoding") % detector.result + ) from exc diff --git a/modoboa/admin/management/commands/subcommands/_manage_dkim_keys.py b/modoboa/admin/management/commands/subcommands/_manage_dkim_keys.py index c7002c2c0..0bc9e6f4e 100644 --- a/modoboa/admin/management/commands/subcommands/_manage_dkim_keys.py +++ b/modoboa/admin/management/commands/subcommands/_manage_dkim_keys.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Management command to create DKIM keys.""" -from __future__ import print_function, unicode_literals - import os from django.core.management.base import BaseCommand diff --git a/modoboa/admin/management/commands/subcommands/_mx.py b/modoboa/admin/management/commands/subcommands/_mx.py index b88bd30a1..93189a140 100644 --- a/modoboa/admin/management/commands/subcommands/_mx.py +++ b/modoboa/admin/management/commands/subcommands/_mx.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Management command to check defined domains.""" -from __future__ import print_function, unicode_literals - import ipaddress import gevent diff --git a/modoboa/admin/management/commands/subcommands/_repair.py b/modoboa/admin/management/commands/subcommands/_repair.py index 26bfb42f4..7cc8178a6 100644 --- a/modoboa/admin/management/commands/subcommands/_repair.py +++ b/modoboa/admin/management/commands/subcommands/_repair.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Management command to check and fix known problems.""" -from __future__ import print_function, unicode_literals - from django.conf import settings from django.core.management.base import BaseCommand from django.utils.encoding import smart_str diff --git a/modoboa/admin/migrations/0001_initial.py b/modoboa/admin/migrations/0001_initial.py index 9be649089..afa54f6ba 100644 --- a/modoboa/admin/migrations/0001_initial.py +++ b/modoboa/admin/migrations/0001_initial.py @@ -1,6 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - from django.db import models, migrations from django.conf import settings diff --git a/modoboa/admin/migrations/0002_migrate_from_modoboa_admin.py b/modoboa/admin/migrations/0002_migrate_from_modoboa_admin.py index c854881b6..301a6406b 100644 --- a/modoboa/admin/migrations/0002_migrate_from_modoboa_admin.py +++ b/modoboa/admin/migrations/0002_migrate_from_modoboa_admin.py @@ -1,6 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - from django.db import models, migrations diff --git a/modoboa/admin/migrations/0003_auto_20151118_1215.py b/modoboa/admin/migrations/0003_auto_20151118_1215.py index 3dbbfe390..df92da9f4 100644 --- a/modoboa/admin/migrations/0003_auto_20151118_1215.py +++ b/modoboa/admin/migrations/0003_auto_20151118_1215.py @@ -1,6 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - from django.db import migrations, models diff --git a/modoboa/admin/migrations/0004_auto_20160914_0907.py b/modoboa/admin/migrations/0004_auto_20160914_0907.py index 32aa5e148..6427b4439 100644 --- a/modoboa/admin/migrations/0004_auto_20160914_0907.py +++ b/modoboa/admin/migrations/0004_auto_20160914_0907.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.9.9 on 2016-09-14 09:07 -from __future__ import unicode_literals - from django.db import migrations, models import django.db.models.deletion diff --git a/modoboa/admin/migrations/0005_auto_20161026_1003.py b/modoboa/admin/migrations/0005_auto_20161026_1003.py index d679eba6b..a6c94f83c 100644 --- a/modoboa/admin/migrations/0005_auto_20161026_1003.py +++ b/modoboa/admin/migrations/0005_auto_20161026_1003.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.9.5 on 2016-10-26 08:03 -from __future__ import unicode_literals - from django.db import migrations, models diff --git a/modoboa/admin/migrations/0006_auto_20161104_1900.py b/modoboa/admin/migrations/0006_auto_20161104_1900.py index daac34e1b..9b48d6b1a 100644 --- a/modoboa/admin/migrations/0006_auto_20161104_1900.py +++ b/modoboa/admin/migrations/0006_auto_20161104_1900.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.9.5 on 2016-11-04 18:00 -from __future__ import unicode_literals - from django.db import migrations, models import django.utils.timezone diff --git a/modoboa/admin/migrations/0007_auto_20161104_1915.py b/modoboa/admin/migrations/0007_auto_20161104_1915.py index 761a22a12..318e265a4 100644 --- a/modoboa/admin/migrations/0007_auto_20161104_1915.py +++ b/modoboa/admin/migrations/0007_auto_20161104_1915.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.9.5 on 2016-11-04 18:15 -from __future__ import unicode_literals - from django.db import migrations, models diff --git a/modoboa/admin/migrations/0008_domain_enable_dns_checks.py b/modoboa/admin/migrations/0008_domain_enable_dns_checks.py index c7be468fe..974d05025 100644 --- a/modoboa/admin/migrations/0008_domain_enable_dns_checks.py +++ b/modoboa/admin/migrations/0008_domain_enable_dns_checks.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.9.12 on 2017-02-06 06:13 -from __future__ import unicode_literals - from django.db import migrations, models diff --git a/modoboa/admin/migrations/0009_auto_20170215_0948.py b/modoboa/admin/migrations/0009_auto_20170215_0948.py index b032a7190..262549b50 100644 --- a/modoboa/admin/migrations/0009_auto_20170215_0948.py +++ b/modoboa/admin/migrations/0009_auto_20170215_0948.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.10.5 on 2017-02-15 08:48 -from __future__ import unicode_literals - from django.db import migrations diff --git a/modoboa/admin/migrations/0010_auto_20170215_1328.py b/modoboa/admin/migrations/0010_auto_20170215_1328.py index e71d408ca..bc4535930 100644 --- a/modoboa/admin/migrations/0010_auto_20170215_1328.py +++ b/modoboa/admin/migrations/0010_auto_20170215_1328.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.10.5 on 2017-02-15 12:28 -from __future__ import unicode_literals - from django.db import migrations, models diff --git a/modoboa/admin/migrations/0011_domain_transport.py b/modoboa/admin/migrations/0011_domain_transport.py index 8f037fb6c..001b23761 100644 --- a/modoboa/admin/migrations/0011_domain_transport.py +++ b/modoboa/admin/migrations/0011_domain_transport.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.10.7 on 2017-12-20 14:17 -from __future__ import unicode_literals - from django.db import migrations, models import django.db.models.deletion diff --git a/modoboa/admin/migrations/0012_auto_20180112_1658.py b/modoboa/admin/migrations/0012_auto_20180112_1658.py index a69e64388..24bc6f938 100644 --- a/modoboa/admin/migrations/0012_auto_20180112_1658.py +++ b/modoboa/admin/migrations/0012_auto_20180112_1658.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.11.8 on 2018-01-12 15:58 -from __future__ import unicode_literals - from django.db import migrations, models diff --git a/modoboa/admin/migrations/0013_auto_20180124_2311.py b/modoboa/admin/migrations/0013_auto_20180124_2311.py index d0671ab0d..c5bd1d3b5 100644 --- a/modoboa/admin/migrations/0013_auto_20180124_2311.py +++ b/modoboa/admin/migrations/0013_auto_20180124_2311.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.11.8 on 2018-01-24 23:11 -from __future__ import unicode_literals - from django.db import migrations, models diff --git a/modoboa/admin/migrations/0014_auto_20181017_1628.py b/modoboa/admin/migrations/0014_auto_20181017_1628.py index ca7dee0c0..73b47d5b8 100644 --- a/modoboa/admin/migrations/0014_auto_20181017_1628.py +++ b/modoboa/admin/migrations/0014_auto_20181017_1628.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.11.16 on 2018-10-17 14:28 -from __future__ import unicode_literals - from django.db import migrations, models diff --git a/modoboa/admin/migrations/__init__.py b/modoboa/admin/migrations/__init__.py index baffc4882..e69de29bb 100644 --- a/modoboa/admin/migrations/__init__.py +++ b/modoboa/admin/migrations/__init__.py @@ -1 +0,0 @@ -from __future__ import unicode_literals diff --git a/modoboa/admin/models/__init__.py b/modoboa/admin/models/__init__.py index 068fc45e9..29ac0b270 100644 --- a/modoboa/admin/models/__init__.py +++ b/modoboa/admin/models/__init__.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Admin models.""" -from __future__ import unicode_literals - from .alias import Alias, AliasRecipient from .base import AdminObject from .domain import Domain diff --git a/modoboa/admin/models/alias.py b/modoboa/admin/models/alias.py index 98a360c09..fb2d959b4 100644 --- a/modoboa/admin/models/alias.py +++ b/modoboa/admin/models/alias.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Models related to aliases management.""" -from __future__ import unicode_literals - import hashlib import random diff --git a/modoboa/admin/models/base.py b/modoboa/admin/models/base.py index abe182180..8394c3c0d 100644 --- a/modoboa/admin/models/base.py +++ b/modoboa/admin/models/base.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Base admin models.""" -from __future__ import unicode_literals - from django.contrib.contenttypes.fields import GenericRelation from django.db import models from django.utils import timezone diff --git a/modoboa/admin/models/domain.py b/modoboa/admin/models/domain.py index a06932b87..c040ad260 100644 --- a/modoboa/admin/models/domain.py +++ b/modoboa/admin/models/domain.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Models related to domains management.""" -from __future__ import unicode_literals - import datetime from reversion import revisions as reversion diff --git a/modoboa/admin/models/domain_alias.py b/modoboa/admin/models/domain_alias.py index 917039911..055f0ff1e 100644 --- a/modoboa/admin/models/domain_alias.py +++ b/modoboa/admin/models/domain_alias.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Models related to domain aliases management.""" -from __future__ import unicode_literals - from reversion import revisions as reversion from django.contrib.contenttypes.fields import GenericRelation diff --git a/modoboa/admin/models/mailbox.py b/modoboa/admin/models/mailbox.py index ef17ba264..21ede9a5f 100644 --- a/modoboa/admin/models/mailbox.py +++ b/modoboa/admin/models/mailbox.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Models related to mailboxes management.""" -from __future__ import unicode_literals - import os import pwd diff --git a/modoboa/admin/models/mxrecord.py b/modoboa/admin/models/mxrecord.py index 3d2cf9de8..a6f1f518e 100644 --- a/modoboa/admin/models/mxrecord.py +++ b/modoboa/admin/models/mxrecord.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """MX records storage.""" -from __future__ import unicode_literals - import datetime from django.db import models diff --git a/modoboa/admin/postfix_maps.py b/modoboa/admin/postfix_maps.py index 1550fe7e6..026649070 100644 --- a/modoboa/admin/postfix_maps.py +++ b/modoboa/admin/postfix_maps.py @@ -1,10 +1,5 @@ -# -*- coding: utf-8 -*- - """Map file definitions for postfix.""" -from __future__ import unicode_literals - - class DomainsMap(object): """Map to list all domains.""" diff --git a/modoboa/admin/serializers.py b/modoboa/admin/serializers.py index dfd3ed49b..c91382c9a 100644 --- a/modoboa/admin/serializers.py +++ b/modoboa/admin/serializers.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Admin serializers.""" -from __future__ import unicode_literals - from django.conf import settings from django.contrib.auth import password_validation from django.core.exceptions import ValidationError diff --git a/modoboa/admin/signals.py b/modoboa/admin/signals.py index b085d7807..d7e59ba9b 100644 --- a/modoboa/admin/signals.py +++ b/modoboa/admin/signals.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Modoboa admin signals.""" -from __future__ import unicode_literals - import django.dispatch check_extra_account_form = django.dispatch.Signal( diff --git a/modoboa/admin/templatetags/admin_tags.py b/modoboa/admin/templatetags/admin_tags.py index 038eddb21..cc2d36aed 100644 --- a/modoboa/admin/templatetags/admin_tags.py +++ b/modoboa/admin/templatetags/admin_tags.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Admin extension tags.""" -from __future__ import unicode_literals - from functools import reduce from django import template diff --git a/modoboa/admin/tests/test_account.py b/modoboa/admin/tests/test_account.py index 10e43ca6b..86775f6f1 100644 --- a/modoboa/admin/tests/test_account.py +++ b/modoboa/admin/tests/test_account.py @@ -1,7 +1,3 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - from unittest import skipIf from django.test import override_settings diff --git a/modoboa/admin/tests/test_alias.py b/modoboa/admin/tests/test_alias.py index b79ed39b6..9bdaf62cd 100644 --- a/modoboa/admin/tests/test_alias.py +++ b/modoboa/admin/tests/test_alias.py @@ -1,7 +1,3 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - from django.urls import reverse from modoboa.core.models import User diff --git a/modoboa/admin/tests/test_api.py b/modoboa/admin/tests/test_api.py index 235d6461c..0baf0be38 100644 --- a/modoboa/admin/tests/test_api.py +++ b/modoboa/admin/tests/test_api.py @@ -1,11 +1,8 @@ -# -*- coding: utf-8 -*- - """Admin API related tests.""" -from __future__ import unicode_literals - import copy import json +from unittest import mock import dns.resolver @@ -20,13 +17,6 @@ from modoboa.lib.tests import ModoAPITestCase from . import utils from .. import factories, models -try: - # mock is part of the Python (>= 3.3) standard library - from unittest import mock -except ImportError: - # fall back to the mock backport - import mock - class DomainAPITestCase(ModoAPITestCase): """Check API.""" diff --git a/modoboa/admin/tests/test_domain.py b/modoboa/admin/tests/test_domain.py index 0f54ba663..b8a8e9b15 100644 --- a/modoboa/admin/tests/test_domain.py +++ b/modoboa/admin/tests/test_domain.py @@ -1,12 +1,9 @@ -# -*- coding: utf-8 -*- - """Domain related test cases.""" -from __future__ import unicode_literals - import os import shutil import tempfile +from unittest import mock import dns.resolver from testfixtures import compare @@ -23,13 +20,6 @@ from . import utils from .. import factories from ..models import Alias, Domain -try: - # mock is part of the Python (>= 3.3) standard library - from unittest import mock -except ImportError: - # fall back to the mock backport - import mock - class DomainTestCase(ModoTestCase): """Test case for Domain.""" diff --git a/modoboa/admin/tests/test_domain_alias.py b/modoboa/admin/tests/test_domain_alias.py index d02e4ef96..7559c7d8a 100644 --- a/modoboa/admin/tests/test_domain_alias.py +++ b/modoboa/admin/tests/test_domain_alias.py @@ -1,7 +1,3 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - from django.urls import reverse from modoboa.lib.tests import ModoTestCase diff --git a/modoboa/admin/tests/test_export.py b/modoboa/admin/tests/test_export.py index c261520b7..830dd6eab 100644 --- a/modoboa/admin/tests/test_export.py +++ b/modoboa/admin/tests/test_export.py @@ -1,12 +1,7 @@ -# -*- coding: utf-8 -*- - """Export related test cases.""" -from __future__ import unicode_literals - import sys - -from six.moves import StringIO +from io import StringIO from django.core.management import call_command from django.urls import reverse diff --git a/modoboa/admin/tests/test_import_.py b/modoboa/admin/tests/test_import_.py index aa0a5eaad..9ce2e5d88 100644 --- a/modoboa/admin/tests/test_import_.py +++ b/modoboa/admin/tests/test_import_.py @@ -1,8 +1,5 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - import os +from unittest import mock import dns.resolver @@ -18,13 +15,6 @@ from . import utils from .. import factories from ..models import Alias, Domain, DomainAlias -try: - # mock is part of the Python (>= 3.3) standard library - from unittest import mock -except ImportError: - # fall back to the mock backport - import mock - class ImportTestCase(ModoTestCase): diff --git a/modoboa/admin/tests/test_mailbox_operations.py b/modoboa/admin/tests/test_mailbox_operations.py index 6e598bb57..fb2462987 100644 --- a/modoboa/admin/tests/test_mailbox_operations.py +++ b/modoboa/admin/tests/test_mailbox_operations.py @@ -1,12 +1,9 @@ -# -*- coding: utf-8 -*- - """Management command tests.""" -from __future__ import unicode_literals - import os import shutil import tempfile +from unittest import mock from django.core.management import call_command from django.test import override_settings @@ -15,13 +12,6 @@ from django.urls import reverse from modoboa.lib.tests import ModoTestCase from .. import factories, models -try: - # mock is part of the Python (>= 3.3) standard library - from unittest import mock -except ImportError: - # fall back to the mock backport - import mock - @override_settings( DOVECOT_LOOKUP_PATH=["{}/dovecot".format(os.path.dirname(__file__))]) diff --git a/modoboa/admin/tests/test_mapfiles.py b/modoboa/admin/tests/test_mapfiles.py index 1da822f04..ecc51951d 100644 --- a/modoboa/admin/tests/test_mapfiles.py +++ b/modoboa/admin/tests/test_mapfiles.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Test map files generation.""" -from __future__ import unicode_literals - import os from django.conf import settings diff --git a/modoboa/admin/tests/test_mx.py b/modoboa/admin/tests/test_mx.py index 183ae8382..32e7119f4 100644 --- a/modoboa/admin/tests/test_mx.py +++ b/modoboa/admin/tests/test_mx.py @@ -1,8 +1,6 @@ -# -*- coding: utf-8 -*- - """DNSBL related tests.""" -from __future__ import unicode_literals +from unittest import mock import dns.resolver from testfixtures import LogCapture @@ -18,13 +16,6 @@ from . import utils from .. import factories, models from ..lib import get_domain_mx_list -try: - # mock is part of the Python (>= 3.3) standard library - from unittest import mock -except ImportError: - # fall back to the mock backport - import mock - class MXTestCase(ModoTestCase): """TestCase for DNSBL related features.""" diff --git a/modoboa/admin/tests/test_password_schemes.py b/modoboa/admin/tests/test_password_schemes.py index 61b83b14a..26ecbe41c 100644 --- a/modoboa/admin/tests/test_password_schemes.py +++ b/modoboa/admin/tests/test_password_schemes.py @@ -1,7 +1,3 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - from django.urls import reverse from modoboa.core.models import User diff --git a/modoboa/admin/tests/test_repair.py b/modoboa/admin/tests/test_repair.py index 1a45225b0..4a12b6876 100644 --- a/modoboa/admin/tests/test_repair.py +++ b/modoboa/admin/tests/test_repair.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Repair command tests""" -from __future__ import unicode_literals - from django.core import management from modoboa.lib.permissions import ObjectAccess, get_object_owner diff --git a/modoboa/admin/tests/test_user.py b/modoboa/admin/tests/test_user.py index 3e2238355..312a6c804 100644 --- a/modoboa/admin/tests/test_user.py +++ b/modoboa/admin/tests/test_user.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """User related tests.""" -from __future__ import unicode_literals - from django.urls import reverse from modoboa.core.models import User diff --git a/modoboa/admin/tests/utils.py b/modoboa/admin/tests/utils.py index f0662d5ec..e85f3c41d 100644 --- a/modoboa/admin/tests/utils.py +++ b/modoboa/admin/tests/utils.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Test utilities.""" -from __future__ import unicode_literals - import socket from dns.name import Name diff --git a/modoboa/admin/urls.py b/modoboa/admin/urls.py index bb299ae19..0df5a6705 100644 --- a/modoboa/admin/urls.py +++ b/modoboa/admin/urls.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Admin urls.""" -from __future__ import unicode_literals - from django.conf.urls import url from . import views diff --git a/modoboa/admin/urls_api.py b/modoboa/admin/urls_api.py index 63bad995f..f0c61b428 100644 --- a/modoboa/admin/urls_api.py +++ b/modoboa/admin/urls_api.py @@ -1,20 +1,16 @@ -# -*- coding: utf-8 -*- - """Admin API urls.""" -from __future__ import unicode_literals - from rest_framework import routers from . import api router = routers.SimpleRouter() -router.register(r"domains", api.DomainViewSet, base_name="domain") +router.register(r"domains", api.DomainViewSet, basename="domain") router.register( - r"domainaliases", api.DomainAliasViewSet, base_name="domain_alias") -router.register(r"accounts", api.AccountViewSet, base_name="account") -router.register(r"aliases", api.AliasViewSet, base_name="alias") + r"domainaliases", api.DomainAliasViewSet, basename="domain_alias") +router.register(r"accounts", api.AccountViewSet, basename="account") +router.register(r"aliases", api.AliasViewSet, basename="alias") router.register( - r"senderaddresses", api.SenderAddressViewSet, base_name="sender_address") + r"senderaddresses", api.SenderAddressViewSet, basename="sender_address") urlpatterns = router.urls diff --git a/modoboa/admin/views/__init__.py b/modoboa/admin/views/__init__.py index 501c59517..eb2db5aa2 100644 --- a/modoboa/admin/views/__init__.py +++ b/modoboa/admin/views/__init__.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Shortcuts.""" -from __future__ import unicode_literals - from .alias import AliasDetailView from .dns import DNSBLDomainDetailView, MXDomainDetailView from .domain import DomainDetailView diff --git a/modoboa/admin/views/alias.py b/modoboa/admin/views/alias.py index 9b3dfb1c6..68eeeeeb4 100644 --- a/modoboa/admin/views/alias.py +++ b/modoboa/admin/views/alias.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Alias related views.""" -from __future__ import unicode_literals - from reversion import revisions as reversion from django.contrib.auth import mixins as auth_mixins diff --git a/modoboa/admin/views/dns.py b/modoboa/admin/views/dns.py index e202bb818..42d1738de 100644 --- a/modoboa/admin/views/dns.py +++ b/modoboa/admin/views/dns.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """DNSBL related views.""" -from __future__ import unicode_literals - from django.contrib.auth import mixins as auth_mixins from django.utils.translation import ugettext as _ from django.views import generic diff --git a/modoboa/admin/views/domain.py b/modoboa/admin/views/domain.py index b30e29ed6..29550c8fc 100644 --- a/modoboa/admin/views/domain.py +++ b/modoboa/admin/views/domain.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Domain related views.""" -from __future__ import unicode_literals - from functools import reduce from reversion import revisions as reversion diff --git a/modoboa/admin/views/export.py b/modoboa/admin/views/export.py index 281d864d3..5d1764a87 100644 --- a/modoboa/admin/views/export.py +++ b/modoboa/admin/views/export.py @@ -1,8 +1,7 @@ -# -*- coding: utf-8 -*- - """Export related views.""" -from __future__ import unicode_literals +import csv +from io import StringIO from rfc6266 import build_header @@ -12,17 +11,11 @@ from django.contrib.auth.decorators import ( from django.http import HttpResponse from django.shortcuts import render from django.urls import reverse -from django.utils import six from django.utils.translation import ugettext as _ from ..forms import ExportDomainsForm, ExportIdentitiesForm from ..lib import get_domains, get_identities -if six.PY2: - from backports import csv -else: - import csv - def _export(content, filename): """Export a csv file's content @@ -54,7 +47,7 @@ def export_identities(request): if request.method == "POST": form = ExportIdentitiesForm(request.POST) form.is_valid() - fp = six.StringIO() + fp = StringIO() csvwriter = csv.writer(fp, delimiter=form.cleaned_data["sepchar"]) identities = get_identities( request.user, **request.session["identities_filters"]) @@ -82,7 +75,7 @@ def export_domains(request): if request.method == "POST": form = ExportDomainsForm(request.POST) form.is_valid() - fp = six.StringIO() + fp = StringIO() csvwriter = csv.writer(fp, delimiter=form.cleaned_data["sepchar"]) for dom in get_domains(request.user, **request.session["domains_filters"]): diff --git a/modoboa/admin/views/identity.py b/modoboa/admin/views/identity.py index 62ce47d58..1b8b3cf0d 100644 --- a/modoboa/admin/views/identity.py +++ b/modoboa/admin/views/identity.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Identity related views.""" -from __future__ import unicode_literals - from reversion import revisions as reversion from django.contrib.auth import mixins as auth_mixins diff --git a/modoboa/admin/views/import_.py b/modoboa/admin/views/import_.py index 025d9d0e3..b40e4ce28 100644 --- a/modoboa/admin/views/import_.py +++ b/modoboa/admin/views/import_.py @@ -1,9 +1,6 @@ -# -*- coding: utf-8 -*- - """Import related views.""" -from __future__ import unicode_literals - +import csv import io from reversion import revisions as reversion @@ -14,7 +11,6 @@ from django.contrib.auth.decorators import ( from django.db import transaction from django.shortcuts import render from django.urls import reverse -from django.utils import six from django.utils.encoding import smart_text from django.utils.translation import ugettext as _ @@ -22,11 +18,6 @@ from modoboa.lib.exceptions import Conflict, ModoboaException from .. import signals from ..forms import ImportDataForm, ImportIdentitiesForm -if six.PY2: - from backports import csv -else: - import csv - @reversion.create_revision() def importdata(request, formclass=ImportDataForm): diff --git a/modoboa/admin/views/user.py b/modoboa/admin/views/user.py index cb9e18d12..308cdf268 100644 --- a/modoboa/admin/views/user.py +++ b/modoboa/admin/views/user.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """SimpleUsers views.""" -from __future__ import unicode_literals - from reversion import revisions as reversion from django.contrib.auth.decorators import login_required diff --git a/modoboa/core/__init__.py b/modoboa/core/__init__.py index 4efbc2ba0..0f5234285 100644 --- a/modoboa/core/__init__.py +++ b/modoboa/core/__init__.py @@ -1,7 +1,3 @@ -# -*- coding: utf-8 -*- - """App config for core.""" -from __future__ import unicode_literals - default_app_config = "modoboa.core.apps.CoreConfig" diff --git a/modoboa/core/app_settings.py b/modoboa/core/app_settings.py index f63f045da..fa254a47d 100644 --- a/modoboa/core/app_settings.py +++ b/modoboa/core/app_settings.py @@ -1,7 +1,3 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - from django import forms from django.conf import settings from django.contrib.auth import password_validation diff --git a/modoboa/core/apps.py b/modoboa/core/apps.py index 3e4fa2859..266394abb 100644 --- a/modoboa/core/apps.py +++ b/modoboa/core/apps.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Core config for admin.""" -from __future__ import unicode_literals - from django.apps import AppConfig from django.db.models import signals from django.utils.translation import ugettext_lazy diff --git a/modoboa/core/checks/__init__.py b/modoboa/core/checks/__init__.py index c043b6cf9..9b716b17c 100644 --- a/modoboa/core/checks/__init__.py +++ b/modoboa/core/checks/__init__.py @@ -1,6 +1,2 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - # Import these to force registration of checks from . import settings_checks # NOQA:F401 diff --git a/modoboa/core/checks/settings_checks.py b/modoboa/core/checks/settings_checks.py index ebd09db14..a1efe49d7 100644 --- a/modoboa/core/checks/settings_checks.py +++ b/modoboa/core/checks/settings_checks.py @@ -1,7 +1,3 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - from django.conf import settings from django.core.checks import Warning, register from django.utils.translation import ugettext as _ diff --git a/modoboa/core/commands/__init__.py b/modoboa/core/commands/__init__.py index 9a07357ce..2f73d5ae6 100644 --- a/modoboa/core/commands/__init__.py +++ b/modoboa/core/commands/__init__.py @@ -1,7 +1,3 @@ -# -*- coding: utf-8 -*- - -from __future__ import print_function, unicode_literals - import argparse import os import sys diff --git a/modoboa/core/commands/deploy.py b/modoboa/core/commands/deploy.py index 25c81c2e1..ec2b88f66 100644 --- a/modoboa/core/commands/deploy.py +++ b/modoboa/core/commands/deploy.py @@ -1,10 +1,5 @@ -# -*- coding: utf-8 -*- - """A shortcut to deploy a fresh modoboa instance.""" -from __future__ import print_function, unicode_literals - -import codecs import getpass import os import shutil @@ -18,7 +13,6 @@ import django from django.core import management from django.template import Context, Template from django.utils.encoding import smart_str -from django.utils.six.moves import input from modoboa.core.commands import Command from modoboa.lib.api_client import ModoAPIClient @@ -250,7 +244,7 @@ class DeployCommand(Command): "extra_settings": extra_settings } ) - with codecs.open("%s/settings.py" % path, "w", "utf-8") as fp: + with open("%s/settings.py" % path, "w") as fp: fp.write(tpl) shutil.copyfile( "%s/urls.py.tpl" % self._templates_dir, "%s/urls.py" % path diff --git a/modoboa/core/commands/help.py b/modoboa/core/commands/help.py index 931264615..bbfea1916 100644 --- a/modoboa/core/commands/help.py +++ b/modoboa/core/commands/help.py @@ -1,7 +1,3 @@ -# -*- coding: utf-8 -*- - -from __future__ import print_function, unicode_literals - import sys from . import Command diff --git a/modoboa/core/commands/templates/settings.py.tpl b/modoboa/core/commands/templates/settings.py.tpl index cfd0fc5b7..fd9605784 100644 --- a/modoboa/core/commands/templates/settings.py.tpl +++ b/modoboa/core/commands/templates/settings.py.tpl @@ -9,8 +9,6 @@ For the full list of settings and their values, see https://docs.djangoproject.com/en/1.11/ref/settings/ """ -from __future__ import unicode_literals - from logging.handlers import SysLogHandler import os {% if devmode %} diff --git a/modoboa/core/constants.py b/modoboa/core/constants.py index b333e61fd..c0db2af39 100644 --- a/modoboa/core/constants.py +++ b/modoboa/core/constants.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Core application constants.""" -from __future__ import unicode_literals - from django.utils.translation import ugettext_lazy SIMPLEUSERS_ROLE = ("SimpleUsers", ugettext_lazy("Simple user")) diff --git a/modoboa/core/context_processors.py b/modoboa/core/context_processors.py index 501b2cdc5..3bd8a3c92 100644 --- a/modoboa/core/context_processors.py +++ b/modoboa/core/context_processors.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Custom context processors.""" -from __future__ import unicode_literals - from functools import reduce from . import signals diff --git a/modoboa/core/dev_settings.py b/modoboa/core/dev_settings.py index c443d5965..5d46afd95 100644 --- a/modoboa/core/dev_settings.py +++ b/modoboa/core/dev_settings.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - # Development settings -from __future__ import unicode_literals - import os BOWER_COMPONENTS_ROOT = os.path.join( diff --git a/modoboa/core/extensions.py b/modoboa/core/extensions.py index c0287745e..03190dc2f 100644 --- a/modoboa/core/extensions.py +++ b/modoboa/core/extensions.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Extension management.""" -from __future__ import unicode_literals - from django.conf import settings from django.conf.urls import include, url from django.utils.encoding import smart_str diff --git a/modoboa/core/factories.py b/modoboa/core/factories.py index e0ad3315f..c375d09c5 100644 --- a/modoboa/core/factories.py +++ b/modoboa/core/factories.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Factories for core application.""" -from __future__ import unicode_literals - import factory from django.contrib.auth.models import Group diff --git a/modoboa/core/forms.py b/modoboa/core/forms.py index 78e1f3e08..74e0150bc 100644 --- a/modoboa/core/forms.py +++ b/modoboa/core/forms.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Core forms.""" -from __future__ import unicode_literals - from django import forms from django.contrib.auth import ( forms as auth_forms, get_user_model, password_validation diff --git a/modoboa/core/handlers.py b/modoboa/core/handlers.py index c964861a7..4f2b063c6 100644 --- a/modoboa/core/handlers.py +++ b/modoboa/core/handlers.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Modoboa core signal handlers.""" -from __future__ import unicode_literals - import logging from reversion import revisions as reversion diff --git a/modoboa/core/loggers.py b/modoboa/core/loggers.py index 9090f5999..35efe0397 100644 --- a/modoboa/core/loggers.py +++ b/modoboa/core/loggers.py @@ -1,7 +1,3 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - import logging diff --git a/modoboa/core/management/commands/clean_inactive_accounts.py b/modoboa/core/management/commands/clean_inactive_accounts.py index c67d21358..eb5e58778 100644 --- a/modoboa/core/management/commands/clean_inactive_accounts.py +++ b/modoboa/core/management/commands/clean_inactive_accounts.py @@ -1,11 +1,6 @@ -# -*- coding: utf-8 -*- - """Inactive accounts cleanup tool.""" -from __future__ import print_function, unicode_literals - from dateutil.relativedelta import relativedelta -from six.moves import input from django.core.management.base import BaseCommand from django.utils import timezone diff --git a/modoboa/core/management/commands/cleanlogs.py b/modoboa/core/management/commands/cleanlogs.py index 723cdf9c0..179aa0262 100644 --- a/modoboa/core/management/commands/cleanlogs.py +++ b/modoboa/core/management/commands/cleanlogs.py @@ -1,7 +1,3 @@ -# -*- coding: utf-8 -*- - -from __future__ import print_function, unicode_literals - import datetime import logging diff --git a/modoboa/core/management/commands/communicate_with_public_api.py b/modoboa/core/management/commands/communicate_with_public_api.py index 2fe2359c8..eb1bc59d5 100644 --- a/modoboa/core/management/commands/communicate_with_public_api.py +++ b/modoboa/core/management/commands/communicate_with_public_api.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Management command to communicate with public API.""" -from __future__ import unicode_literals - from django.core.management.base import BaseCommand, CommandError from modoboa.admin import models as admin_models diff --git a/modoboa/core/management/commands/generate_postfix_maps.py b/modoboa/core/management/commands/generate_postfix_maps.py index b76fb289b..8f8f11295 100644 --- a/modoboa/core/management/commands/generate_postfix_maps.py +++ b/modoboa/core/management/commands/generate_postfix_maps.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Management command to generate/update postfix map files.""" -from __future__ import print_function, unicode_literals - import copy import hashlib import os diff --git a/modoboa/core/management/commands/load_initial_data.py b/modoboa/core/management/commands/load_initial_data.py index 7811c13e8..446dcd78f 100644 --- a/modoboa/core/management/commands/load_initial_data.py +++ b/modoboa/core/management/commands/load_initial_data.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - """A management command to load Modoboa initial data: * Create a default super admin if none exists @@ -7,8 +5,6 @@ """ -from __future__ import unicode_literals - from functools import reduce from django.contrib.auth.models import Group diff --git a/modoboa/core/management/commands/set_default_site.py b/modoboa/core/management/commands/set_default_site.py index 8080420bc..3c77cf2f9 100644 --- a/modoboa/core/management/commands/set_default_site.py +++ b/modoboa/core/management/commands/set_default_site.py @@ -1,13 +1,9 @@ -# -*- coding: utf-8 -*- - """ A simple managemenent command to update the default site. See `https://docs.djangoproject.com/en/dev/ref/contrib/sites/`_. """ -from __future__ import unicode_literals - from django.contrib.sites.models import Site from django.core.management.base import BaseCommand, CommandError diff --git a/modoboa/core/middleware.py b/modoboa/core/middleware.py index 65135942f..042bd1a7e 100644 --- a/modoboa/core/middleware.py +++ b/modoboa/core/middleware.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Core middlewares.""" -from __future__ import unicode_literals - from django.utils.deprecation import MiddlewareMixin from . import models diff --git a/modoboa/core/migrations/0001_initial.py b/modoboa/core/migrations/0001_initial.py index 1be0eae38..b8a7ea543 100644 --- a/modoboa/core/migrations/0001_initial.py +++ b/modoboa/core/migrations/0001_initial.py @@ -1,6 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - from django.db import models, migrations import django.utils.timezone from django.conf import settings diff --git a/modoboa/core/migrations/0002_delete_extension.py b/modoboa/core/migrations/0002_delete_extension.py index 073ef44bb..06ea4b5f1 100644 --- a/modoboa/core/migrations/0002_delete_extension.py +++ b/modoboa/core/migrations/0002_delete_extension.py @@ -1,6 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - from django.db import models, migrations diff --git a/modoboa/core/migrations/0003_user_master_user.py b/modoboa/core/migrations/0003_user_master_user.py index 9411bdd5c..b31578867 100644 --- a/modoboa/core/migrations/0003_user_master_user.py +++ b/modoboa/core/migrations/0003_user_master_user.py @@ -1,6 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - from django.db import models, migrations diff --git a/modoboa/core/migrations/0004_auto_20150728_1228.py b/modoboa/core/migrations/0004_auto_20150728_1228.py index 202a23da0..ffa20cf95 100644 --- a/modoboa/core/migrations/0004_auto_20150728_1228.py +++ b/modoboa/core/migrations/0004_auto_20150728_1228.py @@ -1,6 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - from django.db import models, migrations diff --git a/modoboa/core/migrations/0005_user_language.py b/modoboa/core/migrations/0005_user_language.py index 3f61578ca..849940b58 100644 --- a/modoboa/core/migrations/0005_user_language.py +++ b/modoboa/core/migrations/0005_user_language.py @@ -1,6 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - from django.db import models, migrations diff --git a/modoboa/core/migrations/0006_auto_20151114_1518.py b/modoboa/core/migrations/0006_auto_20151114_1518.py index e3c1b88af..40c125697 100644 --- a/modoboa/core/migrations/0006_auto_20151114_1518.py +++ b/modoboa/core/migrations/0006_auto_20151114_1518.py @@ -1,6 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - from django.db import models, migrations diff --git a/modoboa/core/migrations/0007_auto_20151116_1349.py b/modoboa/core/migrations/0007_auto_20151116_1349.py index b7d45d14d..e36ddaf1e 100644 --- a/modoboa/core/migrations/0007_auto_20151116_1349.py +++ b/modoboa/core/migrations/0007_auto_20151116_1349.py @@ -1,6 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - from django.db import migrations, models import django.contrib.auth.models diff --git a/modoboa/core/migrations/0008_localconfig.py b/modoboa/core/migrations/0008_localconfig.py index be8040af8..9dae77efb 100644 --- a/modoboa/core/migrations/0008_localconfig.py +++ b/modoboa/core/migrations/0008_localconfig.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.9.5 on 2016-06-15 18:12 -from __future__ import unicode_literals - from django.db import migrations, models import django.db.models.deletion import jsonfield.fields diff --git a/modoboa/core/migrations/0009_auto_20161026_1003.py b/modoboa/core/migrations/0009_auto_20161026_1003.py index 51aa18ed8..c65124efe 100644 --- a/modoboa/core/migrations/0009_auto_20161026_1003.py +++ b/modoboa/core/migrations/0009_auto_20161026_1003.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.9.5 on 2016-10-26 08:03 -from __future__ import unicode_literals - from django.db import migrations, models diff --git a/modoboa/core/migrations/0010_auto_20161026_1011.py b/modoboa/core/migrations/0010_auto_20161026_1011.py index 64961f261..e681c79b8 100644 --- a/modoboa/core/migrations/0010_auto_20161026_1011.py +++ b/modoboa/core/migrations/0010_auto_20161026_1011.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.9.5 on 2016-10-26 08:11 -from __future__ import unicode_literals - from django.db import migrations import jsonfield.fields diff --git a/modoboa/core/migrations/0011_auto_20161104_2217.py b/modoboa/core/migrations/0011_auto_20161104_2217.py index 44006a607..f64b2f545 100644 --- a/modoboa/core/migrations/0011_auto_20161104_2217.py +++ b/modoboa/core/migrations/0011_auto_20161104_2217.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.9.5 on 2016-11-04 21:17 -from __future__ import unicode_literals - from django.db import migrations import jsonfield.fields diff --git a/modoboa/core/migrations/0012_auto_20170215_1034.py b/modoboa/core/migrations/0012_auto_20170215_1034.py index 51e0fd7d3..0adfd9a97 100644 --- a/modoboa/core/migrations/0012_auto_20170215_1034.py +++ b/modoboa/core/migrations/0012_auto_20170215_1034.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.10.5 on 2017-02-15 09:34 -from __future__ import unicode_literals - from django.db import migrations diff --git a/modoboa/core/migrations/0013_auto_20170707_1058.py b/modoboa/core/migrations/0013_auto_20170707_1058.py index 934a30898..c6ecee2dc 100644 --- a/modoboa/core/migrations/0013_auto_20170707_1058.py +++ b/modoboa/core/migrations/0013_auto_20170707_1058.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.10.7 on 2017-07-07 08:58 -from __future__ import unicode_literals - from django.db import migrations, models import django.utils.timezone diff --git a/modoboa/core/migrations/0014_auto_20171010_1746.py b/modoboa/core/migrations/0014_auto_20171010_1746.py index 698772236..5d7fd85af 100644 --- a/modoboa/core/migrations/0014_auto_20171010_1746.py +++ b/modoboa/core/migrations/0014_auto_20171010_1746.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.10.7 on 2017-10-10 15:46 -from __future__ import unicode_literals - from django.db import migrations diff --git a/modoboa/core/migrations/0015_auto_20180112_1642.py b/modoboa/core/migrations/0015_auto_20180112_1642.py index d253aaa52..a3aaea97b 100644 --- a/modoboa/core/migrations/0015_auto_20180112_1642.py +++ b/modoboa/core/migrations/0015_auto_20180112_1642.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.11.8 on 2018-01-12 15:42 -from __future__ import unicode_literals - from django.db import migrations, models diff --git a/modoboa/core/migrations/0016_auto_20180713_1014.py b/modoboa/core/migrations/0016_auto_20180713_1014.py index 2315c2a03..9a98017a0 100644 --- a/modoboa/core/migrations/0016_auto_20180713_1014.py +++ b/modoboa/core/migrations/0016_auto_20180713_1014.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.11.11 on 2018-07-13 08:14 -from __future__ import unicode_literals - from django.db import migrations, models diff --git a/modoboa/core/migrations/0017_auto_20190705_1045.py b/modoboa/core/migrations/0017_auto_20190705_1045.py index 887a8fc8f..530abdd41 100644 --- a/modoboa/core/migrations/0017_auto_20190705_1045.py +++ b/modoboa/core/migrations/0017_auto_20190705_1045.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.11.18 on 2019-07-05 08:45 -from __future__ import unicode_literals - from django.db import migrations, models diff --git a/modoboa/core/migrations/__init__.py b/modoboa/core/migrations/__init__.py index baffc4882..e69de29bb 100644 --- a/modoboa/core/migrations/__init__.py +++ b/modoboa/core/migrations/__init__.py @@ -1 +0,0 @@ -from __future__ import unicode_literals diff --git a/modoboa/core/mocks.py b/modoboa/core/mocks.py index 53044082b..5637ac21e 100644 --- a/modoboa/core/mocks.py +++ b/modoboa/core/mocks.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Mocks used for testing.""" -from __future__ import unicode_literals - import httmock # Modoboa API mocks diff --git a/modoboa/core/models.py b/modoboa/core/models.py index 18ed79d5f..e7d2743f2 100644 --- a/modoboa/core/models.py +++ b/modoboa/core/models.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Core models.""" -from __future__ import unicode_literals - import re from email.header import Header diff --git a/modoboa/core/password_hashers/__init__.py b/modoboa/core/password_hashers/__init__.py index 2af1b766f..dbb399731 100644 --- a/modoboa/core/password_hashers/__init__.py +++ b/modoboa/core/password_hashers/__init__.py @@ -1,11 +1,7 @@ -# -*- coding: utf-8 -*- - """ Password hashers for Modoboa. """ -from __future__ import unicode_literals - from django.utils.encoding import smart_text from modoboa.core.password_hashers.advanced import ( # NOQA:F401 diff --git a/modoboa/core/password_hashers/advanced.py b/modoboa/core/password_hashers/advanced.py index 1c0a4bd71..75edbf4d8 100644 --- a/modoboa/core/password_hashers/advanced.py +++ b/modoboa/core/password_hashers/advanced.py @@ -1,13 +1,9 @@ -# -*- coding: utf-8 -*- - """ Advanced (ie. stronger) password hashers. This module relies on `passlib` to provide more secure hashers. """ -from __future__ import unicode_literals - from passlib.hash import bcrypt, md5_crypt, sha256_crypt, sha512_crypt try: diff --git a/modoboa/core/password_hashers/base.py b/modoboa/core/password_hashers/base.py index 8b354466f..689ffb82a 100644 --- a/modoboa/core/password_hashers/base.py +++ b/modoboa/core/password_hashers/base.py @@ -1,13 +1,9 @@ -# -*- coding: utf-8 -*- - """ Base password hashers. Contains weak hashers (the original ones) available with Modoboa. """ -from __future__ import unicode_literals - import base64 import crypt import hashlib @@ -17,8 +13,6 @@ from random import Random from django.utils.crypto import constant_time_compare from django.utils.encoding import force_bytes, force_text -from six import with_metaclass - class MetaHasher(type): """ @@ -36,7 +30,7 @@ class MetaHasher(type): return cls.name if not cls._weak else "{} (weak)".format(cls.name) -class PasswordHasher(with_metaclass(MetaHasher, object)): +class PasswordHasher(metaclass=MetaHasher): """ Base class of all hashers. """ diff --git a/modoboa/core/password_validation.py b/modoboa/core/password_validation.py index db3693ba1..3cb944fd7 100644 --- a/modoboa/core/password_validation.py +++ b/modoboa/core/password_validation.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Custom password validators.""" -from __future__ import unicode_literals - from django.core.exceptions import ValidationError from django.utils.translation import ugettext as _, ungettext diff --git a/modoboa/core/signals.py b/modoboa/core/signals.py index 708759fac..409dc2e0b 100644 --- a/modoboa/core/signals.py +++ b/modoboa/core/signals.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Modoboa core signals.""" -from __future__ import unicode_literals - import django.dispatch account_auto_created = django.dispatch.Signal(providing_args=["user"]) diff --git a/modoboa/core/templatetags/core_tags.py b/modoboa/core/templatetags/core_tags.py index b0f98ca3c..bc829031e 100644 --- a/modoboa/core/templatetags/core_tags.py +++ b/modoboa/core/templatetags/core_tags.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Custom tags for Core application.""" -from __future__ import unicode_literals - import os import re from functools import reduce diff --git a/modoboa/core/tests/stupid_extension_1/modo_extension.py b/modoboa/core/tests/stupid_extension_1/modo_extension.py index a645634d5..813de845a 100644 --- a/modoboa/core/tests/stupid_extension_1/modo_extension.py +++ b/modoboa/core/tests/stupid_extension_1/modo_extension.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """A stupid extension used for tests.""" -from __future__ import unicode_literals - from modoboa.core import extensions diff --git a/modoboa/core/tests/stupid_extension_2/modo_extension.py b/modoboa/core/tests/stupid_extension_2/modo_extension.py index fd42cb5cb..a8f9052d5 100644 --- a/modoboa/core/tests/stupid_extension_2/modo_extension.py +++ b/modoboa/core/tests/stupid_extension_2/modo_extension.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """A stupid extension used for tests.""" -from __future__ import unicode_literals - from modoboa.core import extensions diff --git a/modoboa/core/tests/stupid_extension_2/urls.py b/modoboa/core/tests/stupid_extension_2/urls.py index 0e3717f91..a7996a92b 100644 --- a/modoboa/core/tests/stupid_extension_2/urls.py +++ b/modoboa/core/tests/stupid_extension_2/urls.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Custom urls.""" -from __future__ import unicode_literals - from django.conf.urls import url from . import views diff --git a/modoboa/core/tests/stupid_extension_2/views.py b/modoboa/core/tests/stupid_extension_2/views.py index c0a372402..4a5f6dd70 100644 --- a/modoboa/core/tests/stupid_extension_2/views.py +++ b/modoboa/core/tests/stupid_extension_2/views.py @@ -1,7 +1,3 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - from django import http diff --git a/modoboa/core/tests/test_authentication.py b/modoboa/core/tests/test_authentication.py index 912855f4c..1aec44c21 100644 --- a/modoboa/core/tests/test_authentication.py +++ b/modoboa/core/tests/test_authentication.py @@ -1,12 +1,8 @@ -# -*- coding: utf-8 -*- - """Tests for core application.""" -from __future__ import unicode_literals - import os import smtplib -from unittest import skipIf, skipUnless +from unittest import mock, skipIf, skipUnless from django.core import mail from django.test import override_settings @@ -23,13 +19,6 @@ from modoboa.core.password_hashers import ( from modoboa.lib.tests import NO_SMTP, ModoTestCase from .. import factories, models -try: - # mock is part of the Python (>= 3.3) standard library - from unittest import mock -except ImportError: - # fall back to the mock backport - import mock - @override_settings( DOVEADM_LOOKUP_PATH=["{}/doveadm".format(os.path.dirname(__file__))]) diff --git a/modoboa/core/tests/test_checks.py b/modoboa/core/tests/test_checks.py index 124cf3930..06ab8ad58 100644 --- a/modoboa/core/tests/test_checks.py +++ b/modoboa/core/tests/test_checks.py @@ -1,7 +1,3 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - from django.test import SimpleTestCase from django.test.utils import override_settings diff --git a/modoboa/core/tests/test_core.py b/modoboa/core/tests/test_core.py index 5d9a5a605..14a04e50a 100644 --- a/modoboa/core/tests/test_core.py +++ b/modoboa/core/tests/test_core.py @@ -1,12 +1,9 @@ -# -*- coding: utf-8 -*- - """Tests for core application.""" -from __future__ import unicode_literals +from io import StringIO import httmock from dateutil.relativedelta import relativedelta -from six import StringIO from django.core import management from django.test import TestCase diff --git a/modoboa/core/tests/test_extensions.py b/modoboa/core/tests/test_extensions.py index e9d4e8416..3ef1ec764 100644 --- a/modoboa/core/tests/test_extensions.py +++ b/modoboa/core/tests/test_extensions.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Extensions management related test cases.""" -from __future__ import unicode_literals - import os import sys from io import StringIO diff --git a/modoboa/core/tests/test_ldap.py b/modoboa/core/tests/test_ldap.py index 54c12a31a..1b8cfdf56 100644 --- a/modoboa/core/tests/test_ldap.py +++ b/modoboa/core/tests/test_ldap.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Tests for core application.""" -from __future__ import unicode_literals - from unittest import skipIf from django.test import override_settings diff --git a/modoboa/core/tests/test_views.py b/modoboa/core/tests/test_views.py index 498892c99..838182a81 100644 --- a/modoboa/core/tests/test_views.py +++ b/modoboa/core/tests/test_views.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Core views test cases.""" -from __future__ import unicode_literals - from testfixtures import compare from django import forms diff --git a/modoboa/core/urls.py b/modoboa/core/urls.py index 8b0fd2f95..1d086effd 100644 --- a/modoboa/core/urls.py +++ b/modoboa/core/urls.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Core urls.""" -from __future__ import unicode_literals - from django.conf.urls import url from . import views diff --git a/modoboa/core/utils.py b/modoboa/core/utils.py index 8d992880a..1630f150d 100644 --- a/modoboa/core/utils.py +++ b/modoboa/core/utils.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Utility functions.""" -from __future__ import unicode_literals - from pkg_resources import parse_version from django.utils.translation import ugettext as _ diff --git a/modoboa/core/views/__init__.py b/modoboa/core/views/__init__.py index 479f86c7f..c59caeeed 100644 --- a/modoboa/core/views/__init__.py +++ b/modoboa/core/views/__init__.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Core views.""" -from __future__ import unicode_literals - from .admin import ( check_top_notifications, information, logs, logs_page, parameters, viewsettings diff --git a/modoboa/core/views/admin.py b/modoboa/core/views/admin.py index d1ec82099..ee4a8b5c9 100644 --- a/modoboa/core/views/admin.py +++ b/modoboa/core/views/admin.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Views available to super administrators only.""" -from __future__ import unicode_literals - from functools import reduce from django.contrib.auth.decorators import login_required, user_passes_test diff --git a/modoboa/core/views/auth.py b/modoboa/core/views/auth.py index 8945f7bf4..cecb7f493 100644 --- a/modoboa/core/views/auth.py +++ b/modoboa/core/views/auth.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Core authentication views.""" -from __future__ import unicode_literals - import logging from django.contrib.auth import ( diff --git a/modoboa/core/views/base.py b/modoboa/core/views/base.py index 32ed7651e..33f893f41 100644 --- a/modoboa/core/views/base.py +++ b/modoboa/core/views/base.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Base core views.""" -from __future__ import unicode_literals - from django.contrib.auth import mixins as auth_mixins from django.urls import reverse from django.utils.http import is_safe_url diff --git a/modoboa/core/views/dashboard.py b/modoboa/core/views/dashboard.py index 669bc424d..054c1ad3a 100644 --- a/modoboa/core/views/dashboard.py +++ b/modoboa/core/views/dashboard.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Core dashboard views.""" -from __future__ import unicode_literals - import feedparser import requests from dateutil import parser diff --git a/modoboa/core/views/user.py b/modoboa/core/views/user.py index 22dea631b..11f51a02a 100644 --- a/modoboa/core/views/user.py +++ b/modoboa/core/views/user.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Simple user views.""" -from __future__ import unicode_literals - from django.contrib.auth.decorators import login_required, user_passes_test from django.shortcuts import render from django.template.loader import render_to_string diff --git a/modoboa/dnstools/factories.py b/modoboa/dnstools/factories.py index 4a0b86641..fb8a7710e 100644 --- a/modoboa/dnstools/factories.py +++ b/modoboa/dnstools/factories.py @@ -1,7 +1,5 @@ """App related factories.""" -from __future__ import unicode_literals - import factory from modoboa.admin import factories as admin_factories diff --git a/modoboa/dnstools/lib.py b/modoboa/dnstools/lib.py index e66b35283..1fd837ae1 100644 --- a/modoboa/dnstools/lib.py +++ b/modoboa/dnstools/lib.py @@ -1,7 +1,5 @@ """dnstools library.""" -from __future__ import unicode_literals - import ipaddress from django.utils.translation import ugettext as _ diff --git a/modoboa/dnstools/migrations/0001_initial.py b/modoboa/dnstools/migrations/0001_initial.py index 6fd8e9891..794895dbb 100644 --- a/modoboa/dnstools/migrations/0001_initial.py +++ b/modoboa/dnstools/migrations/0001_initial.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.11.16 on 2018-11-19 10:07 -from __future__ import unicode_literals - from django.db import migrations, models import django.db.models.deletion import django.utils.timezone diff --git a/modoboa/dnstools/models.py b/modoboa/dnstools/models.py index 20e0a8d89..a2bd43a37 100644 --- a/modoboa/dnstools/models.py +++ b/modoboa/dnstools/models.py @@ -1,7 +1,5 @@ """App related models.""" -from __future__ import unicode_literals - import datetime from django.db import models diff --git a/modoboa/ldapsync/lib.py b/modoboa/ldapsync/lib.py index 89b371680..fd8a345c1 100644 --- a/modoboa/ldapsync/lib.py +++ b/modoboa/ldapsync/lib.py @@ -1,7 +1,5 @@ """LDAP related functions.""" -from __future__ import unicode_literals - import ldap import ldap.modlist as modlist diff --git a/modoboa/ldapsync/tests.py b/modoboa/ldapsync/tests.py index 448d28ae9..e5a633307 100644 --- a/modoboa/ldapsync/tests.py +++ b/modoboa/ldapsync/tests.py @@ -1,10 +1,7 @@ """LDAP sync. related tests.""" -from __future__ import unicode_literals - from unittest import skipIf -from django.utils import six from django.utils.encoding import force_bytes, force_str from modoboa.core import factories as core_factories @@ -38,8 +35,7 @@ class LDAPSyncTestCase(ModoTestCase): def reset_ldap_directory(self): try: - tmp_dn = force_bytes(self.dn) if six.PY2 else self.dn - self.conn.delete_s(tmp_dn) + self.conn.delete_s(self.dn) except ldap.NO_SUCH_OBJECT: pass diff --git a/modoboa/lib/api_client.py b/modoboa/lib/api_client.py index 70cf45d87..504d0cf07 100644 --- a/modoboa/lib/api_client.py +++ b/modoboa/lib/api_client.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """A client for Modoboa's public API.""" -from __future__ import unicode_literals - import os import pkg_resources diff --git a/modoboa/lib/authbackends.py b/modoboa/lib/authbackends.py index 9f8644726..87bfd676d 100644 --- a/modoboa/lib/authbackends.py +++ b/modoboa/lib/authbackends.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Custom authentication backends.""" -from __future__ import unicode_literals - import smtplib from django.conf import settings diff --git a/modoboa/lib/connections.py b/modoboa/lib/connections.py index 5a194f674..fcc1b51eb 100644 --- a/modoboa/lib/connections.py +++ b/modoboa/lib/connections.py @@ -1,7 +1,3 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - from modoboa.lib.cryptutils import decrypt diff --git a/modoboa/lib/cryptutils.py b/modoboa/lib/cryptutils.py index 41815a38f..8ba6b36b6 100644 --- a/modoboa/lib/cryptutils.py +++ b/modoboa/lib/cryptutils.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Crypto related utilities.""" -from __future__ import unicode_literals - import base64 from cryptography.fernet import Fernet diff --git a/modoboa/lib/db_utils.py b/modoboa/lib/db_utils.py index 3336ed1ac..569bc8e9f 100644 --- a/modoboa/lib/db_utils.py +++ b/modoboa/lib/db_utils.py @@ -1,7 +1,3 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - from django.conf import settings from django.db import connection from django.utils.translation import ugettext as _ diff --git a/modoboa/lib/email_utils.py b/modoboa/lib/email_utils.py index 3eb25b9f0..8e0d3c544 100644 --- a/modoboa/lib/email_utils.py +++ b/modoboa/lib/email_utils.py @@ -1,7 +1,3 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - import email import re import smtplib @@ -16,7 +12,6 @@ from lxml.html import defs from lxml.html.clean import Cleaner from django.template.loader import render_to_string -from django.utils import six from django.utils.encoding import smart_str, smart_text from django.utils.html import conditional_escape, escape from django.utils.translation import ugettext as _ @@ -134,7 +129,7 @@ class Email(object): continue if encoding: value = smart_text(value, encoding=encoding) - elif isinstance(value, six.binary_type): + elif isinstance(value, bytes): # SMTPUTF8 fallback (most of the time) # Address contains non ASCII chars but is not RFC2047 # encoded... @@ -142,12 +137,9 @@ class Email(object): try: value = value.decode(encoding["encoding"], "replace") except (TypeError, UnicodeDecodeError) as exc: - six.raise_from( - InternalError( - _("unable to determine encoding of string") - ), - exc - ) + raise InternalError( + _("unable to determine encoding of string") + ) from exc decoded_values.append(value) return "".join(decoded_values) return "" @@ -293,8 +285,8 @@ class Email(object): def split_address(address): """Split an e-mail address into local part and domain.""" - assert isinstance(address, six.text_type),\ - "address should be of type %s" % six.text_type.__name__ + assert isinstance(address, str),\ + "address should be of type str" if "@" not in address: local_part = address domain = None @@ -305,10 +297,10 @@ def split_address(address): def split_local_part(local_part, delimiter=None): """Split a local part into local part and extension.""" - assert isinstance(local_part, six.text_type),\ - "local_part should be of type %s" % six.text_type.__name__ - assert isinstance(delimiter, six.text_type) or delimiter is None,\ - "delimiter should be of type %s" % six.text_type.__name__ + assert isinstance(local_part, str),\ + "local_part should be of type str" + assert isinstance(delimiter, str) or delimiter is None,\ + "delimiter should be of type str" extension = None if local_part.lower() in ["mailer-daemon", "double-bounce"]: # never split these special addresses @@ -350,8 +342,8 @@ def split_mailbox(mailbox, return_extension=False): def decode(value_bytes, encoding, append_to_error=""): """Try to decode the given string.""" - assert isinstance(value_bytes, six.binary_type),\ - "value_bytes should be of type %s" % six.binary_type.__name__ + assert isinstance(value_bytes, bytes),\ + "value_bytes should be of type bytes" if len(value_bytes) == 0: # short circuit for empty strings return "" @@ -364,13 +356,10 @@ def decode(value_bytes, encoding, append_to_error=""): encoding["encoding"], "replace" ) except (TypeError, UnicodeDecodeError) as exc: - six.raise_from( - InternalError( - _("unable to determine encoding of string") + - append_to_error - ), - exc - ) + raise InternalError( + _("unable to determine encoding of string") + + append_to_error + ) from exc return value @@ -382,7 +371,7 @@ def prepare_addresses(addresses, usage="header"): :return: a string or a list depending on usage value """ result = [] - if isinstance(addresses, six.text_type): + if isinstance(addresses, str): addresses = [addresses] for name, address in getaddresses(addresses): if not address: diff --git a/modoboa/lib/exceptions.py b/modoboa/lib/exceptions.py index 9a672e8ca..2e740597d 100644 --- a/modoboa/lib/exceptions.py +++ b/modoboa/lib/exceptions.py @@ -1,13 +1,9 @@ -# -*- coding: utf-8 -*- - """ :mod:`exceptions` --- Custom Modoboa exceptions ----------------------------------------------- """ -from __future__ import unicode_literals - from django.utils.translation import ugettext as _ diff --git a/modoboa/lib/fields.py b/modoboa/lib/fields.py index 52f53cd72..c5e81ff11 100644 --- a/modoboa/lib/fields.py +++ b/modoboa/lib/fields.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Custom form fields.""" -from __future__ import unicode_literals - from django import forms from django.utils.translation import ugettext_lazy diff --git a/modoboa/lib/form_utils.py b/modoboa/lib/form_utils.py index 937e0e8d9..c98036884 100644 --- a/modoboa/lib/form_utils.py +++ b/modoboa/lib/form_utils.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Form management utilities.""" -from __future__ import unicode_literals - import abc import re from collections import OrderedDict diff --git a/modoboa/lib/imap_utf7.py b/modoboa/lib/imap_utf7.py index 34efc3778..95caa987b 100644 --- a/modoboa/lib/imap_utf7.py +++ b/modoboa/lib/imap_utf7.py @@ -51,8 +51,6 @@ Found here: http://svn.plone.org/svn/collective/mxmImapClient/trunk/imapUTF7.py """ -from __future__ import print_function, unicode_literals - import codecs # encoding diff --git a/modoboa/lib/ldap_utils.py b/modoboa/lib/ldap_utils.py index c7ec9235d..c981c25ab 100644 --- a/modoboa/lib/ldap_utils.py +++ b/modoboa/lib/ldap_utils.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - """ A collection of LDAP based classes/functions. @@ -33,12 +31,9 @@ Extracted from `this blog """ -from __future__ import unicode_literals - import ldap from django.conf import settings -from django.utils import six from django.utils.encoding import force_bytes, force_str from django.utils.translation import ugettext as _ @@ -70,7 +65,7 @@ class LDAPAuthBackend(object): def _get_conn(self, dn, password): """Get a connection from the server.""" - conn = ldap.initialize(self.server_uri, bytes_mode=six.PY2) + conn = ldap.initialize(self.server_uri) conn.set_option(ldap.OPT_X_TLS_DEMAND, True) conn.set_option(ldap.OPT_DEBUG_LEVEL, 255) conn.simple_bind_s( diff --git a/modoboa/lib/listing.py b/modoboa/lib/listing.py index 8237719fe..3e5f432d1 100644 --- a/modoboa/lib/listing.py +++ b/modoboa/lib/listing.py @@ -1,7 +1,3 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator from modoboa.parameters import tools as param_tools diff --git a/modoboa/lib/middleware.py b/modoboa/lib/middleware.py index 2273e6b1e..5262af691 100644 --- a/modoboa/lib/middleware.py +++ b/modoboa/lib/middleware.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Custom middlewares.""" -from __future__ import unicode_literals - from django.http import HttpResponseRedirect from django.utils.deprecation import MiddlewareMixin from django.utils.encoding import smart_text diff --git a/modoboa/lib/migrations/0001_initial.py b/modoboa/lib/migrations/0001_initial.py index 6f5cd6f93..7ffa0a642 100644 --- a/modoboa/lib/migrations/0001_initial.py +++ b/modoboa/lib/migrations/0001_initial.py @@ -1,6 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - from django.db import models, migrations from django.conf import settings diff --git a/modoboa/lib/migrations/0002_rename_parameters.py b/modoboa/lib/migrations/0002_rename_parameters.py index da484142b..90dcb9647 100644 --- a/modoboa/lib/migrations/0002_rename_parameters.py +++ b/modoboa/lib/migrations/0002_rename_parameters.py @@ -1,6 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - from django.db import models, migrations APPLICATIONS = [ diff --git a/modoboa/lib/migrations/0003_rename_parameters.py b/modoboa/lib/migrations/0003_rename_parameters.py index 642e5a5a8..4dd10cdff 100644 --- a/modoboa/lib/migrations/0003_rename_parameters.py +++ b/modoboa/lib/migrations/0003_rename_parameters.py @@ -1,6 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - from django.db import models, migrations APPS = ( diff --git a/modoboa/lib/migrations/0004_auto_20151114_1409.py b/modoboa/lib/migrations/0004_auto_20151114_1409.py index e66d38167..5c62719ba 100644 --- a/modoboa/lib/migrations/0004_auto_20151114_1409.py +++ b/modoboa/lib/migrations/0004_auto_20151114_1409.py @@ -1,6 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - from django.db import models, migrations diff --git a/modoboa/lib/migrations/0005_auto_20160416_1449.py b/modoboa/lib/migrations/0005_auto_20160416_1449.py index 6c594dec3..250bc6be7 100644 --- a/modoboa/lib/migrations/0005_auto_20160416_1449.py +++ b/modoboa/lib/migrations/0005_auto_20160416_1449.py @@ -1,6 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - from django.db import migrations diff --git a/modoboa/lib/migrations/0006_auto_20161104_2206.py b/modoboa/lib/migrations/0006_auto_20161104_2206.py index 105af9718..10bf96658 100644 --- a/modoboa/lib/migrations/0006_auto_20161104_2206.py +++ b/modoboa/lib/migrations/0006_auto_20161104_2206.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.9.5 on 2016-11-04 21:06 -from __future__ import unicode_literals - from django.db import migrations diff --git a/modoboa/lib/migrations/__init__.py b/modoboa/lib/migrations/__init__.py index baffc4882..e69de29bb 100644 --- a/modoboa/lib/migrations/__init__.py +++ b/modoboa/lib/migrations/__init__.py @@ -1 +0,0 @@ -from __future__ import unicode_literals diff --git a/modoboa/lib/paginator.py b/modoboa/lib/paginator.py index 9006ded56..3dfc8f54a 100644 --- a/modoboa/lib/paginator.py +++ b/modoboa/lib/paginator.py @@ -1,12 +1,7 @@ -# -*- coding: utf-8 -*- - """ Custom pagination tools. """ -from __future__ import unicode_literals - - class Page(object): """Class to represent a page.""" diff --git a/modoboa/lib/permissions.py b/modoboa/lib/permissions.py index b1705bd77..5f7d27af6 100644 --- a/modoboa/lib/permissions.py +++ b/modoboa/lib/permissions.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Object level permissions.""" -from __future__ import unicode_literals - from django.contrib.auth.models import Group, Permission from django.contrib.contenttypes.models import ContentType diff --git a/modoboa/lib/signals.py b/modoboa/lib/signals.py index 46c4795b1..2a114e8c3 100644 --- a/modoboa/lib/signals.py +++ b/modoboa/lib/signals.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Custom signals.""" -from __future__ import unicode_literals - from threading import local _local_store = local() diff --git a/modoboa/lib/singleton.py b/modoboa/lib/singleton.py index 2033d7c6e..977a8590b 100644 --- a/modoboa/lib/singleton.py +++ b/modoboa/lib/singleton.py @@ -1,8 +1,3 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - - # works in Python 2 & 3 class _Singleton(type): _instances = {} diff --git a/modoboa/lib/sysutils.py b/modoboa/lib/sysutils.py index eb0b8c92f..05e84c41f 100644 --- a/modoboa/lib/sysutils.py +++ b/modoboa/lib/sysutils.py @@ -1,12 +1,8 @@ -# -*- coding: utf-8 -*- - """ This module extra functions/shortcuts to communicate with the system (executing commands, etc.) """ -from __future__ import unicode_literals - import inspect import os import re diff --git a/modoboa/lib/templatetags/form_tags.py b/modoboa/lib/templatetags/form_tags.py index 796fce0be..b7d7e3e4b 100644 --- a/modoboa/lib/templatetags/form_tags.py +++ b/modoboa/lib/templatetags/form_tags.py @@ -1,11 +1,7 @@ -# -*- coding: utf-8 -*- - """ Form rendering tags. """ -from __future__ import unicode_literals - from django import forms, template from django.template.loader import render_to_string from django.utils.encoding import smart_text diff --git a/modoboa/lib/templatetags/lib_tags.py b/modoboa/lib/templatetags/lib_tags.py index 41a086d31..22cf15146 100644 --- a/modoboa/lib/templatetags/lib_tags.py +++ b/modoboa/lib/templatetags/lib_tags.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Custom template tags.""" -from __future__ import unicode_literals - from datetime import datetime from django import template diff --git a/modoboa/lib/test_utils.py b/modoboa/lib/test_utils.py index 51b4be356..e4bb1e4d9 100644 --- a/modoboa/lib/test_utils.py +++ b/modoboa/lib/test_utils.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Tools for top level testing (ie. when ran by Travis).""" -from __future__ import unicode_literals - import os import shutil import tempfile diff --git a/modoboa/lib/tests/__init__.py b/modoboa/lib/tests/__init__.py index 7eb668515..0441301d5 100644 --- a/modoboa/lib/tests/__init__.py +++ b/modoboa/lib/tests/__init__.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Testing utilities.""" -from __future__ import unicode_literals - import socket from django.core import management diff --git a/modoboa/lib/tests/test_cryptutils.py b/modoboa/lib/tests/test_cryptutils.py index 4c3f852d9..e50c3adac 100644 --- a/modoboa/lib/tests/test_cryptutils.py +++ b/modoboa/lib/tests/test_cryptutils.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Tests for crypto utility functions.""" -from __future__ import unicode_literals - from django.test import SimpleTestCase from django.test.utils import override_settings diff --git a/modoboa/lib/tests/test_email_utils.py b/modoboa/lib/tests/test_email_utils.py index 6b2c8bbc4..b64007d3b 100644 --- a/modoboa/lib/tests/test_email_utils.py +++ b/modoboa/lib/tests/test_email_utils.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Tests for email_utils.""" -from __future__ import unicode_literals - import os from django.test import SimpleTestCase diff --git a/modoboa/lib/tests/test_u2u_decode.py b/modoboa/lib/tests/test_u2u_decode.py index 9c64cae46..464aa4a24 100644 --- a/modoboa/lib/tests/test_u2u_decode.py +++ b/modoboa/lib/tests/test_u2u_decode.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Tests for u2u_decode.""" -from __future__ import unicode_literals - from django.test import TestCase from .. import u2u_decode diff --git a/modoboa/lib/u2u_decode.py b/modoboa/lib/u2u_decode.py index 5d9367557..34a89e917 100644 --- a/modoboa/lib/u2u_decode.py +++ b/modoboa/lib/u2u_decode.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - """ Unstructured rfc2047 header to unicode. @@ -7,8 +5,6 @@ A stupid (and not accurate) answer to https://bugs.python.org/issue1079. """ -from __future__ import unicode_literals - import re from email.header import decode_header, make_header from email.utils import parseaddr diff --git a/modoboa/lib/validators.py b/modoboa/lib/validators.py index 80bd95ca2..fd7e4b91f 100644 --- a/modoboa/lib/validators.py +++ b/modoboa/lib/validators.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Field validators.""" -from __future__ import unicode_literals - import re from django.core.exceptions import ValidationError diff --git a/modoboa/lib/web_utils.py b/modoboa/lib/web_utils.py index de54f63df..443da7f81 100644 --- a/modoboa/lib/web_utils.py +++ b/modoboa/lib/web_utils.py @@ -1,11 +1,7 @@ -# -*- coding: utf-8 -*- - """ This module contains extra functions/shortcuts used to render HTML. """ -from __future__ import unicode_literals - import json import re import sys diff --git a/modoboa/limits/__init__.py b/modoboa/limits/__init__.py index 01758a791..1816137f6 100644 --- a/modoboa/limits/__init__.py +++ b/modoboa/limits/__init__.py @@ -1,5 +1 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - default_app_config = "modoboa.limits.apps.LimitsConfig" diff --git a/modoboa/limits/app_settings.py b/modoboa/limits/app_settings.py index 070a38f23..cf77296b3 100644 --- a/modoboa/limits/app_settings.py +++ b/modoboa/limits/app_settings.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Custom settings.""" -from __future__ import unicode_literals - from django import forms from django.utils.translation import ugettext_lazy as _ diff --git a/modoboa/limits/apps.py b/modoboa/limits/apps.py index 7f066caf0..f4de69920 100644 --- a/modoboa/limits/apps.py +++ b/modoboa/limits/apps.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """App config for limits.""" -from __future__ import unicode_literals - from django.apps import AppConfig from django.utils.translation import ugettext as _ diff --git a/modoboa/limits/constants.py b/modoboa/limits/constants.py index 570d961aa..c916b2b93 100644 --- a/modoboa/limits/constants.py +++ b/modoboa/limits/constants.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Modoboa limits constants.""" -from __future__ import unicode_literals - import collections from django.utils.translation import ugettext_lazy as _ diff --git a/modoboa/limits/forms.py b/modoboa/limits/forms.py index 7b91c377d..ac6842505 100644 --- a/modoboa/limits/forms.py +++ b/modoboa/limits/forms.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Custom forms.""" -from __future__ import unicode_literals - from django import forms from django.utils.translation import ugettext as _ diff --git a/modoboa/limits/handlers.py b/modoboa/limits/handlers.py index 57309b405..a73bb8d19 100644 --- a/modoboa/limits/handlers.py +++ b/modoboa/limits/handlers.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Django signal handlers for limits.""" -from __future__ import unicode_literals - from django.contrib.contenttypes.models import ContentType from django.db.models import signals from django.dispatch import receiver diff --git a/modoboa/limits/lib.py b/modoboa/limits/lib.py index 68dcb734a..7da7b97e8 100644 --- a/modoboa/limits/lib.py +++ b/modoboa/limits/lib.py @@ -1,13 +1,9 @@ -# -*- coding: utf-8 -*- - """ :mod:`lib` --- public functions ------------------------------- """ -from __future__ import unicode_literals - from django.utils.translation import ugettext as _ from modoboa.lib.exceptions import ModoboaException diff --git a/modoboa/limits/migrations/0001_initial.py b/modoboa/limits/migrations/0001_initial.py index 2c1d96230..c40f69b92 100644 --- a/modoboa/limits/migrations/0001_initial.py +++ b/modoboa/limits/migrations/0001_initial.py @@ -1,6 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - from django.db import models, migrations from django.conf import settings diff --git a/modoboa/limits/migrations/0002_auto_20151114_1518.py b/modoboa/limits/migrations/0002_auto_20151114_1518.py index a6ed7714f..7982519e0 100644 --- a/modoboa/limits/migrations/0002_auto_20151114_1518.py +++ b/modoboa/limits/migrations/0002_auto_20151114_1518.py @@ -1,6 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - from django.db import models, migrations diff --git a/modoboa/limits/migrations/0003_auto_20160413_1046.py b/modoboa/limits/migrations/0003_auto_20160413_1046.py index 625a90568..941802bb6 100644 --- a/modoboa/limits/migrations/0003_auto_20160413_1046.py +++ b/modoboa/limits/migrations/0003_auto_20160413_1046.py @@ -1,6 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - from django.db import migrations, models from django.conf import settings diff --git a/modoboa/limits/migrations/0004_auto_20160413_1312.py b/modoboa/limits/migrations/0004_auto_20160413_1312.py index fe085dd35..1ec5502f7 100644 --- a/modoboa/limits/migrations/0004_auto_20160413_1312.py +++ b/modoboa/limits/migrations/0004_auto_20160413_1312.py @@ -1,6 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - from django.db import migrations, models diff --git a/modoboa/limits/migrations/0005_auto_20160415_1654.py b/modoboa/limits/migrations/0005_auto_20160415_1654.py index 9b05b9f08..63d8c760d 100644 --- a/modoboa/limits/migrations/0005_auto_20160415_1654.py +++ b/modoboa/limits/migrations/0005_auto_20160415_1654.py @@ -1,6 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - from django.db import migrations, models import modoboa.limits.models diff --git a/modoboa/limits/migrations/0006_auto_20170216_1112.py b/modoboa/limits/migrations/0006_auto_20170216_1112.py index d195d54b1..a2ac72b32 100644 --- a/modoboa/limits/migrations/0006_auto_20170216_1112.py +++ b/modoboa/limits/migrations/0006_auto_20170216_1112.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.10.5 on 2017-02-16 10:12 -from __future__ import unicode_literals - from django.db import migrations diff --git a/modoboa/limits/migrations/__init__.py b/modoboa/limits/migrations/__init__.py index baffc4882..e69de29bb 100644 --- a/modoboa/limits/migrations/__init__.py +++ b/modoboa/limits/migrations/__init__.py @@ -1 +0,0 @@ -from __future__ import unicode_literals diff --git a/modoboa/limits/models.py b/modoboa/limits/models.py index ce62d9bfc..9e9f58f70 100644 --- a/modoboa/limits/models.py +++ b/modoboa/limits/models.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Models for the limits extensions.""" -from __future__ import unicode_literals - from django.conf import settings from django.db import models from django.utils.encoding import python_2_unicode_compatible diff --git a/modoboa/limits/serializers.py b/modoboa/limits/serializers.py index 9fa0cbd00..ed9c85e73 100644 --- a/modoboa/limits/serializers.py +++ b/modoboa/limits/serializers.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Limits serializers.""" -from __future__ import unicode_literals - from rest_framework import serializers from . import lib diff --git a/modoboa/limits/tests/test_api.py b/modoboa/limits/tests/test_api.py index 890c05556..63aa057f2 100644 --- a/modoboa/limits/tests/test_api.py +++ b/modoboa/limits/tests/test_api.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Test cases for the limits extension.""" -from __future__ import unicode_literals - from testfixtures import compare from django.urls import reverse diff --git a/modoboa/limits/tests/test_domain_limits.py b/modoboa/limits/tests/test_domain_limits.py index 9442cda99..545105f0b 100644 --- a/modoboa/limits/tests/test_domain_limits.py +++ b/modoboa/limits/tests/test_domain_limits.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Test cases for the limits extension.""" -from __future__ import unicode_literals - from django.urls import reverse from modoboa.admin import factories as admin_factories diff --git a/modoboa/limits/tests/test_import.py b/modoboa/limits/tests/test_import.py index 109021f45..e59002b01 100644 --- a/modoboa/limits/tests/test_import.py +++ b/modoboa/limits/tests/test_import.py @@ -1,7 +1,3 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - from django.core.files.base import ContentFile from django.urls import reverse diff --git a/modoboa/limits/tests/test_user_limits.py b/modoboa/limits/tests/test_user_limits.py index 41bb40706..4e514ffc7 100644 --- a/modoboa/limits/tests/test_user_limits.py +++ b/modoboa/limits/tests/test_user_limits.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Test cases for the limits extension.""" -from __future__ import unicode_literals - from django.urls import reverse from modoboa.admin.factories import populate_database diff --git a/modoboa/limits/urls_api.py b/modoboa/limits/urls_api.py index 8295e069f..621a83286 100644 --- a/modoboa/limits/urls_api.py +++ b/modoboa/limits/urls_api.py @@ -1,15 +1,11 @@ -# -*- coding: utf-8 -*- - """Limits API urls.""" -from __future__ import unicode_literals - from rest_framework import routers from . import viewsets router = routers.SimpleRouter() router.register( - r"resources", viewsets.ResourcesViewSet, base_name="resources") + r"resources", viewsets.ResourcesViewSet, basename="resources") urlpatterns = router.urls diff --git a/modoboa/limits/utils.py b/modoboa/limits/utils.py index ebbb11972..89fe797ff 100644 --- a/modoboa/limits/utils.py +++ b/modoboa/limits/utils.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Modoboa limits utilities.""" -from __future__ import unicode_literals - from . import constants diff --git a/modoboa/limits/viewsets.py b/modoboa/limits/viewsets.py index 7cb8b3e55..6e6c6ad3f 100644 --- a/modoboa/limits/viewsets.py +++ b/modoboa/limits/viewsets.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Limits API.""" -from __future__ import unicode_literals - from django.contrib.contenttypes.models import ContentType from rest_framework import mixins, viewsets diff --git a/modoboa/parameters/apps.py b/modoboa/parameters/apps.py index f60d64f47..b3ed16382 100644 --- a/modoboa/parameters/apps.py +++ b/modoboa/parameters/apps.py @@ -1,7 +1,3 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - from django.apps import AppConfig diff --git a/modoboa/parameters/forms.py b/modoboa/parameters/forms.py index 19243c7b0..20e16aa85 100644 --- a/modoboa/parameters/forms.py +++ b/modoboa/parameters/forms.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Parameters forms.""" -from __future__ import unicode_literals - from django import forms from modoboa.lib import db_utils, form_utils diff --git a/modoboa/parameters/tools.py b/modoboa/parameters/tools.py index 5187ec0a5..9c792ffc6 100644 --- a/modoboa/parameters/tools.py +++ b/modoboa/parameters/tools.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Parameters management.""" -from __future__ import unicode_literals - import copy from modoboa.lib import exceptions, form_utils, signals diff --git a/modoboa/relaydomains/__init__.py b/modoboa/relaydomains/__init__.py index 05dc26897..0b2987e99 100644 --- a/modoboa/relaydomains/__init__.py +++ b/modoboa/relaydomains/__init__.py @@ -1,5 +1 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - default_app_config = "modoboa.relaydomains.apps.RelayDomainsConfig" diff --git a/modoboa/relaydomains/apps.py b/modoboa/relaydomains/apps.py index cfdb726b3..49ffe5fc8 100644 --- a/modoboa/relaydomains/apps.py +++ b/modoboa/relaydomains/apps.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """AppConfig for relaydomains.""" -from __future__ import unicode_literals - from django.apps import AppConfig diff --git a/modoboa/relaydomains/forms.py b/modoboa/relaydomains/forms.py index f9b40e6d6..9b52086b4 100644 --- a/modoboa/relaydomains/forms.py +++ b/modoboa/relaydomains/forms.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Postfix relay domains extension forms.""" -from __future__ import unicode_literals - from django.db.models.signals import pre_save, post_save from modoboa.lib.form_utils import WizardStep diff --git a/modoboa/relaydomains/handlers.py b/modoboa/relaydomains/handlers.py index b06effa28..14102bdd4 100644 --- a/modoboa/relaydomains/handlers.py +++ b/modoboa/relaydomains/handlers.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Django signal handlers for relaydomains.""" -from __future__ import unicode_literals - from django.db.models import signals from django.dispatch import receiver from django.utils.translation import ugettext as _ diff --git a/modoboa/relaydomains/lib.py b/modoboa/relaydomains/lib.py index bcebef70b..41d28eb40 100644 --- a/modoboa/relaydomains/lib.py +++ b/modoboa/relaydomains/lib.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Internal library.""" -from __future__ import unicode_literals - from django.utils.translation import ugettext as _ from modoboa.admin import models as admin_models diff --git a/modoboa/relaydomains/migrations/0001_initial.py b/modoboa/relaydomains/migrations/0001_initial.py index 84cf66c6a..cd708a483 100644 --- a/modoboa/relaydomains/migrations/0001_initial.py +++ b/modoboa/relaydomains/migrations/0001_initial.py @@ -1,6 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - from django.db import models, migrations diff --git a/modoboa/relaydomains/migrations/0002_migrate_from_modoboa_admin_relaydomains.py b/modoboa/relaydomains/migrations/0002_migrate_from_modoboa_admin_relaydomains.py index e100533fc..5fd89c6a3 100644 --- a/modoboa/relaydomains/migrations/0002_migrate_from_modoboa_admin_relaydomains.py +++ b/modoboa/relaydomains/migrations/0002_migrate_from_modoboa_admin_relaydomains.py @@ -1,6 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - from django.db import models, migrations diff --git a/modoboa/relaydomains/migrations/0003_auto_20170116_1508.py b/modoboa/relaydomains/migrations/0003_auto_20170116_1508.py index 19c94ce5b..bec153bd8 100644 --- a/modoboa/relaydomains/migrations/0003_auto_20170116_1508.py +++ b/modoboa/relaydomains/migrations/0003_auto_20170116_1508.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.9.12 on 2017-01-16 14:08 -from __future__ import unicode_literals - from django.db import migrations, models diff --git a/modoboa/relaydomains/migrations/0004_auto_20161105_1424.py b/modoboa/relaydomains/migrations/0004_auto_20161105_1424.py index 7c0320a81..e426a035d 100644 --- a/modoboa/relaydomains/migrations/0004_auto_20161105_1424.py +++ b/modoboa/relaydomains/migrations/0004_auto_20161105_1424.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.9.5 on 2016-11-05 13:24 -from __future__ import unicode_literals - from django.db import migrations, models import django.utils.timezone diff --git a/modoboa/relaydomains/migrations/0005_auto_20161105_1426.py b/modoboa/relaydomains/migrations/0005_auto_20161105_1426.py index a056781d5..e51a96764 100644 --- a/modoboa/relaydomains/migrations/0005_auto_20161105_1426.py +++ b/modoboa/relaydomains/migrations/0005_auto_20161105_1426.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.9.5 on 2016-11-05 13:26 -from __future__ import unicode_literals - from django.db import migrations diff --git a/modoboa/relaydomains/migrations/0006_auto_20170215_0948.py b/modoboa/relaydomains/migrations/0006_auto_20170215_0948.py index 6f0ed989d..5f7ffd1ca 100644 --- a/modoboa/relaydomains/migrations/0006_auto_20170215_0948.py +++ b/modoboa/relaydomains/migrations/0006_auto_20170215_0948.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.10.5 on 2017-02-15 08:48 -from __future__ import unicode_literals - from django.db import migrations, models import django.utils.timezone diff --git a/modoboa/relaydomains/migrations/0007_recipientaccess.py b/modoboa/relaydomains/migrations/0007_recipientaccess.py index 4c86b5099..aa2f81198 100644 --- a/modoboa/relaydomains/migrations/0007_recipientaccess.py +++ b/modoboa/relaydomains/migrations/0007_recipientaccess.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.10.7 on 2017-11-24 14:06 -from __future__ import unicode_literals - from django.db import migrations, models diff --git a/modoboa/relaydomains/migrations/0008_auto_20171123_1653.py b/modoboa/relaydomains/migrations/0008_auto_20171123_1653.py index e92b8e3af..1bc2fdda2 100644 --- a/modoboa/relaydomains/migrations/0008_auto_20171123_1653.py +++ b/modoboa/relaydomains/migrations/0008_auto_20171123_1653.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.10.7 on 2017-11-23 15:53 -from __future__ import unicode_literals - from django.db import migrations diff --git a/modoboa/relaydomains/migrations/0009_auto_20171124_1508.py b/modoboa/relaydomains/migrations/0009_auto_20171124_1508.py index 2c4a0f9c7..11e03c988 100644 --- a/modoboa/relaydomains/migrations/0009_auto_20171124_1508.py +++ b/modoboa/relaydomains/migrations/0009_auto_20171124_1508.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.10.7 on 2017-11-24 14:08 -from __future__ import unicode_literals - from django.db import migrations diff --git a/modoboa/relaydomains/migrations/__init__.py b/modoboa/relaydomains/migrations/__init__.py index baffc4882..e69de29bb 100644 --- a/modoboa/relaydomains/migrations/__init__.py +++ b/modoboa/relaydomains/migrations/__init__.py @@ -1 +0,0 @@ -from __future__ import unicode_literals diff --git a/modoboa/relaydomains/models.py b/modoboa/relaydomains/models.py index 5e3700c78..8e20b225c 100644 --- a/modoboa/relaydomains/models.py +++ b/modoboa/relaydomains/models.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Relay domain related models.""" -from __future__ import unicode_literals - from django.db import models diff --git a/modoboa/relaydomains/postfix_maps.py b/modoboa/relaydomains/postfix_maps.py index 77c5904e0..074ba9e97 100644 --- a/modoboa/relaydomains/postfix_maps.py +++ b/modoboa/relaydomains/postfix_maps.py @@ -1,10 +1,5 @@ -# -*- coding: utf-8 -*- - """Map file definitions for postfix.""" -from __future__ import unicode_literals - - class RelayDomainsMap(object): """Map file to list all relay domains.""" diff --git a/modoboa/relaydomains/serializers.py b/modoboa/relaydomains/serializers.py index 8887f2714..26cfbede1 100644 --- a/modoboa/relaydomains/serializers.py +++ b/modoboa/relaydomains/serializers.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """RelayDomain serializers.""" -from __future__ import unicode_literals - import json from django.utils.translation import ugettext as _ diff --git a/modoboa/relaydomains/tests.py b/modoboa/relaydomains/tests.py index ca828e5ce..2c610814c 100644 --- a/modoboa/relaydomains/tests.py +++ b/modoboa/relaydomains/tests.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """relaydomains unit tests.""" -from __future__ import unicode_literals - import json from django.core.files.base import ContentFile diff --git a/modoboa/relaydomains/transport.py b/modoboa/relaydomains/transport.py index 641b66897..8c1c77aeb 100644 --- a/modoboa/relaydomains/transport.py +++ b/modoboa/relaydomains/transport.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Transport backend definition.""" -from __future__ import unicode_literals - from django.utils.translation import ugettext_lazy as _ from modoboa.transport import backends diff --git a/modoboa/relaydomains/urls_api.py b/modoboa/relaydomains/urls_api.py index 56b3562b1..e11e61e64 100644 --- a/modoboa/relaydomains/urls_api.py +++ b/modoboa/relaydomains/urls_api.py @@ -1,14 +1,10 @@ -# -*- coding: utf-8 -*- - """Transport API urls.""" -from __future__ import unicode_literals - from rest_framework import routers from . import viewsets router = routers.SimpleRouter() router.register( - r"relaydomains", viewsets.RelayDomainViewSet, base_name="relaydomain") + r"relaydomains", viewsets.RelayDomainViewSet, basename="relaydomain") urlpatterns = router.urls diff --git a/modoboa/relaydomains/viewsets.py b/modoboa/relaydomains/viewsets.py index 8f75e266b..d7de1b82d 100644 --- a/modoboa/relaydomains/viewsets.py +++ b/modoboa/relaydomains/viewsets.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """RelayDomain viewsets.""" -from __future__ import unicode_literals - from rest_framework import viewsets from rest_framework.permissions import DjangoModelPermissions, IsAuthenticated diff --git a/modoboa/test_settings.py b/modoboa/test_settings.py index 535b8c3c1..0ad16752e 100644 --- a/modoboa/test_settings.py +++ b/modoboa/test_settings.py @@ -1,7 +1,3 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - import os # Database diff --git a/modoboa/transport/__init__.py b/modoboa/transport/__init__.py index 96b626725..ba19ffc3c 100644 --- a/modoboa/transport/__init__.py +++ b/modoboa/transport/__init__.py @@ -1,5 +1 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - default_app_config = "modoboa.transport.apps.TransportConfig" diff --git a/modoboa/transport/apps.py b/modoboa/transport/apps.py index 7d27b0001..5beae6d6d 100644 --- a/modoboa/transport/apps.py +++ b/modoboa/transport/apps.py @@ -1,7 +1,3 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - from django.apps import AppConfig diff --git a/modoboa/transport/backends.py b/modoboa/transport/backends.py index dc2ae5500..b6923b16d 100644 --- a/modoboa/transport/backends.py +++ b/modoboa/transport/backends.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Transport backend.""" -from __future__ import unicode_literals - from django import forms from django.core import validators from django.utils.translation import ugettext_lazy as _ diff --git a/modoboa/transport/constants.py b/modoboa/transport/constants.py index b1786c081..80c50d66b 100644 --- a/modoboa/transport/constants.py +++ b/modoboa/transport/constants.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Transport constants.""" -from __future__ import unicode_literals - PERMISSIONS = { } diff --git a/modoboa/transport/factories.py b/modoboa/transport/factories.py index 7e08e0b34..332bd400a 100644 --- a/modoboa/transport/factories.py +++ b/modoboa/transport/factories.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Transport factories.""" -from __future__ import unicode_literals - import factory from . import models diff --git a/modoboa/transport/forms.py b/modoboa/transport/forms.py index 9309e0413..9d7ec1787 100644 --- a/modoboa/transport/forms.py +++ b/modoboa/transport/forms.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Transport forms.""" -from __future__ import unicode_literals - from django import forms from . import backends, models diff --git a/modoboa/transport/handlers.py b/modoboa/transport/handlers.py index 455b1030b..cb4e3f44c 100644 --- a/modoboa/transport/handlers.py +++ b/modoboa/transport/handlers.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Transport handlers.""" -from __future__ import unicode_literals - from django.db.models import signals from django.dispatch import receiver diff --git a/modoboa/transport/migrations/0001_initial.py b/modoboa/transport/migrations/0001_initial.py index 771b6a1ad..cd34ad3bd 100644 --- a/modoboa/transport/migrations/0001_initial.py +++ b/modoboa/transport/migrations/0001_initial.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.10.7 on 2017-11-24 11:16 -from __future__ import unicode_literals - from django.db import migrations, models import jsonfield.fields diff --git a/modoboa/transport/migrations/0002_auto_20180928_1520.py b/modoboa/transport/migrations/0002_auto_20180928_1520.py index af5a49641..c44052197 100644 --- a/modoboa/transport/migrations/0002_auto_20180928_1520.py +++ b/modoboa/transport/migrations/0002_auto_20180928_1520.py @@ -1,7 +1,4 @@ -# -*- coding: utf-8 -*- # Generated by Django 1.11.15 on 2018-09-28 13:20 -from __future__ import unicode_literals - from django.db import migrations, models diff --git a/modoboa/transport/models.py b/modoboa/transport/models.py index 0db5e59cf..e92166f21 100644 --- a/modoboa/transport/models.py +++ b/modoboa/transport/models.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """Transport models.""" -from __future__ import unicode_literals - import jsonfield from reversion import revisions as reversion diff --git a/modoboa/transport/postfix_maps.py b/modoboa/transport/postfix_maps.py index a756fd57d..0be6fdcc2 100644 --- a/modoboa/transport/postfix_maps.py +++ b/modoboa/transport/postfix_maps.py @@ -1,10 +1,5 @@ -# -*- coding: utf-8 -*- - """Map file definitions for postfix.""" -from __future__ import unicode_literals - - class TransportMap(object): """A transport map.""" diff --git a/modoboa/urls.py b/modoboa/urls.py index e8fe24b79..082da04f8 100644 --- a/modoboa/urls.py +++ b/modoboa/urls.py @@ -1,7 +1,3 @@ -# -*- coding: utf-8 -*- - -from __future__ import unicode_literals - from functools import reduce from ckeditor_uploader import views as cku_views diff --git a/modoboa/urls_api.py b/modoboa/urls_api.py index ea1770cda..6c223f539 100644 --- a/modoboa/urls_api.py +++ b/modoboa/urls_api.py @@ -1,9 +1,5 @@ -# -*- coding: utf-8 -*- - """External API urls.""" -from __future__ import unicode_literals - from django.conf.urls import include, url from modoboa.core.extensions import exts_pool diff --git a/mysql-requirements.txt b/mysql-requirements.txt index 8786ce81c..ea498b097 100644 --- a/mysql-requirements.txt +++ b/mysql-requirements.txt @@ -1 +1 @@ -mysqlclient<=1.3.99 +mysqlclient<=1.4.99 diff --git a/requirements.txt b/requirements.txt index eb80cd838..5f09d4a98 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,24 +1,23 @@ django>=1.11.8,<=1.11.99 -django-braces==1.11.0 -django-ckeditor==5.2.2 -django-reversion==2.0.12 +django-braces==1.14.0 +django-ckeditor==5.8.0 +django-reversion==3.0.5 django-subcommand2==0.1.1 django-xforwardedfor-middleware==2.0 dj-database-url coreapi==2.3.3 -coreapi-cli==1.0.6 -djangorestframework==3.7.3 +coreapi-cli==1.0.9 +djangorestframework>=3.9,<3.10 -# bcrypt requires libffi-dev -bcrypt==3.1.4 -dnspython==1.15.0 +passlib==1.7.2 +bcrypt # Requires libffi-dev and python-dev + +dnspython==1.16.0 feedparser==5.2.1 gevent==1.4.0 -ipaddress; python_version < '3.3' jsonfield==2.0.2 -passlib==1.7.1 Pillow # Optional dependency for django-ckeditor progressbar33==2.4 py-dateutil==2.2 @@ -27,5 +26,4 @@ pytz requests rfc6266 lxml -backports.csv; python_version < '3' chardet diff --git a/setup.cfg b/setup.cfg index 6f8d0cca9..427c34916 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,3 @@ -[bdist_wheel] -universal = 1 - [isort] atomic = true combine_as_imports = true diff --git a/setup.py b/setup.py index 6acb51e3b..fba4f5548 100644 --- a/setup.py +++ b/setup.py @@ -1,5 +1,4 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- """ A setuptools based setup module. @@ -8,9 +7,6 @@ See: https://packaging.python.org/en/latest/distributing.html """ -from __future__ import unicode_literals - -import io from os import path try: @@ -42,7 +38,7 @@ if __name__ == "__main__": path.join(HERE, "postgresql-requirements.txt")) LDAP_REQUIRES = get_requirements(path.join(HERE, "ldap-requirements.txt")) - with io.open(path.join(HERE, "README.rst"), encoding="utf-8") as readme: + with open(path.join(HERE, "README.rst")) as readme: LONG_DESCRIPTION = readme.read() setup( @@ -60,12 +56,10 @@ if __name__ == "__main__": "Intended Audience :: System Administrators", "License :: OSI Approved :: ISC License (ISCL)", "Operating System :: OS Independent", - "Programming Language :: Python :: 2", - "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", "Topic :: Communications :: Email", "Topic :: Internet :: WWW/HTTP", ], @@ -76,6 +70,7 @@ if __name__ == "__main__": scripts=["bin/modoboa-admin.py"], install_requires=INSTALL_REQUIRES, use_scm_version=True, + python_requires=">=3.4", setup_requires=["setuptools_scm"], extras_require={ "ldap": LDAP_REQUIRES, diff --git a/test-requirements.txt b/test-requirements.txt index 2b7bf52d0..213307c99 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -1,6 +1,5 @@ argon2-cffi>=16.1.0 factory-boy>=2.4 -mock==2.0.0; python_version < '3.3' -httmock==1.2.5 -testfixtures==4.7.0 +httmock==1.3.0 +testfixtures==6.10.3 tox diff --git a/tests.py b/tests.py index 5177a3ec3..d34d331d3 100644 --- a/tests.py +++ b/tests.py @@ -1,6 +1,3 @@ -# coding: utf-8 -from __future__ import unicode_literals - import os import tempfile import unittest diff --git a/tox.ini b/tox.ini index 523669065..acb3a43a4 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py{27,35,36,37} +envlist = py{35,36,37} [testenv] changedir = test_project