py3k: Add and use a mixin class that implements __str__

Amended by Sebastian Spaeth <Sebastian@SSpaeth.de> to include the
required sys import in globals.py.
This commit is contained in:
Justus Winter 2011-12-14 14:04:35 +01:00 committed by Sebastian Spaeth
parent 26d52cf6cf
commit 4a6642a2a1
5 changed files with 21 additions and 25 deletions

View file

@ -18,10 +18,10 @@ Copyright 2010 Sebastian Spaeth <Sebastian@SSpaeth.de>'
""" """
from ctypes import c_char_p from ctypes import c_char_p
from notmuch.globals import (nmlib, STATUS, NotmuchError, from notmuch.globals import (nmlib, STATUS, NotmuchError,
NotmuchFilenamesP, NotmuchMessageP) NotmuchFilenamesP, NotmuchMessageP, _str, Python3StringMixIn)
class Filenames(object): class Filenames(Python3StringMixIn):
"""Represents a list of filenames as returned by notmuch """Represents a list of filenames as returned by notmuch
This object contains the Filenames iterator. The main function is This object contains the Filenames iterator. The main function is
@ -98,9 +98,6 @@ class Filenames(object):
self._files = None self._files = None
def __str__(self):
return unicode(self).encode('utf-8')
def __unicode__(self): def __unicode__(self):
"""Represent Filenames() as newline-separated list of full paths """Represent Filenames() as newline-separated list of full paths

View file

@ -16,7 +16,7 @@ along with notmuch. If not, see <http://www.gnu.org/licenses/>.
Copyright 2010 Sebastian Spaeth <Sebastian@SSpaeth.de>' Copyright 2010 Sebastian Spaeth <Sebastian@SSpaeth.de>'
""" """
import sys
from ctypes import CDLL, c_char_p, c_int, Structure, POINTER from ctypes import CDLL, c_char_p, c_int, Structure, POINTER
#----------------------------------------------------------------------------- #-----------------------------------------------------------------------------
@ -27,6 +27,16 @@ except:
raise ImportError("Could not find shared 'notmuch' library.") raise ImportError("Could not find shared 'notmuch' library.")
if sys.version_info[0] == 2:
class Python3StringMixIn(object):
def __str__(self):
return unicode(self).encode('utf-8')
else:
class Python3StringMixIn(object):
def __str__(self):
return self.__unicode__()
class Enum(object): class Enum(object):
"""Provides ENUMS as "code=Enum(['a','b','c'])" where code.a=0 etc...""" """Provides ENUMS as "code=Enum(['a','b','c'])" where code.a=0 etc..."""
def __init__(self, names): def __init__(self, names):
@ -89,7 +99,7 @@ argument to receive a human readable string"""
STATUS.__name__ = 'STATUS' STATUS.__name__ = 'STATUS'
class NotmuchError(Exception): class NotmuchError(Exception, Python3StringMixIn):
"""Is initiated with a (notmuch.STATUS[, message=None]). It will not """Is initiated with a (notmuch.STATUS[, message=None]). It will not
return an instance of the class NotmuchError, but a derived instance return an instance of the class NotmuchError, but a derived instance
of a more specific Error Message, e.g. OutOfMemoryError. Each status of a more specific Error Message, e.g. OutOfMemoryError. Each status
@ -133,9 +143,6 @@ class NotmuchError(Exception):
self.status = status self.status = status
self.message = message self.message = message
def __str__(self):
return unicode(self).encode('utf-8')
def __unicode__(self): def __unicode__(self):
if self.message is not None: if self.message is not None:
return self.message return self.message

View file

@ -21,7 +21,8 @@ Copyright 2010 Sebastian Spaeth <Sebastian@SSpaeth.de>'
from ctypes import c_char_p, c_long, c_uint, c_int from ctypes import c_char_p, c_long, c_uint, c_int
from datetime import date from datetime import date
from notmuch.globals import (nmlib, STATUS, NotmuchError, Enum, _str, from notmuch.globals import (
nmlib, STATUS, NotmuchError, Enum, _str, Python3StringMixIn,
NotmuchTagsP, NotmuchMessagesP, NotmuchMessageP, NotmuchFilenamesP) NotmuchTagsP, NotmuchMessagesP, NotmuchMessageP, NotmuchFilenamesP)
from notmuch.tag import Tags from notmuch.tag import Tags
from notmuch.filename import Filenames from notmuch.filename import Filenames
@ -239,7 +240,7 @@ class Messages(object):
sys.stdout.write(set_end) sys.stdout.write(set_end)
class Message(object): class Message(Python3StringMixIn):
"""Represents a single Email message """Represents a single Email message
Technically, this wraps the underlying *notmuch_message_t* Technically, this wraps the underlying *notmuch_message_t*
@ -796,9 +797,6 @@ class Message(object):
"""Represent a Message() object by str()""" """Represent a Message() object by str()"""
return self.__str__() return self.__str__()
def __str__(self):
return unicode(self).encode('utf-8')
def __unicode__(self): def __unicode__(self):
format = "%s (%s) (%s)" format = "%s (%s) (%s)"
return format % (self.get_header('from'), return format % (self.get_header('from'),

View file

@ -17,10 +17,10 @@ along with notmuch. If not, see <http://www.gnu.org/licenses/>.
Copyright 2010 Sebastian Spaeth <Sebastian@SSpaeth.de>' Copyright 2010 Sebastian Spaeth <Sebastian@SSpaeth.de>'
""" """
from ctypes import c_char_p from ctypes import c_char_p
from notmuch.globals import nmlib, STATUS, NotmuchError, NotmuchTagsP from notmuch.globals import nmlib, STATUS, NotmuchError, NotmuchTagsP, _str, Python3StringMixIn
class Tags(object): class Tags(Python3StringMixIn):
"""Represents a list of notmuch tags """Represents a list of notmuch tags
This object provides an iterator over a list of notmuch tags (which This object provides an iterator over a list of notmuch tags (which
@ -111,9 +111,6 @@ class Tags(object):
left.""" left."""
return self._valid(self._tags) > 0 return self._valid(self._tags) > 0
def __str__(self):
return unicode(self).encode('utf-8')
def __unicode__(self): def __unicode__(self):
"""string representation of :class:`Tags`: a space separated list of tags """string representation of :class:`Tags`: a space separated list of tags

View file

@ -20,13 +20,13 @@ Copyright 2010 Sebastian Spaeth <Sebastian@SSpaeth.de>'
from ctypes import c_char_p, c_long, c_int from ctypes import c_char_p, c_long, c_int
from notmuch.globals import (nmlib, STATUS, from notmuch.globals import (nmlib, STATUS,
NotmuchError, NotmuchThreadP, NotmuchThreadsP, NotmuchMessagesP, NotmuchError, NotmuchThreadP, NotmuchThreadsP, NotmuchMessagesP,
NotmuchTagsP,) NotmuchTagsP, Python3StringMixIn)
from notmuch.message import Messages from notmuch.message import Messages
from notmuch.tag import Tags from notmuch.tag import Tags
from datetime import date from datetime import date
class Threads(object): class Threads(Python3StringMixIn):
"""Represents a list of notmuch threads """Represents a list of notmuch threads
This object provides an iterator over a list of notmuch threads This object provides an iterator over a list of notmuch threads
@ -392,9 +392,6 @@ class Thread(object):
raise NotmuchError(STATUS.NULL_POINTER) raise NotmuchError(STATUS.NULL_POINTER)
return Tags(tags_p, self) return Tags(tags_p, self)
def __str__(self):
return unicode(self).encode('utf-8')
def __unicode__(self): def __unicode__(self):
frm = "thread:%s %12s [%d/%d] %s; %s (%s)" frm = "thread:%s %12s [%d/%d] %s; %s (%s)"