mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-24 20:08:10 +01:00
python: make the result of Message.get_replies() more pythonic
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.
This commit is contained in:
parent
e32c8a5e6b
commit
ada246aa20
1 changed files with 17 additions and 7 deletions
|
@ -234,10 +234,10 @@ class Messages(object):
|
||||||
next_indent = indent + 1
|
next_indent = indent + 1
|
||||||
|
|
||||||
# get replies and print them also out (if there are any)
|
# get replies and print them also out (if there are any)
|
||||||
replies = msg.get_replies()
|
replies = msg.get_replies().format_messages(format, next_indent, entire_thread)
|
||||||
if not replies is None:
|
if replies:
|
||||||
result.append(set_sep)
|
result.append(set_sep)
|
||||||
result.extend(replies.format_messages(format, next_indent, entire_thread))
|
result.extend(replies)
|
||||||
|
|
||||||
result.append(set_end)
|
result.append(set_end)
|
||||||
result.append(set_end)
|
result.append(set_end)
|
||||||
|
@ -255,6 +255,17 @@ class Messages(object):
|
||||||
"""
|
"""
|
||||||
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):
|
class Message(Python3StringMixIn):
|
||||||
"""Represents a single Email message
|
"""Represents a single Email message
|
||||||
|
|
||||||
|
@ -385,10 +396,9 @@ class Message(Python3StringMixIn):
|
||||||
number of subsequent calls to :meth:`get_replies`). If this 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
|
was obtained through some non-thread means, (such as by a call to
|
||||||
:meth:`Query.search_messages`), then this function will return
|
:meth:`Query.search_messages`), then this function will return
|
||||||
`None`.
|
an empty Messages iterator.
|
||||||
|
|
||||||
:returns: :class:`Messages` or `None` if there are no replies to
|
:returns: :class:`Messages`.
|
||||||
this message.
|
|
||||||
:exception: :exc:`NotmuchError` STATUS.NOT_INITIALIZED if the message
|
:exception: :exc:`NotmuchError` STATUS.NOT_INITIALIZED if the message
|
||||||
is not initialized.
|
is not initialized.
|
||||||
"""
|
"""
|
||||||
|
@ -398,7 +408,7 @@ class Message(Python3StringMixIn):
|
||||||
msgs_p = Message._get_replies(self._msg)
|
msgs_p = Message._get_replies(self._msg)
|
||||||
|
|
||||||
if msgs_p is None:
|
if msgs_p is None:
|
||||||
return None
|
return EmptyMessagesResult(self)
|
||||||
|
|
||||||
return Messages(msgs_p, self)
|
return Messages(msgs_p, self)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue