Formerly Message.get_replies() returned an iterator or None forcing
users to check the result before iterating over it leading to strange
looking code at the call site.
Fix this flaw by adding an EmptyMessagesResult class that behaves like
the Messages class but immediatly raises StopIteration if used as an
iterator and returning objects of this type from Message.get_replies()
to indicate that there are no replies.
next_indent = indent + 1
# get replies and print them also out (if there are any)
next_indent = indent + 1
# get replies and print them also out (if there are any)
- replies = msg.get_replies()
- if not replies is None:
+ replies = msg.get_replies().format_messages(format, next_indent, entire_thread)
+ if replies:
- result.extend(replies.format_messages(format, next_indent, entire_thread))
result.append(set_end)
result.append(set_end)
result.append(set_end)
result.append(set_end)
"""
handle.write(''.join(self.format_messages(format, indent, entire_thread)))
"""
handle.write(''.join(self.format_messages(format, indent, entire_thread)))
+
+class EmptyMessagesResult(Messages):
+ def __init__(self, parent):
+ self._msgs = None
+ self._parent = parent
+
+ def __next__(self):
+ raise StopIteration()
+ next = __next__
+
+
class Message(Python3StringMixIn):
"""Represents a single Email message
class Message(Python3StringMixIn):
"""Represents a single Email message
number of subsequent calls to :meth:`get_replies`). If this message
was obtained through some non-thread means, (such as by a call to
:meth:`Query.search_messages`), then this function will return
number of subsequent calls to :meth:`get_replies`). If this message
was obtained through some non-thread means, (such as by a call to
:meth:`Query.search_messages`), then this function will return
+ an empty Messages iterator.
- :returns: :class:`Messages` or `None` if there are no replies to
- this message.
+ :returns: :class:`Messages`.
:exception: :exc:`NotmuchError` STATUS.NOT_INITIALIZED if the message
is not initialized.
"""
:exception: :exc:`NotmuchError` STATUS.NOT_INITIALIZED if the message
is not initialized.
"""
msgs_p = Message._get_replies(self._msg)
if msgs_p is None:
msgs_p = Message._get_replies(self._msg)
if msgs_p is None:
+ return EmptyMessagesResult(self)
return Messages(msgs_p, self)
return Messages(msgs_p, self)