From 9b4aaa101f001a1b04d27d984fd167b772b6e853 Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Mon, 11 Nov 2024 01:04:20 -0500 Subject: [PATCH] Use caching on properties --- lib/nntp/tiny/message.py | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/lib/nntp/tiny/message.py b/lib/nntp/tiny/message.py index 2c95d06..64ea003 100644 --- a/lib/nntp/tiny/message.py +++ b/lib/nntp/tiny/message.py @@ -125,7 +125,7 @@ class Message(DatabaseTable): return self._body def header(self, key: str): - if self.headers is None: + if self._headers is None: self.read(self.content) return self.headers.get(key.lower()) @@ -151,40 +151,66 @@ class Message(DatabaseTable): @created_on.setter def created_on(self, value): - self.headers['date'] = str(value) + if self._headers is not None: + self._headers['date'] = str(value) + self._cache['created_on'] = str(value) @property def message_id(self) -> str: + if self._headers is None: + return self._cache.get('message_id') + return self.header('Message-ID') @message_id.setter def message_id(self, value): - self.headers['message-id'] = value + if self._headers is None: + self._cache['message_id'] = value + else: + self.headers['message-id'] = value @property def parent_id(self) -> str: + if self._headers is None: + return self._cache.get('parent_id') + return self.header('References') @parent_id.setter def parent_id(self, value): - self.headers['references'] = value + if self._headers is None: + self._cache['parent_id'] = value + else: + self.headers['references'] = value @property def sender(self) -> str: + if self._headers is None: + return self._cache.get('sender') + return self.headers.get('from', 'Unknown') @sender.setter def sender(self, value): - self.headers['from'] = value + if self._headers is None: + self._cache['sender'] = value + else: + self.headers['from'] = value @property def subject(self) -> str: + if self._headers is None: + return self._cache.get('subject', '(no subject)') + return self.headers.get('subject', '(no subject)') @subject.setter def subject(self, value): - self.headers['subject'] = value + if self._headers is None: + self._cache['subject'] = value + else: + self.headers['subject'] = value def is_first_line(self): return len(self.headers) == 1 and (self._body == '' or self._body is None)