Repository navigation
Expand file tree
/
Copy pathpkg_proxy.py
More file actions
51 lines (40 loc) · 1.46 KB
/
Copy pathpkg_proxy.py
File metadata and controls
51 lines (40 loc) · 1.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# SPDX-License-Identifier: LGPL-3.0-or-later
from decimal import Decimal
from importlib.metadata import PackageNotFoundError, version
from logging import getLogger
_logger = getLogger(__name__)
def convert_version(vers) -> Decimal:
nbrs = vers.split(".")
# Safely handle potential minor/patch variations
major = Decimal(nbrs[0])
minor = Decimal(nbrs[1]) if len(nbrs) > 1 else Decimal(0)
patch = Decimal(nbrs[2].split("-")[0]) if len(nbrs) > 2 else Decimal(0)
return major + minor / 1000 + patch / 1000000
def get_pkg_version(pkg: str) -> str:
try:
return version(pkg)
except PackageNotFoundError:
txt = f"%%% [{__name__}] - package {pkg} not found in library."
_logger.warning(txt)
return "#N/A"
# pymodbus
v3_7 = convert_version("3.7")
v3_10 = convert_version("3.10")
PYMODBUS = convert_version(version("pymodbus"))
if PYMODBUS < v3_7:
from pymodbus.framer.rtu_framer import ModbusRtuFramer
from pymodbus.framer.socket_framer import ModbusSocketFramer
proxyRtuFramer = ModbusRtuFramer
proxySocketFramer = ModbusSocketFramer
else:
from pymodbus.framer import FramerType
proxyRtuFramer = FramerType.RTU
proxySocketFramer = FramerType.SOCKET
def repack_kwargs(**kwargs):
repacked = {}
for key, val in kwargs.items():
if PYMODBUS >= v3_10 and key == 'slave':
repacked['device_id'] = val
else:
repacked[key] = val
return repacked