Keep body and contents as separate attributes

This commit is contained in:
XANTRONIX Development 2024-11-07 16:15:54 -05:00
parent af9e264ff9
commit fda06f0893

View file

@ -62,23 +62,26 @@ class MBoxMessageState(enum.Enum):
BODY = 2 BODY = 2
class MBoxMessage(): class MBoxMessage():
__slots__ = 'state', 'headers', 'line', 'body', 'key', __slots__ = 'state', 'headers', 'line', 'content', 'body', 'key',
def __init__(self): def __init__(self):
self.state = MBoxMessageState.EMPTY self.state = MBoxMessageState.EMPTY
self.headers = dict() self.headers = dict()
self.line = None self.line = None
self.body = '' self.content = ''
self.body = None
self.key = None self.key = None
def add(self, line: str): def add(self, line: str):
if self.line is not None:
self.content += self.line
if self.state is MBoxMessageState.EMPTY: if self.state is MBoxMessageState.EMPTY:
self.state = MBoxMessageState.HEADER self.state = MBoxMessageState.HEADER
if self.state is MBoxMessageState.HEADER: if self.state is MBoxMessageState.HEADER:
if line == '\n' or line == '\r\n': if line == '\n' or line == '\r\n':
self.state = MBoxMessageState.BODY self.state = MBoxMessageState.BODY
self.body = ''
elif line[0] == ' ' or line[0] == '\t': elif line[0] == ' ' or line[0] == '\t':
self.headers[self.key] += ' ' + line.strip() self.headers[self.key] += ' ' + line.strip()
else: else:
@ -89,15 +92,15 @@ class MBoxMessage():
self.headers[self.key] = match[2].rstrip() self.headers[self.key] = match[2].rstrip()
elif self.state is MBoxMessageState.BODY: elif self.state is MBoxMessageState.BODY:
if self.line is None: if self.body is None:
self.body = line self.body = ''
else: else:
self.body += self.line self.body += self.line
self.line = line self.line = line
def is_first_line(self): def is_first_line(self):
return len(self.headers) == 1 and self.body == '' return len(self.headers) == 1 and (self.body == '' or self.body is None)
@staticmethod @staticmethod
def each_line(text: str): def each_line(text: str):