From 11f2710125adf8dcce7aea48cfe7586d737cd774 Mon Sep 17 00:00:00 2001
From: jkerdreux-imt <jerome.kerdreux@imt-atlantique.fr>
Date: Tue, 26 Nov 2024 15:12:51 +0100
Subject: [PATCH] No more type hints error

Ouff ..
---
 libs/lib/tests/test_message.py |  8 +++++---
 libs/lib/xaal/lib/messages.py  | 26 +++++++++++++++-----------
 2 files changed, 20 insertions(+), 14 deletions(-)

diff --git a/libs/lib/tests/test_message.py b/libs/lib/tests/test_message.py
index 693aed02..35e8b90f 100644
--- a/libs/lib/tests/test_message.py
+++ b/libs/lib/tests/test_message.py
@@ -174,13 +174,15 @@ class TestMessageFactory(unittest.TestCase):
         mf = test_factory()
         # too young
         msg = test_message()
-        msg.timestamp[0] = msg.timestamp[0] + 60*5
+        target = (msg.timestamp[0] + 60*5, msg.timestamp[1])
+        msg.timestamp = target
         data = mf.encode_msg(msg)
         with self.assertRaises(MessageParserError):
             mf.decode_msg(data)
         # too old
         msg.timestamp = messages.build_timestamp()
-        msg.timestamp[0] = msg.timestamp[0] - 60*5
+        target = (msg.timestamp[0] - 60*5, msg.timestamp[1])
+        msg.timestamp = target
         data = mf.encode_msg(msg)
         with self.assertRaises(MessageParserError):
             mf.decode_msg(data)
@@ -214,4 +216,4 @@ class TestMessageFactory(unittest.TestCase):
             mf.decode_msg(data)
 
 if __name__ == '__main__':
-    unittest.main()
\ No newline at end of file
+    unittest.main()
diff --git a/libs/lib/xaal/lib/messages.py b/libs/lib/xaal/lib/messages.py
index 2166e80d..174d0ef8 100644
--- a/libs/lib/xaal/lib/messages.py
+++ b/libs/lib/xaal/lib/messages.py
@@ -65,11 +65,11 @@ class Message(object):
     def __init__(self):
         self.version = config.STACK_VERSION  # message API version
         self.__targets = []  # target property
-        self.timestamp = None  # message timestamp
-        self.source = None  # message source
-        self.dev_type = None  # message dev_type
-        self.msg_type = None  # message type
-        self.action = None  # message action
+        self.timestamp: tuple = ()  # message timestamp
+        self.source: Optional[UUID] = None  # message source
+        self.dev_type: Optional[str] = None  # message dev_type
+        self.msg_type: Optional[MessageType] = None  # message type
+        self.action: Optional[str] = None  # message action
         self.body = {}  # message body
 
     @property
@@ -105,7 +105,7 @@ class Message(object):
                 tmp = tmp + "- %-12s %s\n" % (k, v)
             # tmp = tmp.strip()
             r.append(['body', tmp])
-        print(tabulate(r, headers=['Fied', 'Value'], tablefmt='psql'))
+        print(tabulate(r, headers=['Field', 'Value'], tablefmt='psql'))
 
     def __repr__(self) -> str:
         return f"<xaal.Message {id(self):x} {self.source} {self.dev_type} {self.msg_type} {self.action}>"
@@ -161,7 +161,7 @@ class MessageFactory(object):
         # key encode / decode message built from passphrase
         self.cipher_key = cipher_key
 
-    def encode_msg(self, msg: Message):
+    def encode_msg(self, msg: Message) -> bytes:
         """Apply security layer and return encode MSG in CBOR
         :param msg: xAAL msg instance
         :type msg: Message
@@ -179,6 +179,10 @@ class MessageFactory(object):
 
         # Format payload & ciphering
         buf = []
+        if not msg.source:
+            raise MessageError("No source address in message")
+        if not msg.msg_type:
+            raise MessageError("No msg_type in message")
         buf.append(msg.source.bytes)
         buf.append(msg.dev_type)
         buf.append(msg.msg_type.value)
@@ -218,7 +222,7 @@ class MessageFactory(object):
             msg_time = data_rx[1]
             targets = cbor.loads(data_rx[3])
             msg.targets = [UUID(bytes=t) for t in targets]
-            msg.timestamp = [data_rx[1], data_rx[2]]
+            msg.timestamp = (data_rx[1], data_rx[2])
         except IndexError:
             raise MessageParserError("Bad Message, wrong fields")
 
@@ -336,7 +340,7 @@ def build_nonce(data: tuple) -> bytes:
     return nonce
 
 
-def build_timestamp() -> list:
+def build_timestamp() -> tuple:
     """Return array [seconds since epoch, microseconds since last seconds] Time = UTC+0000"""
     epoch = datetime.datetime.fromtimestamp(0, datetime.UTC)
     timestamp = datetime.datetime.now(datetime.UTC) - epoch
@@ -346,6 +350,6 @@ def build_timestamp() -> list:
 # for better performance, I choose to use this trick to fix the change in size for Py3.
 # only test once.
 if sys.version_info.major == 2:
-    _packtimestamp = lambda t1, t2: [long(t1), int(t2)]
+    _packtimestamp = lambda t1, t2: (long(t1), int(t2))
 else:
-    _packtimestamp = lambda t1, t2: [int(t1), int(t2)]
+    _packtimestamp = lambda t1, t2: (int(t1), int(t2))
-- 
GitLab