From 2dc9ca906baf628d89898fd8816ead6fbf8834c9 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Thu, 9 Oct 2025 15:17:48 +0000 Subject: [PATCH 1/2] ci: add task to also run unit tests with new python 3.14 --- .cirrus.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.cirrus.yml b/.cirrus.yml index aebb8491b..76591dc15 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -17,9 +17,11 @@ task: ELECTRUM_PYTHON_VERSION: 3.12 - env: ELECTRUM_PYTHON_VERSION: 3.13 - - name: "unittests: py3.13, debug-mode" + - env: + ELECTRUM_PYTHON_VERSION: 3.14 + - name: "unittests: py3.14, debug-mode" env: - ELECTRUM_PYTHON_VERSION: 3.13 + ELECTRUM_PYTHON_VERSION: 3.14 # enable additional checks: PYTHONASYNCIODEBUG: "1" PYTHONDEVMODE: "1" From dbacb503a4a7f194003c962a0aab273ee258e4a7 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Thu, 9 Oct 2025 15:43:54 +0000 Subject: [PATCH 2/2] tests: fix DeprecationWarnings for py3.14: asyncio.iscoroutinefunction same as https://github.com/spesmilo/electrum/pull/10197 --- tests/__init__.py | 3 ++- tests/test_bitcoin.py | 7 ++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/__init__.py b/tests/__init__.py index 106323ede..b2b649b78 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -5,6 +5,7 @@ import threading import tempfile import shutil import functools +import inspect import electrum import electrum.logging @@ -88,7 +89,7 @@ def as_testnet(func): NOTE: this is inherently sequential; tests running in parallel would break things """ old_net = constants.net - if asyncio.iscoroutinefunction(func): + if inspect.iscoroutinefunction(func): async def run_test(*args, **kwargs): try: constants.BitcoinTestnet.set_as_network() diff --git a/tests/test_bitcoin.py b/tests/test_bitcoin.py index 9ce265b52..5673dc2fb 100644 --- a/tests/test_bitcoin.py +++ b/tests/test_bitcoin.py @@ -3,6 +3,7 @@ import base64 import json import os import sys +import inspect import electrum_ecc as ecc @@ -46,7 +47,7 @@ def needs_test_with_all_aes_implementations(func): has_cryptodome = crypto.HAS_CRYPTODOME has_cryptography = crypto.HAS_CRYPTOGRAPHY has_pyaes = crypto.HAS_PYAES - if asyncio.iscoroutinefunction(func): + if inspect.iscoroutinefunction(func): async def run_test(*args, **kwargs): try: if has_pyaes: @@ -92,7 +93,7 @@ def needs_test_with_all_chacha20_implementations(func): return func has_cryptodome = crypto.HAS_CRYPTODOME has_cryptography = crypto.HAS_CRYPTOGRAPHY - if asyncio.iscoroutinefunction(func): + if inspect.iscoroutinefunction(func): async def run_test(*args, **kwargs): try: if has_cryptodome: @@ -128,7 +129,7 @@ def disable_ecdsa_r_value_grinding(func): tests running in parallel would break things """ is_grinding = ecc.ENABLE_ECDSA_R_VALUE_GRINDING - if asyncio.iscoroutinefunction(func): + if inspect.iscoroutinefunction(func): async def run_test(*args, **kwargs): try: ecc.ENABLE_ECDSA_R_VALUE_GRINDING = False