From b00c892c65ee57d6503b4bafe8fd666a6a274e47 Mon Sep 17 00:00:00 2001 From: Sebastian Spaeth Date: Wed, 17 Mar 2010 11:44:36 +0100 Subject: [PATCH 1/1] Implement an Enum class and make the STATUS object one --- cnotmuch/database.py | 7 ++--- cnotmuch/globals.py | 68 ++++++++++++++++++++++++++------------------ 2 files changed, 43 insertions(+), 32 deletions(-) diff --git a/cnotmuch/database.py b/cnotmuch/database.py index 8762f393..b4411ab1 100644 --- a/cnotmuch/database.py +++ b/cnotmuch/database.py @@ -1,6 +1,6 @@ import ctypes 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 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, threads, and messages will be freed as well. """ - #constants - MODE_READ_ONLY = 0 - MODE_READ_WRITE = 1 + MODE = Enum(['READ_ONLY','READ_WRITE']) + """Constants: Mode in which to open the database""" _std_db_path = None """Class attribute of users default database""" diff --git a/cnotmuch/globals.py b/cnotmuch/globals.py index 611c29ed..d9f8d1b4 100644 --- a/cnotmuch/globals.py +++ b/cnotmuch/globals.py @@ -9,34 +9,45 @@ if so is None: raise ImportError("Could not find shared 'notmuch' library.") 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(Enum): + """Enum with a string representation of a notmuch_status_t value.""" + __name__="foo" + _status2str = nmlib.notmuch_status_to_string + _status2str.restype = c_char_p + _status2str.argtypes = [c_int] + + def __init__(self, statuslist): + """It is initialized with a list of strings that are available as + Status().string1 - Status().stringn attributes. + """ + super(Status, self).__init__(statuslist) + + def status2str(self, 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']) -class STATUS(object): - SUCCESS = 0 - OUT_OF_MEMORY = 1 - READ_ONLY_DATABASE = 2 - XAPIAN_EXCEPTION = 3 - FILE_ERROR = 4 - FILE_NOT_EMAIL = 5 - 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.""" - status2str = nmlib.notmuch_status_to_string - status2str.restype = c_char_p - status2str.argtypes = [c_int] - - def __init__(self, status): - self._status = status - - 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): def __init__(self, status=None, message=None): @@ -45,4 +56,5 @@ class NotmuchError(Exception): def __str__(self): 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]) + -- 2.43.0