Bladeren bron

create a result type

subDesTagesMitExtraKaese 1 maand geleden
bovenliggende
commit
30c5eb0ed5
2 gewijzigde bestanden met toevoegingen van 29 en 24 verwijderingen
  1. 7 2
      src/protocol.py
  2. 22 22
      tests/transaction_test.py

+ 7 - 2
src/protocol.py

@@ -1,4 +1,5 @@
 import struct
+from dataclasses import dataclass
 from typing import Any
 
 from .variables import variables, Variable, FunctionCodes
@@ -6,9 +7,13 @@ from .crc import crc16
 
 type Value = str|int|float
 
+@dataclass
+class Result(Variable):
+    value: Value
+
 class LumiaxClient:
     def __init__(self):
-        pass
+        self.device_id = 0xFE
 
     def bytes_to_value(self, variable: Variable, buffer: bytes, offset: int) -> Value:
         if variable.is_32_bit and variable.is_signed:
@@ -157,7 +162,7 @@ class LumiaxClient:
                 items = [v for v in variables if address == v.address and function_code.value in v.function_codes]
                 for variable in items:
                     value = self.bytes_to_value(variable, buffer, cursor)
-                    results.append((variable, value))
+                    results.append(Result(**vars(variable), value=value))
                 cursor += 2
                 address += 1
 

+ 22 - 22
tests/transaction_test.py

@@ -26,11 +26,11 @@ class TestTransaction(unittest.TestCase):
         self.assertEqual(len(recv_buf) - 5, byte_count)
 
         results = self.client.parse(start_address, recv_buf)
-        for variable, value in results:
-            self.assertIsNotNone(value, f"{variable.name} ({hex(variable.address)})")
+        for result in results:
+            self.assertIsNotNone(result.value, f"{result.name} ({hex(result.address)})")
         self.assertGreaterEqual(len(results), byte_count / 2)
-        self.assertEqual(hex(results[0][0].address), hex(start_address))
-        self.assertEqual(hex(results[-1][0].address), hex(end_address))
+        self.assertEqual(hex(results[0].address), hex(start_address))
+        self.assertEqual(hex(results[-1].address), hex(end_address))
 
     def test_2(self):
         device_id = 0x01
@@ -48,12 +48,12 @@ class TestTransaction(unittest.TestCase):
         self.assertEqual(len(recv_buf) - 5, byte_count)
 
         results = self.client.parse(start_address, recv_buf)
-        for variable, value in results:
-            self.assertIsNotNone(value, f"{variable.name} ({hex(variable.address)})")
+        for result in results:
+            self.assertIsNotNone(result.value, f"{result.name} ({hex(result.address)})")
         self.assertGreaterEqual(len(results), byte_count / 2)
-        self.assertEqual(hex(results[0][0].address), hex(start_address))
-        self.assertEqual(results[-1][0].is_32_bit, True)
-        self.assertEqual(hex(results[-1][0].address), hex(end_address-1))
+        self.assertEqual(hex(results[0].address), hex(start_address))
+        self.assertEqual(results[-1].is_32_bit, True)
+        self.assertEqual(hex(results[-1].address), hex(end_address-1))
 
     def test_3(self):
         device_id = 0x01
@@ -71,12 +71,12 @@ class TestTransaction(unittest.TestCase):
         self.assertEqual(len(recv_buf) - 5, byte_count)
 
         results = self.client.parse(start_address, recv_buf)
-        for variable, value in results:
-            self.assertIsNotNone(value, f"{variable.name} ({hex(variable.address)})")
+        for result in results:
+            self.assertIsNotNone(result.value, f"{result.name} ({hex(result.address)})")
         self.assertGreaterEqual(len(results), byte_count / 2)
-        self.assertEqual(hex(results[0][0].address), hex(start_address))
-        self.assertEqual(hex(results[-1][0].address), hex(end_address))
-        self.assertEqual(results[0][1], 60.0)
+        self.assertEqual(hex(results[0].address), hex(start_address))
+        self.assertEqual(hex(results[-1].address), hex(end_address))
+        self.assertEqual(results[0].value, 60.0)
 
     def test_4(self):
         device_id = 0x01
@@ -94,10 +94,10 @@ class TestTransaction(unittest.TestCase):
         self.assertEqual(len(recv_buf) - 5, byte_count)
 
         results = self.client.parse(start_address, recv_buf)
-        for variable, value in results:
-            self.assertIsNotNone(value, f"{variable.name} ({hex(variable.address)})")
-        self.assertEqual(hex(results[0][0].address), hex(start_address))
-        self.assertEqual(hex(results[-1][0].address), hex(end_address))
+        for result in results:
+            self.assertIsNotNone(result.value, f"{result.name} ({hex(result.address)})")
+        self.assertEqual(hex(results[0].address), hex(start_address))
+        self.assertEqual(hex(results[-1].address), hex(end_address))
 
     def test_5(self):
         device_id = 0x01
@@ -115,11 +115,11 @@ class TestTransaction(unittest.TestCase):
         self.assertEqual(len(recv_buf) - 5, byte_count)
 
         results = self.client.parse(start_address, recv_buf)
-        for variable, value in results:
-            self.assertIsNotNone(value, f"{variable.name} ({hex(variable.address)})")
+        for result in results:
+            self.assertIsNotNone(result.value, f"{result.name} ({hex(result.address)})")
         self.assertGreaterEqual(len(results), byte_count / 2)
-        self.assertEqual(hex(results[0][0].address), hex(start_address))
-        self.assertEqual(hex(results[-1][0].address), hex(end_address))
+        self.assertEqual(hex(results[0].address), hex(start_address))
+        self.assertEqual(hex(results[-1].address), hex(end_address))
 
     def test_6(self):
         device_id = 0x01