From 9a1caf2c97dc307c853d6971009376dfec498868 Mon Sep 17 00:00:00 2001 From: Karim Malik <79924100+km-64@users.noreply.github.com> Date: Wed, 24 Jun 2026 16:34:31 +0200 Subject: [PATCH 1/2] Fix `ModbusServerContext` initialization with dict `devices` parameter - Append `entry.simdevice` not `entry` because it's the wrong type - Assign the `id` attribute of `entry.simdevice` not `entry` --- pymodbus/datastore/context.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pymodbus/datastore/context.py b/pymodbus/datastore/context.py index 083aa8e00..a708dfc4f 100644 --- a/pymodbus/datastore/context.py +++ b/pymodbus/datastore/context.py @@ -96,8 +96,9 @@ def __init__(self, devices=None, single=True): self._devices = devices for dev_id, entry in devices.items(): if not isinstance(entry, ModbusSimulatorContext): - entry.id = dev_id - self.simdevices.append(entry) + simdevice = entry.simdevice + simdevice.id = dev_id + self.simdevices.append(simdevice) else: self._devices = {0: devices} if not isinstance(devices, ModbusSimulatorContext): From 263c9d91b4508be903a483df39ab86a2b540ab58 Mon Sep 17 00:00:00 2001 From: Karim Malik <79924100+km-64@users.noreply.github.com> Date: Wed, 24 Jun 2026 16:56:31 +0200 Subject: [PATCH 2/2] Add type information to ModbusServerContext constructor and fix zuban errors --- pymodbus/datastore/context.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/pymodbus/datastore/context.py b/pymodbus/datastore/context.py index a708dfc4f..020480fa1 100644 --- a/pymodbus/datastore/context.py +++ b/pymodbus/datastore/context.py @@ -78,7 +78,14 @@ class ModbusServerContext: device contexts. """ - def __init__(self, devices=None, single=True): + def __init__( + self, + devices: dict[int, ModbusDeviceContext | ModbusSimulatorContext] + | ModbusDeviceContext + | ModbusSimulatorContext + | None = None, + single=True, + ) -> None: """Initialize a new instance of a modbus server context. :param devices: A dictionary of client contexts @@ -90,7 +97,7 @@ def __init__(self, devices=None, single=True): _ = single if not devices: raise TypeError("devices= cannot be None") - self._devices: dict[int, ModbusDeviceContext] + self._devices: dict[int, ModbusDeviceContext | ModbusSimulatorContext] self.simdevices: list[SimDevice] = [] if isinstance(devices, dict): self._devices = devices @@ -108,7 +115,7 @@ def __init__(self, devices=None, single=True): "Please convert to SimData/SimDevice.\n" "Please read https://pymodbus.readthedocs.io/en/dev/source/upgrade_40.html#convert-to-simdata-simdevice") - def __get_device(self, device_id: int) -> ModbusDeviceContext: + def __get_device(self, device_id: int) -> ModbusDeviceContext | ModbusSimulatorContext: """Return device object.""" if device_id in self._devices: return self._devices[device_id]