Skip to content

Commit 6b728ec

Browse files
authored
streamline imports in Factory.py (#2140)
1 parent 9e9e50e commit 6b728ec

File tree

1 file changed

+89
-175
lines changed

1 file changed

+89
-175
lines changed

pymodbus/factory.py

Lines changed: 89 additions & 175 deletions
Original file line numberDiff line numberDiff line change
@@ -12,103 +12,17 @@
1212
# pylint: disable=missing-type-doc
1313
from collections.abc import Callable
1414

15-
from pymodbus.bit_read_message import (
16-
ReadCoilsRequest,
17-
ReadCoilsResponse,
18-
ReadDiscreteInputsRequest,
19-
ReadDiscreteInputsResponse,
20-
)
21-
from pymodbus.bit_write_message import (
22-
WriteMultipleCoilsRequest,
23-
WriteMultipleCoilsResponse,
24-
WriteSingleCoilRequest,
25-
WriteSingleCoilResponse,
26-
)
27-
from pymodbus.diag_message import (
28-
ChangeAsciiInputDelimiterRequest,
29-
ChangeAsciiInputDelimiterResponse,
30-
ClearCountersRequest,
31-
ClearCountersResponse,
32-
ClearOverrunCountRequest,
33-
ClearOverrunCountResponse,
34-
DiagnosticStatusRequest,
35-
DiagnosticStatusResponse,
36-
ForceListenOnlyModeRequest,
37-
ForceListenOnlyModeResponse,
38-
GetClearModbusPlusRequest,
39-
GetClearModbusPlusResponse,
40-
RestartCommunicationsOptionRequest,
41-
RestartCommunicationsOptionResponse,
42-
ReturnBusCommunicationErrorCountRequest,
43-
ReturnBusCommunicationErrorCountResponse,
44-
ReturnBusExceptionErrorCountRequest,
45-
ReturnBusExceptionErrorCountResponse,
46-
ReturnBusMessageCountRequest,
47-
ReturnBusMessageCountResponse,
48-
ReturnDiagnosticRegisterRequest,
49-
ReturnDiagnosticRegisterResponse,
50-
ReturnIopOverrunCountRequest,
51-
ReturnIopOverrunCountResponse,
52-
ReturnQueryDataRequest,
53-
ReturnQueryDataResponse,
54-
ReturnSlaveBusCharacterOverrunCountRequest,
55-
ReturnSlaveBusCharacterOverrunCountResponse,
56-
ReturnSlaveBusyCountRequest,
57-
ReturnSlaveBusyCountResponse,
58-
ReturnSlaveMessageCountRequest,
59-
ReturnSlaveMessageCountResponse,
60-
ReturnSlaveNAKCountRequest,
61-
ReturnSlaveNAKCountResponse,
62-
ReturnSlaveNoResponseCountRequest,
63-
ReturnSlaveNoResponseCountResponse,
64-
)
15+
from pymodbus import bit_read_message as bit_r_msg
16+
from pymodbus import bit_write_message as bit_w_msg
17+
from pymodbus import diag_message as diag_msg
18+
from pymodbus import file_message as file_msg
19+
from pymodbus import mei_message as mei_msg
20+
from pymodbus import other_message as o_msg
21+
from pymodbus import pdu
22+
from pymodbus import register_read_message as reg_r_msg
23+
from pymodbus import register_write_message as reg_w_msg
6524
from pymodbus.exceptions import MessageRegisterException, ModbusException
66-
from pymodbus.file_message import (
67-
ReadFifoQueueRequest,
68-
ReadFifoQueueResponse,
69-
ReadFileRecordRequest,
70-
ReadFileRecordResponse,
71-
WriteFileRecordRequest,
72-
WriteFileRecordResponse,
73-
)
7425
from pymodbus.logging import Log
75-
from pymodbus.mei_message import (
76-
ReadDeviceInformationRequest,
77-
ReadDeviceInformationResponse,
78-
)
79-
from pymodbus.other_message import (
80-
GetCommEventCounterRequest,
81-
GetCommEventCounterResponse,
82-
GetCommEventLogRequest,
83-
GetCommEventLogResponse,
84-
ReadExceptionStatusRequest,
85-
ReadExceptionStatusResponse,
86-
ReportSlaveIdRequest,
87-
ReportSlaveIdResponse,
88-
)
89-
from pymodbus.pdu import (
90-
ExceptionResponse,
91-
IllegalFunctionRequest,
92-
ModbusRequest,
93-
ModbusResponse,
94-
)
95-
from pymodbus.pdu import ModbusExceptions as ecode
96-
from pymodbus.register_read_message import (
97-
ReadHoldingRegistersRequest,
98-
ReadHoldingRegistersResponse,
99-
ReadInputRegistersRequest,
100-
ReadInputRegistersResponse,
101-
ReadWriteMultipleRegistersRequest,
102-
ReadWriteMultipleRegistersResponse,
103-
)
104-
from pymodbus.register_write_message import (
105-
MaskWriteRegisterRequest,
106-
MaskWriteRegisterResponse,
107-
WriteMultipleRegistersRequest,
108-
WriteMultipleRegistersResponse,
109-
WriteSingleRegisterRequest,
110-
WriteSingleRegisterResponse,
111-
)
11226

11327

11428
# --------------------------------------------------------------------------- #
@@ -121,45 +35,45 @@ class ServerDecoder:
12135
"""
12236

12337
__function_table = [
124-
ReadHoldingRegistersRequest,
125-
ReadDiscreteInputsRequest,
126-
ReadInputRegistersRequest,
127-
ReadCoilsRequest,
128-
WriteMultipleCoilsRequest,
129-
WriteMultipleRegistersRequest,
130-
WriteSingleRegisterRequest,
131-
WriteSingleCoilRequest,
132-
ReadWriteMultipleRegistersRequest,
133-
DiagnosticStatusRequest,
134-
ReadExceptionStatusRequest,
135-
GetCommEventCounterRequest,
136-
GetCommEventLogRequest,
137-
ReportSlaveIdRequest,
138-
ReadFileRecordRequest,
139-
WriteFileRecordRequest,
140-
MaskWriteRegisterRequest,
141-
ReadFifoQueueRequest,
142-
ReadDeviceInformationRequest,
38+
reg_r_msg.ReadHoldingRegistersRequest,
39+
bit_r_msg.ReadDiscreteInputsRequest,
40+
reg_r_msg.ReadInputRegistersRequest,
41+
bit_r_msg.ReadCoilsRequest,
42+
bit_w_msg.WriteMultipleCoilsRequest,
43+
reg_w_msg.WriteMultipleRegistersRequest,
44+
reg_w_msg.WriteSingleRegisterRequest,
45+
bit_w_msg.WriteSingleCoilRequest,
46+
reg_r_msg.ReadWriteMultipleRegistersRequest,
47+
diag_msg.DiagnosticStatusRequest,
48+
o_msg.ReadExceptionStatusRequest,
49+
o_msg.GetCommEventCounterRequest,
50+
o_msg.GetCommEventLogRequest,
51+
o_msg.ReportSlaveIdRequest,
52+
file_msg.ReadFileRecordRequest,
53+
file_msg.WriteFileRecordRequest,
54+
reg_w_msg.MaskWriteRegisterRequest,
55+
file_msg.ReadFifoQueueRequest,
56+
mei_msg.ReadDeviceInformationRequest,
14357
]
14458
__sub_function_table = [
145-
ReturnQueryDataRequest,
146-
RestartCommunicationsOptionRequest,
147-
ReturnDiagnosticRegisterRequest,
148-
ChangeAsciiInputDelimiterRequest,
149-
ForceListenOnlyModeRequest,
150-
ClearCountersRequest,
151-
ReturnBusMessageCountRequest,
152-
ReturnBusCommunicationErrorCountRequest,
153-
ReturnBusExceptionErrorCountRequest,
154-
ReturnSlaveMessageCountRequest,
155-
ReturnSlaveNoResponseCountRequest,
156-
ReturnSlaveNAKCountRequest,
157-
ReturnSlaveBusyCountRequest,
158-
ReturnSlaveBusCharacterOverrunCountRequest,
159-
ReturnIopOverrunCountRequest,
160-
ClearOverrunCountRequest,
161-
GetClearModbusPlusRequest,
162-
ReadDeviceInformationRequest,
59+
diag_msg.ReturnQueryDataRequest,
60+
diag_msg.RestartCommunicationsOptionRequest,
61+
diag_msg.ReturnDiagnosticRegisterRequest,
62+
diag_msg.ChangeAsciiInputDelimiterRequest,
63+
diag_msg.ForceListenOnlyModeRequest,
64+
diag_msg.ClearCountersRequest,
65+
diag_msg.ReturnBusMessageCountRequest,
66+
diag_msg.ReturnBusCommunicationErrorCountRequest,
67+
diag_msg.ReturnBusExceptionErrorCountRequest,
68+
diag_msg.ReturnSlaveMessageCountRequest,
69+
diag_msg.ReturnSlaveNoResponseCountRequest,
70+
diag_msg.ReturnSlaveNAKCountRequest,
71+
diag_msg.ReturnSlaveBusyCountRequest,
72+
diag_msg.ReturnSlaveBusCharacterOverrunCountRequest,
73+
diag_msg.ReturnIopOverrunCountRequest,
74+
diag_msg.ClearOverrunCountRequest,
75+
diag_msg.GetClearModbusPlusRequest,
76+
mei_msg.ReadDeviceInformationRequest,
16377
]
16478

16579
@classmethod
@@ -193,7 +107,7 @@ def lookupPduClass(self, function_code):
193107
:param function_code: The function code specified in a frame.
194108
:returns: The class of the PDU that has a matching `function_code`.
195109
"""
196-
return self.lookup.get(function_code, ExceptionResponse)
110+
return self.lookup.get(function_code, pdu.ExceptionResponse)
197111

198112
def _helper(self, data: str):
199113
"""Generate the correct request object from a valid request packet.
@@ -206,7 +120,7 @@ def _helper(self, data: str):
206120
function_code = int(data[0])
207121
if not (request := self.lookup.get(function_code, lambda: None)()):
208122
Log.debug("Factory Request[{}]", function_code)
209-
request = IllegalFunctionRequest(function_code)
123+
request = pdu.IllegalFunctionRequest(function_code)
210124
else:
211125
fc_string = "{}: {}".format( # pylint: disable=consider-using-f-string
212126
str(self.lookup[function_code]) # pylint: disable=use-maxsplit-arg
@@ -230,7 +144,7 @@ def register(self, function):
230144
:param function: Custom function class to register
231145
:raises MessageRegisterException:
232146
"""
233-
if not issubclass(function, ModbusRequest):
147+
if not issubclass(function, pdu.ModbusRequest):
234148
raise MessageRegisterException(
235149
f'"{function.__class__.__name__}" is Not a valid Modbus Message'
236150
". Class needs to be derived from "
@@ -255,45 +169,45 @@ class ClientDecoder:
255169
"""
256170

257171
function_table = [
258-
ReadHoldingRegistersResponse,
259-
ReadDiscreteInputsResponse,
260-
ReadInputRegistersResponse,
261-
ReadCoilsResponse,
262-
WriteMultipleCoilsResponse,
263-
WriteMultipleRegistersResponse,
264-
WriteSingleRegisterResponse,
265-
WriteSingleCoilResponse,
266-
ReadWriteMultipleRegistersResponse,
267-
DiagnosticStatusResponse,
268-
ReadExceptionStatusResponse,
269-
GetCommEventCounterResponse,
270-
GetCommEventLogResponse,
271-
ReportSlaveIdResponse,
272-
ReadFileRecordResponse,
273-
WriteFileRecordResponse,
274-
MaskWriteRegisterResponse,
275-
ReadFifoQueueResponse,
276-
ReadDeviceInformationResponse,
172+
reg_r_msg.ReadHoldingRegistersResponse,
173+
bit_r_msg.ReadDiscreteInputsResponse,
174+
reg_r_msg.ReadInputRegistersResponse,
175+
bit_r_msg.ReadCoilsResponse,
176+
bit_w_msg.WriteMultipleCoilsResponse,
177+
reg_w_msg.WriteMultipleRegistersResponse,
178+
reg_w_msg.WriteSingleRegisterResponse,
179+
bit_w_msg.WriteSingleCoilResponse,
180+
reg_r_msg.ReadWriteMultipleRegistersResponse,
181+
diag_msg.DiagnosticStatusResponse,
182+
o_msg.ReadExceptionStatusResponse,
183+
o_msg.GetCommEventCounterResponse,
184+
o_msg.GetCommEventLogResponse,
185+
o_msg.ReportSlaveIdResponse,
186+
file_msg.ReadFileRecordResponse,
187+
file_msg.WriteFileRecordResponse,
188+
reg_w_msg.MaskWriteRegisterResponse,
189+
file_msg.ReadFifoQueueResponse,
190+
mei_msg.ReadDeviceInformationResponse,
277191
]
278192
__sub_function_table = [
279-
ReturnQueryDataResponse,
280-
RestartCommunicationsOptionResponse,
281-
ReturnDiagnosticRegisterResponse,
282-
ChangeAsciiInputDelimiterResponse,
283-
ForceListenOnlyModeResponse,
284-
ClearCountersResponse,
285-
ReturnBusMessageCountResponse,
286-
ReturnBusCommunicationErrorCountResponse,
287-
ReturnBusExceptionErrorCountResponse,
288-
ReturnSlaveMessageCountResponse,
289-
ReturnSlaveNoResponseCountResponse,
290-
ReturnSlaveNAKCountResponse,
291-
ReturnSlaveBusyCountResponse,
292-
ReturnSlaveBusCharacterOverrunCountResponse,
293-
ReturnIopOverrunCountResponse,
294-
ClearOverrunCountResponse,
295-
GetClearModbusPlusResponse,
296-
ReadDeviceInformationResponse,
193+
diag_msg.ReturnQueryDataResponse,
194+
diag_msg.RestartCommunicationsOptionResponse,
195+
diag_msg.ReturnDiagnosticRegisterResponse,
196+
diag_msg.ChangeAsciiInputDelimiterResponse,
197+
diag_msg.ForceListenOnlyModeResponse,
198+
diag_msg.ClearCountersResponse,
199+
diag_msg.ReturnBusMessageCountResponse,
200+
diag_msg.ReturnBusCommunicationErrorCountResponse,
201+
diag_msg.ReturnBusExceptionErrorCountResponse,
202+
diag_msg.ReturnSlaveMessageCountResponse,
203+
diag_msg.ReturnSlaveNoResponseCountResponse,
204+
diag_msg.ReturnSlaveNAKCountResponse,
205+
diag_msg.ReturnSlaveBusyCountResponse,
206+
diag_msg.ReturnSlaveBusCharacterOverrunCountResponse,
207+
diag_msg.ReturnIopOverrunCountResponse,
208+
diag_msg.ClearOverrunCountResponse,
209+
diag_msg.GetClearModbusPlusResponse,
210+
mei_msg.ReadDeviceInformationResponse,
297211
]
298212

299213
def __init__(self) -> None:
@@ -310,7 +224,7 @@ def lookupPduClass(self, function_code):
310224
:param function_code: The function code specified in a frame.
311225
:returns: The class of the PDU that has a matching `function_code`.
312226
"""
313-
return self.lookup.get(function_code, ExceptionResponse)
227+
return self.lookup.get(function_code, pdu.ExceptionResponse)
314228

315229
def decode(self, message):
316230
"""Decode a response packet.
@@ -348,7 +262,7 @@ def _helper(self, data: str):
348262
response = self.lookup.get(function_code, lambda: None)()
349263
if function_code > 0x80:
350264
code = function_code & 0x7F # strip error portion
351-
response = ExceptionResponse(code, ecode.IllegalFunction)
265+
response = pdu.ExceptionResponse(code, pdu.ModbusExceptions.IllegalFunction)
352266
if not response:
353267
raise ModbusException(f"Unknown response {function_code}")
354268
response.decode(data[1:])
@@ -362,7 +276,7 @@ def _helper(self, data: str):
362276

363277
def register(self, function):
364278
"""Register a function and sub function class with the decoder."""
365-
if function and not issubclass(function, ModbusResponse):
279+
if function and not issubclass(function, pdu.ModbusResponse):
366280
raise MessageRegisterException(
367281
f'"{function.__class__.__name__}" is Not a valid Modbus Message'
368282
". Class needs to be derived from "

0 commit comments

Comments
 (0)