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:
parent
293c2ab1cf
commit
3a0dac2c41
2 changed files with 36 additions and 34 deletions
|
@ -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):
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue