2 This file is part of notmuch.
4 Notmuch is free software: you can redistribute it and/or modify it
5 under the terms of the GNU General Public License as published by the
6 Free Software Foundation, either version 3 of the License, or (at your
7 option) any later version.
9 Notmuch is distributed in the hope that it will be useful, but WITHOUT
10 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 You should have received a copy of the GNU General Public License
15 along with notmuch. If not, see <http://www.gnu.org/licenses/>.
17 Copyright 2010 Sebastian Spaeth <Sebastian@SSpaeth.de>'
20 from ctypes import CDLL, c_char_p, c_int
21 from ctypes.util import find_library
23 #-----------------------------------------------------------------------------
24 #package-global instance of the notmuch library
26 nmlib = CDLL("libnotmuch.so.1")
28 raise ImportError("Could not find shared 'notmuch' library.")
30 #-----------------------------------------------------------------------------
32 """Provides ENUMS as "code=Enum(['a','b','c'])" where code.a=0 etc..."""
33 def __init__(self, names):
34 for number, name in enumerate(names):
35 setattr(self, name, number)
37 #-----------------------------------------------------------------------------
39 """Enum with a string representation of a notmuch_status_t value."""
41 _status2str = nmlib.notmuch_status_to_string
42 _status2str.restype = c_char_p
43 _status2str.argtypes = [c_int]
45 def __init__(self, statuslist):
46 """It is initialized with a list of strings that are available as
47 Status().string1 - Status().stringn attributes.
49 super(Status, self).__init__(statuslist)
52 def status2str(self, status):
53 """Get a string representation of a notmuch_status_t value."""
54 # define strings for custom error messages
55 if status == STATUS.NOT_INITIALIZED:
56 return "Operation on uninitialized object impossible."
57 return str(Status._status2str(status))
59 STATUS = Status(['SUCCESS',
65 'DUPLICATE_MESSAGE_ID',
68 'UNBALANCED_FREEZE_THAW',
72 class NotmuchError(Exception):
73 def __init__(self, status=None, message=None):
74 """Is initiated with a (notmuch.STATUS[,message=None])"""
75 super(NotmuchError, self).__init__(message, status)
78 if self.args[0] is not None: return self.args[0]
79 else: return STATUS.status2str(self.args[1])