python: pep8 compliance for message.py

This commit is contained in:
pazz 2011-07-12 20:46:59 +01:00 committed by Sebastian Spaeth
parent 9562c7d1fb
commit 61f0184707

View file

@ -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)