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
This commit is contained in:
XANTRONIX Development 2024-12-05 21:56:58 -05:00
parent 293c2ab1cf
commit 3a0dac2c41
2 changed files with 36 additions and 34 deletions

View file

@ -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):

View file

@ -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)