More refactoring to eliminate duplicate code
This commit is contained in:
parent
65a60d33fd
commit
f6100c4e2f
2 changed files with 46 additions and 56 deletions
|
@ -29,7 +29,7 @@ class ResponseCode(enum.Enum):
|
||||||
NNTP_ARTICLE_INVALID_NUMBER = 420
|
NNTP_ARTICLE_INVALID_NUMBER = 420
|
||||||
NNTP_ARTICLE_NO_NEXT = 421
|
NNTP_ARTICLE_NO_NEXT = 421
|
||||||
NNTP_ARTICLE_NO_PREVIOUS = 422
|
NNTP_ARTICLE_NO_PREVIOUS = 422
|
||||||
NNTP_ARTICLE_NOT_FOUND_RANGE = 423
|
NNTP_ARTICLE_NOT_FOUND_NUM = 423
|
||||||
NNTP_ARTICLE_NOT_FOUND_ID = 430
|
NNTP_ARTICLE_NOT_FOUND_ID = 430
|
||||||
NNTP_POST_PROHIBITED = 440
|
NNTP_POST_PROHIBITED = 440
|
||||||
NNTP_POST_FAILED = 441
|
NNTP_POST_FAILED = 441
|
||||||
|
@ -61,7 +61,7 @@ class ResponseCode(enum.Enum):
|
||||||
420: "Current article number is invalid",
|
420: "Current article number is invalid",
|
||||||
421: "No next article in this group",
|
421: "No next article in this group",
|
||||||
422: "No previous article in this group",
|
422: "No previous article in this group",
|
||||||
423: "No articles found within range",
|
423: "No article found by that message number",
|
||||||
430: "No article found by that message ID",
|
430: "No article found by that message ID",
|
||||||
440: "Posting prohibited",
|
440: "Posting prohibited",
|
||||||
441: "Posting failed",
|
441: "Posting failed",
|
||||||
|
|
|
@ -528,7 +528,7 @@ class Session():
|
||||||
self.respond(ResponseCode.NNTP_ARTICLE_INVALID_NUMBER)
|
self.respond(ResponseCode.NNTP_ARTICLE_INVALID_NUMBER)
|
||||||
return
|
return
|
||||||
|
|
||||||
message = self.db.get(Message, self.article_id)
|
message = self.db.get(Message, {'id': str(self.article_id)})
|
||||||
|
|
||||||
if message is None:
|
if message is None:
|
||||||
self.respond(ResponseCode.NNTP_ARTICLE_INVALID_NUMBER)
|
self.respond(ResponseCode.NNTP_ARTICLE_INVALID_NUMBER)
|
||||||
|
@ -581,24 +581,47 @@ class Session():
|
||||||
name, message.headers[name]
|
name, message.headers[name]
|
||||||
))
|
))
|
||||||
|
|
||||||
def _serve_message(self, part: MessagePart, identifier: Optional[str]=None):
|
def _message_by_id(self, identifier: Optional[str]=None):
|
||||||
|
if identifier is None:
|
||||||
if self.newsgroup is None:
|
if self.newsgroup is None:
|
||||||
return self.respond(ResponseCode.NNTP_NEWSGROUP_NOT_SELECTED)
|
self.respond(ResponseCode.NNTP_NEWSGROUP_NOT_SELECTED)
|
||||||
|
return
|
||||||
message = None
|
|
||||||
|
|
||||||
if self.article_id is None:
|
if self.article_id is None:
|
||||||
if identifier is None:
|
self.respond(ResponseCode.NNTP_ARTICLE_INVALID_NUMBER)
|
||||||
return self.respond(ResponseCode.NNTP_ARTICLE_INVALID_NUMBER)
|
return
|
||||||
|
|
||||||
|
message = self.db.get(Message, {'id': self.article_id})
|
||||||
|
|
||||||
|
if message is None:
|
||||||
|
self.respond(ResponseCode.NNTP_ARTICLE_NOT_FOUND_NUM)
|
||||||
|
return
|
||||||
|
|
||||||
|
return message
|
||||||
|
elif identifier[0] == '<':
|
||||||
|
message = self.db.query(Message, {
|
||||||
|
'message_id': identifier
|
||||||
|
}).fetchone()
|
||||||
|
|
||||||
|
if message is None:
|
||||||
|
self.respond(ResponseCode.NNTP_ARTICLE_NOT_FOUND_ID)
|
||||||
|
return
|
||||||
|
|
||||||
|
return message
|
||||||
else:
|
else:
|
||||||
|
message = self.db.get(Message, {'id': int(identifier)})
|
||||||
|
|
||||||
|
if message is None:
|
||||||
|
self.respond(ResponseCode.NNTP_ARTICLE_NOT_FOUND_NUM)
|
||||||
|
return
|
||||||
|
|
||||||
|
return message
|
||||||
|
|
||||||
|
def _serve_message(self, part: MessagePart, identifier: Optional[str]=None):
|
||||||
message = self._message_by_id(identifier)
|
message = self._message_by_id(identifier)
|
||||||
self.article_id = message.id
|
|
||||||
else:
|
if message is None:
|
||||||
if identifier is None:
|
return
|
||||||
message = self._message_by_id(str(self.article_id))
|
|
||||||
else:
|
|
||||||
message = self._message_by_id(identifier)
|
|
||||||
self.article_id = message.id
|
|
||||||
|
|
||||||
text = "%d %s" % (
|
text = "%d %s" % (
|
||||||
message.id,
|
message.id,
|
||||||
|
@ -655,47 +678,14 @@ class Session():
|
||||||
self.print('|'.join(overview))
|
self.print('|'.join(overview))
|
||||||
|
|
||||||
def _cmd_stat(self, identifier: Optional[str]=None):
|
def _cmd_stat(self, identifier: Optional[str]=None):
|
||||||
if self.newsgroup is None:
|
message = self._message_by_id(identifier)
|
||||||
return self.respond(ResponseCode.NNTP_NEWSGROUP_NOT_SELECTED)
|
|
||||||
|
|
||||||
sql = """
|
if message is None:
|
||||||
select
|
return
|
||||||
id, message_id
|
|
||||||
from
|
|
||||||
newsgroup_message
|
|
||||||
where
|
|
||||||
newsgroup_id = ?
|
|
||||||
"""
|
|
||||||
|
|
||||||
row = None
|
text = "%d %s" % (message.id, message.message_id)
|
||||||
|
|
||||||
if identifier is None:
|
self.article_id = message.id
|
||||||
if self.article_id is None:
|
|
||||||
return self.respond(ResponseCode.NNTP_ARTICLE_INVALID_NUMBER)
|
|
||||||
|
|
||||||
identifier = str(self.article_id)
|
|
||||||
|
|
||||||
if identifier[0] == '<':
|
|
||||||
cr = self.db.execute(sql + " and message_id = ?",
|
|
||||||
(self.newsgroup.id, identifier))
|
|
||||||
|
|
||||||
row = cr.fetchone()
|
|
||||||
|
|
||||||
if row is None:
|
|
||||||
return self.respond(ResponseCode.NNTP_ARTICLE_NOT_FOUND_ID)
|
|
||||||
else:
|
|
||||||
cr = self.db.execute(sql + " and id = ?",
|
|
||||||
(self.newsgroup.id, int(identifier)))
|
|
||||||
|
|
||||||
row = cr.fetchone()
|
|
||||||
|
|
||||||
if row is None:
|
|
||||||
return self.respond(ResponseCode.NNTP_ARTICLE_NOT_FOUND_RANGE)
|
|
||||||
|
|
||||||
text = "%d %s" % (row[0], row[1])
|
|
||||||
|
|
||||||
if self.article_id is None:
|
|
||||||
self.article_id = int(row[0])
|
|
||||||
|
|
||||||
return self.respond(ResponseCode.NNTP_ARTICLE_STAT_RESPONSE, text)
|
return self.respond(ResponseCode.NNTP_ARTICLE_STAT_RESPONSE, text)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue