start on type hints

This commit is contained in:
Paul Warren 2024-10-15 08:06:28 +11:00
parent 8769240b93
commit 99ba23e3e6

View file

@ -3,12 +3,16 @@
# Copyright 2024, Paul Warren <pwarren@pwarren.id.au> # Copyright 2024, Paul Warren <pwarren@pwarren.id.au>
# Licensed under AGPLv3, See LICENSE.md for terms # Licensed under AGPLv3, See LICENSE.md for terms
from typing import Any
from pymodbus.constants import Endian from pymodbus.constants import Endian
from pymodbus.payload import BinaryPayloadDecoder, BinaryPayloadBuilder from pymodbus.payload import BinaryPayloadDecoder, BinaryPayloadBuilder
from pymodbus.client.base import ModbusBaseClient
class DataType: class DataType:
def __init__(self, width, decode, add): def __init__(self, width, decode, add):
width: int
self._width = width self._width = width
self._decode = decode self._decode = decode
self._add = add self._add = add
@ -30,28 +34,28 @@ class DataType:
# helper functions for DataType constructors # helper functions for DataType constructors
def decode_string8(decoder): def decode_string8(decoder) -> str:
try: try:
return str(decoder.decode_string(8).decode("utf-8")) return str(decoder.decode_string(8).decode("utf-8"))
except UnicodeDecodeError: except UnicodeDecodeError:
return decoder.decode_string(8) return decoder.decode_string(8)
def decode_string16(decoder): def decode_string16(decoder) -> str:
try: try:
return str(decoder.decode_string(16).decode("utf-8")) return str(decoder.decode_string(16).decode("utf-8"))
except UnicodeDecodeError: except UnicodeDecodeError:
return decoder.decode_string(16) return decoder.decode_string(16)
def decode_string32(decoder): def decode_string32(decoder) -> str:
try: try:
return str(decoder.decode_string(32).decode("utf-8")) return str(decoder.decode_string(32).decode("utf-8"))
except UnicodeDecodeError: except UnicodeDecodeError:
return decoder.decode_string(32) return decoder.decode_string(32)
def encode_16bit_int(encoder, value): def encode_16bit_int(encoder, value) -> int:
return encoder.add_16bit_int(int(value)) return encoder.add_16bit_int(int(value))
@ -124,16 +128,18 @@ class FroniusReg:
class ScaledFroniusReg: class ScaledFroniusReg:
def __init__(self, value_register, scale_register): def __init__(self, value_register: FroniusReg, scale_register: FroniusReg):
"A nicer way of dealing with scaled registers"
self.value_register = value_register self.value_register = value_register
self.scale_register = scale_register self.scale_register = scale_register
def get(self, modbus_client): def get(self, modbus_client: ModbusBaseClient) -> float:
"Return the value_register's value, scaled by scale_register."
return self.value_register.get(modbus_client) * 10 ** self.scale_register.get( return self.value_register.get(modbus_client) * 10 ** self.scale_register.get(
modbus_client modbus_client
) )
def set(self, modbus_client, value): def set(self, modbus_client: ModbusBaseClient, value: [ int, float, str ]):
return self.value_register.set( return self.value_register.set(
modbus_client, value / 10 ** self.scale_register.get(modbus_client) modbus_client, value / 10 ** self.scale_register.get(modbus_client),
) )