X-Git-Url: https://git.notmuchmail.org/git?a=blobdiff_plain;f=bindings%2Fpython%2Fnotmuch%2Fglobals.py;h=41384604588d16ef70f5eb47f84f62aca129695f;hb=c1094bc2d767159b5478cd0399d37a4813d0de05;hp=f5c8d5288ea07edb249bd39dc99b9229cdd1db8e;hpb=4292b1197d8a43199c43164e9f8e764b3a809de4;p=notmuch
diff --git a/bindings/python/notmuch/globals.py b/bindings/python/notmuch/globals.py
index f5c8d528..41384604 100644
--- a/bindings/python/notmuch/globals.py
+++ b/bindings/python/notmuch/globals.py
@@ -16,9 +16,8 @@ along with notmuch. If not, see .
Copyright 2010 Sebastian Spaeth '
"""
-
+import sys
from ctypes import CDLL, c_char_p, c_int, Structure, POINTER
-from ctypes.util import find_library
#-----------------------------------------------------------------------------
#package-global instance of the notmuch library
@@ -28,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):
@@ -49,11 +80,11 @@ class Status(Enum):
@classmethod
def status2str(self, status):
- """Get a string representation of a notmuch_status_t value."""
+ """Get a (unicode) string representation of a notmuch_status_t value."""
# define strings for custom error messages
if status == STATUS.NOT_INITIALIZED:
return "Operation on uninitialized object impossible."
- return str(Status._status2str(status))
+ return unicode(Status._status2str(status))
STATUS = Status(['SUCCESS',
'OUT_OF_MEMORY',
@@ -90,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
@@ -134,7 +165,7 @@ class NotmuchError(Exception):
self.status = status
self.message = message
- def __str__(self):
+ def __unicode__(self):
if self.message is not None:
return self.message
elif self.status is not None:
@@ -193,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)