From: 
Subject: Debian changes

The Debian packaging of python-wolf-comm is maintained in git, using a workflow
similar to the one described in dgit-maint-merge(7).
The Debian delta is represented by this one combined patch; there isn't a
patch queue that can be represented as a quilt series.

A detailed breakdown of the changes is available from their canonical
representation -- git commits in the packaging repository.
For example, to see the changes made by the Debian maintainer in the first
upload of upstream version 1.2.3, you could use:

    % git clone https://git.dgit.debian.org/python-wolf-comm
    % cd python-wolf-comm
    % git log --oneline 1.2.3..debian/1.2.3-1 -- . ':!debian'

(If you have dgit, use `dgit clone python-wolf-comm`, rather than plain `git clone`.)

We don't use debian/source/options single-debian-patch because it has bugs.
Therefore, NMUs etc. may nevertheless have made additional patches.

---

diff --git a/wolf_comm/models.py b/wolf_comm/models.py
index 8b2e9d7..00dd555 100644
--- a/wolf_comm/models.py
+++ b/wolf_comm/models.py
@@ -1,22 +1,22 @@
 from abc import ABC, abstractmethod
+from dataclasses import dataclass
 
 
+@dataclass
 class Device:
-
-    def __init__(self, device_id: int, gateway: int, name: str):
-        self.id = device_id
-        self.gateway = gateway
-        self.name = name
+    id: int
+    gateway: int
+    name: str
 
     def __str__(self) -> str:
-        return 'Name: {}, Id: {}, Gateway {}'.format(self.name, self.id, self.gateway)
+        return f"Name: {self.name}, Id: {self.id}, Gateway {self.gateway}"
 
 
 class Parameter(ABC):
 
     @property
     @abstractmethod
-    def value_id(self):
+    def value_id(self) -> int:
         ...
 
     @value_id.setter
@@ -26,38 +26,39 @@ class Parameter(ABC):
 
     @property
     @abstractmethod
-    def name(self):
+    def name(self) -> str:
+        ...
+
+    @name.setter
+    @abstractmethod
+    def name(self, name: str):
         ...
 
     @property
     @abstractmethod
-    def parameter_id(self):
+    def parameter_id(self) -> int:
         ...
 
     @property
     @abstractmethod
-    def bundle_id(self):
+    def bundle_id(self) -> int:
         ...
 
     @property
     @abstractmethod
-    def read_only(self):
+    def read_only(self) -> bool:
         ...
 
     @property
     @abstractmethod
-    def parent(self):
+    def parent(self) -> str:
         ...
 
     def __str__(self) -> str:
-        return "%s -> %s[%d][%d][%s][%d] of %s" % (
-            self.__class__.__name__,
-            self.name,
-            self.parameter_id,
-            self.bundle_id,
-            self.read_only,
-            self.value_id,
-            self.parent
+        return (
+            f"{self.__class__.__name__} -> {self.name}"
+            f"[{self.parameter_id}][{self.bundle_id}][{self.read_only}][{self.value_id}]"
+            f" of {self.parent}"
         )
 
     def convert_raw_value(self, value: str) -> str:
@@ -67,40 +68,11 @@ class Parameter(ABC):
         return value
 
 
-class SimpleParameter(Parameter):
-    @property
-    def name(self):
-        return self._name
-
-    @name.setter
-    def name(self, name: str):
-        self._name = name
-
-    @property
-    def value_id(self):
-        return self._value_id
-
-    @value_id.setter
-    def value_id(self, value_id: int):
-        self._value_id = value_id
-
-    @property
-    def parent(self):
-        return self._parent
-
-    @property
-    def parameter_id(self):
-        return self._parameter_id
-
-    @property
-    def bundle_id(self):
-        return self._bundle_id
-
-    @property
-    def read_only(self):
-        return self._read_only
+class _ParameterBase(Parameter, ABC):
+    """Shared __init__ and properties for all concrete parameter types."""
 
-    def __init__(self, value_id: int, name: str, parent: str, parameter_id: int, bundle_id: int, read_only: bool):
+    def __init__(self, value_id: int, name: str, parent: str,
+                 parameter_id: int, bundle_id: int, read_only: bool):
         self._value_id = value_id
         self._name = name
         self._parent = parent
@@ -108,74 +80,16 @@ class SimpleParameter(Parameter):
         self._bundle_id = bundle_id
         self._read_only = read_only
 
-
-class UnitParameter(Parameter, ABC):
-    @property
-    @abstractmethod
-    def unit(self):
-        ...
-
-    def __str__(self) -> str:
-        return super().__str__() + " unit: [%s]" % self.unit
-
-
-class Temperature(UnitParameter):
-    @property
-    def parameter_id(self):
-        return self._parameter_id
-
-    @property
-    def unit(self):
-        return "°C"
-
     @property
-    def name(self):
-        return self._name
-
-    @name.setter
-    def name(self, name: str):
-        self._name = name
-
-    @property
-    def value_id(self):
+    def value_id(self) -> int:
         return self._value_id
 
-    @property
-    def bundle_id(self):
-        return self._bundle_id
-
-    @property
-    def read_only(self):
-        return self._read_only
-
     @value_id.setter
     def value_id(self, value_id: int):
         self._value_id = value_id
 
     @property
-    def parent(self):
-        return self._parent
-
-    def __init__(self, value_id: int, name: str, parent: str, parameter_id: int, bundle_id: int, read_only: bool):
-        self._value_id = value_id
-        self._name = name
-        self._parent = parent
-        self._parameter_id = parameter_id
-        self._bundle_id = bundle_id
-        self._read_only = read_only
-
-
-class Pressure(UnitParameter):
-    @property
-    def unit(self):
-        return 'bar'
-
-    @property
-    def parameter_id(self):
-        return self._parameter_id
-
-    @property
-    def name(self):
+    def name(self) -> str:
         return self._name
 
     @name.setter
@@ -183,219 +97,59 @@ class Pressure(UnitParameter):
         self._name = name
 
     @property
-    def value_id(self):
-        return self._value_id
-
-    @value_id.setter
-    def value_id(self, value_id: int):
-        self._value_id = value_id
+    def parameter_id(self) -> int:
+        return self._parameter_id
 
     @property
-    def bundle_id(self):
+    def bundle_id(self) -> int:
         return self._bundle_id
 
     @property
-    def read_only(self):
+    def read_only(self) -> bool:
         return self._read_only
 
     @property
-    def parent(self):
+    def parent(self) -> str:
         return self._parent
 
-    def __init__(self, value_id: int, name: str, parent: str, parameter_id: int, bundle_id: int, read_only: bool):
-        self._value_id = value_id
-        self._name = name
-        self._parent = parent
-        self._parameter_id = parameter_id
-        self._bundle_id = bundle_id
-        self._read_only = read_only
 
+class SimpleParameter(_ParameterBase):
+    pass
 
-class HoursParameter(UnitParameter):
-    @property
-    def unit(self):
-        return 'H'
 
-    @property
-    def parameter_id(self):
-        return self._parameter_id
+class UnitParameter(_ParameterBase, ABC):
+    _unit: str = ""
 
     @property
-    def name(self):
-        return self._name
+    def unit(self) -> str:
+        return self._unit
 
-    @name.setter
-    def name(self, name: str):
-        self._name = name
+    def __str__(self) -> str:
+        return super().__str__() + f" unit: [{self.unit}]"
 
-    @property
-    def value_id(self):
-        return self._value_id
 
-    @value_id.setter
-    def value_id(self, value_id: int):
-        self._value_id = value_id
+class Temperature(UnitParameter):
+    _unit = "°C"
 
-    @property
-    def bundle_id(self):
-        return self._bundle_id
 
-    @property
-    def read_only(self):
-        return self._read_only
+class Pressure(UnitParameter):
+    _unit = "bar"
 
-    @property
-    def parent(self):
-        return self._parent
 
-    def __init__(self, value_id: int, name: str, parent: str, parameter_id: int, bundle_id: int, read_only: bool):
-        self._value_id = value_id
-        self._name = name
-        self._parent = parent
-        self._parameter_id = parameter_id
-        self._bundle_id = bundle_id
-        self._read_only = read_only
+class HoursParameter(UnitParameter):
+    _unit = "H"
 
 
 class PercentageParameter(UnitParameter):
-
-    @property
-    def parameter_id(self):
-        return self._parameter_id
-
-    @property
-    def unit(self):
-        return "%"
-
-    @property
-    def name(self):
-        return self._name
-
-    @name.setter
-    def name(self, name: str):
-        self._name = name
-
-    @property
-    def value_id(self):
-        return self._value_id
-
-    @value_id.setter
-    def value_id(self, value_id: int):
-        self._value_id = value_id
-
-    @property
-    def bundle_id(self):
-        return self._bundle_id
-
-    @property
-    def read_only(self):
-        return self._read_only
-
-    @property
-    def parent(self):
-        return self._parent
-
-    def __init__(self, value_id: int, name: str, parent: str, parameter_id: int, bundle_id: int, read_only: bool):
-        self._value_id = value_id
-        self._name = name
-        self._parent = parent
-        self._parameter_id = parameter_id
-        self._bundle_id = bundle_id
-        self._read_only = read_only
+    _unit = "%"
 
 
 class PowerParameter(UnitParameter):
-
-    @property
-    def parameter_id(self):
-        return self._parameter_id
-
-    @property
-    def unit(self):
-        return "kW"
-
-    @property
-    def name(self):
-        return self._name
-
-    @name.setter
-    def name(self, name: str):
-        self._name = name
-
-    @property
-    def value_id(self):
-        return self._value_id
-
-    @value_id.setter
-    def value_id(self, value_id: int):
-        self._value_id = value_id
-
-    @property
-    def bundle_id(self):
-        return self._bundle_id
-
-    @property
-    def read_only(self):
-        return self._read_only
-
-    @property
-    def parent(self):
-        return self._parent
-
-    def __init__(self, value_id: int, name: str, parent: str, parameter_id: int, bundle_id: int, read_only: bool):
-        self._value_id = value_id
-        self._name = name
-        self._parent = parent
-        self._parameter_id = parameter_id
-        self._bundle_id = bundle_id
-        self._read_only = read_only
+    _unit = "kW"
 
 
 class EnergyParameter(UnitParameter):
-
-    @property
-    def parameter_id(self):
-        return self._parameter_id
-
-    @property
-    def unit(self):
-        return "kWh"
-
-    @property
-    def name(self):
-        return self._name
-
-    @name.setter
-    def name(self, name: str):
-        self._name = name
-
-    @property
-    def value_id(self):
-        return self._value_id
-
-    @value_id.setter
-    def value_id(self, value_id: int):
-        self._value_id = value_id
-
-    @property
-    def bundle_id(self):
-        return self._bundle_id
-
-    @property
-    def read_only(self):
-        return self._read_only
-
-    @property
-    def parent(self):
-        return self._parent
-
-    def __init__(self, value_id: int, name: str, parent: str, parameter_id: int, bundle_id: int, read_only: bool):
-        self._value_id = value_id
-        self._name = name
-        self._parent = parent
-        self._parameter_id = parameter_id
-        self._bundle_id = bundle_id
-        self._read_only = read_only
+    _unit = "kWh"
 
 
 class EnergyWhParameter(EnergyParameter):
@@ -414,191 +168,30 @@ class EnergyWhParameter(EnergyParameter):
 
 
 class RPMParameter(UnitParameter):
-
-    @property
-    def parameter_id(self):
-        return self._parameter_id
-
-    @property
-    def unit(self):
-        return "U/min"
-
-    @property
-    def name(self):
-        return self._name
-
-    @name.setter
-    def name(self, name: str):
-        self._name = name
-
-    @property
-    def value_id(self):
-        return self._value_id
-
-    @value_id.setter
-    def value_id(self, value_id: int):
-        self._value_id = value_id
-
-    @property
-    def bundle_id(self):
-        return self._bundle_id
-
-    @property
-    def read_only(self):
-        return self._read_only
-
-    @property
-    def parent(self):
-        return self._parent
-
-    def __init__(self, value_id: int, name: str, parent: str, parameter_id: int, bundle_id: int, read_only: bool):
-        self._value_id = value_id
-        self._name = name
-        self._parent = parent
-        self._parameter_id = parameter_id
-        self._bundle_id = bundle_id
-        self._read_only = read_only
+    _unit = "U/min"
 
 
 class FlowParameter(UnitParameter):
-
-    @property
-    def parameter_id(self):
-        return self._parameter_id
-
-    @property
-    def unit(self):
-        return "l/min"
-
-    @property
-    def name(self):
-        return self._name
-
-    @name.setter
-    def name(self, name: str):
-        self._name = name
-
-    @property
-    def value_id(self):
-        return self._value_id
-
-    @value_id.setter
-    def value_id(self, value_id: int):
-        self._value_id = value_id
-
-    @property
-    def bundle_id(self):
-        return self._bundle_id
-
-    @property
-    def read_only(self):
-        return self._read_only
-
-    @property
-    def parent(self):
-        return self._parent
-
-    def __init__(self, value_id: int, name: str, parent: str, parameter_id: int, bundle_id: int, read_only: bool):
-        self._value_id = value_id
-        self._name = name
-        self._parent = parent
-        self._parameter_id = parameter_id
-        self._bundle_id = bundle_id
-        self._read_only = read_only
+    _unit = "l/min"
 
 
 class FrequencyParameter(UnitParameter):
-
-    @property
-    def parameter_id(self):
-        return self._parameter_id
-
-    @property
-    def unit(self):
-        return "Hz"
-
-    @property
-    def name(self):
-        return self._name
-
-    @name.setter
-    def name(self, name: str):
-        self._name = name
-
-    @property
-    def value_id(self):
-        return self._value_id
-
-    @value_id.setter
-    def value_id(self, value_id: int):
-        self._value_id = value_id
-
-    @property
-    def bundle_id(self):
-        return self._bundle_id
-
-    @property
-    def read_only(self):
-        return self._read_only
-
-    @property
-    def parent(self):
-        return self._parent
-
-    def __init__(self, value_id: int, name: str, parent: str, parameter_id: int, bundle_id: int, read_only: bool):
-        self._value_id = value_id
-        self._name = name
-        self._parent = parent
-        self._parameter_id = parameter_id
-        self._bundle_id = bundle_id
-        self._read_only = read_only
+    _unit = "Hz"
 
 
+@dataclass
 class ListItem:
-    name: str
     value: int
+    name: str
 
-    def __init__(self, value: int, name: str):
-        self.value = int(value)
-        self.name = name
+    def __post_init__(self):
+        self.value = int(self.value)
 
     def __str__(self) -> str:
-        return '%d -> %s' % (self.value, self.name)
+        return f"{self.value} -> {self.name}"
 
 
-class ListItemParameter(Parameter):
-
-    @property
-    def parameter_id(self):
-        return self._parameter_id
-
-    @property
-    def value_id(self):
-        return self._value_id
-
-    @value_id.setter
-    def value_id(self, value_id: int):
-        self._value_id = value_id
-
-    @property
-    def bundle_id(self):
-        return self._bundle_id
-
-    @property
-    def read_only(self):
-        return self._read_only
-
-    @property
-    def name(self):
-        return self._name
-
-    @name.setter
-    def name(self, name: str):
-        self._name = name
-
-    @property
-    def parent(self):
-        return self._parent
+class ListItemParameter(_ParameterBase):
 
     def __init__(
             self,
@@ -610,24 +203,18 @@ class ListItemParameter(Parameter):
             bundle_id: int,
             read_only: bool
     ):
-        self._value_id = value_id
-        self._name = name
-        self._parent = parent
+        super().__init__(value_id, name, parent, parameter_id, bundle_id, read_only)
         self.items = items
-        self._parameter_id = parameter_id
-        self._bundle_id = bundle_id
-        self._read_only = read_only
 
     def __str__(self) -> str:
-        return super().__str__() + " items: " + ", ".join([item.__str__() for item in self.items])
+        return super().__str__() + " items: " + ", ".join([str(item) for item in self.items])
 
 
+@dataclass
 class Value:
-
-    def __init__(self, value_id: int, value: str, state: str):
-        self.value_id = value_id
-        self.value = value
-        self.state = state
+    value_id: int
+    value: str
+    state: str
 
     def __str__(self) -> str:
-        return 'Value id: {}, value: {}, state {}'.format(self.value_id, self.value, self.state)
+        return f"Value id: {self.value_id}, value: {self.value}, state {self.state}"
