:TODO: Make the iterator work more than once and cache the tags in
the Python object.(?)
"""
- if msgs_p is None:
+ if not msgs_p:
raise NotmuchError(STATUS.NULL_POINTER)
self._msgs = msgs_p
:meth:`collect_tags` will iterate over the messages and therefore
will not allow further iterations.
"""
- if self._msgs is None:
+ if not self._msgs:
raise NotmuchError(STATUS.NOT_INITIALIZED)
# collect all tags (returns NULL on error)
_move_to_next.restype = None
def __next__(self):
- if self._msgs is None:
+ if not self._msgs:
raise NotmuchError(STATUS.NOT_INITIALIZED)
if not self._valid(self._msgs):
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.append(set_sep)
- result.extend(replies.format_messages(format, next_indent, entire_thread))
+ result.extend(replies)
result.append(set_end)
result.append(set_end)
"""
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
automatically delete the parent object once all derived
objects are dead.
"""
- if msg_p is None:
+ if not msg_p:
raise NotmuchError(STATUS.NULL_POINTER)
self._msg = msg_p
#keep reference to parent, so we keep it alive
:exception: :exc:`NotmuchError` STATUS.NOT_INITIALIZED if the message
is not initialized.
"""
- if self._msg is None:
+ if not self._msg:
raise NotmuchError(STATUS.NOT_INITIALIZED)
- return Message._get_message_id(self._msg).decode('utf-8', errors='ignore')
+ return Message._get_message_id(self._msg).decode('utf-8', 'ignore')
def get_thread_id(self):
"""Returns the thread ID
:exception: :exc:`NotmuchError` STATUS.NOT_INITIALIZED if the message
is not initialized.
"""
- if self._msg is None:
+ if not self._msg:
raise NotmuchError(STATUS.NOT_INITIALIZED)
- return Message._get_thread_id(self._msg).decode('utf-8', errors='ignore')
+ return Message._get_thread_id(self._msg).decode('utf-8', 'ignore')
def get_replies(self):
"""Gets all direct replies to this message as :class:`Messages`
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
- `None`.
+ 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.
"""
- if self._msg is None:
+ if not self._msg:
raise NotmuchError(STATUS.NOT_INITIALIZED)
msgs_p = Message._get_replies(self._msg)
- if msgs_p is None:
- return None
+ if not msgs_p:
+ return EmptyMessagesResult(self)
return Messages(msgs_p, self)
:exception: :exc:`NotmuchError` STATUS.NOT_INITIALIZED if the message
is not initialized.
"""
- if self._msg is None:
+ if not self._msg:
raise NotmuchError(STATUS.NOT_INITIALIZED)
return Message._get_date(self._msg)
is not initialized.
* STATUS.NULL_POINTER if any error occured.
"""
- if self._msg is None:
+ if not self._msg:
raise NotmuchError(STATUS.NOT_INITIALIZED)
#Returns NULL if any error occurs.
header = Message._get_header(self._msg, _str(header))
if header == None:
raise NotmuchError(STATUS.NULL_POINTER)
- return header.decode('UTF-8', errors='ignore')
+ return header.decode('UTF-8', 'ignore')
def get_filename(self):
"""Returns the file path of the message file
:exception: :exc:`NotmuchError` STATUS.NOT_INITIALIZED if the message
is not initialized.
"""
- if self._msg is None:
+ if not self._msg:
raise NotmuchError(STATUS.NOT_INITIALIZED)
- return Message._get_filename(self._msg).decode('utf-8', errors='ignore')
+ return Message._get_filename(self._msg).decode('utf-8', 'ignore')
def get_filenames(self):
"""Get all filenames for the email corresponding to 'message'
Returns a Filenames() generator with all absolute filepaths for
messages recorded to have the same Message-ID. These files must
not necessarily have identical content."""
- if self._msg is None:
+ if not self._msg:
raise NotmuchError(STATUS.NOT_INITIALIZED)
files_p = Message._get_filenames(self._msg)
:exception: :exc:`NotmuchError` STATUS.NOT_INITIALIZED if the message
is not initialized.
"""
- if self._msg is None:
+ if not self._msg:
raise NotmuchError(STATUS.NOT_INITIALIZED)
return Message._get_flag(self._msg, flag)
:exception: :exc:`NotmuchError` STATUS.NOT_INITIALIZED if the message
is not initialized.
"""
- if self._msg is None:
+ if not self._msg:
raise NotmuchError(STATUS.NOT_INITIALIZED)
self._set_flag(self._msg, flag, value)
is not initialized.
* STATUS.NULL_POINTER, on error
"""
- if self._msg is None:
+ if not self._msg:
raise NotmuchError(STATUS.NOT_INITIALIZED)
tags_p = Message._get_tags(self._msg)
STATUS.NOT_INITIALIZED
The message has not been initialized.
"""
- if self._msg is None:
+ if not self._msg:
raise NotmuchError(STATUS.NOT_INITIALIZED)
status = self._add_tag(self._msg, _str(tag))
STATUS.NOT_INITIALIZED
The message has not been initialized.
"""
- if self._msg is None:
+ if not self._msg:
raise NotmuchError(STATUS.NOT_INITIALIZED)
status = self._remove_tag(self._msg, _str(tag))
STATUS.NOT_INITIALIZED
The message has not been initialized.
"""
- if self._msg is None:
+ if not self._msg:
raise NotmuchError(STATUS.NOT_INITIALIZED)
status = self._remove_all_tags(self._msg)
STATUS.NOT_INITIALIZED
The message has not been initialized.
"""
- if self._msg is None:
+ if not self._msg:
raise NotmuchError(STATUS.NOT_INITIALIZED)
status = self._freeze(self._msg)
STATUS.NOT_INITIALIZED
The message has not been initialized.
"""
- if self._msg is None:
+ if not self._msg:
raise NotmuchError(STATUS.NOT_INITIALIZED)
status = self._thaw(self._msg)
:returns: a :class:`STATUS` value. In short, you want to see
notmuch.STATUS.SUCCESS here. See there for details."""
- if self._msg is None:
+ if not self._msg:
raise NotmuchError(STATUS.NOT_INITIALIZED)
return Message._tags_to_maildir_flags(self._msg)
:returns: a :class:`STATUS`. In short, you want to see
notmuch.STATUS.SUCCESS here. See there for details."""
- if self._msg is None:
+ if not self._msg:
raise NotmuchError(STATUS.NOT_INITIALIZED)
return Message._tags_to_maildir_flags(self._msg)
def __hash__(self):
"""Implement hash(), so we can use Message() sets"""
file = self.get_filename()
- if file is None:
+ if not file:
return None
return hash(file)