diff --git a/doc/conf.py b/doc/conf.py index 109ceb399..1cf6ecc96 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -12,7 +12,7 @@ # serve to show the default. import os -import sys +# 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 @@ -44,7 +44,7 @@ master_doc = "index" # General information about the project. project = u'Modoboa' -copyright = u'2018, Antoine Nguyen' +copyright = u'2018, Antoine Nguyen' # NOQA:A001 # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the diff --git a/modoboa/admin/apps.py b/modoboa/admin/apps.py index f799fa177..33fb2f4ea 100644 --- a/modoboa/admin/apps.py +++ b/modoboa/admin/apps.py @@ -17,4 +17,4 @@ class AdminConfig(AppConfig): def ready(self): load_admin_settings() - from . import handlers + from . import handlers # NOQA:F401 diff --git a/modoboa/admin/factories.py b/modoboa/admin/factories.py index 3f9b3f26c..5f4cea421 100644 --- a/modoboa/admin/factories.py +++ b/modoboa/admin/factories.py @@ -18,7 +18,7 @@ class DomainFactory(PermissionFactory): model = models.Domain django_get_or_create = ("name", ) - type = "domain" + type = "domain" # NOQA:A003 quota = 0 default_mailbox_quota = 10 enabled = True diff --git a/modoboa/admin/forms/domain.py b/modoboa/admin/forms/domain.py index 7ee2ad6c7..2590e4733 100644 --- a/modoboa/admin/forms/domain.py +++ b/modoboa/admin/forms/domain.py @@ -26,7 +26,7 @@ from ..models import Alias, Domain, DomainAlias, Mailbox class DomainFormGeneral(forms.ModelForm, DynamicForm): """A form to create/edit a domain.""" - type = forms.ChoiceField( + type = forms.ChoiceField( # NOQA:A003 label=ugettext_lazy("Type"), ) aliases = DomainNameField( diff --git a/modoboa/admin/lib.py b/modoboa/admin/lib.py index 1f9a52b9f..3b0dc8585 100644 --- a/modoboa/admin/lib.py +++ b/modoboa/admin/lib.py @@ -223,7 +223,7 @@ def domain_has_authorized_mx(name): valid_mxs = [ipaddress.ip_network(smart_text(v.strip())) for v in valid_mxs.split() if v.strip()] domain_mxs = get_domain_mx_list(name) - for mx_addr, mx_ip_addr in domain_mxs: # noqa:B007 + for _mx_addr, mx_ip_addr in domain_mxs: for subnet in valid_mxs: if mx_ip_addr in subnet: return True diff --git a/modoboa/admin/management/commands/handle_mailbox_operations.py b/modoboa/admin/management/commands/handle_mailbox_operations.py index e6a0b256b..016d6e909 100644 --- a/modoboa/admin/management/commands/handle_mailbox_operations.py +++ b/modoboa/admin/management/commands/handle_mailbox_operations.py @@ -24,7 +24,7 @@ class OperationError(Exception): class Command(BaseCommand): """Command definition""" - help = "Handles rename and delete operations on mailboxes" + help = "Handles rename and delete operations on mailboxes" # NOQA:A003 def __init__(self, *args, **kwargs): super(Command, self).__init__(*args, **kwargs) diff --git a/modoboa/admin/management/commands/modo.py b/modoboa/admin/management/commands/modo.py index 1d95fa0bc..9a00e5ba8 100644 --- a/modoboa/admin/management/commands/modo.py +++ b/modoboa/admin/management/commands/modo.py @@ -17,7 +17,7 @@ class Command(SubcommandCommand): $ python manage.py modo """ - help = "Modoboa top management command." + help = "Modoboa top management command." # NOQA:A003 subcommands = { "export": ExportCommand, diff --git a/modoboa/admin/management/commands/subcommands/_export.py b/modoboa/admin/management/commands/subcommands/_export.py index 3b9fdb722..334885f68 100644 --- a/modoboa/admin/management/commands/subcommands/_export.py +++ b/modoboa/admin/management/commands/subcommands/_export.py @@ -16,7 +16,7 @@ from .... import models class ExportCommand(BaseCommand): """Command class.""" - help = "Export domains or identities using CSV format" # noqa:A003 + help = "Export domains or identities using CSV format" # NOQA:A003 def add_arguments(self, parser): """Add arguments to command.""" diff --git a/modoboa/admin/management/commands/subcommands/_import.py b/modoboa/admin/management/commands/subcommands/_import.py index 705720aa0..5c24dc3c2 100644 --- a/modoboa/admin/management/commands/subcommands/_import.py +++ b/modoboa/admin/management/commands/subcommands/_import.py @@ -20,7 +20,7 @@ class ImportCommand(BaseCommand): """Command class.""" args = "csvfile" - help = "Import identities from a csv file" # noqa:A003 + help = "Import identities from a csv file" # NOQA:A003 def add_arguments(self, parser): """Add extra arguments to command.""" diff --git a/modoboa/admin/management/commands/subcommands/_mx.py b/modoboa/admin/management/commands/subcommands/_mx.py index dc1a26dab..8f0db645e 100644 --- a/modoboa/admin/management/commands/subcommands/_mx.py +++ b/modoboa/admin/management/commands/subcommands/_mx.py @@ -25,7 +25,7 @@ from modoboa.parameters import tools as param_tools class CheckMXRecords(BaseCommand): """Command class.""" - help = "Check defined domains." # noqa:A003 + help = "Check defined domains." # NOQA:A003 @cached_property def providers(self): diff --git a/modoboa/admin/management/commands/subcommands/_repair.py b/modoboa/admin/management/commands/subcommands/_repair.py index e27686cc4..04b0e7984 100644 --- a/modoboa/admin/management/commands/subcommands/_repair.py +++ b/modoboa/admin/management/commands/subcommands/_repair.py @@ -95,7 +95,7 @@ def sometimes_mailbox_have_no_alias(**options): class Repair(BaseCommand): """Command class.""" - help = "Check and fix known problems." + help = "Check and fix known problems." # NOQA:A003 def add_arguments(self, parser): """Add extra arguments to command.""" diff --git a/modoboa/admin/models/domain.py b/modoboa/admin/models/domain.py index 74eda5bf0..615e21d49 100644 --- a/modoboa/admin/models/domain.py +++ b/modoboa/admin/models/domain.py @@ -48,7 +48,7 @@ class Domain(AdminObject): help_text=ugettext_lazy("Check to activate this domain"), default=True ) - type = models.CharField(default="domain", max_length=20) + type = models.CharField(default="domain", max_length=20) # NOQA:A003 enable_dns_checks = models.BooleanField( ugettext_lazy("Enable DNS checks"), default=True, help_text=ugettext_lazy("Check to enable DNS checks for this domain") @@ -244,9 +244,9 @@ class Domain(AdminObject): def save(self, *args, **kwargs): """Store current data if domain is renamed.""" if self.oldname != self.name: - self.old_mail_homes = ( - dict((mb.id, mb.mail_home) for mb in self.mailbox_set.all()) - ) + self.old_mail_homes = { + mb.id: mb.mail_home for mb in self.mailbox_set.all() + } super(Domain, self).save(*args, **kwargs) def delete(self, fromuser, keepdir=False): diff --git a/modoboa/admin/models/mailbox.py b/modoboa/admin/models/mailbox.py index 0b0624714..26e45661b 100644 --- a/modoboa/admin/models/mailbox.py +++ b/modoboa/admin/models/mailbox.py @@ -41,7 +41,7 @@ class Quota(models.Model): """Keeps track of Mailbox current quota.""" username = models.EmailField(primary_key=True, max_length=254) - bytes = models.BigIntegerField(default=0) + bytes = models.BigIntegerField(default=0) # NOQA:A003 messages = models.IntegerField(default=0) objects = QuotaManager() @@ -374,7 +374,7 @@ class MailboxOperation(models.Model): mailbox = models.ForeignKey(Mailbox, blank=True, null=True, on_delete=models.CASCADE) - type = models.CharField( + type = models.CharField( # NOQA:A003 max_length=20, choices=(("rename", "rename"), ("delete", "delete")) ) argument = models.TextField() diff --git a/modoboa/admin/templatetags/admin_tags.py b/modoboa/admin/templatetags/admin_tags.py index 83c96e7dd..6cb87b0ef 100644 --- a/modoboa/admin/templatetags/admin_tags.py +++ b/modoboa/admin/templatetags/admin_tags.py @@ -156,7 +156,7 @@ def domain_actions(user, domain): responses = signals.extra_domain_actions.send( sender=None, user=user, domain=domain) - for receiver, response in responses: + for _receiver, response in responses: if response: actions += response diff --git a/modoboa/admin/tests/test_account.py b/modoboa/admin/tests/test_account.py index d68f78302..75569d181 100644 --- a/modoboa/admin/tests/test_account.py +++ b/modoboa/admin/tests/test_account.py @@ -19,7 +19,7 @@ class AuthenticationTestCase(ModoTestCase): """Check authentication.""" @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(AuthenticationTestCase, cls).setUpTestData() cls.mb = factories.MailboxFactory( @@ -43,18 +43,18 @@ class AuthenticationTestCase(ModoTestCase): class AccountTestCase(ModoTestCase): @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(AccountTestCase, cls).setUpTestData() factories.populate_database() def test_crud(self): - values = dict( - username="tester@test.com", first_name="Tester", last_name="Toto", - password1="Toto1234", password2="Toto1234", role="SimpleUsers", - quota_act=True, - is_active=True, email="tester@test.com", stepid="step2" - ) + values = { + "username": "tester@test.com", "first_name": "Tester", + "last_name": "Toto", "password1": "Toto1234", + "password2": "Toto1234", "role": "SimpleUsers", "quota_act": True, + "is_active": True, "email": "tester@test.com", "stepid": "step2" + } self.ajax_post(reverse("admin:account_add"), values) account = User.objects.get(username="tester@test.com") @@ -341,12 +341,12 @@ class AccountTestCase(ModoTestCase): def test_utf8_username(self): """Create an account with non-ASCII characters.""" - values = dict( - username="téster@test.com", first_name="Tester", last_name="Toto", - password1="Toto1234", password2="Toto1234", role="SimpleUsers", - quota_act=True, - is_active=True, email="téster@test.com", stepid="step2" - ) + values = { + "username": "téster@test.com", "first_name": "Tester", + "last_name": "Toto", "password1": "Toto1234", + "password2": "Toto1234", "role": "SimpleUsers", "quota_act": True, + "is_active": True, "email": "téster@test.com", "stepid": "step2" + } self.ajax_post(reverse("admin:account_add"), values) def _set_quota(self, email, value, expected_status=200): @@ -478,11 +478,11 @@ class LDAPAccountTestCase(test_ldap.LDAPTestCaseMixin, ModoTestCase): class PermissionsTestCase(ModoTestCase): @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(PermissionsTestCase, cls).setUpTestData() parameters = {} - for name, tpl in limits_utils.get_user_limit_templates(): + for name, _definition in limits_utils.get_user_limit_templates(): parameters["deflt_user_{0}_limit".format(name)] = 2 cls.localconfig.parameters.set_values(parameters, app="limits") cls.localconfig.save() @@ -604,12 +604,12 @@ class PermissionsTestCase(ModoTestCase): for the associated domain, this domain admin must not be able to access the super admin. """ - values = dict( - username="superadmin2@test.com", first_name="Super", - last_name="Admin", password1="Toto1234", password2="Toto1234", - role="SuperAdmins", is_active=True, - email="superadmin2@test.com", stepid="step2" - ) + values = { + "username": "superadmin2@test.com", "first_name": "Super", + "last_name": "Admin", "password1": "Toto1234", + "password2": "Toto1234", "role": "SuperAdmins", "is_active": True, + "email": "superadmin2@test.com", "stepid": "step2" + } self.ajax_post( reverse("admin:account_add"), values @@ -624,22 +624,22 @@ class PermissionsTestCase(ModoTestCase): def test_domainadmin_dlist_local_domain_not_owned(self): """Check if a domain admin can use a local mailbox he can't access as a recipient in a distribution list""" - values = dict( - address="all@test.com", - recipients="user@test.com", - recipients_1="user@test2.com", - enabled=True - ) + values = { + "address": "all@test.com", + "recipients": "user@test.com", + "recipients_1": "user@test2.com", + "enabled": True + } self.ajax_post(reverse("admin:alias_add"), values) def test_domainadmin_master_user(self): """Check domain administrator is not allowed to access this feature.""" - values = dict( - username="user10@test.com", first_name="Test", - last_name="Test", password1="Toto1234", password2="Toto1234", - role="SimpleUsers", is_active=True, master_user=True, - email="user10@test.com", stepid="step2" - ) + values = { + "username": "user10@test.com", "first_name": "Test", + "last_name": "Test", "password1": "Toto1234", + "password2": "Toto1234", "role": "SimpleUsers", "is_active": True, + "master_user": True, "email": "user10@test.com", "stepid": "step2" + } self.ajax_post( reverse("admin:account_add"), values, status=400 diff --git a/modoboa/admin/tests/test_alias.py b/modoboa/admin/tests/test_alias.py index 24dfdb727..506de3da7 100644 --- a/modoboa/admin/tests/test_alias.py +++ b/modoboa/admin/tests/test_alias.py @@ -18,19 +18,19 @@ from ..models import Alias, AliasRecipient, Domain class AliasTestCase(ModoTestCase): @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(AliasTestCase, cls).setUpTestData() factories.populate_database() def test_alias(self): user = User.objects.get(username="user@test.com") - values = dict( - username="user@test.com", role=user.role, - is_active=user.is_active, email="user@test.com", - aliases="toto@test.com", aliases_1="titi@test.com", - language="en" - ) + values = { + "username": "user@test.com", "role": user.role, + "is_active": user.is_active, "email": "user@test.com", + "aliases": "toto@test.com", "aliases_1": "titi@test.com", + "language": "en" + } self.ajax_post( reverse("admin:account_change", args=[user.id]), values @@ -68,11 +68,11 @@ class AliasTestCase(ModoTestCase): def test_upper_case_alias(self): """Try to create an upper case alias.""" user = User.objects.get(username="user@test.com") - values = dict( - username="user@test.com", role=user.role, - is_active=user.is_active, email="user@test.com", - aliases="Toto@test.com", language="en" - ) + values = { + "username": "user@test.com", "role": user.role, + "is_active": user.is_active, "email": "user@test.com", + "aliases": "Toto@test.com", "language": "en" + } self.ajax_post( reverse("admin:account_change", args=[user.id]), values @@ -98,11 +98,11 @@ class AliasTestCase(ModoTestCase): def test_append_alias_with_tag(self): """Try to create a alias with tag in recipient address""" user = User.objects.get(username="user@test.com") - values = dict( - username="user@test.com", role=user.role, - is_active=user.is_active, email="user@test.com", - language="en" - ) + values = { + "username": "user@test.com", "role": user.role, + "is_active": user.is_active, "email": "user@test.com", + "language": "en" + } self.ajax_post( reverse("admin:account_change", args=[user.id]), values @@ -122,11 +122,13 @@ class AliasTestCase(ModoTestCase): def test_utf8_alias(self): """Test alias with non-ASCII characters.""" - values = dict(address="testé@test.com", - recipients="user@test.com", - recipients_1="admin@test.com", - recipients_2="ext@titi.com", - enabled=True) + values = { + "address": "testé@test.com", + "recipients": "user@test.com", + "recipients_1": "admin@test.com", + "recipients_2": "ext@titi.com", + "enabled": True + } self.ajax_post( reverse("admin:alias_add"), values ) @@ -170,7 +172,7 @@ class AliasTestCase(ModoTestCase): Alias.DoesNotExist, Alias.objects.get, address="all@test.com") def test_forward(self): - values = dict(address="forward2@test.com", recipients="rcpt@dest.com") + values = {"address": "forward2@test.com", "recipients": "rcpt@dest.com"} self.ajax_post( reverse("admin:alias_add"), values ) @@ -193,7 +195,7 @@ class AliasTestCase(ModoTestCase): Alias.DoesNotExist, Alias.objects.get, address="forward2@test.com") def test_forward_and_local_copies(self): - values = dict(address="user@test.com", recipients="rcpt@dest.com") + values = {"address": "user@test.com", "recipients": "rcpt@dest.com"} self.ajax_post( reverse("admin:alias_add"), values ) @@ -244,21 +246,23 @@ class AliasTestCase(ModoTestCase): changed. """ - values = dict(address="list@test.com", - recipients="user@test.com", - recipients_1="admin@test.com", - enabled=True) + values = { + "address": "list@test.com", + "recipients": "user@test.com", + "recipients_1": "admin@test.com", + "enabled": True + } self.ajax_post( reverse("admin:alias_add"), values ) user = User.objects.get(username="user@test.com") - values = dict( - username=user.username, first_name="Tester", last_name="Toto", - password1="Toto1234", password2="Toto1234", role="SimpleUsers", - quota_act=True, is_active=True, email=user.email, - language="en" - ) + values = { + "username": user.username, "first_name": "Tester", + "last_name": "Toto", "password1": "Toto1234", + "password2": "Toto1234", "role": "SimpleUsers", "quota_act": True, + "is_active": True, "email": user.email, "language": "en" + } self.ajax_post(reverse("admin:account_change", args=[user.id]), values) self.assertEqual( @@ -279,12 +283,12 @@ class AliasTestCase(ModoTestCase): self.client.force_login(admin) user = User.objects.get(username="user@test.com") - values = dict( - username="user@test.com", role=user.role, - is_active=user.is_active, email="user@test.com", - aliases="toto@test.com", aliases_1="titi@test2.com", - language="en" - ) + values = { + "username": "user@test.com", "role": user.role, + "is_active": user.is_active, "email": "user@test.com", + "aliases": "toto@test.com", "aliases_1": "titi@test2.com", + "language": "en" + } response = self.ajax_post( reverse("admin:account_change", args=[user.id]), values, 400 diff --git a/modoboa/admin/tests/test_api.py b/modoboa/admin/tests/test_api.py index fdcfbdf61..a5205742a 100644 --- a/modoboa/admin/tests/test_api.py +++ b/modoboa/admin/tests/test_api.py @@ -26,7 +26,7 @@ class DomainAPITestCase(ModoAPITestCase): """Check API.""" @classmethod - def setUpTestData(cls): # noqa: N802 + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(DomainAPITestCase, cls).setUpTestData() factories.populate_database() @@ -137,7 +137,7 @@ class DomainAliasAPITestCase(ModoAPITestCase): """Check DomainAlias API.""" @classmethod - def setUpTestData(cls): # noqa: N802 + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(DomainAliasAPITestCase, cls).setUpTestData() factories.populate_database() @@ -231,7 +231,7 @@ class AccountAPITestCase(ModoAPITestCase): } @classmethod - def setUpTestData(cls): # noqa: N802 + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(AccountAPITestCase, cls).setUpTestData() factories.populate_database() @@ -563,7 +563,7 @@ class AliasAPITestCase(ModoAPITestCase): } @classmethod - def setUpTestData(cls): # noqa: N802 + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(AliasAPITestCase, cls).setUpTestData() cls.localconfig.parameters.set_value( @@ -686,7 +686,7 @@ class SenderAddressAPITestCase(ModoAPITestCase): """Check SenderAddress API.""" @classmethod - def setUpTestData(cls): # noqa: N802 + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(SenderAddressAPITestCase, cls).setUpTestData() cls.localconfig.parameters.set_value( diff --git a/modoboa/admin/tests/test_domain.py b/modoboa/admin/tests/test_domain.py index 3e3849e36..c8abbf2c5 100644 --- a/modoboa/admin/tests/test_domain.py +++ b/modoboa/admin/tests/test_domain.py @@ -29,7 +29,7 @@ class DomainTestCase(ModoTestCase): """Test case for Domain.""" @classmethod - def setUpTestData(cls): # noqa: N802 + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(DomainTestCase, cls).setUpTestData() factories.populate_database() @@ -361,7 +361,7 @@ class DKIMTestCase(ModoTestCase): """Test case for DKIM.""" @classmethod - def setUpTestData(cls): # noqa: N802 + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(DKIMTestCase, cls).setUpTestData() factories.populate_database() diff --git a/modoboa/admin/tests/test_domain_alias.py b/modoboa/admin/tests/test_domain_alias.py index 7ba2c5f51..9171634d1 100644 --- a/modoboa/admin/tests/test_domain_alias.py +++ b/modoboa/admin/tests/test_domain_alias.py @@ -12,7 +12,7 @@ from ..models import Alias, Domain, DomainAlias class DomainAliasTestCase(ModoTestCase): @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(DomainAliasTestCase, cls).setUpTestData() factories.populate_database() diff --git a/modoboa/admin/tests/test_export.py b/modoboa/admin/tests/test_export.py index d229e5881..fa0912086 100644 --- a/modoboa/admin/tests/test_export.py +++ b/modoboa/admin/tests/test_export.py @@ -15,7 +15,7 @@ class ExportTestCase(ModoTestCase): """Test case for export operations.""" @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(ExportTestCase, cls).setUpTestData() factories.populate_database() @@ -38,7 +38,7 @@ class ExportTestCase(ModoTestCase): {"filename": "test.csv"} ) - def assertListEqual(self, list1, list2): + def assertListEqual(self, list1, list2): # NOQA:N802 list1 = force_text(list1).split("\r\n") list2 = force_text(list2).split("\r\n") self.assertEqual(len(list1), len(list2)) diff --git a/modoboa/admin/tests/test_import_.py b/modoboa/admin/tests/test_import_.py index f5865703c..49aeb8fbf 100644 --- a/modoboa/admin/tests/test_import_.py +++ b/modoboa/admin/tests/test_import_.py @@ -19,7 +19,7 @@ from ..models import Alias, Domain, DomainAlias class ImportTestCase(ModoTestCase): @classmethod - def setUpTestData(cls): # noqa:N802 + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(ImportTestCase, cls).setUpTestData() cls.localconfig.parameters.set_value( diff --git a/modoboa/admin/tests/test_mailbox_operations.py b/modoboa/admin/tests/test_mailbox_operations.py index a6a8e7597..3a602cb59 100644 --- a/modoboa/admin/tests/test_mailbox_operations.py +++ b/modoboa/admin/tests/test_mailbox_operations.py @@ -22,7 +22,7 @@ class MailboxOperationTestCase(ModoTestCase): """Test management command.""" @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(MailboxOperationTestCase, cls).setUpTestData() factories.populate_database() diff --git a/modoboa/admin/tests/test_mx.py b/modoboa/admin/tests/test_mx.py index 10e1e828c..d75c149be 100644 --- a/modoboa/admin/tests/test_mx.py +++ b/modoboa/admin/tests/test_mx.py @@ -24,7 +24,7 @@ class MXTestCase(ModoTestCase): """TestCase for DNSBL related features.""" @classmethod - def setUpTestData(cls): # noqa:N802 + def setUpTestData(cls): # NOQA:N802 """Create some data.""" super(MXTestCase, cls).setUpTestData() cls.domain = factories.DomainFactory(name="modoboa.org") @@ -138,7 +138,7 @@ class DNSBLTestCase(ModoTestCase): """TestCase for DNSBL related features.""" @classmethod - def setUpTestData(cls): # noqa:N802 + def setUpTestData(cls): # NOQA:N802 """Create some data.""" super(DNSBLTestCase, cls).setUpTestData() cls.domain = factories.DomainFactory(name="modoboa.org") diff --git a/modoboa/admin/tests/test_password_schemes.py b/modoboa/admin/tests/test_password_schemes.py index 4c2449bbf..646383fd7 100644 --- a/modoboa/admin/tests/test_password_schemes.py +++ b/modoboa/admin/tests/test_password_schemes.py @@ -10,18 +10,18 @@ from .. import factories class PasswordSchemesTestCase(ModoTestCase): @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(PasswordSchemesTestCase, cls).setUpTestData() factories.populate_database() def _create_account(self): - values = dict( - username="tester@test.com", first_name="Tester", last_name="Toto", - password1="Toto1234", password2="Toto1234", role="SimpleUsers", - quota_act=True, - is_active=True, email="tester@test.com", stepid="step2" - ) + values = { + "username": "tester@test.com", "first_name": "Tester", + "last_name": "Toto", "password1": "Toto1234", + "password2": "Toto1234", "role": "SimpleUsers", "quota_act": True, + "is_active": True, "email": "tester@test.com", "stepid": "step2" + } self.ajax_post( reverse("admin:account_add"), values diff --git a/modoboa/admin/tests/test_repair.py b/modoboa/admin/tests/test_repair.py index cef009468..ac3845215 100644 --- a/modoboa/admin/tests/test_repair.py +++ b/modoboa/admin/tests/test_repair.py @@ -13,7 +13,7 @@ class RepairTestCase(ModoTestCase): """TestCase for repair command.""" @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create some data.""" super(RepairTestCase, cls).setUpTestData() factories.populate_database() diff --git a/modoboa/admin/views/domain.py b/modoboa/admin/views/domain.py index ffa92f5df..8a9fb77c0 100644 --- a/modoboa/admin/views/domain.py +++ b/modoboa/admin/views/domain.py @@ -45,10 +45,10 @@ def _domains(request): if extra_filters: extra_filters = reduce( lambda a, b: a + b, [result[1] for result in extra_filters]) - filters = dict( - (flt, request.GET.get(flt, None)) + filters = { + flt: request.GET.get(flt, None) for flt in ["domfilter", "searchquery"] + extra_filters - ) + } request.session["domains_filters"] = filters domainlist = get_domains(request.user, **filters) if sort_order == "name": @@ -116,8 +116,6 @@ def domains_list(request): @login_required @permission_required("admin.add_domain") def list_quotas(request): - from modoboa.lib.db_utils import db_type - sort_order, sort_dir = get_sort_order(request.GET, "name") domains = Domain.objects.get_for_admin(request.user) domains = domains.exclude(quota=0) @@ -162,7 +160,7 @@ def editdomain(request, dom_id): if not request.user.can_access(domain): raise PermDeniedException - instances = dict(general=domain) + instances = {"general": domain} results = signals.get_domain_form_instances.send( sender="editdomain", user=request.user, domain=domain) for result in results: @@ -215,7 +213,7 @@ class DomainDetailView( "enable_mx_checks": parameters.get_value("enable_mx_checks"), "enable_dnsbl_checks": parameters.get_value("enable_dnsbl_checks"), }) - for receiver, widgets in result: + for _receiver, widgets in result: for widget in widgets: context["templates"][widget["column"]].append( widget["template"]) diff --git a/modoboa/admin/views/identity.py b/modoboa/admin/views/identity.py index 9379c3777..df4429321 100644 --- a/modoboa/admin/views/identity.py +++ b/modoboa/admin/views/identity.py @@ -30,8 +30,10 @@ from ..models import Domain, Mailbox u.has_perm("admin.add_alias") ) def _identities(request): - filters = dict((fname, request.GET.get(fname, None)) - for fname in ["searchquery", "idtfilter", "grpfilter"]) + filters = { + fname: request.GET.get(fname, None) + for fname in ["searchquery", "idtfilter", "grpfilter"] + } request.session["identities_filters"] = filters idents_list = get_identities(request.user, **filters) sort_order, sort_dir = get_sort_order(request.GET, "identity", @@ -173,8 +175,9 @@ def editaccount(request, pk): raise PermDeniedException mb = account.mailbox if hasattr(account, "mailbox") else None - instances = dict( - general=account, profile=account, mail=mb, perms=account) + instances = { + "general": account, "profile": account, "mail": mb, "perms": account + } results = signals.get_account_form_instances.send( sender="editaccount", user=request.user, account=account) for result in results: @@ -232,7 +235,7 @@ class AccountDetailView( result = signals.extra_account_dashboard_widgets.send( self.__class__, user=self.request.user, account=self.object) context["templates"] = {"left": [], "right": []} - for receiver, widgets in result: + for _receiver, widgets in result: for widget in widgets: context["templates"][widget["column"]].append( widget["template"]) diff --git a/modoboa/core/app_settings.py b/modoboa/core/app_settings.py index fb0488028..d08a12610 100644 --- a/modoboa/core/app_settings.py +++ b/modoboa/core/app_settings.py @@ -8,7 +8,6 @@ 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 ( HorizontalRadioSelect, SeparatorField, YesNoField ) @@ -341,7 +340,7 @@ class GeneralParametersForm(param_forms.AdminParametersForm): def clean_ldap_user_dn_template(self): tpl = self.cleaned_data["ldap_user_dn_template"] try: - test = tpl % {"user": "toto"} + tpl % {"user": "toto"} except (KeyError, ValueError): raise forms.ValidationError(_("Invalid syntax")) return tpl diff --git a/modoboa/core/apps.py b/modoboa/core/apps.py index a11d1d5c3..eff453ddc 100644 --- a/modoboa/core/apps.py +++ b/modoboa/core/apps.py @@ -30,7 +30,7 @@ class CoreConfig(AppConfig): load_core_settings() # Import these to force registration of checks and signals - from . import checks # noqa:F401 + from . import checks # NOQA:F401 from . import handlers signals.post_migrate.connect(handlers.create_local_config, sender=self) diff --git a/modoboa/core/checks/__init__.py b/modoboa/core/checks/__init__.py index 95e25bed1..e41b8f04b 100644 --- a/modoboa/core/checks/__init__.py +++ b/modoboa/core/checks/__init__.py @@ -1,4 +1,4 @@ # -*- coding: utf-8 -*- # Import these to force registration of checks -from . import settings_checks # noqa:F401 +from . import settings_checks # NOQA:F401 diff --git a/modoboa/core/commands/__init__.py b/modoboa/core/commands/__init__.py index 2c5a12529..a3bad62db 100644 --- a/modoboa/core/commands/__init__.py +++ b/modoboa/core/commands/__init__.py @@ -17,7 +17,7 @@ class Command(object): A valid administrative command must inherit from this class. """ - help = "No help available." + help = "No help available." # NOQA:A003 def __init__(self, commands, verbose=False): self._commands = commands diff --git a/modoboa/core/commands/deploy.py b/modoboa/core/commands/deploy.py index a09c840e6..e54d39dc3 100644 --- a/modoboa/core/commands/deploy.py +++ b/modoboa/core/commands/deploy.py @@ -18,6 +18,7 @@ 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 @@ -29,10 +30,6 @@ except ImportError: sys.exit(2) - -if sys.version_info < (3, 0, 0): - input = raw_input - DBCONN_TPL = """ '{{ conn_name }}': { 'ENGINE': '{{ ENGINE }}', @@ -53,7 +50,7 @@ class DeployCommand(Command): """The ``deploy`` command.""" - help = ( + help = ( # NOQA:A003 "Create a fresh django project (calling startproject)" " and apply Modoboa specific settings." ) diff --git a/modoboa/core/commands/help.py b/modoboa/core/commands/help.py index 9799f379d..2d8619589 100644 --- a/modoboa/core/commands/help.py +++ b/modoboa/core/commands/help.py @@ -9,7 +9,7 @@ from . import Command class HelpCommand(Command): - help = "Display the help message associated to a specific command" + help = "Display the help message associated to a specific command" # NOQA:A003 def __init__(self, *args, **kwargs): super(HelpCommand, self).__init__(*args, **kwargs) diff --git a/modoboa/core/extensions.py b/modoboa/core/extensions.py index 79323e1d1..6f7e43fd6 100644 --- a/modoboa/core/extensions.py +++ b/modoboa/core/extensions.py @@ -60,7 +60,7 @@ class ExtensionsPool(object): :param ext: a class inheriting from ``Extension`` :param show: list the extension or not """ - self.extensions[ext.name] = dict(cls=ext, show=show) + self.extensions[ext.name] = {"cls": ext, "show": show} def get_extension(self, name): """Retrieve the current instance of an extension.""" diff --git a/modoboa/core/management/commands/clean_inactive_accounts.py b/modoboa/core/management/commands/clean_inactive_accounts.py index 16fc826fe..c989ae949 100644 --- a/modoboa/core/management/commands/clean_inactive_accounts.py +++ b/modoboa/core/management/commands/clean_inactive_accounts.py @@ -15,7 +15,7 @@ from ... import models class Command(BaseCommand): """Management command to clean inactive accounts.""" - help = "Inactive accounts cleanup" + help = "Inactive accounts cleanup" # NOQA:A003 def add_arguments(self, parser): """Add extra arguments to command line.""" diff --git a/modoboa/core/management/commands/cleanlogs.py b/modoboa/core/management/commands/cleanlogs.py index 1513819c3..fa3632612 100644 --- a/modoboa/core/management/commands/cleanlogs.py +++ b/modoboa/core/management/commands/cleanlogs.py @@ -15,7 +15,7 @@ from modoboa.parameters import tools as param_tools class Command(BaseCommand): """Command class.""" - help = "Log table cleanup" + help = "Log table cleanup" # NOQA:A003 def add_arguments(self, parser): """Add extra arguments to command line.""" @@ -33,9 +33,9 @@ class Command(BaseCommand): def handle(self, *args, **options): if options["debug"]: - l = logging.getLogger("django.db.backends") - l.setLevel(logging.DEBUG) - l.addHandler(logging.StreamHandler()) + log = logging.getLogger("django.db.backends") + log.setLevel(logging.DEBUG) + log.addHandler(logging.StreamHandler()) self.verbose = options["verbose"] log_maximum_age = param_tools.get_global_parameter("log_maximum_age") diff --git a/modoboa/core/management/commands/communicate_with_public_api.py b/modoboa/core/management/commands/communicate_with_public_api.py index 59e0beb84..0cce51d0e 100644 --- a/modoboa/core/management/commands/communicate_with_public_api.py +++ b/modoboa/core/management/commands/communicate_with_public_api.py @@ -13,7 +13,7 @@ from ... import models class Command(BaseCommand): """Command class.""" - help = "Communicate with Modoboa public API." + help = "Communicate with Modoboa public API." # NOQA:A003 def handle(self, *args, **options): """Command entry point.""" diff --git a/modoboa/core/management/commands/generate_postfix_maps.py b/modoboa/core/management/commands/generate_postfix_maps.py index 8749da6f2..6071e928b 100644 --- a/modoboa/core/management/commands/generate_postfix_maps.py +++ b/modoboa/core/management/commands/generate_postfix_maps.py @@ -25,7 +25,7 @@ MAP_FILE_TEMPLATE = """# This file was generated on {{ date }} by running: class Command(BaseCommand): """Command class.""" - help = "Generate/update postfix map files." + help = "Generate/update postfix map files." # NOQA:A003 def add_arguments(self, parser): """Add extra arguments.""" diff --git a/modoboa/core/management/commands/load_initial_data.py b/modoboa/core/management/commands/load_initial_data.py index dd515b2a9..2f633d552 100644 --- a/modoboa/core/management/commands/load_initial_data.py +++ b/modoboa/core/management/commands/load_initial_data.py @@ -12,7 +12,6 @@ from functools import reduce from django.contrib.auth.models import Group 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, extensions, models, signals @@ -20,7 +19,7 @@ from ... import constants, extensions, models, signals class Command(BaseCommand): """Command definition.""" - help = "Load Modoboa initial data" + help = "Load Modoboa initial data" # NOQA:A003 def add_arguments(self, parser): """Add extra arguments to command.""" diff --git a/modoboa/core/management/commands/set_default_site.py b/modoboa/core/management/commands/set_default_site.py index 83ab25b95..982b3dae6 100644 --- a/modoboa/core/management/commands/set_default_site.py +++ b/modoboa/core/management/commands/set_default_site.py @@ -15,7 +15,7 @@ class Command(BaseCommand): """Management command to set the default site.""" - help = "Set default site (see django.contrib.sites)" + help = "Set default site (see django.contrib.sites)" # NOQA:A003 def add_arguments(self, parser): """Define command arguments.""" diff --git a/modoboa/core/password_hashers/__init__.py b/modoboa/core/password_hashers/__init__.py index 0a06ea924..31b90c437 100644 --- a/modoboa/core/password_hashers/__init__.py +++ b/modoboa/core/password_hashers/__init__.py @@ -4,10 +4,10 @@ Password hashers for Modoboa. from __future__ import unicode_literals -from modoboa.core.password_hashers.advanced import ( +from modoboa.core.password_hashers.advanced import ( # NOQA:F401 BLFCRYPTHasher, MD5CRYPTHasher, SHA256CRYPTHasher, SHA512CRYPTHasher ) -from modoboa.core.password_hashers.base import ( +from modoboa.core.password_hashers.base import ( # NOQA:F401 CRYPTHasher, MD5Hasher, PLAINHasher, SHA256Hasher ) diff --git a/modoboa/core/password_validation.py b/modoboa/core/password_validation.py index e69dac511..f9eb9d84f 100644 --- a/modoboa/core/password_validation.py +++ b/modoboa/core/password_validation.py @@ -19,7 +19,7 @@ class ComplexityValidator(object): special_characters = "~!@#$%^&*()_+{}\":;,'[]" condition = ( self.digits > 0 and - sum([1 for char in password if char.isdigit()]) < self.digits) + sum(1 for char in password if char.isdigit()) < self.digits) if condition: raise ValidationError( ungettext( @@ -29,7 +29,7 @@ class ComplexityValidator(object): ).format(self.digits)) condition = ( self.lower > 0 and - sum([1 for char in password if char.islower()]) < self.lower) + sum(1 for char in password if char.islower()) < self.lower) if condition: raise ValidationError( ungettext( @@ -40,7 +40,7 @@ class ComplexityValidator(object): .format(self.lower)) condition = ( self.upper > 0 and - sum([1 for char in password if char.isupper()]) < self.upper) + sum(1 for char in password if char.isupper()) < self.upper) if condition: raise ValidationError( ungettext( @@ -51,7 +51,7 @@ class ComplexityValidator(object): .format(self.upper)) condition = ( self.specials > 0 and - sum([1 for char in password if char in special_characters]) < + sum(1 for char in password if char in special_characters) < self.specials) if condition: raise ValidationError( diff --git a/modoboa/core/tests/test_authentication.py b/modoboa/core/tests/test_authentication.py index 99c32cf3d..ff23ed729 100644 --- a/modoboa/core/tests/test_authentication.py +++ b/modoboa/core/tests/test_authentication.py @@ -21,7 +21,7 @@ class AuthenticationTestCase(ModoTestCase): """Validate authentication scenarios.""" @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(AuthenticationTestCase, cls).setUpTestData() cls.account = factories.UserFactory( @@ -67,7 +67,7 @@ class PasswordResetTestCase(ModoTestCase): """Test password reset service.""" @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(PasswordResetTestCase, cls).setUpTestData() cls.account_ok = factories.UserFactory( diff --git a/modoboa/core/tests/test_core.py b/modoboa/core/tests/test_core.py index 28c4aed85..7fff6e4a9 100644 --- a/modoboa/core/tests/test_core.py +++ b/modoboa/core/tests/test_core.py @@ -20,7 +20,7 @@ class AuthenticationTestCase(ModoTestCase): """Validate authentication scenarios.""" @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(AuthenticationTestCase, cls).setUpTestData() cls.account = factories.UserFactory( @@ -101,7 +101,7 @@ class ProfileTestCase(ModoTestCase): """Profile related tests.""" @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(ProfileTestCase, cls).setUpTestData() cls.account = factories.UserFactory( @@ -160,7 +160,7 @@ class APIAccessFormTestCase(ModoTestCase): """Check form access.""" @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(APIAccessFormTestCase, cls).setUpTestData() cls.account = factories.UserFactory( diff --git a/modoboa/core/tests/test_ldap.py b/modoboa/core/tests/test_ldap.py index 98c566c04..ba20dcd91 100644 --- a/modoboa/core/tests/test_ldap.py +++ b/modoboa/core/tests/test_ldap.py @@ -130,7 +130,7 @@ class ProfileTestCase(LDAPTestCaseMixin, ModoTestCase): """Profile related tests.""" @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(ProfileTestCase, cls).setUpTestData() cls.account = factories.UserFactory( diff --git a/modoboa/core/tests/test_views.py b/modoboa/core/tests/test_views.py index d99560f50..33d8e7bb4 100644 --- a/modoboa/core/tests/test_views.py +++ b/modoboa/core/tests/test_views.py @@ -89,7 +89,7 @@ class DashboardTestCase(ModoTestCase): """Dashboard tests.""" @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create some data.""" super(DashboardTestCase, cls).setUpTestData() cls.dadmin = factories.UserFactory( diff --git a/modoboa/core/views/dashboard.py b/modoboa/core/views/dashboard.py index f44f0e8c1..748e642af 100644 --- a/modoboa/core/views/dashboard.py +++ b/modoboa/core/views/dashboard.py @@ -72,7 +72,7 @@ class DashboardView(auth_mixins.AccessMixin, generic.TemplateView): # Extra widgets result = signals.extra_admin_dashboard_widgets.send( sender=self.__class__, user=self.request.user) - for receiver, widgets in result: + for _receiver, widgets in result: for widget in widgets: context["widgets"][widget["column"]].append( widget["template"]) diff --git a/modoboa/lib/connections.py b/modoboa/lib/connections.py index 09287c5e8..8925991d3 100644 --- a/modoboa/lib/connections.py +++ b/modoboa/lib/connections.py @@ -11,27 +11,27 @@ class ConnectionsManager(type): This class is specialized in connection management. """ - def __init__(cls, name, bases, ctx): - super(ConnectionsManager, cls).__init__(name, bases, ctx) - cls.instances = {} + def __init__(self, name, bases, ctx): + super(ConnectionsManager, self).__init__(name, bases, ctx) + self.instances = {} - def __call__(cls, **kwargs): + def __call__(self, **kwargs): key = None if "user" in kwargs: key = kwargs["user"] else: return None - if key not in cls.instances: - cls.instances[key] = None + if key not in self.instances: + self.instances[key] = None if "password" in kwargs: kwargs["password"] = decrypt(kwargs["password"]) - if cls.instances[key] is None: - cls.instances[key] = \ - super(ConnectionsManager, cls).__call__(**kwargs) + if self.instances[key] is None: + self.instances[key] = \ + super(ConnectionsManager, self).__call__(**kwargs) else: - cls.instances[key].refresh(key, kwargs["password"]) - return cls.instances[key] + self.instances[key].refresh(key, kwargs["password"]) + return self.instances[key] class ConnectionError(Exception): diff --git a/modoboa/lib/email_utils.py b/modoboa/lib/email_utils.py index 13df77ac2..f1be3a8e6 100644 --- a/modoboa/lib/email_utils.py +++ b/modoboa/lib/email_utils.py @@ -387,7 +387,7 @@ def set_email_headers(msg, subject, sender, rcpt): msg["Date"] = formatdate(time.time(), True) -def __sendmail(sender, rcpt, msgstring, server="localhost", port=25): +def _sendmail(sender, rcpt, msgstring, server="localhost", port=25): """Message sending Return a tuple (True, None) on success, (False, error message) @@ -426,7 +426,7 @@ def sendmail_simple( """ msg = MIMEText(content, _charset="utf-8") set_email_headers(msg, subject, sender, rcpt) - return __sendmail(sender, rcpt, msg.as_string(), **kwargs) + return _sendmail(sender, rcpt, msg.as_string(), **kwargs) def sendmail_fromfile(sender, rcpt, fname): @@ -452,4 +452,4 @@ To: %s content += fp.read() fp.close() - return __sendmail(sender, rcpt, content) + return _sendmail(sender, rcpt, content) diff --git a/modoboa/lib/imap_utf7.py b/modoboa/lib/imap_utf7.py index 050e92a35..0e305c803 100644 --- a/modoboa/lib/imap_utf7.py +++ b/modoboa/lib/imap_utf7.py @@ -65,7 +65,7 @@ def modified_utf7(s): return s_utf7[1:-1].replace(b"/", b",") -def doB64(_in, r): +def doB64(_in, r): # NOQA:N802 if _in: r.extend([b"&", modified_utf7("".join(_in)), b"-"]) del _in[:] @@ -137,32 +137,32 @@ codecs.register(imap4_utf_7) # testing methods -def imapUTF7Encode(ust): +def imapUTF7Encode(ust): # NOQA:N802 "Returns imap utf-7 encoded version of string" return ust.encode("imap4-utf-7") -def imapUTF7EncodeSequence(seq): +def imapUTF7EncodeSequence(seq): # NOQA:N802 "Returns imap utf-7 encoded version of strings in sequence" return [imapUTF7Encode(itm) for itm in seq] -def imapUTF7Decode(st): +def imapUTF7Decode(st): # NOQA:N802 "Returns utf7 encoded version of imap utf-7 string" return st.decode("imap4-utf-7") -def imapUTF7DecodeSequence(seq): +def imapUTF7DecodeSequence(seq): # NOQA:N802 "Returns utf7 encoded version of imap utf-7 strings in sequence" return [imapUTF7Decode(itm) for itm in seq] -def utf8Decode(st): +def utf8Decode(st): # NOQA:N802 "Returns utf7 encoded version of imap utf-7 string" return st.decode("utf-8") -def utf7SequenceToUTF8(seq): +def utf7SequenceToUTF8(seq): # NOQA:N802 "Returns utf7 encoded version of imap utf-7 strings in sequence" return [itm.decode("imap4-utf-7").encode("utf-8") for itm in seq] @@ -171,33 +171,33 @@ __all__ = ["imapUTF7Encode", "imapUTF7Decode", ] if __name__ == "__main__": - # print u'bøx'.encode('imap4-utf-7') + # print u'bøx'.encode('imap4-utf-7') # print 'expected b&APg-x' - # print u'båx'.encode('imap4-utf-7') + # print u'bÃ¥x'.encode('imap4-utf-7') # print 'expected b&AOU-x' print("#######") - print("bøx") - e = imapUTF7Encode(u'bøx') + print("bøx") + e = imapUTF7Encode(u'bøx') print(e) print(imapUTF7Decode(e).encode("latin-1")) print("#######") - print("båx") - e = imapUTF7Encode(u'båx') + print("bÃ¥x") + e = imapUTF7Encode(u'bÃ¥x') print(e) print(imapUTF7Decode(e).encode("latin-1")) print("#######") - print("~/bågø") - e = imapUTF7Encode(u'~/bågø') + print("~/bÃ¥gø") + e = imapUTF7Encode(u'~/bÃ¥gø') print(e) print(imapUTF7Decode(e).encode("latin-1")) print("#######") - print("Ting & Såger") - e = imapUTF7Encode(u'Ting & Såger') + print("Ting & SÃ¥ger") + e = imapUTF7Encode(u'Ting & SÃ¥ger') print(e) print(imapUTF7Decode(e).encode("latin-1")) @@ -208,8 +208,8 @@ if __name__ == "__main__": # print e.encode('latin-1') print("#######") - print("~/Følder/mailbåx & stuff + more") - n = u'~/Følder/mailbåx & stuff + more' + print("~/Følder/mailbÃ¥x & stuff + more") + n = u'~/Følder/mailbÃ¥x & stuff + more' e = imapUTF7Encode(n) print(e) print(imapUTF7Decode(e).encode("latin-1")) diff --git a/modoboa/lib/middleware.py b/modoboa/lib/middleware.py index 9e602dc82..ae86808dd 100644 --- a/modoboa/lib/middleware.py +++ b/modoboa/lib/middleware.py @@ -19,7 +19,7 @@ class AjaxLoginRedirect(MiddlewareMixin): def process_response(self, request, response): if request.is_ajax(): - if type(response) == HttpResponseRedirect: + if isinstance(response, HttpResponseRedirect): response.status_code = 278 return response @@ -41,7 +41,7 @@ class CommonExceptionCatcher(MiddlewareMixin): smart_text(exception), status=exception.http_code ) return _render_error( - request, user_context=dict(error=smart_text(exception)) + request, user_context={"error": smart_text(exception)} ) diff --git a/modoboa/lib/singleton.py b/modoboa/lib/singleton.py index 945fe682e..65c9a90aa 100644 --- a/modoboa/lib/singleton.py +++ b/modoboa/lib/singleton.py @@ -5,11 +5,11 @@ from __future__ import unicode_literals class _Singleton(type): _instances = {} - def __call__(cls, *args, **kwargs): - if cls not in cls._instances: - cls._instances[cls] = \ - super(_Singleton, cls).__call__(*args, **kwargs) - return cls._instances[cls] + def __call__(self, *args, **kwargs): + if self not in self._instances: + self._instances[self] = \ + super(_Singleton, self).__call__(*args, **kwargs) + return self._instances[self] class Singleton(_Singleton("SingletonMeta", (object,), {})): diff --git a/modoboa/lib/templatetags/form_tags.py b/modoboa/lib/templatetags/form_tags.py index 77a2570e5..4ad4c4b2c 100644 --- a/modoboa/lib/templatetags/form_tags.py +++ b/modoboa/lib/templatetags/form_tags.py @@ -18,7 +18,7 @@ register = template.Library() def render_form(form, tpl=None): """Render a form.""" if tpl is not None: - return render_to_string(tpl, dict(form=form)) + return render_to_string(tpl, {"form": form}) ret = "" for field in form: @@ -44,7 +44,7 @@ def render_field( """Render a field.""" from modoboa.core.templatetags.core_tags import visirule - if type(field.field) is SeparatorField: + if isinstance(field.field, SeparatorField): return "%s" % (visirule(field), smart_text(field.label)) configure_field_classes(field) context = { @@ -75,10 +75,11 @@ def render_fields_group(form, pattern): group += [bfield] cpt += 1 - return render_to_string("common/generic_fields_group.html", dict( - label=label, help_text=first.help_text, group=group, haserror=haserror, - pattern=pattern - )) + return render_to_string( + "common/generic_fields_group.html", + {"label": label, "help_text": first.help_text, "group": group, + "haserror": haserror, "pattern": pattern} + ) @register.simple_tag diff --git a/modoboa/lib/templatetags/lib_tags.py b/modoboa/lib/templatetags/lib_tags.py index 699e8ea5b..ebd09c163 100644 --- a/modoboa/lib/templatetags/lib_tags.py +++ b/modoboa/lib/templatetags/lib_tags.py @@ -36,7 +36,7 @@ def alert(msg, typ): {{ msg }} """) - return t.render(Context(dict(type=typ, msg=msg))) + return t.render(Context({"type": typ, "msg": msg})) @register.simple_tag @@ -51,7 +51,7 @@ class="{{ mdclass }}{% if link.class %} {{ link.class }}{% endif %}" > {% if link.img %}{% endif %} {{ link.label }}""") - return t.render(Context(dict(link=linkdef, mdclass=mdclass))) + return t.render(Context({"link": linkdef, "mdclass": mdclass})) @register.simple_tag diff --git a/modoboa/lib/web_utils.py b/modoboa/lib/web_utils.py index 8870e86ad..c5cf371e3 100644 --- a/modoboa/lib/web_utils.py +++ b/modoboa/lib/web_utils.py @@ -29,7 +29,7 @@ def render_actions(actions): t = template.Template("""{% load lib_tags %} {% for a in actions %}{% render_link a %}{% endfor %} """) - return t.render(template.Context(dict(actions=actions))) + return t.render(template.Context({"actions": actions})) def getctx(status, level=1, callback=None, **kwargs): diff --git a/modoboa/limits/apps.py b/modoboa/limits/apps.py index 4716d1f19..5b6628993 100644 --- a/modoboa/limits/apps.py +++ b/modoboa/limits/apps.py @@ -24,4 +24,4 @@ class LimitsConfig(AppConfig): def ready(self): load_limits_settings() - from . import handlers + from . import handlers # NOQA:F401 diff --git a/modoboa/limits/forms.py b/modoboa/limits/forms.py index 149baa6d4..df8e0b6c7 100644 --- a/modoboa/limits/forms.py +++ b/modoboa/limits/forms.py @@ -51,16 +51,16 @@ class ResourcePoolForm(forms.Form): def save(self): owner = get_object_owner(self.account) - for name, ltpl in utils.get_user_limit_templates(): + for name, _definition in utils.get_user_limit_templates(): fieldname = "{}_limit".format(name) if fieldname not in self.cleaned_data: continue - l = self.account.userobjectlimit_set.get(name=name) + limit = self.account.userobjectlimit_set.get(name=name) if not owner.is_superuser: allocate_resources_from_user( - l, owner, self.cleaned_data[fieldname]) - l.max_value = self.cleaned_data[fieldname] - l.save(update_fields=["max_value"]) + limit, owner, self.cleaned_data[fieldname]) + limit.max_value = self.cleaned_data[fieldname] + limit.save(update_fields=["max_value"]) class DomainLimitsForm(forms.Form): @@ -93,10 +93,10 @@ class DomainLimitsForm(forms.Form): def save(self, user, **kwargs): """Set limits.""" - for name, ltpl in utils.get_domain_limit_templates(): + for name, _definition in utils.get_domain_limit_templates(): fieldname = "{}_limit".format(name) if fieldname not in self.cleaned_data: continue - l = self.domain.domainobjectlimit_set.get(name=name) - l.max_value = self.cleaned_data[fieldname] - l.save() + limit = self.domain.domainobjectlimit_set.get(name=name) + limit.max_value = self.cleaned_data[fieldname] + limit.save() diff --git a/modoboa/limits/handlers.py b/modoboa/limits/handlers.py index ba080bcbd..36e9838b2 100644 --- a/modoboa/limits/handlers.py +++ b/modoboa/limits/handlers.py @@ -62,7 +62,7 @@ def create_domain_limits(sender, instance, **kwargs): if not kwargs.get("created"): return global_params = dict(param_tools.get_global_parameters("limits")) - for name, definition in utils.get_domain_limit_templates(): + for name, _definition in utils.get_domain_limit_templates(): max_value = global_params["deflt_domain_{0}_limit".format(name)] models.DomainObjectLimit.objects.create( domain=instance, name=name, max_value=max_value) @@ -267,7 +267,7 @@ def display_pool_usage(sender, user, location, currentpage, **kwargs): return [] return [ render_to_string("limits/poolusage.html", - dict(limits=limits)) + {"limits": limits}) ] diff --git a/modoboa/limits/serializers.py b/modoboa/limits/serializers.py index 8b447ad71..a8ebd9c93 100644 --- a/modoboa/limits/serializers.py +++ b/modoboa/limits/serializers.py @@ -19,9 +19,10 @@ class ResourcesSerializer(serializers.Serializer): def to_representation(self, instance): """Return limits.""" - return dict( + return [ (limit.name, limit.max_value) - for limit in instance.userobjectlimit_set.all()) + for limit in instance.userobjectlimit_set.all() + ] def update(self, instance, validated_data): """Update limits.""" diff --git a/modoboa/limits/tests/test_api.py b/modoboa/limits/tests/test_api.py index efc4ddae9..7c1e28d51 100644 --- a/modoboa/limits/tests/test_api.py +++ b/modoboa/limits/tests/test_api.py @@ -21,10 +21,10 @@ class APIAdminLimitsTestCase(lib_tests.ModoAPITestCase): """Check that limits are used also by the API.""" @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(APIAdminLimitsTestCase, cls).setUpTestData() - for name, tpl in utils.get_user_limit_templates(): + for name, _definition in utils.get_user_limit_templates(): cls.localconfig.parameters.set_value( "deflt_user_{0}_limit".format(name), 2) cls.localconfig.save() @@ -199,12 +199,12 @@ class APIDomainLimitsTestCase(lib_tests.ModoAPITestCase): """Check that limits are used also by the API.""" @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(APIDomainLimitsTestCase, cls).setUpTestData() cls.localconfig.parameters.set_value( "enable_domain_limits", True) - for name, tpl in utils.get_domain_limit_templates(): + for name, _definition in utils.get_domain_limit_templates(): cls.localconfig.parameters.set_value( "deflt_domain_{0}_limit".format(name), 2) cls.localconfig.save() @@ -264,10 +264,10 @@ class ResourcesAPITestCase(lib_tests.ModoAPITestCase): """Check resources API.""" @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(ResourcesAPITestCase, cls).setUpTestData() - for name, tpl in utils.get_user_limit_templates(): + for name, _definition in utils.get_user_limit_templates(): cls.localconfig.parameters.set_value( "deflt_user_{0}_limit".format(name), 2) cls.localconfig.save() diff --git a/modoboa/limits/tests/test_domain_limits.py b/modoboa/limits/tests/test_domain_limits.py index 381ec7d0b..a83fb23ca 100644 --- a/modoboa/limits/tests/test_domain_limits.py +++ b/modoboa/limits/tests/test_domain_limits.py @@ -17,14 +17,14 @@ class DomainLimitsTestCase(lib_tests.ModoTestCase): """Per-domain limits tests.""" @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(DomainLimitsTestCase, cls).setUpTestData() cls.localconfig.parameters.set_values({ "enable_admin_limits": False, "enable_domain_limits": True }) - for name, tpl in utils.get_domain_limit_templates(): + for name, _definition in utils.get_domain_limit_templates(): cls.localconfig.parameters.set_value( "deflt_domain_{0}_limit".format(name), 2) cls.localconfig.save() diff --git a/modoboa/limits/tests/test_import.py b/modoboa/limits/tests/test_import.py index 31c0b0bb0..f70516675 100644 --- a/modoboa/limits/tests/test_import.py +++ b/modoboa/limits/tests/test_import.py @@ -15,7 +15,7 @@ class LimitImportTestCase(ModoTestCase): """Base class to test limits.""" @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(LimitImportTestCase, cls).setUpTestData() admin_factories.populate_database() @@ -132,10 +132,10 @@ alias; alias3@{domain}; True; user@{domain} class UserLimitImportTestCase(LimitImportTestCase): @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create test data.""" localconfig = core_models.LocalConfig.objects.first() - for name, tpl in utils.get_user_limit_templates(): + for name, _definition in utils.get_user_limit_templates(): localconfig.parameters.set_value( "deflt_user_{0}_limit".format(name), 2) localconfig.save() @@ -198,14 +198,14 @@ domain; domain3.com; 1000; 100; True class DomainLimitImportTestCase(LimitImportTestCase): @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create test data.""" localconfig = core_models.LocalConfig.objects.first() localconfig.parameters.set_values({ "enable_domain_limits": True, "enable_admin_limits": False }) - for name, tpl in utils.get_domain_limit_templates(): + for name, _definition in utils.get_domain_limit_templates(): localconfig.parameters.set_value( "deflt_domain_{0}_limit".format(name), 2) localconfig.save() diff --git a/modoboa/limits/tests/test_user_limits.py b/modoboa/limits/tests/test_user_limits.py index 3200e9bda..c20df8258 100644 --- a/modoboa/limits/tests/test_user_limits.py +++ b/modoboa/limits/tests/test_user_limits.py @@ -16,7 +16,7 @@ from .. import utils class PermissionsTestCase(lib_tests.ModoTestCase): @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(PermissionsTestCase, cls).setUpTestData() populate_database() @@ -26,11 +26,12 @@ class PermissionsTestCase(lib_tests.ModoTestCase): Expected result: no. """ - values = dict( - username="reseller@test.com", first_name="Reseller", last_name="", - password1="Toto1234", password2="Toto1234", role="Resellers", - is_active=True, email="reseller@test.com", stepid="step2" - ) + values = { + "username": "reseller@test.com", "first_name": "Reseller", + "last_name": "", "password1": "Toto1234", "password2": "Toto1234", + "role": "Resellers", "is_active": True, + "email": "reseller@test.com", "stepid": "step2" + } self.ajax_post(reverse("admin:account_add"), values) account = User.objects.get(username="reseller@test.com") self.client.logout() @@ -45,14 +46,14 @@ class PermissionsTestCase(lib_tests.ModoTestCase): class ResourceTestCase(lib_tests.ModoTestCase): @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Custom setUpTestData method.""" super(ResourceTestCase, cls).setUpTestData() cls.localconfig.parameters.set_values({ "enable_admin_limits": True, "enable_domain_limits": False }) - for name, tpl in utils.get_user_limit_templates(): + for name, _definition in utils.get_user_limit_templates(): cls.localconfig.parameters.set_value( "deflt_user_{0}_limit".format(name), 2) cls.localconfig.save() @@ -60,21 +61,21 @@ class ResourceTestCase(lib_tests.ModoTestCase): def _create_account( self, username, role="SimpleUsers", status=200, **kwargs): - values = dict( - username=username, first_name="Tester", last_name="Toto", - password1="Toto1234", password2="Toto1234", role=role, - quota_act=True, - is_active=True, email=username, stepid="step2", - ) + values = { + "username": username, "first_name": "Tester", "last_name": "Toto", + "password1": "Toto1234", "password2": "Toto1234", "role": role, + "quota_act": True, "is_active": True, "email": username, + "stepid": "step2" + } values.update(kwargs) return self.ajax_post( reverse("admin:account_add"), values, status ) def _create_alias(self, email, rcpt="user@test.com", status=200): - values = dict( - address=email, recipients=rcpt, enabled=True - ) + values = { + "address": email, "recipients": rcpt, "enabled": True + } return self.ajax_post( reverse("admin:alias_add"), values, status ) @@ -118,15 +119,15 @@ class ResourceTestCase(lib_tests.ModoTestCase): ) def _check_limit(self, name, curvalue, maxvalue): - l = self.user.userobjectlimit_set.get(name=name) - self.assertEqual(l.current_value, curvalue) - self.assertEqual(l.max_value, maxvalue) + limit = self.user.userobjectlimit_set.get(name=name) + self.assertEqual(limit.current_value, curvalue) + self.assertEqual(limit.max_value, maxvalue) class DomainAdminTestCase(ResourceTestCase): @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(DomainAdminTestCase, cls).setUpTestData() cls.user = User.objects.get(username="admin@test.com") @@ -173,12 +174,12 @@ class DomainAdminTestCase(ResourceTestCase): def test_aliases_limit_through_account_form(self): user = User.objects.get(username="user@test.com") - values = dict( - username=user.username, role=user.role, - is_active=user.is_active, email=user.email, quota_act=True, - aliases="alias1@test.com", aliases_1="alias2@test.com", - language="en" - ) + values = { + "username": user.username, "role": user.role, + "is_active": user.is_active, "email": user.email, "quota_act": True, + "aliases": "alias1@test.com", "aliases_1": "alias2@test.com", + "language": "en" + } self.ajax_post( reverse("admin:account_change", args=[user.id]), values @@ -190,7 +191,7 @@ class DomainAdminTestCase(ResourceTestCase): class ResellerTestCase(ResourceTestCase): @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(ResellerTestCase, cls).setUpTestData() cls.localconfig.parameters.set_value("deflt_user_quota_limit", 1000) diff --git a/modoboa/limits/utils.py b/modoboa/limits/utils.py index 265a579ca..c98127909 100644 --- a/modoboa/limits/utils.py +++ b/modoboa/limits/utils.py @@ -21,10 +21,10 @@ def move_pool_resource(owner, user): When an account doesn't need a pool anymore, we move the associated resource to the pool of its owner. """ - for name, ltpl in get_user_limit_templates(): - l = user.userobjectlimit_set.get(name=name) - if l.max_value < 0: + for name, _definition in get_user_limit_templates(): + user_limit = user.userobjectlimit_set.get(name=name) + if user_limit.max_value < 0: continue - ol = owner.userobjectlimit_set.get(name=name) - ol.max_value += l.max_value - ol.save() + owner_limit = owner.userobjectlimit_set.get(name=name) + owner_limit.max_value += user_limit.max_value + owner_limit.save() diff --git a/modoboa/parameters/forms.py b/modoboa/parameters/forms.py index 5a0c72aa2..f2b638ebc 100644 --- a/modoboa/parameters/forms.py +++ b/modoboa/parameters/forms.py @@ -70,7 +70,7 @@ class AdminParametersForm(GenericParametersForm): """Save parameters to database.""" parameters = {} for name, value in list(self.cleaned_data.items()): - if type(self.fields[name]) is form_utils.SeparatorField: + if isinstance(self.fields[name], form_utils.SeparatorField): continue parameters[name] = value self.localconfig.parameters.set_values(parameters, app=self.app) @@ -101,7 +101,7 @@ class UserParametersForm(GenericParametersForm): """Save new values.""" parameters = {} for name, value in list(self.cleaned_data.items()): - if type(self.fields[name]) is form_utils.SeparatorField: + if isinstance(self.fields[name], form_utils.SeparatorField): continue parameters[name] = value self.user.parameters.set_values(parameters, app=self.app) diff --git a/modoboa/parameters/tests.py b/modoboa/parameters/tests.py deleted file mode 100644 index 36fcdafd1..000000000 --- a/modoboa/parameters/tests.py +++ /dev/null @@ -1,5 +0,0 @@ -from __future__ import unicode_literals - -from django.test import TestCase - -# Create your tests here. diff --git a/modoboa/parameters/tools.py b/modoboa/parameters/tools.py index 81c4893c4..a8271fa13 100644 --- a/modoboa/parameters/tools.py +++ b/modoboa/parameters/tools.py @@ -42,10 +42,10 @@ class Registry(object): def _load_default_values(self, level): """Load default values.""" - for app, data in list(self._registry[level].items()): + for _app, data in list(self._registry[level].items()): form = data["formclass"](load_values_from_db=False) for name, field in list(form.fields.items()): - if type(field) is form_utils.SeparatorField: + if isinstance(field, form_utils.SeparatorField): continue data["defaults"][name] = field.initial @@ -56,8 +56,10 @@ class Registry(object): if first_app in self._registry[level]: sorted_apps.append(first_app) sorted_apps += sorted( - [a for a in list(self._registry[level].keys()) - if a != first_app], + ( + a for a in self._registry[level] + if a != first_app + ), key=lambda a: self._registry[level][a]["label"] ) result = [] diff --git a/modoboa/relaydomains/apps.py b/modoboa/relaydomains/apps.py index 8a0236773..36264f568 100644 --- a/modoboa/relaydomains/apps.py +++ b/modoboa/relaydomains/apps.py @@ -13,5 +13,5 @@ class RelayDomainsConfig(AppConfig): verbose_name = "Modoboa relay domains" def ready(self): - from . import handlers - from . import transport + from . import handlers # NOQA:F401 + from . import transport # NOQA:F401 diff --git a/modoboa/relaydomains/tests.py b/modoboa/relaydomains/tests.py index 68e837fcc..c45fdadc1 100644 --- a/modoboa/relaydomains/tests.py +++ b/modoboa/relaydomains/tests.py @@ -64,15 +64,15 @@ class Operations(object): ) def _check_limit(self, name, curvalue, maxvalue): - l = self.user.userobjectlimit_set.get(name=name) - self.assertEqual(l.current_value, curvalue) - self.assertEqual(l.max_value, maxvalue) + limit = self.user.userobjectlimit_set.get(name=name) + self.assertEqual(limit.current_value, curvalue) + self.assertEqual(limit.max_value, maxvalue) class RelayDomainsTestCase(ModoTestCase, Operations): @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(RelayDomainsTestCase, cls).setUpTestData() admin_factories.populate_database() @@ -305,10 +305,10 @@ class ImportTestCase(ModoTestCase): class LimitsTestCase(ModoTestCase, Operations): @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 """Create test data.""" super(LimitsTestCase, cls).setUpTestData() - for name, tpl in limits_utils.get_user_limit_templates(): + for name, _definition in limits_utils.get_user_limit_templates(): cls.localconfig.parameters.set_value( "deflt_user_{0}_limit".format(name), 2, app="limits") cls.localconfig.save() @@ -371,7 +371,7 @@ class DataMixin(object): """A mixin to provide test data.""" @classmethod - def setUpTestData(cls): + def setUpTestData(cls): # NOQA:N802 super(DataMixin, cls).setUpTestData() transport = tr_factories.TransportFactory( pattern="test.com", _settings={ diff --git a/modoboa/transport/apps.py b/modoboa/transport/apps.py index dbdcce73b..5a1797cfe 100644 --- a/modoboa/transport/apps.py +++ b/modoboa/transport/apps.py @@ -7,4 +7,4 @@ class TransportConfig(AppConfig): name = "modoboa.transport" def ready(self): - from . import handlers + from . import handlers # NOQA:F401 diff --git a/modoboa/transport/backends.py b/modoboa/transport/backends.py index 53e5e2789..b6923b16d 100644 --- a/modoboa/transport/backends.py +++ b/modoboa/transport/backends.py @@ -76,10 +76,13 @@ class TransportBackendManager(object): def get_backend_list(self): """Return known backend list.""" - return sorted([ - (key, key) - for key, backend in self.backends.items() - ], key=lambda i: i[1]) + return sorted( + ( + (key, key) + for key, backend in self.backends.items() + ), + key=lambda i: i[1] + ) def get_backend_settings(self, name): """Return backend settings."""