diff --git a/lib/nntp/tiny/message.py b/lib/nntp/tiny/message.py index 8083ce4..f553f3c 100644 --- a/lib/nntp/tiny/message.py +++ b/lib/nntp/tiny/message.py @@ -18,6 +18,24 @@ def decode(text: str): except: return str(decoded[0]) +def each_line(text: str): + start = 0 + end = len(text) + + while True: + try: + index = text.index('\n', start, end) + + yield text[start:index+1] + + start = index + 1 + + if start == end: + break + except ValueError: + yield text[start:end] + break + class MessageState(enum.Enum): EMPTY = 0 HEADER = 1 @@ -129,30 +147,16 @@ class Message(DatabaseTable): def is_first_line(self): return len(self.headers) == 1 and (self.body == '' or self.body is None) - @staticmethod - def each_line(text: str): - start = 0 - end = len(text) - while True: - try: - index = text.index('\n', start, end) - yield text[start:index+1] - start = index + 1 - if start == end: - break - except ValueError: - yield text[start:end] - break @staticmethod def parse(text: str): message = Message() - for line in Message.each_line(text): - message.add(line) + for line in each_line(text): + message._parse_line(line) return message