X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=bindings%2Fpython%2Fnotmuch%2Fglobals.py;h=41384604588d16ef70f5eb47f84f62aca129695f;hp=54a49b2d3f16895a8a8ce0b9ffc459b58a7cadf2;hb=bf6039e34eca52ccf7fe1db51e1b5c843a9828f3;hpb=f0e0053149bb3b51f4a0cd43371292b639f236a8 diff --git a/bindings/python/notmuch/globals.py b/bindings/python/notmuch/globals.py index 54a49b2d..41384604 100644 --- a/bindings/python/notmuch/globals.py +++ b/bindings/python/notmuch/globals.py @@ -16,7 +16,7 @@ along with notmuch. If not, see . Copyright 2010 Sebastian Spaeth ' """ - +import sys from ctypes import CDLL, c_char_p, c_int, Structure, POINTER #----------------------------------------------------------------------------- @@ -27,6 +27,38 @@ except: 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') + + + def _str(value): + """Ensure a nicely utf-8 encoded string to pass to libnotmuch + + C++ code expects strings to be well formatted and + unicode strings to have no null bytes.""" + if not isinstance(value, basestring): + raise TypeError("Expected str or unicode, got %s" % type(value)) + if isinstance(value, unicode): + return value.encode('UTF-8') + return value +else: + class Python3StringMixIn(object): + def __str__(self): + return self.__unicode__() + + + def _str(value): + """Ensure a nicely utf-8 encoded string to pass to libnotmuch + + C++ code expects strings to be well formatted and + unicode strings to have no null bytes.""" + if not isinstance(value, str): + raise TypeError("Expected str, got %s" % type(value)) + return value.encode('UTF-8') + + class Enum(object): """Provides ENUMS as "code=Enum(['a','b','c'])" where code.a=0 etc...""" def __init__(self, names): @@ -51,7 +83,7 @@ class Status(Enum): """Get a (unicode) string representation of a notmuch_status_t value.""" # define strings for custom error messages if status == STATUS.NOT_INITIALIZED: - return u"Operation on uninitialized object impossible." + return "Operation on uninitialized object impossible." return unicode(Status._status2str(status)) STATUS = Status(['SUCCESS', @@ -89,7 +121,7 @@ argument to receive a human readable string""" STATUS.__name__ = 'STATUS' -class NotmuchError(Exception): +class NotmuchError(Exception, Python3StringMixIn): """Is initiated with a (notmuch.STATUS[, message=None]). It will not return an instance of the class NotmuchError, but a derived instance of a more specific Error Message, e.g. OutOfMemoryError. Each status @@ -133,16 +165,13 @@ class NotmuchError(Exception): self.status = status self.message = message - def __str__(self): - return unicode(self).encode('utf-8') - def __unicode__(self): if self.message is not None: return self.message elif self.status is not None: return STATUS.status2str(self.status) else: - return u'Unknown error' + return 'Unknown error' # List of Subclassed exceptions that correspond to STATUS values and are @@ -195,18 +224,6 @@ class NotInitializedError(NotmuchError): status = STATUS.NOT_INITIALIZED -def _str(value): - """Ensure a nicely utf-8 encoded string to pass to libnotmuch - - C++ code expects strings to be well formatted and - unicode strings to have no null bytes.""" - if not isinstance(value, basestring): - raise TypeError("Expected str or unicode, got %s" % str(type(value))) - if isinstance(value, unicode): - return value.encode('UTF-8') - return value - - class NotmuchDatabaseS(Structure): pass NotmuchDatabaseP = POINTER(NotmuchDatabaseS)