From 5b08a77d98e6edaec2c72212700e6752f8d6e03f Mon Sep 17 00:00:00 2001 From: Fu Hanxi Date: Thu, 26 Feb 2026 19:17:27 +0100 Subject: [PATCH 1/2] build: add python3.14 classifier --- pytest-embedded-arduino/pyproject.toml | 1 + pytest-embedded-idf/pyproject.toml | 1 + pytest-embedded-jtag/pyproject.toml | 1 + pytest-embedded-nuttx/pyproject.toml | 1 + pytest-embedded-qemu/pyproject.toml | 1 + pytest-embedded-serial-esp/pyproject.toml | 1 + pytest-embedded-serial/pyproject.toml | 1 + pytest-embedded-wokwi/pyproject.toml | 1 + pytest-embedded/pyproject.toml | 1 + 9 files changed, 9 insertions(+) diff --git a/pytest-embedded-arduino/pyproject.toml b/pytest-embedded-arduino/pyproject.toml index c68e1e63..a2c3ee2d 100644 --- a/pytest-embedded-arduino/pyproject.toml +++ b/pytest-embedded-arduino/pyproject.toml @@ -22,6 +22,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Programming Language :: Python", "Topic :: Software Development :: Testing", ] diff --git a/pytest-embedded-idf/pyproject.toml b/pytest-embedded-idf/pyproject.toml index a393310e..f96b0d23 100644 --- a/pytest-embedded-idf/pyproject.toml +++ b/pytest-embedded-idf/pyproject.toml @@ -21,6 +21,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Programming Language :: Python", "Topic :: Software Development :: Testing", ] diff --git a/pytest-embedded-jtag/pyproject.toml b/pytest-embedded-jtag/pyproject.toml index c741edcd..d6585556 100644 --- a/pytest-embedded-jtag/pyproject.toml +++ b/pytest-embedded-jtag/pyproject.toml @@ -21,6 +21,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Programming Language :: Python", "Topic :: Software Development :: Testing", ] diff --git a/pytest-embedded-nuttx/pyproject.toml b/pytest-embedded-nuttx/pyproject.toml index 93011c44..44448a48 100644 --- a/pytest-embedded-nuttx/pyproject.toml +++ b/pytest-embedded-nuttx/pyproject.toml @@ -22,6 +22,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Programming Language :: Python", "Topic :: Software Development :: Testing", ] diff --git a/pytest-embedded-qemu/pyproject.toml b/pytest-embedded-qemu/pyproject.toml index f25eb18b..73513804 100644 --- a/pytest-embedded-qemu/pyproject.toml +++ b/pytest-embedded-qemu/pyproject.toml @@ -21,6 +21,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Programming Language :: Python", "Topic :: Software Development :: Testing", ] diff --git a/pytest-embedded-serial-esp/pyproject.toml b/pytest-embedded-serial-esp/pyproject.toml index 3c5aa0f3..7c9a0eb7 100644 --- a/pytest-embedded-serial-esp/pyproject.toml +++ b/pytest-embedded-serial-esp/pyproject.toml @@ -21,6 +21,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Programming Language :: Python", "Topic :: Software Development :: Testing", ] diff --git a/pytest-embedded-serial/pyproject.toml b/pytest-embedded-serial/pyproject.toml index cdca56e0..fbd4d8ff 100644 --- a/pytest-embedded-serial/pyproject.toml +++ b/pytest-embedded-serial/pyproject.toml @@ -21,6 +21,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Programming Language :: Python", "Topic :: Software Development :: Testing", ] diff --git a/pytest-embedded-wokwi/pyproject.toml b/pytest-embedded-wokwi/pyproject.toml index 92a1917b..aa4cb0b7 100644 --- a/pytest-embedded-wokwi/pyproject.toml +++ b/pytest-embedded-wokwi/pyproject.toml @@ -23,6 +23,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Programming Language :: Python", "Topic :: Software Development :: Testing", ] diff --git a/pytest-embedded/pyproject.toml b/pytest-embedded/pyproject.toml index 96b721c4..44979075 100644 --- a/pytest-embedded/pyproject.toml +++ b/pytest-embedded/pyproject.toml @@ -19,6 +19,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Programming Language :: Python", "Topic :: Software Development :: Testing", ] From 6dbc86c31b5b9de664be76b4836a9f45409aad85 Mon Sep 17 00:00:00 2001 From: Fu Hanxi Date: Thu, 26 Feb 2026 19:13:03 +0100 Subject: [PATCH 2/2] fix(wokwi): support wokwi-client 0.4.0 --- pytest-embedded-wokwi/pyproject.toml | 2 +- .../pytest_embedded_wokwi/__init__.py | 7 ++--- .../pytest_embedded_wokwi/wokwi.py | 30 ++++++------------- 3 files changed, 12 insertions(+), 27 deletions(-) diff --git a/pytest-embedded-wokwi/pyproject.toml b/pytest-embedded-wokwi/pyproject.toml index aa4cb0b7..f316f409 100644 --- a/pytest-embedded-wokwi/pyproject.toml +++ b/pytest-embedded-wokwi/pyproject.toml @@ -32,7 +32,7 @@ requires-python = ">=3.10" dependencies = [ "pytest-embedded~=2.6.0", - "wokwi-client>=0.2.0", + "wokwi-client>=0.4.0", ] [project.optional-dependencies] diff --git a/pytest-embedded-wokwi/pytest_embedded_wokwi/__init__.py b/pytest-embedded-wokwi/pytest_embedded_wokwi/__init__.py index f8b62c39..a7901875 100644 --- a/pytest-embedded-wokwi/pytest_embedded_wokwi/__init__.py +++ b/pytest-embedded-wokwi/pytest_embedded_wokwi/__init__.py @@ -1,12 +1,9 @@ """Make pytest-embedded plugin work with the Wokwi CLI.""" -WOKWI_CLI_MINIMUM_VERSION = '0.10.1' - -from .dut import WokwiDut # noqa -from .wokwi import Wokwi # noqa +from .dut import WokwiDut +from .wokwi import Wokwi __all__ = [ - 'WOKWI_CLI_MINIMUM_VERSION', 'Wokwi', 'WokwiDut', ] diff --git a/pytest-embedded-wokwi/pytest_embedded_wokwi/wokwi.py b/pytest-embedded-wokwi/pytest_embedded_wokwi/wokwi.py index a21b1c98..ed9a2858 100644 --- a/pytest-embedded-wokwi/pytest_embedded_wokwi/wokwi.py +++ b/pytest-embedded-wokwi/pytest_embedded_wokwi/wokwi.py @@ -4,13 +4,10 @@ import typing as t from pathlib import Path -from packaging.version import Version from pytest_embedded.log import DuplicateStdoutPopen, MessageQueue from pytest_embedded.utils import Meta from wokwi_client import GET_TOKEN_URL, WokwiClientSync -from pytest_embedded_wokwi import WOKWI_CLI_MINIMUM_VERSION - from .idf import IDFFirmwareResolver if t.TYPE_CHECKING: # pragma: no cover @@ -61,15 +58,6 @@ def __init__( # Initialize synchronous Wokwi client self.client = WokwiClientSync(token) - # Check version compatibility - if Version(self.client.version) < Version(WOKWI_CLI_MINIMUM_VERSION): - logging.warning( - 'Wokwi client version %s < required %s (compatibility not guaranteed)', - self.client.version, - WOKWI_CLI_MINIMUM_VERSION, - ) - logging.info('Wokwi client library version: %s', self.client.version) - # Prepare diagram file if not supplied if wokwi_diagram is None: self.create_diagram_json() @@ -77,8 +65,7 @@ def __init__( # Connect and start simulation try: - flasher_args = firmware_resolver.resolve_firmware(app) - firmware_path = Path(flasher_args).as_posix() + firmware_path = Path(firmware_resolver.resolve_firmware(app)).as_posix() elf_path = Path(app.elf_file).as_posix() self._setup_simulation(wokwi_diagram, firmware_path, elf_path) @@ -93,16 +80,17 @@ def _setup_simulation(self, diagram: str, firmware_path: str, elf_path: str): logging.info('Connected to Wokwi Simulator, server version: %s', hello.get('version', 'unknown')) # Upload files - self.client.upload_file('diagram.json', diagram) - firmware = self.client.upload_file('pytest.bin', firmware_path) - - self.client.upload_file('pytest.elf', elf_path) + self.client.upload_file('diagram.json', Path(diagram)) + self.client.upload_file('pytest.elf', Path(elf_path)) + if firmware_path.endswith('flasher_args.json'): + firmware = self.client.upload_idf_firmware(firmware_path) + self.client.start_simulation(firmware.firmware, elf='pytest.elf') + else: + firmware = self.client.upload_file('pytest.bin', Path(firmware_path)) + self.client.start_simulation(firmware, elf='pytest.elf') logging.info('Uploaded diagram and firmware to Wokwi. Starting simulation...') - # Start simulation - self.client.start_simulation(firmware, elf='pytest.elf') - def _start_serial_monitoring(self): """Start monitoring serial output and forward to stdout and message queue."""