From 3a0dac2c41ae7fdd14799bc5b41ce6eba80da1c5 Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Thu, 5 Dec 2024 21:56:58 -0500 Subject: [PATCH] Consolidate message sending into nntp.client.socket Consolidate message sending into nntp.client.socket, to allow for usage of the same code to send messages to both clients and servers --- lib/nntp/tiny/session.py | 42 +++++++++------------------------------- lib/nntp/tiny/socket.py | 28 ++++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 34 deletions(-) diff --git a/lib/nntp/tiny/session.py b/lib/nntp/tiny/session.py index 96fceb3..6b129c3 100644 --- a/lib/nntp/tiny/session.py +++ b/lib/nntp/tiny/session.py @@ -574,12 +574,6 @@ class Session(Connection): self.end() - def _send_message_headers(self, message: Message): - for name in message.headers: - self.print("%s: %s" % ( - name, message.headers[name] - )) - def _message_by_id(self, identifier: Optional[str]=None): if identifier is None: if self.newsgroup is None: @@ -616,7 +610,7 @@ class Session(Connection): return message - def _serve_message(self, part: MessagePart, identifier: Optional[str]=None): + def message_respond(self, part: MessagePart, identifier: Optional[str]=None): message = self._message_by_id(identifier) if message is None: @@ -628,41 +622,23 @@ class Session(Connection): ) self.respond(ResponseCode.NNTP_ARTICLE_LISTING, text) - - if part is MessagePart.HEAD or part is MessagePart.WHOLE: - self._send_message_headers(message) - - if part is MessagePart.WHOLE: - self.print('') - - if part is MessagePart.BODY or part is MessagePart.WHOLE: - for line in each_line(message.body): - stripped = line.rstrip() - - if stripped == '.': - self.print('..') - else: - self.print(stripped) - - return self.end() + self.message_send(message, part) + self.end() def _cmd_head(self, identifier: Optional[str]=None): - return self._serve_message(MessagePart.HEAD, identifier) + self.message_respond(MessagePart.HEAD, identifier) def _cmd_body(self, identifier: Optional[str]=None): - return self._serve_message(MessagePart.BODY, identifier) + self.message_respond(MessagePart.BODY, identifier) def _cmd_article(self, identifier: Optional[str]=None): - return self._serve_message(MessagePart.WHOLE, identifier) - - def _send_message_header(self, message: Message, name: str): - return self.print("%d %s" % ( - message.id, message.headers.get(name, '') - )) + self.message_respond(MessagePart.WHOLE, identifier) def _cmd_hdr(self, name: str, identifier: Optional[str]=None): for message in self._each_message_by_id(identifier): - self._send_message_header(message, name) + return self.print("%d %s" % ( + message.id, message.headers.get(name, '') + )) def _message_overview(self, message: Message) -> dict: def f(s: str): diff --git a/lib/nntp/tiny/socket.py b/lib/nntp/tiny/socket.py index ea3e32a..a38ff92 100644 --- a/lib/nntp/tiny/socket.py +++ b/lib/nntp/tiny/socket.py @@ -1,4 +1,5 @@ -from nntp.tiny.buffer import OutputBuffer, LineBuffer +from nntp.tiny.buffer import OutputBuffer, LineBuffer +from nntp.tiny.message import Message, MessagePart, each_line class Connection(): def __init__(self, sock): @@ -18,3 +19,28 @@ class Connection(): def end(self): return self.print('.') + + def message_send_headers(self, message: Message): + for name in message.headers: + self.print("%s: %s" % ( + name, message.headers[name] + )) + + def message_send_body(self, body: str): + for line in each_line(body): + stripped = line.rstrip() + + if stripped == '.': + self.print('..') + else: + self.print(stripped) + + def message_send(self, message: Message, part: MessagePart): + if part is MessagePart.HEAD or part is MessagePart.WHOLE: + self.message_send_headers(message) + + if part is MessagePart.WHOLE: + self.print('') + + if part is MessagePart.BODY or part is MessagePart.WHOLE: + self.message_send_body(message.body)