From cafd6756ff43c916e04744a39d2964ac9315b534 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Flor=C3=A9al=20Cabanettes?= Date: Mon, 10 Jul 2023 23:54:52 +0200 Subject: [PATCH 1/5] Use asyncio from redis instead of aioredis to make app python 3.11 compatible --- modoboa/policyd/core.py | 2 +- requirements.txt | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/modoboa/policyd/core.py b/modoboa/policyd/core.py index 58b1bfedf..ed710293a 100644 --- a/modoboa/policyd/core.py +++ b/modoboa/policyd/core.py @@ -8,7 +8,7 @@ import logging import aiosmtplib from dateutil.relativedelta import relativedelta -import aioredis +from redis import asyncio as aioredis from django.conf import settings from django.db import connections diff --git a/requirements.txt b/requirements.txt index 323182108..ab4a3fa06 100644 --- a/requirements.txt +++ b/requirements.txt @@ -37,7 +37,6 @@ rrdtool>=0.1.10 qrcode aiosmtplib -aioredis==2.0.1 # PDF credentials reportlab From 6bc7d106ea20ef0888bfd1b42a2955523e18800f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Flor=C3=A9al=20Cabanettes?= Date: Mon, 10 Jul 2023 23:57:56 +0200 Subject: [PATCH 2/5] Set redis min version requirement --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index ab4a3fa06..17035df9a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -32,7 +32,7 @@ lxml chardet ovh oath -redis +redis>=4.2.0rc1 rrdtool>=0.1.10 qrcode From c38cfa08a680ff9d9b29808e40d57ca3b0fdb9f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Flor=C3=A9al=20Cabanettes?= Date: Fri, 14 Jul 2023 12:00:34 +0200 Subject: [PATCH 3/5] Add python 3.11 to github workflow --- .github/workflows/modoboa.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/modoboa.yml b/.github/workflows/modoboa.yml index 86bd2c383..3faf976b0 100644 --- a/.github/workflows/modoboa.yml +++ b/.github/workflows/modoboa.yml @@ -71,7 +71,7 @@ jobs: strategy: matrix: database: ['postgres', 'mysql'] - python-version: [3.8, 3.9, '3.10'] + python-version: [3.8, 3.9, '3.10', '3.11'] fail-fast: false steps: From f44816f5690279f7ca0f1a4fc1eaf8100e9d466e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Flor=C3=A9al=20Cabanettes?= Date: Fri, 14 Jul 2023 15:58:00 +0200 Subject: [PATCH 4/5] Drop asynctest as it's not compatible with python 3.11 + fix deprecation --- modoboa/policyd/tests.py | 6 ++---- test-requirements.txt | 1 - 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/modoboa/policyd/tests.py b/modoboa/policyd/tests.py index 1461b7e47..c0eba548b 100644 --- a/modoboa/policyd/tests.py +++ b/modoboa/policyd/tests.py @@ -1,8 +1,7 @@ """Policy daemon related tests.""" import asyncio -# from mock import patch -from asynctest import patch +from mock import patch from multiprocessing import Process import socket import time @@ -200,8 +199,7 @@ sasl_username=user@test.com await policyd_core.reset_counters() # Run the async test - coro = asyncio.coroutine(run_test) - event_loop.run_until_complete(coro()) + event_loop.run_until_complete(run_test()) event_loop.close() self.assertEqual( diff --git a/test-requirements.txt b/test-requirements.txt index 0d1f08db2..117f92971 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -3,4 +3,3 @@ factory-boy<3.3.0 httmock==1.4.0 testfixtures==7.1.0 tox -asynctest From 92d2c4de9b68ed556762ec6db2a56cd69261191e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Flor=C3=A9al=20Cabanettes?= Date: Fri, 14 Jul 2023 16:25:56 +0200 Subject: [PATCH 5/5] Use AsyncMock --- modoboa/policyd/tests.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modoboa/policyd/tests.py b/modoboa/policyd/tests.py index c0eba548b..d3bd97000 100644 --- a/modoboa/policyd/tests.py +++ b/modoboa/policyd/tests.py @@ -1,7 +1,8 @@ """Policy daemon related tests.""" import asyncio -from mock import patch +from aiosmtplib import send +from unittest.mock import AsyncMock from multiprocessing import Process import socket import time @@ -56,8 +57,7 @@ class PolicyDaemonTestCase( self.admin.role = "SuperAdmins" db.connections.close_all() - patcher = patch("aiosmtplib.send") - self.send_mock = patcher.start() + self.send_mock = AsyncMock(send) self.process = Process(target=start_policy_daemon) self.process.daemon = True self.process.start()