Implement an Enum class and make the STATUS object one

This commit is contained in:
Sebastian Spaeth 2010-03-17 11:44:36 +01:00
parent 6506175648
commit b00c892c65
2 changed files with 40 additions and 29 deletions

View file

@ -1,6 +1,6 @@
import ctypes import ctypes
from ctypes import c_int, c_char_p, c_void_p, c_uint64 from ctypes import c_int, c_char_p, c_void_p, c_uint64
from cnotmuch.globals import nmlib, STATUS, NotmuchError from cnotmuch.globals import nmlib, STATUS, NotmuchError, Enum
import logging import logging
from datetime import date from datetime import date
@ -10,9 +10,8 @@ class Database(object):
Do note that as soon as we tear down this object, all derived queries, Do note that as soon as we tear down this object, all derived queries,
threads, and messages will be freed as well. threads, and messages will be freed as well.
""" """
#constants MODE = Enum(['READ_ONLY','READ_WRITE'])
MODE_READ_ONLY = 0 """Constants: Mode in which to open the database"""
MODE_READ_WRITE = 1
_std_db_path = None _std_db_path = None
"""Class attribute of users default database""" """Class attribute of users default database"""

View file

@ -9,34 +9,45 @@ if so is None:
raise ImportError("Could not find shared 'notmuch' library.") raise ImportError("Could not find shared 'notmuch' library.")
nmlib = CDLL(so) nmlib = CDLL(so)
#----------------------------------------------------------------------------- #-----------------------------------------------------------------------------
class Enum(object):
"""Provides ENUMS as "code=Enum(['a','b','c'])" where code.a=0 etc..."""
def __init__(self, names):
for number, name in enumerate(names):
setattr(self, name, number)
class STATUS(object): #-----------------------------------------------------------------------------
SUCCESS = 0 class Status(Enum):
OUT_OF_MEMORY = 1 """Enum with a string representation of a notmuch_status_t value."""
READ_ONLY_DATABASE = 2 __name__="foo"
XAPIAN_EXCEPTION = 3 _status2str = nmlib.notmuch_status_to_string
FILE_ERROR = 4 _status2str.restype = c_char_p
FILE_NOT_EMAIL = 5 _status2str.argtypes = [c_int]
DUPLICATE_MESSAGE_ID = 6
NULL_POINTER = 7
TAG_TOO_LONG = 8
UNBALANCED_FREEZE_THAW = 9
NOT_INITIALIZED = 10
"""Get a string representation of a notmuch_status_t value.""" def __init__(self, statuslist):
status2str = nmlib.notmuch_status_to_string """It is initialized with a list of strings that are available as
status2str.restype = c_char_p Status().string1 - Status().stringn attributes.
status2str.argtypes = [c_int] """
super(Status, self).__init__(statuslist)
def __init__(self, status): def status2str(self, status):
self._status = status """Get a 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))
STATUS = Status(['SUCCESS',
'OUT_OF_MEMORY',
'READ_ONLY_DATABASE',
'XAPIAN_EXCEPTION',
'FILE_ERROR',
'FILE_NOT_EMAIL',
'DUPLICATE_MESSAGE_ID',
'NULL_POINTER',
'TAG_TOO_LONG',
'UNBALANCED_FREEZE_THAW',
'NOT_INITIALIZED'])
def __str__(self):
"""Get a string representation of a notmuch_status_t value."""
# define strings for custom error messages
if self._status == STATUS.NOT_INITIALIZED:
return "Operation on uninitialized DB/MSG/THREAD impossible."
return str(STATUS.status2str(self._status))
class NotmuchError(Exception): class NotmuchError(Exception):
def __init__(self, status=None, message=None): def __init__(self, status=None, message=None):
@ -45,4 +56,5 @@ class NotmuchError(Exception):
def __str__(self): def __str__(self):
if self.args[0] is not None: return self.args[0] if self.args[0] is not None: return self.args[0]
else: return str(STATUS(self.args[1])) else: return STATUS.status2str(self.args[1])