diff --git a/aprsd/client/drivers/aprsis.py b/aprsd/client/drivers/aprsis.py index 41e6e61..461ba27 100644 --- a/aprsd/client/drivers/aprsis.py +++ b/aprsd/client/drivers/aprsis.py @@ -157,7 +157,12 @@ class APRSISDriver: return self._client.server_string @property - def keepalive(self): + def keepalive(self) -> datetime.datetime: + """Get the keepalive timestamp. + + Returns: + datetime.datetime: Last keepalive timestamp + """ if not self._client: return datetime.datetime.now() return self._client.aprsd_keepalive diff --git a/aprsd/client/drivers/kiss_common.py b/aprsd/client/drivers/kiss_common.py index 08236e0..ed63d72 100644 --- a/aprsd/client/drivers/kiss_common.py +++ b/aprsd/client/drivers/kiss_common.py @@ -25,7 +25,7 @@ class KISSDriver(metaclass=trace.TraceWrapperMetaclass): packets_sent = 0 last_packet_sent = None last_packet_received = None - keepalive = None + _keepalive = None # timeout in seconds select_timeout = 1 @@ -38,7 +38,16 @@ class KISSDriver(metaclass=trace.TraceWrapperMetaclass): """ super().__init__() self._connected = False - self.keepalive = datetime.datetime.now() + self._keepalive = datetime.datetime.now() + + @property + def keepalive(self) -> datetime.datetime: + """Get the keepalive timestamp. + + Returns: + datetime.datetime: Last keepalive timestamp + """ + return self._keepalive def login_success(self) -> bool: """There is no login for KISS.""" @@ -153,7 +162,7 @@ class KISSDriver(metaclass=trace.TraceWrapperMetaclass): Dict containing client statistics """ if serializable: - keepalive = self.keepalive.isoformat() + keepalive = self._keepalive.isoformat() if self._keepalive else 'None' if self.last_packet_sent: last_packet_sent = self.last_packet_sent.isoformat() else: @@ -163,7 +172,7 @@ class KISSDriver(metaclass=trace.TraceWrapperMetaclass): else: last_packet_received = 'None' else: - keepalive = self.keepalive + keepalive = self._keepalive last_packet_sent = self.last_packet_sent last_packet_received = self.last_packet_received diff --git a/aprsd/client/drivers/serialkiss.py b/aprsd/client/drivers/serialkiss.py index fdc8213..97467be 100644 --- a/aprsd/client/drivers/serialkiss.py +++ b/aprsd/client/drivers/serialkiss.py @@ -50,7 +50,7 @@ class SerialKISSDriver(KISSDriver): """ super().__init__() self._connected = False - self.keepalive = datetime.datetime.now() + # keepalive is set in parent KISSDriver.__init__() # This is initialized in setup_connection() self.socket = None diff --git a/aprsd/client/drivers/tcpkiss.py b/aprsd/client/drivers/tcpkiss.py index ba2135c..976ccbe 100644 --- a/aprsd/client/drivers/tcpkiss.py +++ b/aprsd/client/drivers/tcpkiss.py @@ -55,7 +55,7 @@ class TCPKISSDriver(KISSDriver): """ super().__init__() self._connected = False - self.keepalive = datetime.datetime.now() + # keepalive is set in parent KISSDriver.__init__() # This is initialized in setup_connection() self.socket = None diff --git a/tests/client/drivers/test_tcpkiss_driver.py b/tests/client/drivers/test_tcpkiss_driver.py index f9f0d28..f2f8f80 100644 --- a/tests/client/drivers/test_tcpkiss_driver.py +++ b/tests/client/drivers/test_tcpkiss_driver.py @@ -270,7 +270,7 @@ class TestTCPKISSDriver(unittest.TestCase): def test_stats_serializable(self): """Test stats with serializable=True converts datetime to ISO format.""" - self.driver.keepalive = datetime.datetime.now() + self.driver._keepalive = datetime.datetime.now() stats = self.driver.stats(serializable=True)