diff --git a/examples/common/async_asyncio_serial_client.py b/examples/common/async_asyncio_serial_client.py index 9b19ac8ef..63e081de3 100755 --- a/examples/common/async_asyncio_serial_client.py +++ b/examples/common/async_asyncio_serial_client.py @@ -10,6 +10,7 @@ import logging from pymodbus.client.asynchronous.serial import AsyncModbusSerialClient as ModbusClient +from pymodbus.framer.rtu_framer import ModbusRtuFramer # --------------------------------------------------------------------------- # # configure the client logging @@ -129,7 +130,7 @@ async def start_async_test(client): # pylint: disable=redefined-outer-name loop, client = ModbusClient( # pylint: disable=unpacking-non-sequence port="/tmp/ttyp0", # nosec baudrate=9600, - method="rtu", + framer=ModbusRtuFramer, ) loop.run_until_complete(start_async_test(client.protocol)) loop.close() diff --git a/pymodbus/client/asynchronous/serial.py b/pymodbus/client/asynchronous/serial.py index bf89315ba..e2f2dcfac 100644 --- a/pymodbus/client/asynchronous/serial.py +++ b/pymodbus/client/asynchronous/serial.py @@ -2,14 +2,7 @@ import logging from pymodbus.client.asynchronous.factory.serial import async_io_factory -from pymodbus.exceptions import ParameterException from pymodbus.factory import ClientDecoder -from pymodbus.transaction import ( - ModbusAsciiFramer, - ModbusBinaryFramer, - ModbusRtuFramer, - ModbusSocketFramer, -) _logger = logging.getLogger(__name__) @@ -21,34 +14,10 @@ class AsyncModbusSerialClient: # pylint: disable=too-few-public-methods from pymodbus.client.asynchronous.serial import AsyncModbusSerialClient """ - @classmethod - def _framer(cls, method): - """Return the requested framer - - :method: The serial framer to instantiate - :returns: The requested serial framer - :raises Exception: Failure - """ - method = method.lower() - if method == "ascii": - return ModbusAsciiFramer(ClientDecoder()) - if method == "rtu": - return ModbusRtuFramer(ClientDecoder()) - if method == "binary": - return ModbusBinaryFramer(ClientDecoder()) - if method == "socket": - return ModbusSocketFramer(ClientDecoder()) - - raise ParameterException("Invalid framer method requested") - - def __new__(cls, method, port, **kwargs): + def __new__(cls, framer, port, **kwargs): """Do setup of client. - The methods to connect are:: - - ascii - - rtu - - binary - :param method: The method to use for connection + :param framer: Modbus Framer :param port: The serial port to attach to :param stopbits: The number of stop bits to use :param bytesize: The bytesize of the serial messages @@ -58,6 +27,6 @@ def __new__(cls, method, port, **kwargs): :param kwargs: :return: """ - framer = cls._framer(method) + framer = framer(ClientDecoder()) yieldable = async_io_factory(framer=framer, port=port, **kwargs) return yieldable diff --git a/test/test_client_async.py b/test/test_client_async.py index c3f65f207..09dff564f 100644 --- a/test/test_client_async.py +++ b/test/test_client_async.py @@ -89,12 +89,12 @@ def test_udp_asyncio_client( @patch("asyncio.get_event_loop") @patch("asyncio.gather", side_effect=mock_asyncio_gather) @pytest.mark.parametrize( - "method, framer", + "framer", [ - ("rtu", ModbusRtuFramer), - ("socket", ModbusSocketFramer), - ("binary", ModbusBinaryFramer), - ("ascii", ModbusAsciiFramer), + ModbusRtuFramer, + ModbusSocketFramer, + ModbusBinaryFramer, + ModbusAsciiFramer, ], ) @pytest.mark.asyncio @@ -102,7 +102,6 @@ async def test_serial_asyncio_client( self, mock_gather, # pylint: disable=unused-argument mock_event_loop, - method, framer, ): # pylint: disable=unused-argument """Test that AsyncModbusSerialClient instantiates AsyncioModbusSerialClient for asyncio scheduler.""" @@ -112,7 +111,7 @@ async def test_serial_asyncio_client( loop, client, ) = AsyncModbusSerialClient( - method=method, + framer=framer, port=pytest.SERIAL_PORT, loop=loop, baudrate=19200, diff --git a/test/test_client_async2.py b/test/test_client_async2.py index 4bb07b145..58c9821c6 100644 --- a/test/test_client_async2.py +++ b/test/test_client_async2.py @@ -76,19 +76,18 @@ def test_udp_asyncio_client( @patch("asyncio.get_event_loop") @patch("asyncio.gather", side_effect=mock_asyncio_gather) @pytest.mark.parametrize( - "method, framer", + "framer", [ - ("rtu", ModbusRtuFramer), - ("socket", ModbusSocketFramer), - ("binary", ModbusBinaryFramer), - ("ascii", ModbusAsciiFramer), + ModbusRtuFramer, + ModbusSocketFramer, + ModbusBinaryFramer, + ModbusAsciiFramer, ], ) def test_serial_asyncio_client( self, mock_gather, # pylint: disable=unused-argument mock_event_loop, - method, framer, ): # pylint: disable=unused-argument """Test that AsyncModbusSerialClient instantiates AsyncioModbusSerialClient for asyncio scheduler.""" @@ -98,7 +97,7 @@ def test_serial_asyncio_client( loop, client, ) = AsyncModbusSerialClient( - method=method, + framer=framer, port=pytest.SERIAL_PORT, loop=loop, baudrate=19200, diff --git a/test/test_client_async_asyncio.py b/test/test_client_async_asyncio.py index 4378e062c..87d994aa0 100644 --- a/test/test_client_async_asyncio.py +++ b/test/test_client_async_asyncio.py @@ -20,7 +20,7 @@ from pymodbus.client.asynchronous.udp import AsyncModbusUDPClient from pymodbus.exceptions import ConnectionException from pymodbus.factory import ClientDecoder -from pymodbus.transaction import ModbusSocketFramer +from pymodbus.transaction import ModbusSocketFramer, ModbusRtuFramer protocols = [ BaseModbusAsyncClientProtocol, @@ -126,7 +126,7 @@ async def test_initialization_tls_in_loop(self): def test_initialization_serial_in_loop(self): """Test initialization serial in loop.""" _, client = AsyncModbusSerialClient( # pylint: disable=unpacking-non-sequence - port="/tmp/ptyp0", baudrate=9600, method="rtu" # nosec + port="/tmp/ptyp0", baudrate=9600, framer=ModbusRtuFramer # nosec ) assert client.port == "/tmp/ptyp0" # nosec assert client.baudrate == 9600 # nosec diff --git a/test/test_device.py b/test/test_device.py index fe87889d4..46482a2d3 100644 --- a/test/test_device.py +++ b/test/test_device.py @@ -16,7 +16,7 @@ # ---------------------------------------------------------------------------# -class SimpleDataStoreTest(unittest.TestCase): # pylint: disable=too-many-public-methods +class SimpleDataStoreTest(unittest.TestCase): """Unittest for the pymodbus.device module.""" # -----------------------------------------------------------------------#