diff --git a/modoboa/core/tests/test_views.py b/modoboa/core/tests/test_views.py index 88ca94b41..7396866c8 100644 --- a/modoboa/core/tests/test_views.py +++ b/modoboa/core/tests/test_views.py @@ -1,7 +1,5 @@ """Core views test cases.""" -import json - from testfixtures import compare from django import forms @@ -29,7 +27,7 @@ class LoginTestCase(ModoTestCase): signals.get_announcements.connect(announcement) response = self.client.get(reverse("core:login")) self.assertEqual(response.status_code, 200) - self.assertIn("This is an annoucement!", response.content) + self.assertIn("This is an annoucement!", str(response.content)) class DashboardTestCase(ModoTestCase): @@ -51,12 +49,12 @@ class DashboardTestCase(ModoTestCase): url = reverse("core:dashboard") response = self.client.get(url) self.assertEqual(response.status_code, 200) - self.assertIn("Latest news", response.content) + self.assertIn("Latest news", str(response.content)) self.client.logout() self.client.login(username=self.dadmin.username, password="toto") response = self.client.get(url) self.assertEqual(response.status_code, 200) - self.assertIn("Latest news", response.content) + self.assertIn("Latest news", str(response.content)) self.client.logout() self.client.login(username=self.user.username, password="toto") response = self.client.get(url) @@ -100,7 +98,7 @@ class DashboardTestCase(ModoTestCase): url = reverse("core:top_notifications_check") response = self.client.get(url) self.assertEqual(response.status_code, 200) - self.assertEqual(len(json.loads(response.content)), 1) + self.assertEqual(len(response.json()), 1) class SettingsTestCase(ModoTestCase): diff --git a/modoboa/lib/authbackends.py b/modoboa/lib/authbackends.py index c3c1c3f8b..f70acdb5c 100644 --- a/modoboa/lib/authbackends.py +++ b/modoboa/lib/authbackends.py @@ -14,11 +14,6 @@ class SMTPBackend(object): def authenticate(self, username=None, password=None): """Check the username/password and return a User.""" - if type(username) is unicode: - username = username.encode("utf-8") - if type(password) is unicode: - password = password.encode("utf-8") - host = getattr(settings, "AUTH_SMTP_SERVER_ADDRESS", "localhost") port = getattr(settings, "AUTH_SMTP_SERVER_PORT", 25) secured_mode = getattr(settings, "AUTH_SMTP_SECURED_MODE", None) diff --git a/modoboa/lib/cryptutils.py b/modoboa/lib/cryptutils.py index f0401ded7..4a6a22d5a 100644 --- a/modoboa/lib/cryptutils.py +++ b/modoboa/lib/cryptutils.py @@ -17,7 +17,7 @@ def random_key(l=16): :return: a string """ punctuation = """!#$%&'()*+,-./:;<=>?@[]^_`{|}~""" - population = string.digits + string.letters + punctuation + population = string.digits + string.ascii_letters + punctuation while True: key = "".join(random.sample(population * l, l)) if len(key) == l: @@ -27,13 +27,12 @@ def random_key(l=16): def encrypt(clear): key = param_tools.get_global_parameter("secret_key", app="core") obj = AES.new(key, AES.MODE_ECB) - if type(clear) is unicode: - clear = clear.encode("utf-8") + clear = str(clear) if len(clear) % AES.block_size: clear += " " * (AES.block_size - len(clear) % AES.block_size) ciph = obj.encrypt(clear) ciph = base64.b64encode(ciph) - return ciph + return str(ciph) def decrypt(ciph): diff --git a/modoboa/lib/form_utils.py b/modoboa/lib/form_utils.py index a5acd2573..c9c2b295f 100644 --- a/modoboa/lib/form_utils.py +++ b/modoboa/lib/form_utils.py @@ -12,7 +12,7 @@ from django.forms.fields import Field from django.forms.widgets import RadioSelect from django.forms.widgets import RadioChoiceInput from django.shortcuts import render -from django.utils.encoding import force_unicode +from django.utils.encoding import force_text from django.utils.html import conditional_escape from django.utils.safestring import mark_safe from django.utils.translation import ugettext as _, ugettext_lazy @@ -376,7 +376,7 @@ class CustomRadioInput(RadioChoiceInput): label_for = ' for="%s"' % self.attrs["id"] else: label_for = "" - choice_label = conditional_escape(force_unicode(self.choice_label)) + choice_label = conditional_escape(force_text(self.choice_label)) return mark_safe( u"" % (label_for, self.tag(), choice_label) @@ -394,7 +394,7 @@ class InlineRadioRenderer(RadioSelect.renderer): def render(self): return mark_safe( - u"\n".join([u"%s\n" % force_unicode(w) for w in self]) + u"\n".join([u"%s\n" % force_text(w) for w in self]) ) diff --git a/modoboa/lib/permissions.py b/modoboa/lib/permissions.py index 202dc9496..06bb09883 100644 --- a/modoboa/lib/permissions.py +++ b/modoboa/lib/permissions.py @@ -143,7 +143,7 @@ def get_object_owner(obj): def add_permissions_to_group(group, permissions): """Add the specified permissions to a django group.""" - if isinstance(group, basestring): + if isinstance(group, str): group = Group.objects.get(name=group) for appname, modelname, permname in permissions: diff --git a/modoboa/lib/tests.py b/modoboa/lib/tests.py index 7fe724c88..4e7822795 100644 --- a/modoboa/lib/tests.py +++ b/modoboa/lib/tests.py @@ -2,7 +2,6 @@ """Testing utilities.""" from builtins import object -import json from django.core import management from django.test import TestCase @@ -65,7 +64,7 @@ class ModoTestCase(ParametersMixin, TestCase): response = getattr(self.client, method)( url, params, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.assertEqual(response.status_code, status) - return json.loads(response.content) + return response.json() def ajax_post(self, *args, **kwargs): return self.ajax_request('post', *args, **kwargs) diff --git a/modoboa/lib/u2u_decode.py b/modoboa/lib/u2u_decode.py index f453f6768..cf4880c62 100644 --- a/modoboa/lib/u2u_decode.py +++ b/modoboa/lib/u2u_decode.py @@ -33,7 +33,7 @@ def decode_mime(m): def u2u_decode(s): - ur"""utility function for (final) decoding of mime header + """utility function for (final) decoding of mime header note: resulting string is in one line (no \n within) note2: spaces between enc_words are stripped (see RFC2047) diff --git a/modoboa/lib/validators.py b/modoboa/lib/validators.py index ee4cda012..e86adeed3 100644 --- a/modoboa/lib/validators.py +++ b/modoboa/lib/validators.py @@ -45,9 +45,9 @@ class UTF8EmailValidator(EmailValidator): ascii_set = u"-!#$%&'*+/=?^_`{}|~0-9A-Z" user_regex_raw = ( # dot-atom - ur"^[" + ascii_set + ul + "]+(\.[" + ascii_set + ul + "]+)*\Z" + u"^[" + ascii_set + ul + "]+(\.[" + ascii_set + ul + "]+)*\Z" # quoted-string - ur'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-\011\013\014\016-\177])*"\Z)' + u'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-\011\013\014\016-\177])*"\Z)' ) user_regex = re.compile("(" + user_regex_raw, re.IGNORECASE) @@ -59,6 +59,6 @@ class UTF8AndEmptyUserEmailValidator(UTF8EmailValidator): """Same as upper + allows empty local part.""" user_regex = re.compile( - ur"(^$|" + UTF8EmailValidator.user_regex_raw, re.IGNORECASE) + u"(^$|" + UTF8EmailValidator.user_regex_raw, re.IGNORECASE) validate_utf8_and_empty_user_email = UTF8AndEmptyUserEmailValidator()