mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-22 02:48:08 +01:00
python: pep8 compliance for message.py
This commit is contained in:
parent
9562c7d1fb
commit
61f0184707
1 changed files with 63 additions and 66 deletions
|
@ -18,7 +18,7 @@ Copyright 2010 Sebastian Spaeth <Sebastian@SSpaeth.de>'
|
|||
Jesse Rosenthal <jrosenthal@jhu.edu>
|
||||
"""
|
||||
|
||||
|
||||
|
||||
from ctypes import c_char_p, c_void_p, c_long, c_uint, c_int
|
||||
from datetime import date
|
||||
from notmuch.globals import nmlib, STATUS, NotmuchError, Enum
|
||||
|
@ -31,7 +31,8 @@ try:
|
|||
import simplejson as json
|
||||
except ImportError:
|
||||
import json
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
|
||||
class Messages(object):
|
||||
"""Represents a list of notmuch messages
|
||||
|
||||
|
@ -63,8 +64,8 @@ class Messages(object):
|
|||
# However it will be kept alive until all retrieved Message()
|
||||
# objects are also deleted. If you do e.g. an explicit del(msgs)
|
||||
# here, the following lines would fail.
|
||||
|
||||
# You can reiterate over *msglist* however as often as you want.
|
||||
|
||||
# You can reiterate over *msglist* however as often as you want.
|
||||
# It is simply a list with :class:`Message`s.
|
||||
|
||||
print (msglist[0].get_filename())
|
||||
|
@ -110,7 +111,7 @@ class Messages(object):
|
|||
(ie :class:`Query`) these tags are derived from. It saves
|
||||
a reference to it, so we can automatically delete the db
|
||||
object once all derived objects are dead.
|
||||
:TODO: Make the iterator work more than once and cache the tags in
|
||||
:TODO: Make the iterator work more than once and cache the tags in
|
||||
the Python object.(?)
|
||||
"""
|
||||
if msgs_p is None:
|
||||
|
@ -133,7 +134,7 @@ class Messages(object):
|
|||
raise NotmuchError(STATUS.NOT_INITIALIZED)
|
||||
|
||||
# collect all tags (returns NULL on error)
|
||||
tags_p = Messages._collect_tags (self._msgs)
|
||||
tags_p = Messages._collect_tags(self._msgs)
|
||||
#reset _msgs as we iterated over it and can do so only once
|
||||
self._msgs = None
|
||||
|
||||
|
@ -153,7 +154,7 @@ class Messages(object):
|
|||
self._msgs = None
|
||||
raise StopIteration
|
||||
|
||||
msg = Message(Messages._get (self._msgs), self)
|
||||
msg = Message(Messages._get(self._msgs), self)
|
||||
nmlib.notmuch_messages_move_to_next(self._msgs)
|
||||
return msg
|
||||
|
||||
|
@ -167,14 +168,14 @@ class Messages(object):
|
|||
def __del__(self):
|
||||
"""Close and free the notmuch Messages"""
|
||||
if self._msgs is not None:
|
||||
nmlib.notmuch_messages_destroy (self._msgs)
|
||||
nmlib.notmuch_messages_destroy(self._msgs)
|
||||
|
||||
def print_messages(self, format, indent=0, entire_thread=False):
|
||||
"""Outputs messages as needed for 'notmuch show' to sys.stdout
|
||||
|
||||
:param format: A string of either 'text' or 'json'.
|
||||
:param indent: A number indicating the reply depth of these messages.
|
||||
:param entire_thread: A bool, indicating whether we want to output
|
||||
:param entire_thread: A bool, indicating whether we want to output
|
||||
whole threads or only the matching messages.
|
||||
"""
|
||||
if format.lower() == "text":
|
||||
|
@ -195,7 +196,7 @@ class Messages(object):
|
|||
# iterate through all toplevel messages in this thread
|
||||
for msg in self:
|
||||
# if not msg:
|
||||
# break
|
||||
# break
|
||||
if not first_set:
|
||||
sys.stdout.write(set_sep)
|
||||
first_set = False
|
||||
|
@ -222,7 +223,7 @@ class Messages(object):
|
|||
sys.stdout.write(set_end)
|
||||
sys.stdout.write(set_end)
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
class Message(object):
|
||||
"""Represents a single Email message
|
||||
|
||||
|
@ -236,7 +237,7 @@ class Message(object):
|
|||
|
||||
"""notmuch_message_get_filename (notmuch_message_t *message)"""
|
||||
_get_filename = nmlib.notmuch_message_get_filename
|
||||
_get_filename.restype = c_char_p
|
||||
_get_filename.restype = c_char_p
|
||||
|
||||
"""return all filenames for a message"""
|
||||
_get_filenames = nmlib.notmuch_message_get_filenames
|
||||
|
@ -248,7 +249,7 @@ class Message(object):
|
|||
|
||||
"""notmuch_message_get_message_id (notmuch_message_t *message)"""
|
||||
_get_message_id = nmlib.notmuch_message_get_message_id
|
||||
_get_message_id.restype = c_char_p
|
||||
_get_message_id.restype = c_char_p
|
||||
|
||||
"""notmuch_message_get_thread_id"""
|
||||
_get_thread_id = nmlib.notmuch_message_get_thread_id
|
||||
|
@ -296,12 +297,11 @@ class Message(object):
|
|||
#keep reference to parent, so we keep it alive
|
||||
self._parent = parent
|
||||
|
||||
|
||||
def get_message_id(self):
|
||||
"""Returns the message ID
|
||||
|
||||
|
||||
:returns: String with a message ID
|
||||
:exception: :exc:`NotmuchError` STATUS.NOT_INITIALIZED if the message
|
||||
:exception: :exc:`NotmuchError` STATUS.NOT_INITIALIZED if the message
|
||||
is not initialized.
|
||||
"""
|
||||
if self._msg is None:
|
||||
|
@ -311,23 +311,24 @@ class Message(object):
|
|||
def get_thread_id(self):
|
||||
"""Returns the thread ID
|
||||
|
||||
The returned string belongs to 'message' will only be valid for as
|
||||
The returned string belongs to 'message' will only be valid for as
|
||||
long as the message is valid.
|
||||
|
||||
This function will not return `None` since Notmuch ensures that every
|
||||
message belongs to a single thread.
|
||||
|
||||
:returns: String with a thread ID
|
||||
:exception: :exc:`NotmuchError` STATUS.NOT_INITIALIZED if the message
|
||||
:exception: :exc:`NotmuchError` STATUS.NOT_INITIALIZED if the message
|
||||
is not initialized.
|
||||
"""
|
||||
if self._msg is None:
|
||||
raise NotmuchError(STATUS.NOT_INITIALIZED)
|
||||
|
||||
return Message._get_thread_id (self._msg);
|
||||
return Message._get_thread_id(self._msg)
|
||||
|
||||
def get_replies(self):
|
||||
"""Gets all direct replies to this message as :class:`Messages` iterator
|
||||
"""Gets all direct replies to this message as :class:`Messages`
|
||||
iterator
|
||||
|
||||
.. note:: This call only makes sense if 'message' was
|
||||
ultimately obtained from a :class:`Thread` object, (such as
|
||||
|
@ -338,20 +339,20 @@ class Message(object):
|
|||
to :meth:`Query.search_messages`), then this function will
|
||||
return `None`.
|
||||
|
||||
:returns: :class:`Messages` or `None` if there are no replies to
|
||||
:returns: :class:`Messages` or `None` if there are no replies to
|
||||
this message.
|
||||
:exception: :exc:`NotmuchError` STATUS.NOT_INITIALIZED if the message
|
||||
:exception: :exc:`NotmuchError` STATUS.NOT_INITIALIZED if the message
|
||||
is not initialized.
|
||||
"""
|
||||
if self._msg is None:
|
||||
raise NotmuchError(STATUS.NOT_INITIALIZED)
|
||||
|
||||
msgs_p = Message._get_replies(self._msg);
|
||||
msgs_p = Message._get_replies(self._msg)
|
||||
|
||||
if msgs_p is None:
|
||||
return None
|
||||
|
||||
return Messages(msgs_p,self)
|
||||
return Messages(msgs_p, self)
|
||||
|
||||
def get_date(self):
|
||||
"""Returns time_t of the message date
|
||||
|
@ -362,7 +363,7 @@ class Message(object):
|
|||
|
||||
:returns: A time_t timestamp.
|
||||
:rtype: c_unit64
|
||||
:exception: :exc:`NotmuchError` STATUS.NOT_INITIALIZED if the message
|
||||
:exception: :exc:`NotmuchError` STATUS.NOT_INITIALIZED if the message
|
||||
is not initialized.
|
||||
"""
|
||||
if self._msg is None:
|
||||
|
@ -371,7 +372,7 @@ class Message(object):
|
|||
|
||||
def get_header(self, header):
|
||||
"""Returns a message header
|
||||
|
||||
|
||||
This returns any message header that is stored in the notmuch database.
|
||||
This is only a selected subset of headers, which is currently:
|
||||
|
||||
|
@ -383,7 +384,7 @@ class Message(object):
|
|||
:returns: The header value as string
|
||||
:exception: :exc:`NotmuchError`
|
||||
|
||||
* STATUS.NOT_INITIALIZED if the message
|
||||
* STATUS.NOT_INITIALIZED if the message
|
||||
is not initialized.
|
||||
* STATUS.NULL_POINTER, if no header was found
|
||||
"""
|
||||
|
@ -391,7 +392,7 @@ class Message(object):
|
|||
raise NotmuchError(STATUS.NOT_INITIALIZED)
|
||||
|
||||
#Returns NULL if any error occurs.
|
||||
header = Message._get_header (self._msg, header)
|
||||
header = Message._get_header(self._msg, header)
|
||||
if header == None:
|
||||
raise NotmuchError(STATUS.NULL_POINTER)
|
||||
return header
|
||||
|
@ -400,7 +401,7 @@ class Message(object):
|
|||
"""Returns the file path of the message file
|
||||
|
||||
:returns: Absolute file path & name of the message file
|
||||
:exception: :exc:`NotmuchError` STATUS.NOT_INITIALIZED if the message
|
||||
:exception: :exc:`NotmuchError` STATUS.NOT_INITIALIZED if the message
|
||||
is not initialized.
|
||||
"""
|
||||
if self._msg is None:
|
||||
|
@ -415,7 +416,7 @@ class Message(object):
|
|||
not necessarily have identical content."""
|
||||
if self._msg is None:
|
||||
raise NotmuchError(STATUS.NOT_INITIALIZED)
|
||||
|
||||
|
||||
files_p = Message._get_filenames(self._msg)
|
||||
|
||||
return Filenames(files_p, self).as_generator()
|
||||
|
@ -427,10 +428,10 @@ class Message(object):
|
|||
*Message.FLAG.MATCH* for those messages that match the
|
||||
query. This method allows us to get the value of this flag.
|
||||
|
||||
:param flag: One of the :attr:`Message.FLAG` values (currently only
|
||||
:param flag: One of the :attr:`Message.FLAG` values (currently only
|
||||
*Message.FLAG.MATCH*
|
||||
:returns: An unsigned int (0/1), indicating whether the flag is set.
|
||||
:exception: :exc:`NotmuchError` STATUS.NOT_INITIALIZED if the message
|
||||
:exception: :exc:`NotmuchError` STATUS.NOT_INITIALIZED if the message
|
||||
is not initialized.
|
||||
"""
|
||||
if self._msg is None:
|
||||
|
@ -440,12 +441,12 @@ class Message(object):
|
|||
def set_flag(self, flag, value):
|
||||
"""Sets/Unsets a specific flag for this message
|
||||
|
||||
:param flag: One of the :attr:`Message.FLAG` values (currently only
|
||||
:param flag: One of the :attr:`Message.FLAG` values (currently only
|
||||
*Message.FLAG.MATCH*
|
||||
:param value: A bool indicating whether to set or unset the flag.
|
||||
|
||||
:returns: Nothing
|
||||
:exception: :exc:`NotmuchError` STATUS.NOT_INITIALIZED if the message
|
||||
:exception: :exc:`NotmuchError` STATUS.NOT_INITIALIZED if the message
|
||||
is not initialized.
|
||||
"""
|
||||
if self._msg is None:
|
||||
|
@ -458,7 +459,7 @@ class Message(object):
|
|||
:returns: A :class:`Tags` iterator.
|
||||
:exception: :exc:`NotmuchError`
|
||||
|
||||
* STATUS.NOT_INITIALIZED if the message
|
||||
* STATUS.NOT_INITIALIZED if the message
|
||||
is not initialized.
|
||||
* STATUS.NULL_POINTER, on error
|
||||
"""
|
||||
|
@ -493,10 +494,10 @@ class Message(object):
|
|||
STATUS.NULL_POINTER
|
||||
The 'tag' argument is NULL
|
||||
STATUS.TAG_TOO_LONG
|
||||
The length of 'tag' is too long
|
||||
The length of 'tag' is too long
|
||||
(exceeds Message.NOTMUCH_TAG_MAX)
|
||||
STATUS.READ_ONLY_DATABASE
|
||||
Database was opened in read-only mode so message cannot be
|
||||
Database was opened in read-only mode so message cannot be
|
||||
modified.
|
||||
STATUS.NOT_INITIALIZED
|
||||
The message has not been initialized.
|
||||
|
@ -504,7 +505,7 @@ class Message(object):
|
|||
if self._msg is None:
|
||||
raise NotmuchError(STATUS.NOT_INITIALIZED)
|
||||
|
||||
status = nmlib.notmuch_message_add_tag (self._msg, tag)
|
||||
status = nmlib.notmuch_message_add_tag(self._msg, tag)
|
||||
|
||||
# bail out on failure
|
||||
if status != STATUS.SUCCESS:
|
||||
|
@ -529,7 +530,7 @@ class Message(object):
|
|||
that this will do nothing when a message is frozen, as tag
|
||||
changes will not be committed to the database yet.
|
||||
|
||||
:returns: STATUS.SUCCESS if the tag was successfully removed or if
|
||||
:returns: STATUS.SUCCESS if the tag was successfully removed or if
|
||||
the message had no such tag.
|
||||
Raises an exception otherwise.
|
||||
:exception: :exc:`NotmuchError`. They have the following meaning:
|
||||
|
@ -540,7 +541,7 @@ class Message(object):
|
|||
The length of 'tag' is too long
|
||||
(exceeds NOTMUCH_TAG_MAX)
|
||||
STATUS.READ_ONLY_DATABASE
|
||||
Database was opened in read-only mode so message cannot
|
||||
Database was opened in read-only mode so message cannot
|
||||
be modified.
|
||||
STATUS.NOT_INITIALIZED
|
||||
The message has not been initialized.
|
||||
|
@ -557,8 +558,6 @@ class Message(object):
|
|||
self.tags_to_maildir_flags()
|
||||
return STATUS.SUCCESS
|
||||
|
||||
|
||||
|
||||
def remove_all_tags(self, sync_maildir_flags=False):
|
||||
"""Removes all tags from the given message.
|
||||
|
||||
|
@ -579,14 +578,14 @@ class Message(object):
|
|||
:exception: :exc:`NotmuchError`. They have the following meaning:
|
||||
|
||||
STATUS.READ_ONLY_DATABASE
|
||||
Database was opened in read-only mode so message cannot
|
||||
Database was opened in read-only mode so message cannot
|
||||
be modified.
|
||||
STATUS.NOT_INITIALIZED
|
||||
The message has not been initialized.
|
||||
"""
|
||||
if self._msg is None:
|
||||
raise NotmuchError(STATUS.NOT_INITIALIZED)
|
||||
|
||||
|
||||
status = nmlib.notmuch_message_remove_all_tags(self._msg)
|
||||
|
||||
# bail out on error
|
||||
|
@ -600,8 +599,8 @@ class Message(object):
|
|||
def freeze(self):
|
||||
"""Freezes the current state of 'message' within the database
|
||||
|
||||
This means that changes to the message state, (via :meth:`add_tag`,
|
||||
:meth:`remove_tag`, and :meth:`remove_all_tags`), will not be
|
||||
This means that changes to the message state, (via :meth:`add_tag`,
|
||||
:meth:`remove_tag`, and :meth:`remove_all_tags`), will not be
|
||||
committed to the database until the message is :meth:`thaw`ed.
|
||||
|
||||
Multiple calls to freeze/thaw are valid and these calls will
|
||||
|
@ -633,14 +632,14 @@ class Message(object):
|
|||
:exception: :exc:`NotmuchError`. They have the following meaning:
|
||||
|
||||
STATUS.READ_ONLY_DATABASE
|
||||
Database was opened in read-only mode so message cannot
|
||||
Database was opened in read-only mode so message cannot
|
||||
be modified.
|
||||
STATUS.NOT_INITIALIZED
|
||||
The message has not been initialized.
|
||||
"""
|
||||
if self._msg is None:
|
||||
raise NotmuchError(STATUS.NOT_INITIALIZED)
|
||||
|
||||
|
||||
status = nmlib.notmuch_message_freeze(self._msg)
|
||||
|
||||
if STATUS.SUCCESS == status:
|
||||
|
@ -652,7 +651,7 @@ class Message(object):
|
|||
def thaw(self):
|
||||
"""Thaws the current 'message'
|
||||
|
||||
Thaw the current 'message', synchronizing any changes that may have
|
||||
Thaw the current 'message', synchronizing any changes that may have
|
||||
occurred while 'message' was frozen into the notmuch database.
|
||||
|
||||
See :meth:`freeze` for an example of how to use this
|
||||
|
@ -667,15 +666,15 @@ class Message(object):
|
|||
:exception: :exc:`NotmuchError`. They have the following meaning:
|
||||
|
||||
STATUS.UNBALANCED_FREEZE_THAW
|
||||
An attempt was made to thaw an unfrozen message.
|
||||
That is, there have been an unbalanced number of calls
|
||||
An attempt was made to thaw an unfrozen message.
|
||||
That is, there have been an unbalanced number of calls
|
||||
to :meth:`freeze` and :meth:`thaw`.
|
||||
STATUS.NOT_INITIALIZED
|
||||
The message has not been initialized.
|
||||
"""
|
||||
if self._msg is None:
|
||||
raise NotmuchError(STATUS.NOT_INITIALIZED)
|
||||
|
||||
|
||||
status = nmlib.notmuch_message_thaw(self._msg)
|
||||
|
||||
if STATUS.SUCCESS == status:
|
||||
|
@ -684,7 +683,6 @@ class Message(object):
|
|||
|
||||
raise NotmuchError(status)
|
||||
|
||||
|
||||
def is_match(self):
|
||||
"""(Not implemented)"""
|
||||
return self.get_flag(Message.FLAG.MATCH)
|
||||
|
@ -697,10 +695,10 @@ class Message(object):
|
|||
'P' if the message has the "passed" tag
|
||||
'R' if the message has the "replied" tag
|
||||
'S' if the message does not have the "unread" tag
|
||||
|
||||
|
||||
Any existing flags unmentioned in the list above will be
|
||||
preserved in the renaming.
|
||||
|
||||
|
||||
Also, if this filename is in a directory named "new", rename it
|
||||
to be within the neighboring directory named "cur".
|
||||
|
||||
|
@ -753,7 +751,6 @@ class Message(object):
|
|||
msg['date'] = date.fromtimestamp(self.get_date())
|
||||
return "%(from)s (%(date)s) (%(tags)s)" % (msg)
|
||||
|
||||
|
||||
def get_message_parts(self):
|
||||
"""Output like notmuch show"""
|
||||
fp = open(self.get_filename())
|
||||
|
@ -802,7 +799,7 @@ class Message(object):
|
|||
part_dict["content-type"] = cont_type
|
||||
# NOTE:
|
||||
# Now we emulate the current behaviour, where it ignores
|
||||
# the html if there's a text representation.
|
||||
# the html if there's a text representation.
|
||||
#
|
||||
# This is being worked on, but it will be easier to fix
|
||||
# here in the future than to end up with another
|
||||
|
@ -813,7 +810,7 @@ class Message(object):
|
|||
else:
|
||||
if cont_type.lower() == "text/plain":
|
||||
part_dict["content"] = msg.get_payload()
|
||||
elif (cont_type.lower() == "text/html" and
|
||||
elif (cont_type.lower() == "text/html" and
|
||||
i == 0):
|
||||
part_dict["content"] = msg.get_payload()
|
||||
body.append(part_dict)
|
||||
|
@ -858,18 +855,18 @@ class Message(object):
|
|||
parts = format["body"]
|
||||
parts.sort(key=lambda x: x['id'])
|
||||
for p in parts:
|
||||
if not p.has_key("filename"):
|
||||
if not "filename" in p:
|
||||
output += "\n\fpart{ "
|
||||
output += "ID: %d, Content-type: %s\n" % (p["id"],
|
||||
p["content-type"])
|
||||
if p.has_key("content"):
|
||||
output += "ID: %d, Content-type: %s\n" % (p["id"],
|
||||
p["content-type"])
|
||||
if "content" in p:
|
||||
output += "\n%s\n" % p["content"]
|
||||
else:
|
||||
output += "Non-text part: %s\n" % p["content-type"]
|
||||
output += "\n\fpart}"
|
||||
output += "\n\fpart}"
|
||||
else:
|
||||
output += "\n\fattachment{ "
|
||||
output += "ID: %d, Content-type:%s\n" % (p["id"],
|
||||
output += "ID: %d, Content-type:%s\n" % (p["id"],
|
||||
p["content-type"])
|
||||
output += "Attachment: %s\n" % p["filename"]
|
||||
output += "\n\fattachment}\n"
|
||||
|
@ -895,7 +892,7 @@ class Message(object):
|
|||
been added or removed, the same messages would not be considered
|
||||
equal (as they do not point to the same set of files
|
||||
any more)."""
|
||||
res = cmp(self.get_message_id(), other.get_message_id())
|
||||
res = cmp(self.get_message_id(), other.get_message_id())
|
||||
if res:
|
||||
res = cmp(list(self.get_filenames()), list(other.get_filenames()))
|
||||
return res
|
||||
|
@ -903,4 +900,4 @@ class Message(object):
|
|||
def __del__(self):
|
||||
"""Close and free the notmuch Message"""
|
||||
if self._msg is not None:
|
||||
nmlib.notmuch_message_destroy (self._msg)
|
||||
nmlib.notmuch_message_destroy(self._msg)
|
||||
|
|
Loading…
Reference in a new issue