diff --git a/bin/modoboa-admin.py b/bin/modoboa-admin.py index a637e52c6..78de64d39 100644 --- a/bin/modoboa-admin.py +++ b/bin/modoboa-admin.py @@ -7,4 +7,3 @@ from modoboa.core.commands import handle_command_line if __name__ == "__main__": handle_command_line() - diff --git a/doc/conf.py b/doc/conf.py index dcc403c67..109ceb399 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -11,7 +11,8 @@ # All configuration values have a default; values that are commented out # serve to show the default. -import sys, os +import os +import sys # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the diff --git a/modoboa/__init__.py b/modoboa/__init__.py index 5d2abec9b..ad361c484 100644 --- a/modoboa/__init__.py +++ b/modoboa/__init__.py @@ -4,8 +4,7 @@ from __future__ import unicode_literals -from pkg_resources import get_distribution, DistributionNotFound - +from pkg_resources import DistributionNotFound, get_distribution try: __version__ = get_distribution(__name__).version diff --git a/modoboa/admin/api.py b/modoboa/admin/api.py index 4afb9065a..30c0c33d7 100644 --- a/modoboa/admin/api.py +++ b/modoboa/admin/api.py @@ -3,19 +3,16 @@ 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.exceptions import ParseError -from rest_framework.permissions import IsAuthenticated, DjangoModelPermissions +from rest_framework.permissions import DjangoModelPermissions, IsAuthenticated from rest_framework.response import Response from modoboa.core import models as core_models - -from . import models -from . import serializers +from . import models, serializers class DomainViewSet(viewsets.ModelViewSet): diff --git a/modoboa/admin/app_settings.py b/modoboa/admin/app_settings.py index a72dd7fff..88c6e153e 100644 --- a/modoboa/admin/app_settings.py +++ b/modoboa/admin/app_settings.py @@ -6,13 +6,12 @@ import os from django import forms from django.conf import settings -from django.utils.translation import ugettext as _, ugettext_lazy from django.utils.encoding import force_text +from django.utils.translation import ugettext as _, ugettext_lazy -from modoboa.lib.form_utils import YesNoField, SeparatorField +from modoboa.lib.form_utils import SeparatorField, YesNoField from modoboa.lib.sysutils import exec_cmd from modoboa.parameters import forms as param_forms - from . import constants diff --git a/modoboa/admin/constants.py b/modoboa/admin/constants.py index 372f1ef20..c009976fe 100644 --- a/modoboa/admin/constants.py +++ b/modoboa/admin/constants.py @@ -4,7 +4,6 @@ from __future__ import unicode_literals from django.utils.translation import ugettext_lazy as _ - DNSBL_PROVIDERS = [ "aspews.ext.sorbs.net", "b.barracudacentral.org", diff --git a/modoboa/admin/forms/__init__.py b/modoboa/admin/forms/__init__.py index 263ea5808..aa342d700 100644 --- a/modoboa/admin/forms/__init__.py +++ b/modoboa/admin/forms/__init__.py @@ -1,16 +1,16 @@ from __future__ import unicode_literals -from .domain import ( - DomainFormGeneral, DomainFormOptions, DomainForm, DomainWizard -) from .account import ( - AccountFormGeneral, AccountFormMail, AccountPermissionsForm, - AccountForm, AccountWizard + AccountForm, AccountFormGeneral, AccountFormMail, AccountPermissionsForm, + AccountWizard ) from .alias import AliasForm +from .domain import ( + DomainForm, DomainFormGeneral, DomainFormOptions, DomainWizard +) +from .export import ExportDataForm, ExportDomainsForm, ExportIdentitiesForm from .forward import ForwardForm from .import_ import ImportDataForm, ImportIdentitiesForm -from .export import ExportDataForm, ExportDomainsForm, ExportIdentitiesForm __all__ = [ "DomainFormGeneral", "DomainFormOptions", "DomainForm", diff --git a/modoboa/admin/forms/account.py b/modoboa/admin/forms/account.py index a2987fa8c..e98d30144 100644 --- a/modoboa/admin/forms/account.py +++ b/modoboa/admin/forms/account.py @@ -7,17 +7,15 @@ from functools import reduce from django import forms from django.conf import settings +from django.contrib.auth import password_validation from django.http import QueryDict from django.urls import reverse from django.utils.translation import ugettext as _, ugettext_lazy -from django.contrib.auth import password_validation - from modoboa.core import signals as core_signals from modoboa.core.models import User +from modoboa.lib import exceptions as lib_exceptions, fields as lib_fields from modoboa.lib.email_utils import split_mailbox -from modoboa.lib import exceptions as lib_exceptions -from modoboa.lib import fields as lib_fields from modoboa.lib.form_utils import ( DynamicForm, TabForms, WizardForm, WizardStep ) @@ -25,10 +23,7 @@ from modoboa.lib.permissions import get_account_roles from modoboa.lib.validators import validate_utf8_email from modoboa.lib.web_utils import render_to_json_response from modoboa.parameters import tools as param_tools - -from .. import lib -from .. import models -from .. import signals +from .. import lib, models, signals class AccountFormGeneral(forms.ModelForm): diff --git a/modoboa/admin/forms/alias.py b/modoboa/admin/forms/alias.py index 12b306442..866292b3e 100644 --- a/modoboa/admin/forms/alias.py +++ b/modoboa/admin/forms/alias.py @@ -9,14 +9,10 @@ from django.http import QueryDict from django.utils.translation import ugettext as _, ugettext_lazy from modoboa.core import signals as core_signals -from modoboa.lib import exceptions as lib_exceptions +from modoboa.lib import exceptions as lib_exceptions, fields as lib_fields from modoboa.lib.email_utils import split_mailbox -from modoboa.lib import fields as lib_fields -from modoboa.lib.form_utils import ( - DynamicForm -) - -from ..models import Domain, Alias +from modoboa.lib.form_utils import DynamicForm +from ..models import Alias, Domain class AliasForm(forms.ModelForm, DynamicForm): diff --git a/modoboa/admin/forms/domain.py b/modoboa/admin/forms/domain.py index 7b2a0ce69..7ee2ad6c7 100644 --- a/modoboa/admin/forms/domain.py +++ b/modoboa/admin/forms/domain.py @@ -5,28 +5,22 @@ from __future__ import unicode_literals from functools import reduce from django import forms -from django.urls import reverse from django.http import QueryDict -from django.utils.translation import ugettext as _, ugettext_lazy +from django.urls import reverse from django.utils.encoding import force_text +from django.utils.translation import ugettext as _, ugettext_lazy from modoboa.core import signals as core_signals from modoboa.core.models import User from modoboa.lib.exceptions import Conflict from modoboa.lib.fields import DomainNameField from modoboa.lib.form_utils import ( - YesNoField, WizardForm, WizardStep, DynamicForm, TabForms + DynamicForm, TabForms, WizardForm, WizardStep, YesNoField ) from modoboa.lib.web_utils import render_to_json_response from modoboa.parameters import tools as param_tools - -from .. import constants -from .. import lib -from .. import signals - -from ..models import ( - Domain, DomainAlias, Mailbox, Alias -) +from .. import constants, lib, signals +from ..models import Alias, Domain, DomainAlias, Mailbox class DomainFormGeneral(forms.ModelForm, DynamicForm): diff --git a/modoboa/admin/handlers.py b/modoboa/admin/handlers.py index bc673e85a..81ec67a3c 100644 --- a/modoboa/admin/handlers.py +++ b/modoboa/admin/handlers.py @@ -2,26 +2,18 @@ from __future__ import unicode_literals -from django.urls import reverse +from django.contrib.contenttypes.models import ContentType from django.db.models import signals from django.dispatch import receiver +from django.urls import reverse from django.utils.translation import ugettext as _ -from django.contrib.contenttypes.models import ContentType - -from modoboa.core import models as core_models -from modoboa.core import signals as core_signals +from modoboa.core import models as core_models, signals as core_signals +from modoboa.lib import exceptions, permissions, signals as lib_signals from modoboa.lib.cryptutils import encrypt from modoboa.lib.email_utils import split_mailbox -from modoboa.lib import exceptions -from modoboa.lib import permissions -from modoboa.lib import signals as lib_signals from modoboa.parameters import tools as param_tools - -from . import signals as admin_signals -from . import lib -from . import models -from . import postfix_maps +from . import lib, models, postfix_maps, signals as admin_signals @receiver(signals.post_save, sender=models.Domain) diff --git a/modoboa/admin/lib.py b/modoboa/admin/lib.py index f2541946d..1f9a52b9f 100644 --- a/modoboa/admin/lib.py +++ b/modoboa/admin/lib.py @@ -4,30 +4,28 @@ from __future__ import unicode_literals -from functools import wraps import ipaddress -from itertools import chain import logging import random import socket import string +from functools import wraps +from itertools import chain -from dns.name import IDNA_2008_UTS_46 import dns.resolver +from dns.name import IDNA_2008_UTS_46 from django.contrib.contenttypes.models import ContentType from django.db.models import Q from django.utils.encoding import smart_text from django.utils.translation import ugettext as _ -from modoboa.core.models import User from modoboa.core import signals as core_signals +from modoboa.core.models import User from modoboa.lib.exceptions import PermDeniedException from modoboa.parameters import tools as param_tools - -from .models import Domain, DomainAlias, Alias - from . import signals +from .models import Alias, Domain, DomainAlias def needs_mailbox(): diff --git a/modoboa/admin/management/commands/handle_mailbox_operations.py b/modoboa/admin/management/commands/handle_mailbox_operations.py index a5f86613d..e6a0b256b 100644 --- a/modoboa/admin/management/commands/handle_mailbox_operations.py +++ b/modoboa/admin/management/commands/handle_mailbox_operations.py @@ -1,6 +1,6 @@ """A management command to apply mailbox operations.""" -from __future__ import unicode_literals, print_function +from __future__ import print_function, unicode_literals import logging import os @@ -8,10 +8,9 @@ import shutil from django.core.management.base import BaseCommand -from modoboa.parameters import tools as param_tools -from modoboa.lib.sysutils import exec_cmd from modoboa.lib.exceptions import InternalError - +from modoboa.lib.sysutils import exec_cmd +from modoboa.parameters import tools as param_tools from ...app_settings import load_admin_settings from ...models import MailboxOperation diff --git a/modoboa/admin/management/commands/modo.py b/modoboa/admin/management/commands/modo.py index d395c4c19..1d95fa0bc 100644 --- a/modoboa/admin/management/commands/modo.py +++ b/modoboa/admin/management/commands/modo.py @@ -4,10 +4,10 @@ from __future__ import unicode_literals from subcommand.base import SubcommandCommand -from .subcommands._mx import CheckMXRecords from .subcommands._export import ExportCommand from .subcommands._import import ImportCommand from .subcommands._manage_dkim_keys import ManageDKIMKeys +from .subcommands._mx import CheckMXRecords from .subcommands._repair import Repair diff --git a/modoboa/admin/management/commands/subcommands/_export.py b/modoboa/admin/management/commands/subcommands/_export.py index ed53b8026..3b9fdb722 100644 --- a/modoboa/admin/management/commands/subcommands/_export.py +++ b/modoboa/admin/management/commands/subcommands/_export.py @@ -2,13 +2,14 @@ from __future__ import unicode_literals -from backports import csv import sys +from backports import csv + from django.core.management.base import BaseCommand -from modoboa.core.models import User from modoboa.core.extensions import exts_pool +from modoboa.core.models import User from .... import models diff --git a/modoboa/admin/management/commands/subcommands/_import.py b/modoboa/admin/management/commands/subcommands/_import.py index 80e3a6ad5..705720aa0 100644 --- a/modoboa/admin/management/commands/subcommands/_import.py +++ b/modoboa/admin/management/commands/subcommands/_import.py @@ -2,18 +2,17 @@ from __future__ import unicode_literals -from backports import csv import io import os import progressbar +from backports import csv from django.core.management.base import BaseCommand, CommandError from modoboa.core import models as core_models from modoboa.core.extensions import exts_pool from modoboa.lib.exceptions import Conflict - from .... import signals diff --git a/modoboa/admin/management/commands/subcommands/_manage_dkim_keys.py b/modoboa/admin/management/commands/subcommands/_manage_dkim_keys.py index bae55519c..daa3f232d 100644 --- a/modoboa/admin/management/commands/subcommands/_manage_dkim_keys.py +++ b/modoboa/admin/management/commands/subcommands/_manage_dkim_keys.py @@ -9,7 +9,6 @@ from django.utils.encoding import smart_text from modoboa.lib import sysutils from modoboa.parameters import tools as param_tools - from .... import models diff --git a/modoboa/admin/management/commands/subcommands/_mx.py b/modoboa/admin/management/commands/subcommands/_mx.py index b7ce24fd1..dc1a26dab 100644 --- a/modoboa/admin/management/commands/subcommands/_mx.py +++ b/modoboa/admin/management/commands/subcommands/_mx.py @@ -18,8 +18,7 @@ from django.utils.encoding import smart_text from django.utils.functional import cached_property from django.utils.translation import ugettext as _ -from modoboa.admin import constants -from modoboa.admin import models +from modoboa.admin import constants, models from modoboa.parameters import tools as param_tools diff --git a/modoboa/admin/management/commands/subcommands/_repair.py b/modoboa/admin/management/commands/subcommands/_repair.py index 1406b683d..e27686cc4 100644 --- a/modoboa/admin/management/commands/subcommands/_repair.py +++ b/modoboa/admin/management/commands/subcommands/_repair.py @@ -6,11 +6,9 @@ from django.conf import settings from django.core.management.base import BaseCommand from django.utils.encoding import smart_str -from modoboa.lib.permissions import grant_access_to_object -from modoboa.lib.permissions import get_object_owner - -from modoboa.core.models import User from modoboa.admin import models +from modoboa.core.models import User +from modoboa.lib.permissions import get_object_owner, grant_access_to_object known_problems = [] diff --git a/modoboa/admin/models/__init__.py b/modoboa/admin/models/__init__.py index ead319150..4fcd82289 100644 --- a/modoboa/admin/models/__init__.py +++ b/modoboa/admin/models/__init__.py @@ -2,12 +2,12 @@ from __future__ import unicode_literals +from .alias import Alias, AliasRecipient from .base import AdminObject from .domain import Domain from .domain_alias import DomainAlias -from .mailbox import Mailbox, Quota, MailboxOperation, SenderAddress +from .mailbox import Mailbox, MailboxOperation, Quota, SenderAddress from .mxrecord import DNSBLResult, MXRecord -from .alias import Alias, AliasRecipient __all__ = [ "AdminObject", diff --git a/modoboa/admin/models/alias.py b/modoboa/admin/models/alias.py index b689eb841..48c1fde2b 100644 --- a/modoboa/admin/models/alias.py +++ b/modoboa/admin/models/alias.py @@ -5,25 +5,24 @@ from __future__ import unicode_literals import hashlib import random -from django.urls import reverse +from reversion import revisions as reversion + from django.db import models +from django.urls import reverse from django.utils.encoding import ( - python_2_unicode_compatible, smart_text, force_str, force_bytes + force_bytes, force_str, python_2_unicode_compatible, smart_text ) from django.utils.translation import ugettext as _, ugettext_lazy -from reversion import revisions as reversion - from modoboa.core import signals as core_signals from modoboa.lib.email_utils import split_mailbox from modoboa.lib.exceptions import ( - PermDeniedException, BadRequest, Conflict, NotFound + BadRequest, Conflict, NotFound, PermDeniedException ) - +from .. import signals from .base import AdminObject from .domain import Domain from .mailbox import Mailbox -from .. import signals @python_2_unicode_compatible diff --git a/modoboa/admin/models/base.py b/modoboa/admin/models/base.py index 9ab6fc6c8..1393945d0 100644 --- a/modoboa/admin/models/base.py +++ b/modoboa/admin/models/base.py @@ -2,11 +2,10 @@ from __future__ import unicode_literals +from django.contrib.contenttypes.fields import GenericRelation from django.db import models from django.utils import timezone -from django.contrib.contenttypes.fields import GenericRelation - from modoboa.core import models as core_models from modoboa.lib.permissions import ( grant_access_to_object, ungrant_access_to_object diff --git a/modoboa/admin/models/domain.py b/modoboa/admin/models/domain.py index ff2c72f27..74eda5bf0 100644 --- a/modoboa/admin/models/domain.py +++ b/modoboa/admin/models/domain.py @@ -4,23 +4,22 @@ from __future__ import unicode_literals import datetime +from reversion import revisions as reversion + from django.db import models from django.utils import timezone from django.utils.encoding import ( - python_2_unicode_compatible, smart_text, force_text + force_text, python_2_unicode_compatible, smart_text ) from django.utils.functional import cached_property from django.utils.translation import ugettext as _, ugettext_lazy -from reversion import revisions as reversion - from modoboa.core import signals as core_signals from modoboa.core.models import User from modoboa.lib.exceptions import BadRequest, Conflict from modoboa.parameters import tools as param_tools - -from .base import AdminObject from .. import constants +from .base import AdminObject @python_2_unicode_compatible diff --git a/modoboa/admin/models/domain_alias.py b/modoboa/admin/models/domain_alias.py index 508e3a91c..590241563 100644 --- a/modoboa/admin/models/domain_alias.py +++ b/modoboa/admin/models/domain_alias.py @@ -2,18 +2,15 @@ from __future__ import unicode_literals +from reversion import revisions as reversion + +from django.contrib.contenttypes.fields import GenericRelation from django.db import models from django.utils.encoding import python_2_unicode_compatible, smart_text from django.utils.translation import ugettext as _, ugettext_lazy -from django.contrib.contenttypes.fields import GenericRelation - -from reversion import revisions as reversion - -from modoboa.core import models as core_models -from modoboa.core import signals as core_signals +from modoboa.core import models as core_models, signals as core_signals from modoboa.lib.exceptions import BadRequest, Conflict - from .base import AdminObject from .domain import Domain diff --git a/modoboa/admin/models/mailbox.py b/modoboa/admin/models/mailbox.py index 278cc41c9..0b0624714 100644 --- a/modoboa/admin/models/mailbox.py +++ b/modoboa/admin/models/mailbox.py @@ -5,6 +5,8 @@ from __future__ import unicode_literals import os import pwd +from reversion import revisions as reversion + from django.contrib.contenttypes.models import ContentType from django.db import models from django.db.models import Q @@ -12,14 +14,11 @@ from django.db.models.manager import Manager from django.utils.encoding import python_2_unicode_compatible, smart_text from django.utils.translation import ugettext as _, ugettext_lazy -from reversion import revisions as reversion - from modoboa.core.models import User from modoboa.lib import exceptions as lib_exceptions from modoboa.lib.email_utils import split_mailbox from modoboa.lib.sysutils import exec_cmd from modoboa.parameters import tools as param_tools - from .base import AdminObject from .domain import Domain diff --git a/modoboa/admin/serializers.py b/modoboa/admin/serializers.py index 4d28233da..68558007b 100644 --- a/modoboa/admin/serializers.py +++ b/modoboa/admin/serializers.py @@ -3,25 +3,24 @@ from __future__ import unicode_literals from django.conf import settings +from django.contrib.auth import password_validation from django.core.exceptions import ValidationError from django.shortcuts import get_object_or_404 -from django.utils.translation import ugettext as _, ugettext_lazy from django.utils.encoding import force_text - -from django.contrib.auth import password_validation +from django.utils.translation import ugettext as _, ugettext_lazy from rest_framework import serializers from modoboa.admin import models as admin_models -from modoboa.core import constants as core_constants -from modoboa.core import models as core_models -from modoboa.core import signals as core_signals -from modoboa.lib import exceptions as lib_exceptions -from modoboa.lib import permissions, email_utils, fields as lib_fields +from modoboa.core import ( + constants as core_constants, models as core_models, signals as core_signals +) +from modoboa.lib import ( + email_utils, exceptions as lib_exceptions, fields as lib_fields, + permissions +) from modoboa.parameters import tools as param_tools - -from . import lib -from . import models +from . import lib, models class DomainSerializer(serializers.ModelSerializer): diff --git a/modoboa/admin/templatetags/admin_tags.py b/modoboa/admin/templatetags/admin_tags.py index 7f0601230..83c96e7dd 100644 --- a/modoboa/admin/templatetags/admin_tags.py +++ b/modoboa/admin/templatetags/admin_tags.py @@ -5,15 +5,14 @@ from __future__ import unicode_literals from functools import reduce from django import template -from django.urls import reverse from django.template.loader import render_to_string +from django.urls import reverse from django.utils.safestring import mark_safe from django.utils.translation import ugettext as _, ugettext_lazy from modoboa.core import signals as core_signals from modoboa.lib.templatetags.lib_tags import render_link from modoboa.lib.web_utils import render_actions - from .. import signals register = template.Library() diff --git a/modoboa/admin/tests/test_account.py b/modoboa/admin/tests/test_account.py index 1428c3d47..d68f78302 100644 --- a/modoboa/admin/tests/test_account.py +++ b/modoboa/admin/tests/test_account.py @@ -4,18 +4,15 @@ from __future__ import unicode_literals from unittest import skipIf -from django.urls import reverse from django.test import override_settings +from django.urls import reverse from modoboa.core import factories as core_factories -from modoboa.core.tests import test_ldap from modoboa.core.models import User -from modoboa.lib.tests import ModoTestCase -from modoboa.lib.tests import NO_LDAP +from modoboa.core.tests import test_ldap +from modoboa.lib.tests import NO_LDAP, ModoTestCase from modoboa.limits import utils as limits_utils - -from .. import factories -from .. import models +from .. import factories, models class AuthenticationTestCase(ModoTestCase): diff --git a/modoboa/admin/tests/test_alias.py b/modoboa/admin/tests/test_alias.py index 3df90621d..24dfdb727 100644 --- a/modoboa/admin/tests/test_alias.py +++ b/modoboa/admin/tests/test_alias.py @@ -2,16 +2,18 @@ from __future__ import unicode_literals -"""Admin test cases.""" - from django.urls import reverse from modoboa.core.models import User from modoboa.lib.tests import ModoTestCase - from .. import factories from ..models import Alias, AliasRecipient, Domain +"""Admin test cases.""" + + + + class AliasTestCase(ModoTestCase): diff --git a/modoboa/admin/tests/test_api.py b/modoboa/admin/tests/test_api.py index 060ef940d..fdcfbdf61 100644 --- a/modoboa/admin/tests/test_api.py +++ b/modoboa/admin/tests/test_api.py @@ -16,13 +16,10 @@ from django.urls import reverse from rest_framework.authtoken.models import Token from modoboa.admin import models as admin_models -from modoboa.core import factories as core_factories -from modoboa.core import models as core_models +from modoboa.core import factories as core_factories, models as core_models from modoboa.lib.tests import ModoAPITestCase - from . import utils -from .. import factories -from .. import models +from .. import factories, models class DomainAPITestCase(ModoAPITestCase): diff --git a/modoboa/admin/tests/test_domain.py b/modoboa/admin/tests/test_domain.py index f009a8609..3e3849e36 100644 --- a/modoboa/admin/tests/test_domain.py +++ b/modoboa/admin/tests/test_domain.py @@ -20,10 +20,9 @@ from modoboa.core import factories as core_factories from modoboa.core.models import User from modoboa.core.tests.test_views import SETTINGS_SAMPLE from modoboa.lib.tests import ModoTestCase - from . import utils from .. import factories -from ..models import Domain, Alias +from ..models import Alias, Domain class DomainTestCase(ModoTestCase): diff --git a/modoboa/admin/tests/test_domain_alias.py b/modoboa/admin/tests/test_domain_alias.py index 4c11bb7d7..7ba2c5f51 100644 --- a/modoboa/admin/tests/test_domain_alias.py +++ b/modoboa/admin/tests/test_domain_alias.py @@ -5,9 +5,8 @@ from __future__ import unicode_literals from django.urls import reverse from modoboa.lib.tests import ModoTestCase - from .. import factories -from ..models import Domain, DomainAlias, Alias +from ..models import Alias, Domain, DomainAlias class DomainAliasTestCase(ModoTestCase): diff --git a/modoboa/admin/tests/test_export.py b/modoboa/admin/tests/test_export.py index c48e3486d..d229e5881 100644 --- a/modoboa/admin/tests/test_export.py +++ b/modoboa/admin/tests/test_export.py @@ -8,9 +8,7 @@ from django.urls import reverse from django.utils.encoding import force_text from modoboa.lib.tests import ModoTestCase - -from .. import factories -from .. import models +from .. import factories, models class ExportTestCase(ModoTestCase): diff --git a/modoboa/admin/tests/test_import_.py b/modoboa/admin/tests/test_import_.py index a11dcef8a..f5865703c 100644 --- a/modoboa/admin/tests/test_import_.py +++ b/modoboa/admin/tests/test_import_.py @@ -11,10 +11,9 @@ from django.urls import reverse from modoboa.core import factories as core_factories from modoboa.core.models import User from modoboa.lib.tests import ModoTestCase - from . import utils from .. import factories -from ..models import Domain, Alias, DomainAlias +from ..models import Alias, Domain, DomainAlias class ImportTestCase(ModoTestCase): diff --git a/modoboa/admin/tests/test_mailbox_operations.py b/modoboa/admin/tests/test_mailbox_operations.py index 81c02de97..a6a8e7597 100644 --- a/modoboa/admin/tests/test_mailbox_operations.py +++ b/modoboa/admin/tests/test_mailbox_operations.py @@ -9,13 +9,11 @@ import tempfile import mock from django.core.management import call_command -from django.urls import reverse from django.test import override_settings +from django.urls import reverse from modoboa.lib.tests import ModoTestCase - -from .. import factories -from .. import models +from .. import factories, models @override_settings( diff --git a/modoboa/admin/tests/test_mx.py b/modoboa/admin/tests/test_mx.py index 55969f857..10e1e828c 100644 --- a/modoboa/admin/tests/test_mx.py +++ b/modoboa/admin/tests/test_mx.py @@ -8,19 +8,16 @@ import dns.resolver from mock import patch from testfixtures import LogCapture -from django.core import mail -from django.core import management +from django.core import mail, management from django.test import override_settings from django.urls import reverse from django.utils.translation import ugettext as _ from modoboa.core import factories as core_factories from modoboa.lib.tests import ModoTestCase - from . import utils -from .. import factories +from .. import factories, models from ..lib import get_domain_mx_list -from .. import models class MXTestCase(ModoTestCase): diff --git a/modoboa/admin/tests/test_password_schemes.py b/modoboa/admin/tests/test_password_schemes.py index 99392ccef..4c2449bbf 100644 --- a/modoboa/admin/tests/test_password_schemes.py +++ b/modoboa/admin/tests/test_password_schemes.py @@ -4,7 +4,6 @@ from django.urls import reverse from modoboa.core.models import User from modoboa.lib.tests import ModoTestCase - from .. import factories diff --git a/modoboa/admin/tests/test_repair.py b/modoboa/admin/tests/test_repair.py index 623892ce8..cef009468 100644 --- a/modoboa/admin/tests/test_repair.py +++ b/modoboa/admin/tests/test_repair.py @@ -4,12 +4,9 @@ from __future__ import unicode_literals from django.core import management -from modoboa.lib.permissions import get_object_owner -from modoboa.lib.permissions import ObjectAccess +from modoboa.lib.permissions import ObjectAccess, get_object_owner from modoboa.lib.tests import ModoTestCase - -from .. import factories -from .. import models +from .. import factories, models class RepairTestCase(ModoTestCase): diff --git a/modoboa/admin/tests/test_user.py b/modoboa/admin/tests/test_user.py index 1c55760ff..671026e02 100644 --- a/modoboa/admin/tests/test_user.py +++ b/modoboa/admin/tests/test_user.py @@ -6,7 +6,6 @@ from django.urls import reverse from modoboa.core.models import User from modoboa.lib.tests import ModoTestCase - from ..factories import populate_database from ..models import Alias diff --git a/modoboa/admin/tests/utils.py b/modoboa/admin/tests/utils.py index 8d5d64c26..bf1887465 100644 --- a/modoboa/admin/tests/utils.py +++ b/modoboa/admin/tests/utils.py @@ -8,7 +8,7 @@ import socket from dns.name import Name from dns.rdtypes.ANY.MX import MX -from dns.resolver import NoAnswer, NoNameservers, NXDOMAIN, Timeout +from dns.resolver import NXDOMAIN, NoAnswer, NoNameservers, Timeout _MX_RECORD_1 = MX("IN", "MX", 10, Name("mx.example.com".split("."))) _MX_RECORD_2 = MX("IN", "MX", 10, Name("mx2.example.com".split("."))) diff --git a/modoboa/admin/urls.py b/modoboa/admin/urls.py index 3a9e2c38f..0c3420de3 100644 --- a/modoboa/admin/urls.py +++ b/modoboa/admin/urls.py @@ -6,12 +6,10 @@ from __future__ import unicode_literals from django.conf.urls import url from . import views -from .views import import_ as import_views -from .views import alias as alias_views -from .views import domain as domain_views -from .views import export as export_views -from .views import identity as identity_views - +from .views import ( + alias as alias_views, domain as domain_views, export as export_views, + identity as identity_views, import_ as import_views +) urlpatterns = [ url(r'^$', domain_views.index, name="index"), diff --git a/modoboa/admin/urls_api.py b/modoboa/admin/urls_api.py index 92e41b86c..82a922fe1 100644 --- a/modoboa/admin/urls_api.py +++ b/modoboa/admin/urls_api.py @@ -6,7 +6,6 @@ from rest_framework import routers from . import api - router = routers.SimpleRouter() router.register(r"domains", api.DomainViewSet, base_name="domain") router.register( diff --git a/modoboa/admin/views/__init__.py b/modoboa/admin/views/__init__.py index 8c499c185..2a79ac999 100644 --- a/modoboa/admin/views/__init__.py +++ b/modoboa/admin/views/__init__.py @@ -3,10 +3,9 @@ from __future__ import unicode_literals from .alias import AliasDetailView -from .identity import AccountDetailView from .dns import DNSBLDomainDetailView, MXDomainDetailView from .domain import DomainDetailView - +from .identity import AccountDetailView __all__ = [ "AccountDetailView", diff --git a/modoboa/admin/views/alias.py b/modoboa/admin/views/alias.py index 5a4151df2..da961753e 100644 --- a/modoboa/admin/views/alias.py +++ b/modoboa/admin/views/alias.py @@ -2,23 +2,19 @@ from __future__ import unicode_literals -from django.urls import reverse +from reversion import revisions as reversion + +from django.contrib.auth import mixins as auth_mixins +from django.contrib.auth.decorators import login_required, permission_required from django.db import IntegrityError from django.shortcuts import render +from django.urls import reverse from django.utils.translation import ugettext as _, ungettext from django.views import generic -from django.contrib.auth import mixins as auth_mixins -from django.contrib.auth.decorators import ( - login_required, permission_required -) - -from reversion import revisions as reversion - from modoboa.core import signals as core_signals -from modoboa.lib.exceptions import PermDeniedException, Conflict +from modoboa.lib.exceptions import Conflict, PermDeniedException from modoboa.lib.web_utils import render_to_json_response - from ..forms import AliasForm from ..models import Alias diff --git a/modoboa/admin/views/dns.py b/modoboa/admin/views/dns.py index 591f3f3e5..db0b71420 100644 --- a/modoboa/admin/views/dns.py +++ b/modoboa/admin/views/dns.py @@ -2,11 +2,9 @@ from __future__ import unicode_literals -from django.views import generic - -from django.utils.translation import ugettext as _ - from django.contrib.auth import mixins as auth_mixins +from django.utils.translation import ugettext as _ +from django.views import generic from .. import models diff --git a/modoboa/admin/views/domain.py b/modoboa/admin/views/domain.py index e0b970d5a..ffa92f5df 100644 --- a/modoboa/admin/views/domain.py +++ b/modoboa/admin/views/domain.py @@ -4,31 +4,29 @@ from __future__ import unicode_literals from functools import reduce -from django.urls import reverse -from django.db.models import Sum -from django.http import HttpResponseRedirect -from django.shortcuts import render -from django.template.loader import render_to_string -from django.utils.translation import ugettext as _, ungettext -from django.views import generic -from django.views.decorators.csrf import ensure_csrf_cookie +from reversion import revisions as reversion from django.contrib.auth import mixins as auth_mixins from django.contrib.auth.decorators import ( login_required, permission_required, user_passes_test ) - -from reversion import revisions as reversion +from django.db.models import Sum +from django.http import HttpResponseRedirect +from django.shortcuts import render +from django.template.loader import render_to_string +from django.urls import reverse +from django.utils.translation import ugettext as _, ungettext +from django.views import generic +from django.views.decorators.csrf import ensure_csrf_cookie from modoboa.core import signals as core_signals -from modoboa.lib.web_utils import render_to_json_response from modoboa.lib.exceptions import PermDeniedException -from modoboa.lib.listing import get_sort_order, get_listing_page - +from modoboa.lib.listing import get_listing_page, get_sort_order +from modoboa.lib.web_utils import render_to_json_response +from .. import signals from ..forms import DomainForm, DomainWizard from ..lib import get_domains from ..models import Domain, Mailbox -from .. import signals @login_required diff --git a/modoboa/admin/views/export.py b/modoboa/admin/views/export.py index 8cbfa4af8..8c8019fa7 100644 --- a/modoboa/admin/views/export.py +++ b/modoboa/admin/views/export.py @@ -3,19 +3,18 @@ from __future__ import unicode_literals from backports import csv - from rfc6266 import build_header from django.contrib.auth.decorators import ( login_required, permission_required, user_passes_test ) -from django.urls import reverse from django.http import HttpResponse from django.shortcuts import render -from django.utils.translation import ugettext as _ +from django.urls import reverse from django.utils import six +from django.utils.translation import ugettext as _ -from ..forms import ExportIdentitiesForm, ExportDomainsForm +from ..forms import ExportDomainsForm, ExportIdentitiesForm from ..lib import get_domains, get_identities diff --git a/modoboa/admin/views/identity.py b/modoboa/admin/views/identity.py index 4f3ba61ab..9379c3777 100644 --- a/modoboa/admin/views/identity.py +++ b/modoboa/admin/views/identity.py @@ -2,32 +2,26 @@ from __future__ import unicode_literals +from reversion import revisions as reversion + +from django.contrib.auth import mixins as auth_mixins +from django.contrib.auth.decorators import ( + login_required, permission_required, user_passes_test +) from django.shortcuts import render from django.template.loader import render_to_string from django.utils.translation import ugettext as _, ungettext from django.views import generic from django.views.decorators.csrf import ensure_csrf_cookie -from django.contrib.auth import mixins as auth_mixins -from django.contrib.auth.decorators import ( - login_required, permission_required, user_passes_test -) - -from reversion import revisions as reversion - from modoboa.core.models import User -from modoboa.lib.exceptions import ( - PermDeniedException, BadRequest -) -from modoboa.lib.listing import ( - get_sort_order, get_listing_page -) +from modoboa.lib.exceptions import BadRequest, PermDeniedException +from modoboa.lib.listing import get_listing_page, get_sort_order from modoboa.lib.web_utils import render_to_json_response - +from .. import signals from ..forms import AccountForm, AccountWizard from ..lib import get_identities -from ..models import Mailbox, Domain -from .. import signals +from ..models import Domain, Mailbox @login_required diff --git a/modoboa/admin/views/import_.py b/modoboa/admin/views/import_.py index e05e858b1..7c6e383e3 100644 --- a/modoboa/admin/views/import_.py +++ b/modoboa/admin/views/import_.py @@ -2,25 +2,23 @@ from __future__ import unicode_literals -from backports import csv - import io +from backports import csv +from reversion import revisions as reversion + from django.contrib.auth.decorators import ( login_required, permission_required, user_passes_test ) -from django.urls import reverse from django.db import transaction from django.shortcuts import render +from django.urls import reverse from django.utils.encoding import smart_text from django.utils.translation import ugettext as _ -from reversion import revisions as reversion - -from modoboa.lib.exceptions import ModoboaException, Conflict - -from ..forms import ImportIdentitiesForm, ImportDataForm +from modoboa.lib.exceptions import Conflict, ModoboaException from .. import signals +from ..forms import ImportDataForm, ImportIdentitiesForm @reversion.create_revision() diff --git a/modoboa/admin/views/user.py b/modoboa/admin/views/user.py index 072f68890..630e2967f 100644 --- a/modoboa/admin/views/user.py +++ b/modoboa/admin/views/user.py @@ -2,15 +2,13 @@ from __future__ import unicode_literals +from reversion import revisions as reversion + +from django.contrib.auth.decorators import login_required from django.template.loader import render_to_string from django.utils.translation import ugettext as _ -from django.contrib.auth.decorators import login_required - -from reversion import revisions as reversion - from modoboa.lib.web_utils import render_to_json_response - from ..forms import ForwardForm from ..lib import needs_mailbox from ..models import Alias diff --git a/modoboa/core/app_settings.py b/modoboa/core/app_settings.py index 8be3c572a..fb0488028 100644 --- a/modoboa/core/app_settings.py +++ b/modoboa/core/app_settings.py @@ -4,18 +4,15 @@ from __future__ import unicode_literals from django import forms from django.conf import settings -from django.utils.translation import ugettext as _, ugettext_lazy - from django.contrib.auth import password_validation +from django.utils.translation import ugettext as _, ugettext_lazy from modoboa.lib import fields as lib_fields from modoboa.lib.cryptutils import random_key from modoboa.lib.form_utils import ( - YesNoField, SeparatorField, HorizontalRadioSelect + HorizontalRadioSelect, SeparatorField, YesNoField ) -from modoboa.parameters import forms as param_forms -from modoboa.parameters import tools as param_tools - +from modoboa.parameters import forms as param_forms, tools as param_tools from . import constants diff --git a/modoboa/core/checks/settings_checks.py b/modoboa/core/checks/settings_checks.py index 797b96538..ebd09db14 100644 --- a/modoboa/core/checks/settings_checks.py +++ b/modoboa/core/checks/settings_checks.py @@ -6,7 +6,6 @@ from django.conf import settings from django.core.checks import Warning, register from django.utils.translation import ugettext as _ - W001 = Warning( _("You have USE_TZ set to False, this may result in issues during " "transitions between summer/winter time (ie the same local time occuring " diff --git a/modoboa/core/commands/__init__.py b/modoboa/core/commands/__init__.py index 6a25852a6..2c5a12529 100644 --- a/modoboa/core/commands/__init__.py +++ b/modoboa/core/commands/__init__.py @@ -1,6 +1,6 @@ # coding: utf-8 -from __future__ import unicode_literals, print_function +from __future__ import print_function, unicode_literals import argparse import os diff --git a/modoboa/core/commands/deploy.py b/modoboa/core/commands/deploy.py index 959b9c12b..a09c840e6 100644 --- a/modoboa/core/commands/deploy.py +++ b/modoboa/core/commands/deploy.py @@ -2,7 +2,7 @@ """A shortcut to deploy a fresh modoboa instance.""" -from __future__ import unicode_literals, print_function +from __future__ import print_function, unicode_literals import codecs import getpass @@ -10,23 +10,25 @@ import os import shutil import subprocess import sys - from os.path import isfile +import dj_database_url + +import django +from django.core import management +from django.template import Context, Template +from django.utils.encoding import smart_str + +from modoboa.core.commands import Command +from modoboa.lib.api_client import ModoAPIClient + try: import pip except ImportError: sys.stderr.write("Error: pip is required to install extensions.\n") sys.exit(2) -import django -from django.core import management -from django.template import Context, Template -from django.utils.encoding import smart_str -import dj_database_url -from modoboa.core.commands import Command -from modoboa.lib.api_client import ModoAPIClient if sys.version_info < (3, 0, 0): input = raw_input diff --git a/modoboa/core/commands/help.py b/modoboa/core/commands/help.py index d7257bc03..9799f379d 100644 --- a/modoboa/core/commands/help.py +++ b/modoboa/core/commands/help.py @@ -1,6 +1,6 @@ # coding: utf-8 -from __future__ import unicode_literals, print_function +from __future__ import print_function, unicode_literals import sys diff --git a/modoboa/core/forms.py b/modoboa/core/forms.py index 668eff33f..d2ce9c4a3 100644 --- a/modoboa/core/forms.py +++ b/modoboa/core/forms.py @@ -5,14 +5,12 @@ from __future__ import unicode_literals from django import forms +from django.contrib.auth import ( + forms as auth_forms, get_user_model, password_validation +) from django.db.models import Q from django.utils.translation import ugettext as _, ugettext_lazy -from django.contrib.auth import forms as auth_forms -from django.contrib.auth import get_user_model - -from django.contrib.auth import password_validation - from modoboa.core.models import User from modoboa.parameters import tools as param_tools diff --git a/modoboa/core/handlers.py b/modoboa/core/handlers.py index ea1084010..5d48ad3ea 100644 --- a/modoboa/core/handlers.py +++ b/modoboa/core/handlers.py @@ -4,24 +4,19 @@ from __future__ import unicode_literals import logging +from reversion import revisions as reversion +from reversion.models import Version + +from django.contrib.sites import models as sites_models from django.db.models import signals from django.dispatch import receiver from django.urls import reverse from django.utils.encoding import smart_text from django.utils.translation import ugettext as _ -from django.contrib.sites import models as sites_models - -from reversion import revisions as reversion -from reversion.models import Version - -from modoboa.lib import exceptions -from modoboa.lib import permissions +from modoboa.lib import exceptions, permissions from modoboa.lib.signals import get_request - -from . import models -from . import signals as core_signals -from . import utils +from . import models, signals as core_signals, utils @receiver(reversion.post_revision_commit) diff --git a/modoboa/core/management/commands/clean_inactive_accounts.py b/modoboa/core/management/commands/clean_inactive_accounts.py index 87f3dfab2..16fc826fe 100644 --- a/modoboa/core/management/commands/clean_inactive_accounts.py +++ b/modoboa/core/management/commands/clean_inactive_accounts.py @@ -9,7 +9,6 @@ from django.core.management.base import BaseCommand from django.utils import timezone from modoboa.parameters import tools as param_tools - from ... import models diff --git a/modoboa/core/management/commands/communicate_with_public_api.py b/modoboa/core/management/commands/communicate_with_public_api.py index 0aec393d1..59e0beb84 100644 --- a/modoboa/core/management/commands/communicate_with_public_api.py +++ b/modoboa/core/management/commands/communicate_with_public_api.py @@ -7,7 +7,6 @@ from django.core.management.base import BaseCommand, CommandError from modoboa.admin import models as admin_models from modoboa.core.extensions import exts_pool from modoboa.lib import api_client - from ... import models diff --git a/modoboa/core/management/commands/generate_postfix_maps.py b/modoboa/core/management/commands/generate_postfix_maps.py index 2e0f7fc05..8749da6f2 100644 --- a/modoboa/core/management/commands/generate_postfix_maps.py +++ b/modoboa/core/management/commands/generate_postfix_maps.py @@ -6,16 +6,15 @@ import hashlib import os import sys +import dj_database_url + from django.conf import settings from django.core.management.base import BaseCommand from django.template import Context, Template from django.utils import timezone from django.utils.encoding import force_bytes -import dj_database_url - -from ... import signals -from ... import utils +from ... import signals, utils MAP_FILE_TEMPLATE = """# This file was generated on {{ date }} by running: # {{ commandline }} diff --git a/modoboa/core/management/commands/load_initial_data.py b/modoboa/core/management/commands/load_initial_data.py index 956fde635..dd515b2a9 100644 --- a/modoboa/core/management/commands/load_initial_data.py +++ b/modoboa/core/management/commands/load_initial_data.py @@ -14,11 +14,7 @@ from django.core.management.base import BaseCommand from modoboa.lib.cryptutils import random_key from modoboa.lib.permissions import add_permissions_to_group - -from ... import constants -from ... import extensions -from ... import models -from ... import signals +from ... import constants, extensions, models, signals class Command(BaseCommand): diff --git a/modoboa/core/management/commands/set_default_site.py b/modoboa/core/management/commands/set_default_site.py index d80268a10..83ab25b95 100644 --- a/modoboa/core/management/commands/set_default_site.py +++ b/modoboa/core/management/commands/set_default_site.py @@ -7,9 +7,8 @@ See `https://docs.djangoproject.com/en/dev/ref/contrib/sites/`_. from __future__ import unicode_literals -from django.core.management.base import BaseCommand, CommandError - from django.contrib.sites.models import Site +from django.core.management.base import BaseCommand, CommandError class Command(BaseCommand): diff --git a/modoboa/core/mocks.py b/modoboa/core/mocks.py index e593bfc3f..8b97f6b2f 100644 --- a/modoboa/core/mocks.py +++ b/modoboa/core/mocks.py @@ -4,7 +4,6 @@ from __future__ import unicode_literals import httmock - # Modoboa API mocks @httmock.urlmatch( diff --git a/modoboa/core/models.py b/modoboa/core/models.py index 39c9e7d42..79c495572 100644 --- a/modoboa/core/models.py +++ b/modoboa/core/models.py @@ -2,34 +2,30 @@ from __future__ import unicode_literals -from email.header import Header import re - -from django.conf import settings -from django.db import models -from django.urls import reverse -from django.utils.encoding import ( - python_2_unicode_compatible, smart_bytes, smart_text, force_str -) -from django.utils.functional import cached_property -from django.utils.translation import ugettext as _, ugettext_lazy - -from django.contrib.auth.models import Group, AbstractUser -from django.contrib.contenttypes.fields import GenericForeignKey -from django.contrib.contenttypes.models import ContentType +from email.header import Header import jsonfield from reversion import revisions as reversion +from django.conf import settings +from django.contrib.auth.models import AbstractUser, Group +from django.contrib.contenttypes.fields import GenericForeignKey +from django.contrib.contenttypes.models import ContentType +from django.db import models +from django.urls import reverse +from django.utils.encoding import ( + force_str, python_2_unicode_compatible, smart_bytes, smart_text +) +from django.utils.functional import cached_property +from django.utils.translation import ugettext as _, ugettext_lazy + from modoboa.core.password_hashers import get_password_hasher from modoboa.lib.exceptions import ( - PermDeniedException, InternalError, BadRequest, Conflict + BadRequest, Conflict, InternalError, PermDeniedException ) from modoboa.parameters import tools as param_tools - -from . import constants -from . import signals - +from . import constants, signals try: from modoboa.lib.ldap_utils import LDAPAuthBackend diff --git a/modoboa/core/password_hashers/__init__.py b/modoboa/core/password_hashers/__init__.py index e47231f1f..0a06ea924 100644 --- a/modoboa/core/password_hashers/__init__.py +++ b/modoboa/core/password_hashers/__init__.py @@ -4,12 +4,12 @@ Password hashers for Modoboa. from __future__ import unicode_literals -from modoboa.core.password_hashers.base import ( - PLAINHasher, CRYPTHasher, MD5Hasher, SHA256Hasher -) from modoboa.core.password_hashers.advanced import ( BLFCRYPTHasher, MD5CRYPTHasher, SHA256CRYPTHasher, SHA512CRYPTHasher ) +from modoboa.core.password_hashers.base import ( + CRYPTHasher, MD5Hasher, PLAINHasher, SHA256Hasher +) def get_password_hasher(scheme): diff --git a/modoboa/core/password_hashers/advanced.py b/modoboa/core/password_hashers/advanced.py index 1ab654b26..96698eadd 100644 --- a/modoboa/core/password_hashers/advanced.py +++ b/modoboa/core/password_hashers/advanced.py @@ -9,7 +9,6 @@ from __future__ import unicode_literals from passlib.hash import bcrypt, md5_crypt, sha256_crypt, sha512_crypt from modoboa.parameters import tools as param_tools - from .base import PasswordHasher diff --git a/modoboa/core/password_hashers/base.py b/modoboa/core/password_hashers/base.py index 59f8d7a64..f065bc67a 100644 --- a/modoboa/core/password_hashers/base.py +++ b/modoboa/core/password_hashers/base.py @@ -9,11 +9,11 @@ from __future__ import unicode_literals import base64 import crypt import hashlib -from random import Random import string +from random import Random from django.utils.crypto import constant_time_compare -from django.utils.encoding import force_text, force_bytes +from django.utils.encoding import force_bytes, force_text class PasswordHasher(object): diff --git a/modoboa/core/templatetags/core_tags.py b/modoboa/core/templatetags/core_tags.py index ce6a3b2bc..3a5ce55ec 100644 --- a/modoboa/core/templatetags/core_tags.py +++ b/modoboa/core/templatetags/core_tags.py @@ -3,22 +3,22 @@ from __future__ import unicode_literals -from functools import reduce import os -import pkg_resources import re +from functools import reduce + +import pkg_resources from django import template from django.conf import settings -from django.urls import reverse +from django.contrib.sessions.models import Session from django.template.loader import render_to_string +from django.urls import reverse from django.utils import timezone from django.utils.encoding import smart_text from django.utils.safestring import mark_safe from django.utils.translation import get_language, ugettext as _ -from django.contrib.sessions.models import Session - from .. import signals register = template.Library() diff --git a/modoboa/core/tests/test_authentication.py b/modoboa/core/tests/test_authentication.py index 93581e3f7..99c32cf3d 100644 --- a/modoboa/core/tests/test_authentication.py +++ b/modoboa/core/tests/test_authentication.py @@ -5,19 +5,16 @@ from __future__ import unicode_literals import smtplib - from unittest import skipIf + from mock import patch from django.core import mail -from django.urls import reverse from django.test import override_settings +from django.urls import reverse -from modoboa.lib.tests import ModoTestCase -from modoboa.lib.tests import NO_SMTP - -from .. import factories -from .. import models +from modoboa.lib.tests import NO_SMTP, ModoTestCase +from .. import factories, models class AuthenticationTestCase(ModoTestCase): diff --git a/modoboa/core/tests/test_core.py b/modoboa/core/tests/test_core.py index 0e39f633d..28c4aed85 100644 --- a/modoboa/core/tests/test_core.py +++ b/modoboa/core/tests/test_core.py @@ -3,20 +3,16 @@ from __future__ import unicode_literals import httmock - from dateutil.relativedelta import relativedelta from six import StringIO from django.core import management -from django.urls import reverse from django.test import TestCase +from django.urls import reverse from django.utils import timezone from modoboa.lib.tests import ModoTestCase - -from .. import factories -from .. import mocks -from .. import models +from .. import factories, mocks, models class AuthenticationTestCase(ModoTestCase): diff --git a/modoboa/core/tests/test_ldap.py b/modoboa/core/tests/test_ldap.py index 5b2a19631..98c566c04 100644 --- a/modoboa/core/tests/test_ldap.py +++ b/modoboa/core/tests/test_ldap.py @@ -4,16 +4,13 @@ from __future__ import unicode_literals from unittest import skipIf -from django.urls import reverse from django.test import override_settings +from django.urls import reverse from django.utils.functional import cached_property from modoboa.lib import exceptions -from modoboa.lib.tests import ModoTestCase -from modoboa.lib.tests import NO_LDAP - -from .. import factories -from .. import models +from modoboa.lib.tests import NO_LDAP, ModoTestCase +from .. import factories, models @skipIf(NO_LDAP, "No ldap module installed") diff --git a/modoboa/core/tests/test_views.py b/modoboa/core/tests/test_views.py index dcb2047d8..d99560f50 100644 --- a/modoboa/core/tests/test_views.py +++ b/modoboa/core/tests/test_views.py @@ -8,12 +8,8 @@ from django import forms from django.urls import reverse from modoboa.lib.tests import ModoTestCase -from modoboa.parameters import forms as param_forms -from modoboa.parameters import tools as param_tools - -from .. import factories -from .. import models -from .. import signals +from modoboa.parameters import forms as param_forms, tools as param_tools +from .. import factories, models, signals SETTINGS_SAMPLE = { "core-check_new_versions": "True", diff --git a/modoboa/core/utils.py b/modoboa/core/utils.py index 4ef209dae..1ac62a320 100644 --- a/modoboa/core/utils.py +++ b/modoboa/core/utils.py @@ -8,7 +8,6 @@ from django.utils.translation import ugettext as _ from modoboa.core.extensions import exts_pool from modoboa.lib.api_client import ModoAPIClient - from . import models diff --git a/modoboa/core/views/__init__.py b/modoboa/core/views/__init__.py index f23a6b20a..db3341c3b 100644 --- a/modoboa/core/views/__init__.py +++ b/modoboa/core/views/__init__.py @@ -4,7 +4,8 @@ from __future__ import unicode_literals from .admin import ( check_top_notifications, information, logs, logs_page, parameters, - viewsettings) + viewsettings +) from .auth import dologin, dologout, password_reset from .base import RootDispatchView from .dashboard import DashboardView diff --git a/modoboa/core/views/admin.py b/modoboa/core/views/admin.py index 3be4ef1d7..09b1e1487 100644 --- a/modoboa/core/views/admin.py +++ b/modoboa/core/views/admin.py @@ -4,19 +4,16 @@ from __future__ import unicode_literals from functools import reduce -from django.contrib.auth.decorators import ( - login_required, user_passes_test -) +from django.contrib.auth.decorators import login_required, user_passes_test from django.shortcuts import render from django.template.loader import render_to_string from django.utils.translation import ugettext as _ from modoboa.core.models import Log from modoboa.core.utils import check_for_updates -from modoboa.lib.listing import get_sort_order, get_listing_page +from modoboa.lib.listing import get_listing_page, get_sort_order from modoboa.lib.web_utils import render_to_json_response from modoboa.parameters import tools as param_tools - from .. import signals diff --git a/modoboa/core/views/auth.py b/modoboa/core/views/auth.py index 336d0d5bf..856e0d412 100644 --- a/modoboa/core/views/auth.py +++ b/modoboa/core/views/auth.py @@ -5,20 +5,19 @@ from __future__ import unicode_literals import logging -from django.urls import reverse +from django.contrib.auth import ( + authenticate, login, logout, views as auth_views +) from django.http import HttpResponse, HttpResponseRedirect from django.template.loader import render_to_string +from django.urls import reverse from django.utils import translation from django.utils.translation import ugettext as _ from django.views.decorators.cache import never_cache -from django.contrib.auth import authenticate, login, logout -from django.contrib.auth import views as auth_views - from modoboa.core import forms - -from .base import find_nextlocation from .. import signals +from .base import find_nextlocation logger = logging.getLogger("modoboa.auth") diff --git a/modoboa/core/views/base.py b/modoboa/core/views/base.py index 7b6291bac..063cdf7cf 100644 --- a/modoboa/core/views/base.py +++ b/modoboa/core/views/base.py @@ -2,12 +2,11 @@ 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 from django.views import generic -from django.contrib.auth import mixins as auth_mixins - from ..extensions import exts_pool diff --git a/modoboa/core/views/dashboard.py b/modoboa/core/views/dashboard.py index 9731096d4..f44f0e8c1 100644 --- a/modoboa/core/views/dashboard.py +++ b/modoboa/core/views/dashboard.py @@ -2,14 +2,13 @@ from __future__ import unicode_literals -from dateutil import parser import feedparser import requests +from dateutil import parser from requests.exceptions import RequestException -from django.views import generic - from django.contrib.auth import mixins as auth_mixins +from django.views import generic from .. import signals diff --git a/modoboa/core/views/user.py b/modoboa/core/views/user.py index cafe1aeb2..ee11e3d18 100644 --- a/modoboa/core/views/user.py +++ b/modoboa/core/views/user.py @@ -2,22 +2,20 @@ 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 from django.utils import translation -from django.utils.translation import ugettext as _ from django.utils.encoding import force_text - -from django.contrib.auth.decorators import login_required, user_passes_test +from django.utils.translation import ugettext as _ from rest_framework.authtoken.models import Token from modoboa.lib.cryptutils import encrypt from modoboa.lib.web_utils import render_to_json_response from modoboa.parameters import tools as param_tools - -from ..forms import ProfileForm, APIAccessForm from .. import signals +from ..forms import APIAccessForm, ProfileForm @login_required diff --git a/modoboa/lib/api_client.py b/modoboa/lib/api_client.py index afdb80584..dbeed9982 100644 --- a/modoboa/lib/api_client.py +++ b/modoboa/lib/api_client.py @@ -3,8 +3,8 @@ from __future__ import unicode_literals import os -import pkg_resources +import pkg_resources import requests from requests.exceptions import RequestException diff --git a/modoboa/lib/authbackends.py b/modoboa/lib/authbackends.py index 0ff7fb645..db78d5d8f 100644 --- a/modoboa/lib/authbackends.py +++ b/modoboa/lib/authbackends.py @@ -6,7 +6,7 @@ import smtplib from django.conf import settings -from modoboa.core.models import populate_callback, User +from modoboa.core.models import User, populate_callback from modoboa.lib.email_utils import split_mailbox from modoboa.parameters import tools as param_tools diff --git a/modoboa/lib/cryptutils.py b/modoboa/lib/cryptutils.py index 25bc3ac9f..41815a38f 100644 --- a/modoboa/lib/cryptutils.py +++ b/modoboa/lib/cryptutils.py @@ -6,12 +6,12 @@ from __future__ import unicode_literals import base64 +from cryptography.fernet import Fernet + from django.conf import settings from django.utils.crypto import get_random_string from django.utils.encoding import smart_bytes, smart_text -from cryptography.fernet import Fernet - def random_key(length=16): """Generate a new key used to encrypt user passwords in session storage.""" diff --git a/modoboa/lib/email_utils.py b/modoboa/lib/email_utils.py index ae12a13c7..13df77ac2 100644 --- a/modoboa/lib/email_utils.py +++ b/modoboa/lib/email_utils.py @@ -3,12 +3,12 @@ from __future__ import unicode_literals import email -from email.header import Header -from email.mime.text import MIMEText -from email.utils import make_msgid, formataddr, formatdate, getaddresses import re import smtplib import time +from email.header import Header +from email.mime.text import MIMEText +from email.utils import formataddr, formatdate, getaddresses, make_msgid import chardet import lxml.html @@ -23,7 +23,6 @@ from django.utils.translation import ugettext as _ from modoboa.lib import u2u_decode from modoboa.lib.exceptions import InternalError - # used by Email() _RE_REMOVE_EXTRA_WHITESPACE = re.compile(r"\n\s*\n") _RE_CID = re.compile(r".*[ ]*cid=\"([^\"]*)\".*", re.I) diff --git a/modoboa/lib/form_utils.py b/modoboa/lib/form_utils.py index 2b5bcdf95..99c664a3c 100644 --- a/modoboa/lib/form_utils.py +++ b/modoboa/lib/form_utils.py @@ -5,8 +5,8 @@ from __future__ import unicode_literals import abc -from collections import OrderedDict import re +from collections import OrderedDict from django.forms import TypedChoiceField from django.forms.fields import Field @@ -18,7 +18,6 @@ from django.utils.translation import ugettext as _, ugettext_lazy from modoboa.lib.exceptions import BadRequest from modoboa.lib.web_utils import render_to_json_response - ABC = abc.ABCMeta(force_str("ABC"), (object,), {}) diff --git a/modoboa/lib/ldap_utils.py b/modoboa/lib/ldap_utils.py index d031bd41f..d8540faca 100644 --- a/modoboa/lib/ldap_utils.py +++ b/modoboa/lib/ldap_utils.py @@ -38,9 +38,9 @@ from __future__ import unicode_literals import ldap from django.conf import settings -from django.utils.translation import ugettext as _ -from django.utils.encoding import force_bytes from django.utils import six +from django.utils.encoding import force_bytes +from django.utils.translation import ugettext as _ from modoboa.core.password_hashers import get_password_hasher from modoboa.lib.exceptions import InternalError diff --git a/modoboa/lib/listing.py b/modoboa/lib/listing.py index c77e7dcf1..b63e88913 100644 --- a/modoboa/lib/listing.py +++ b/modoboa/lib/listing.py @@ -1,6 +1,6 @@ from __future__ import unicode_literals -from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger +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 684726d65..9e602dc82 100644 --- a/modoboa/lib/middleware.py +++ b/modoboa/lib/middleware.py @@ -5,11 +5,11 @@ from __future__ import unicode_literals from django.http import HttpResponseRedirect -from django.utils.encoding import smart_text from django.utils.deprecation import MiddlewareMixin +from django.utils.encoding import smart_text -from modoboa.lib.exceptions import ModoboaException from modoboa.lib import signals as lib_signals +from modoboa.lib.exceptions import ModoboaException from modoboa.lib.web_utils import ( _render_error, ajax_response, render_to_json_response ) diff --git a/modoboa/lib/permissions.py b/modoboa/lib/permissions.py index 73cc4439c..4a25ef20f 100644 --- a/modoboa/lib/permissions.py +++ b/modoboa/lib/permissions.py @@ -6,8 +6,7 @@ from __future__ import unicode_literals from django.contrib.auth.models import Group, Permission from django.contrib.contenttypes.models import ContentType -from modoboa.core import constants as core_constants -from modoboa.core import signals as core_signals +from modoboa.core import constants as core_constants, signals as core_signals from modoboa.core.models import ObjectAccess, User diff --git a/modoboa/lib/singleton.py b/modoboa/lib/singleton.py index f4444be7f..945fe682e 100644 --- a/modoboa/lib/singleton.py +++ b/modoboa/lib/singleton.py @@ -1,5 +1,6 @@ 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 aff56e97a..d58bdcbf8 100644 --- a/modoboa/lib/sysutils.py +++ b/modoboa/lib/sysutils.py @@ -7,9 +7,9 @@ This module extra functions/shortcuts to communicate with the system from __future__ import unicode_literals -import subprocess import inspect import re +import subprocess def exec_cmd(cmd, sudo_user=None, pinput=None, capture_output=True, **kwargs): diff --git a/modoboa/lib/templatetags/form_tags.py b/modoboa/lib/templatetags/form_tags.py index 11db3bf90..77a2570e5 100644 --- a/modoboa/lib/templatetags/form_tags.py +++ b/modoboa/lib/templatetags/form_tags.py @@ -4,11 +4,10 @@ Form rendering tags. from __future__ import unicode_literals -from django import forms -from django import template +from django import forms, template +from django.template.loader import render_to_string from django.utils.encoding import smart_text from django.utils.safestring import mark_safe -from django.template.loader import render_to_string from modoboa.lib.form_utils import SeparatorField diff --git a/modoboa/lib/templatetags/lib_tags.py b/modoboa/lib/templatetags/lib_tags.py index e1abb842f..699e8ea5b 100644 --- a/modoboa/lib/templatetags/lib_tags.py +++ b/modoboa/lib/templatetags/lib_tags.py @@ -6,7 +6,7 @@ from __future__ import unicode_literals from datetime import datetime from django import template -from django.template import Template, Context +from django.template import Context, Template from django.utils.safestring import mark_safe from django.utils.translation import ugettext as _ diff --git a/modoboa/lib/tests/__init__.py b/modoboa/lib/tests/__init__.py index 86b2e9ece..7eb668515 100644 --- a/modoboa/lib/tests/__init__.py +++ b/modoboa/lib/tests/__init__.py @@ -13,7 +13,6 @@ from rest_framework.authtoken.models import Token from rest_framework.test import APITestCase from modoboa.core import models as core_models - from .. import sysutils try: diff --git a/modoboa/lib/tests/test_email_utils.py b/modoboa/lib/tests/test_email_utils.py index 274279469..943036366 100644 --- a/modoboa/lib/tests/test_email_utils.py +++ b/modoboa/lib/tests/test_email_utils.py @@ -10,7 +10,8 @@ from django.test import SimpleTestCase from django.utils.encoding import smart_bytes, smart_text from ..email_utils import ( - Email, prepare_addresses, split_address, split_local_part) + Email, prepare_addresses, split_address, split_local_part +) SAMPLES_DIR = os.path.realpath( os.path.join(os.path.dirname(__file__), "sample_messages")) diff --git a/modoboa/lib/u2u_decode.py b/modoboa/lib/u2u_decode.py index 3d8e97621..2adf1e3be 100644 --- a/modoboa/lib/u2u_decode.py +++ b/modoboa/lib/u2u_decode.py @@ -9,9 +9,9 @@ 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 -import re from django.utils.encoding import smart_text diff --git a/modoboa/limits/constants.py b/modoboa/limits/constants.py index f12d5818f..e70f2a1e0 100644 --- a/modoboa/limits/constants.py +++ b/modoboa/limits/constants.py @@ -6,7 +6,6 @@ import collections from django.utils.translation import ugettext_lazy as _ - DEFAULT_USER_LIMITS = collections.OrderedDict(( ("domains", { "content_type": "admin.domain", "label": _("Domains"), diff --git a/modoboa/limits/forms.py b/modoboa/limits/forms.py index 3a013a6f2..149baa6d4 100644 --- a/modoboa/limits/forms.py +++ b/modoboa/limits/forms.py @@ -8,9 +8,8 @@ from django import forms from django.utils.translation import ugettext as _ from modoboa.lib.permissions import get_object_owner - -from .lib import allocate_resources_from_user from . import utils +from .lib import allocate_resources_from_user class ResourcePoolForm(forms.Form): diff --git a/modoboa/limits/handlers.py b/modoboa/limits/handlers.py index 8602f2bc6..ba080bcbd 100644 --- a/modoboa/limits/handlers.py +++ b/modoboa/limits/handlers.py @@ -2,25 +2,17 @@ from __future__ import unicode_literals +from django.contrib.contenttypes.models import ContentType from django.db.models import signals from django.dispatch import receiver from django.template.loader import render_to_string - -from django.contrib.contenttypes.models import ContentType from django.utils.translation import ugettext as _ -from modoboa.admin import models as admin_models -from modoboa.admin import signals as admin_signals -from modoboa.core import models as core_models -from modoboa.core import signals as core_signals -from modoboa.lib import signals as lib_signals -from modoboa.lib import permissions +from modoboa.admin import models as admin_models, signals as admin_signals +from modoboa.core import models as core_models, signals as core_signals +from modoboa.lib import permissions, signals as lib_signals from modoboa.parameters import tools as param_tools - -from . import forms -from . import lib -from . import models -from . import utils +from . import forms, lib, models, utils @receiver(core_signals.can_create_object) diff --git a/modoboa/limits/models.py b/modoboa/limits/models.py index 114a933c6..04fc92081 100644 --- a/modoboa/limits/models.py +++ b/modoboa/limits/models.py @@ -11,9 +11,7 @@ from django.utils.functional import cached_property from django.utils.translation import ugettext as _ from modoboa.core import models as core_models - -from . import lib -from . import utils +from . import lib, utils class ObjectLimitMixin(object): diff --git a/modoboa/limits/tests/test_api.py b/modoboa/limits/tests/test_api.py index 0b2194897..efc4ddae9 100644 --- a/modoboa/limits/tests/test_api.py +++ b/modoboa/limits/tests/test_api.py @@ -13,9 +13,7 @@ from modoboa.admin.factories import populate_database from modoboa.admin.models import Domain from modoboa.core import factories as core_factories from modoboa.core.models import User -from modoboa.lib import permissions -from modoboa.lib import tests as lib_tests - +from modoboa.lib import permissions, tests as lib_tests from .. import utils diff --git a/modoboa/limits/tests/test_domain_limits.py b/modoboa/limits/tests/test_domain_limits.py index 92f6c8749..381ec7d0b 100644 --- a/modoboa/limits/tests/test_domain_limits.py +++ b/modoboa/limits/tests/test_domain_limits.py @@ -10,7 +10,6 @@ from modoboa.admin.models import Domain from modoboa.core import factories as core_factories from modoboa.core.models import User from modoboa.lib import tests as lib_tests - from .. import utils diff --git a/modoboa/limits/tests/test_import.py b/modoboa/limits/tests/test_import.py index 1b61fd0c5..31c0b0bb0 100644 --- a/modoboa/limits/tests/test_import.py +++ b/modoboa/limits/tests/test_import.py @@ -5,12 +5,9 @@ from __future__ import unicode_literals from django.core.files.base import ContentFile from django.urls import reverse -from modoboa.admin import factories as admin_factories -from modoboa.admin import models as admin_models -from modoboa.core import factories as core_factories -from modoboa.core import models as core_models +from modoboa.admin import factories as admin_factories, models as admin_models +from modoboa.core import factories as core_factories, models as core_models from modoboa.lib.tests import ModoTestCase - from .. import utils diff --git a/modoboa/limits/tests/test_user_limits.py b/modoboa/limits/tests/test_user_limits.py index f5387bcf3..3200e9bda 100644 --- a/modoboa/limits/tests/test_user_limits.py +++ b/modoboa/limits/tests/test_user_limits.py @@ -10,7 +10,6 @@ from modoboa.admin.models import Alias, Domain from modoboa.core.factories import UserFactory from modoboa.core.models import User from modoboa.lib import tests as lib_tests - from .. import utils diff --git a/modoboa/limits/urls_api.py b/modoboa/limits/urls_api.py index dad167523..8ebfa0e5c 100644 --- a/modoboa/limits/urls_api.py +++ b/modoboa/limits/urls_api.py @@ -6,7 +6,6 @@ from rest_framework import routers from . import viewsets - router = routers.SimpleRouter() router.register( r"resources", viewsets.ResourcesViewSet, base_name="resources") diff --git a/modoboa/limits/viewsets.py b/modoboa/limits/viewsets.py index 2d792ca75..5f57f5401 100644 --- a/modoboa/limits/viewsets.py +++ b/modoboa/limits/viewsets.py @@ -5,10 +5,9 @@ from __future__ import unicode_literals from django.contrib.contenttypes.models import ContentType from rest_framework import mixins, viewsets -from rest_framework.permissions import IsAuthenticated, DjangoModelPermissions +from rest_framework.permissions import DjangoModelPermissions, IsAuthenticated from modoboa.core import models as core_models - from . import serializers diff --git a/modoboa/parameters/forms.py b/modoboa/parameters/forms.py index d26996e13..5a0c72aa2 100644 --- a/modoboa/parameters/forms.py +++ b/modoboa/parameters/forms.py @@ -4,8 +4,7 @@ from __future__ import unicode_literals from django import forms -from modoboa.lib import db_utils -from modoboa.lib import form_utils +from modoboa.lib import db_utils, form_utils class GenericParametersForm(forms.Form): diff --git a/modoboa/parameters/tools.py b/modoboa/parameters/tools.py index 383b17442..81c4893c4 100644 --- a/modoboa/parameters/tools.py +++ b/modoboa/parameters/tools.py @@ -4,9 +4,7 @@ from __future__ import unicode_literals import copy -from modoboa.lib import exceptions -from modoboa.lib import form_utils -from modoboa.lib import signals +from modoboa.lib import exceptions, form_utils, signals from modoboa.lib.sysutils import guess_extension_name diff --git a/modoboa/relaydomains/forms.py b/modoboa/relaydomains/forms.py index 5aa128ff8..1b9ee412a 100644 --- a/modoboa/relaydomains/forms.py +++ b/modoboa/relaydomains/forms.py @@ -3,8 +3,7 @@ from __future__ import unicode_literals from modoboa.lib.form_utils import WizardStep -from modoboa.transport import forms as tr_forms -from modoboa.transport import models as tr_models +from modoboa.transport import forms as tr_forms, models as tr_models class RelayDomainWizardStep(WizardStep): diff --git a/modoboa/relaydomains/handlers.py b/modoboa/relaydomains/handlers.py index 75ab11b61..80aa81adb 100644 --- a/modoboa/relaydomains/handlers.py +++ b/modoboa/relaydomains/handlers.py @@ -6,16 +6,11 @@ from django.db.models import signals from django.dispatch import receiver from django.utils.translation import ugettext as _ -from modoboa.admin import models as admin_models -from modoboa.admin import signals as admin_signals +from modoboa.admin import models as admin_models, signals as admin_signals from modoboa.core import signals as core_signals from modoboa.lib.email_utils import split_mailbox from modoboa.transport import models as tr_models - -from . import forms -from . import lib -from . import models -from . import postfix_maps +from . import forms, lib, models, postfix_maps @receiver(admin_signals.use_external_recipients) diff --git a/modoboa/relaydomains/lib.py b/modoboa/relaydomains/lib.py index e812ffb27..f737f9453 100644 --- a/modoboa/relaydomains/lib.py +++ b/modoboa/relaydomains/lib.py @@ -6,8 +6,7 @@ from django.utils.translation import ugettext as _ from modoboa.admin import models as admin_models from modoboa.lib.exceptions import BadRequest -from modoboa.transport import backends as tr_backends -from modoboa.transport import models as tr_models +from modoboa.transport import backends as tr_backends, models as tr_models def import_relaydomain(user, row, formopts): diff --git a/modoboa/relaydomains/serializers.py b/modoboa/relaydomains/serializers.py index 9c86efff8..28ec22173 100644 --- a/modoboa/relaydomains/serializers.py +++ b/modoboa/relaydomains/serializers.py @@ -7,8 +7,7 @@ from django.utils.translation import ugettext as _ from rest_framework import serializers from modoboa.admin import models as admin_models -from modoboa.transport import backends as tr_backends -from modoboa.transport import models as tr_models +from modoboa.transport import backends as tr_backends, models as tr_models class TransportSerializer(serializers.ModelSerializer): diff --git a/modoboa/relaydomains/tests.py b/modoboa/relaydomains/tests.py index 888094a73..68e837fcc 100644 --- a/modoboa/relaydomains/tests.py +++ b/modoboa/relaydomains/tests.py @@ -5,18 +5,15 @@ from __future__ import unicode_literals import json from django.core.files.base import ContentFile -from django.urls import reverse from django.test import TestCase +from django.urls import reverse -from modoboa.admin import factories as admin_factories -from modoboa.admin import models as admin_models +from modoboa.admin import factories as admin_factories, models as admin_models from modoboa.core.factories import UserFactory -from modoboa.lib.tests import ModoAPITestCase, ModoTestCase from modoboa.lib.test_utils import MapFilesTestCaseMixin +from modoboa.lib.tests import ModoAPITestCase, ModoTestCase from modoboa.limits import utils as limits_utils -from modoboa.transport import factories as tr_factories -from modoboa.transport import models as tr_models - +from modoboa.transport import factories as tr_factories, models as tr_models from . import models diff --git a/modoboa/relaydomains/urls_api.py b/modoboa/relaydomains/urls_api.py index a7ae5cfae..d877c6f65 100644 --- a/modoboa/relaydomains/urls_api.py +++ b/modoboa/relaydomains/urls_api.py @@ -4,7 +4,6 @@ from rest_framework import routers from . import viewsets - router = routers.SimpleRouter() router.register( r"relaydomains", viewsets.RelayDomainViewSet, base_name="relaydomain") diff --git a/modoboa/relaydomains/viewsets.py b/modoboa/relaydomains/viewsets.py index 681f515bc..d7de1b82d 100644 --- a/modoboa/relaydomains/viewsets.py +++ b/modoboa/relaydomains/viewsets.py @@ -1,10 +1,9 @@ """RelayDomain viewsets.""" from rest_framework import viewsets -from rest_framework.permissions import IsAuthenticated, DjangoModelPermissions +from rest_framework.permissions import DjangoModelPermissions, IsAuthenticated from modoboa.admin import models as admin_models - from . import serializers diff --git a/modoboa/transport/apps.py b/modoboa/transport/apps.py index f7d87dd17..dbdcce73b 100644 --- a/modoboa/transport/apps.py +++ b/modoboa/transport/apps.py @@ -8,4 +8,3 @@ class TransportConfig(AppConfig): def ready(self): from . import handlers - diff --git a/modoboa/transport/forms.py b/modoboa/transport/forms.py index df46b5a56..9d7ec1787 100644 --- a/modoboa/transport/forms.py +++ b/modoboa/transport/forms.py @@ -2,9 +2,7 @@ from django import forms -from . import backends -from . import models - +from . import backends, models TYPE_TO_FIELD_MAP = { "int": forms.IntegerField, diff --git a/modoboa/transport/handlers.py b/modoboa/transport/handlers.py index 1e69bf921..969ae9d8f 100644 --- a/modoboa/transport/handlers.py +++ b/modoboa/transport/handlers.py @@ -6,10 +6,7 @@ from django.db.models import signals from django.dispatch import receiver from modoboa.core import signals as core_signals - -from . import backends -from . import models -from . import postfix_maps +from . import backends, models, postfix_maps @receiver(core_signals.register_postfix_maps) diff --git a/modoboa/transport/models.py b/modoboa/transport/models.py index e8b011008..8f87fe7f5 100644 --- a/modoboa/transport/models.py +++ b/modoboa/transport/models.py @@ -2,13 +2,12 @@ from __future__ import unicode_literals +import jsonfield from reversion import revisions as reversion from django.db import models from django.utils.translation import ugettext_lazy as _ -import jsonfield - from . import backends diff --git a/modoboa/urls.py b/modoboa/urls.py index 2effc0145..bc0475af1 100644 --- a/modoboa/urls.py +++ b/modoboa/urls.py @@ -2,19 +2,18 @@ from __future__ import unicode_literals from functools import reduce +from ckeditor_uploader import views as cku_views + from django.conf import settings from django.conf.urls import include, url -from django.views.i18n import JavaScriptCatalog - from django.contrib.auth import views as auth_views from django.contrib.auth.decorators import login_required +from django.views.i18n import JavaScriptCatalog -from ckeditor_uploader import views as cku_views from rest_framework.documentation import include_docs_urls from modoboa.admin.views.user import forward -from modoboa.core import signals as core_signals -from modoboa.core import views as core_views +from modoboa.core import signals as core_signals, views as core_views from modoboa.core.extensions import exts_pool API_TITLE = "Modoboa API" diff --git a/modoboa/urls_api.py b/modoboa/urls_api.py index 43ce98a83..7a6ed785f 100644 --- a/modoboa/urls_api.py +++ b/modoboa/urls_api.py @@ -6,7 +6,6 @@ from django.conf.urls import include, url from modoboa.core.extensions import exts_pool - urlpatterns = [ url("", include("modoboa.admin.urls_api")), url("", include("modoboa.limits.urls_api")), diff --git a/setup.py b/setup.py index 5d4e2db31..43abc5c05 100644 --- a/setup.py +++ b/setup.py @@ -12,8 +12,9 @@ from __future__ import unicode_literals import io from os import path + from pip.req import parse_requirements -from setuptools import setup, find_packages +from setuptools import find_packages, setup def get_requirements(requirements_file): diff --git a/test_project/test_project/settings.py b/test_project/test_project/settings.py index ba4356121..85c35a3c2 100644 --- a/test_project/test_project/settings.py +++ b/test_project/test_project/settings.py @@ -12,12 +12,11 @@ https://docs.djangoproject.com/en/1.11/ref/settings/ from __future__ import unicode_literals -from logging.handlers import SysLogHandler import os +from logging.handlers import SysLogHandler from modoboa.test_settings import * # noqa - # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.realpath(os.path.dirname(os.path.dirname(__file__)))