]> git.cworth.org Git - notmuch/commitdiff
Implement an Enum class and make the STATUS object one
authorSebastian Spaeth <sebastian@sspaeth.de>
Wed, 17 Mar 2010 10:44:36 +0000 (11:44 +0100)
committerSebastian Spaeth <sebastian@sspaeth.de>
Wed, 17 Mar 2010 10:44:36 +0000 (11:44 +0100)
cnotmuch/database.py
cnotmuch/globals.py

index 8762f393467c7b89030c6ef75efd3b1e6d1b3e91..b4411ab1ee71ff87c265b471ec8e1b0ffa3a6fd3 100644 (file)
@@ -1,6 +1,6 @@
 import ctypes
 from ctypes import c_int, c_char_p, c_void_p, c_uint64
 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
 
 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.
     """
     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"""
 
     _std_db_path = None
     """Class attribute of users default database"""
index 611c29ed8fcee4f93cc27503d81536801c935c37..d9f8d1b465b74b4eff2b3b214fac30e5ba557e8a 100644 (file)
@@ -9,34 +9,45 @@ if so is None:
   raise ImportError("Could not find shared 'notmuch' library.")
 nmlib = CDLL(so)
 #-----------------------------------------------------------------------------
   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):
 
 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]
 
     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])
+