]> git.notmuchmail.org Git - notmuch/blobdiff - bindings/python/notmuch/database.py
python: rename _verify_dir_initialized to _assert_dir_is_initialized
[notmuch] / bindings / python / notmuch / database.py
index da1ed04736914e60dde2543f781b1316ee43aadd..9fb30e6355d2ca9bca4d90311d2862e9455cb771 100644 (file)
@@ -109,7 +109,7 @@ class Database(object):
         else:
             self.create(path)
 
-    def _verify_initialized_db(self):
+    def _assert_db_is_initialized(self):
         """Raises a NotmuchError in case self._db is still None"""
         if self._db is None:
             raise NotmuchError(STATUS.NOT_INITIALIZED)
@@ -165,9 +165,7 @@ class Database(object):
         """Returns the file path of an open database
 
         Wraps *notmuch_database_get_path*."""
-        # Raise a NotmuchError if not initialized
-        self._verify_initialized_db()
-
+        self._assert_db_is_initialized()
         return Database._get_path(self._db).decode('utf-8')
 
     def get_version(self):
@@ -177,9 +175,7 @@ class Database(object):
         :exception: :exc:`NotmuchError` with STATUS.NOT_INITIALIZED if
                     the database was not intitialized.
         """
-        # Raise a NotmuchError if not initialized
-        self._verify_initialized_db()
-
+        self._assert_db_is_initialized()
         return Database._get_version(self._db)
 
     def needs_upgrade(self):
@@ -194,9 +190,7 @@ class Database(object):
         :exception: :exc:`NotmuchError` with STATUS.NOT_INITIALIZED if
                     the database was not intitialized.
         """
-        # Raise a NotmuchError if not initialized
-        self._verify_initialized_db()
-
+        self._assert_db_is_initialized()
         return nmlib.notmuch_database_needs_upgrade(self._db)
 
     def upgrade(self):
@@ -214,13 +208,52 @@ class Database(object):
 
         :TODO: catch exceptions, document return values and etc...
         """
-        # Raise a NotmuchError if not initialized
-        self._verify_initialized_db()
-
+        self._assert_db_is_initialized()
         status = Database._upgrade(self._db, None, None)
         #TODO: catch exceptions, document return values and etc
         return status
 
+    def begin_atomic(self):
+        """Begin an atomic database operation
+
+        Any modifications performed between a successful
+        :meth:`begin_atomic` and a :meth:`end_atomic` will be applied to
+        the database atomically.  Note that, unlike a typical database
+        transaction, this only ensures atomicity, not durability;
+        neither begin nor end necessarily flush modifications to disk.
+
+        :returns: STATUS.SUCCESS or raises
+
+        :exception: :exc:`NotmuchError` STATUS.XAPIAN_EXCEPTION::
+
+                        A Xapian exception occurred; atomic section not
+                        entered."""
+        self._assert_db_is_initialized()
+        status = nmlib.notmuch_database_begin_atomic(self._db)
+        if status != STATUS.SUCCESS:
+            raise NotmuchError(status)
+        return status
+
+    def end_atomic(self):
+        """Indicate the end of an atomic database operation
+
+        See :meth:`begin_atomic` for details.
+
+        :returns: STATUS.SUCCESS or raises
+
+        :exception:
+            :exc:`NotmuchError`:
+                STATUS.XAPIAN_EXCEPTION
+                    A Xapian exception occurred; atomic section not
+                    ended.
+                STATUS.UNBALANCED_ATOMIC:
+                    end_atomic has been called more times than begin_atomic."""
+        self._assert_db_is_initialized()
+        status = nmlib.notmuch_database_end_atomic(self._db)
+        if status != STATUS.SUCCESS:
+            raise NotmuchError(status)
+        return status
+
     def get_directory(self, path):
         """Returns a :class:`Directory` of path,
         (creating it if it does not exist(?))
@@ -243,9 +276,7 @@ class Database(object):
                     components same as database.
 
         """
-        # Raise a NotmuchError if not initialized
-        self._verify_initialized_db()
-
+        self._assert_db_is_initialized()
         # sanity checking if path is valid, and make path absolute
         if path[0] == os.sep:
             # we got an absolute path
@@ -314,9 +345,7 @@ class Database(object):
               STATUS.NOT_INITIALIZED
                       The database has not been initialized.
         """
-        # Raise a NotmuchError if not initialized
-        self._verify_initialized_db()
-
+        self._assert_db_is_initialized()
         msg_p = c_void_p()
         status = nmlib.notmuch_database_add_message(self._db,
                                                   _str(filename),
@@ -361,9 +390,7 @@ class Database(object):
              STATUS.NOT_INITIALIZED
                The database has not been initialized.
         """
-        # Raise a NotmuchError if not initialized
-        self._verify_initialized_db()
-
+        self._assert_db_is_initialized()
         return nmlib.notmuch_database_remove_message(self._db,
                                                        filename)
 
@@ -385,9 +412,7 @@ class Database(object):
         :exception: :exc:`NotmuchError` with STATUS.NOT_INITIALIZED if
                   the database was not intitialized.
         """
-        # Raise a NotmuchError if not initialized
-        self._verify_initialized_db()
-
+        self._assert_db_is_initialized()
         msg_p = Database._find_message(self._db, _str(msgid))
         return msg_p and Message(msg_p, self) or None
 
@@ -401,7 +426,7 @@ class Database(object):
                 * No message is found with the given filename
                 * An out-of-memory situation occurs
                 * A Xapian exception occurs"""
-        self._verify_initialized_db()
+        self._assert_db_is_initialized()
         msg_p = Database._find_message_by_filename(self._db, _str(filename))
         return msg_p and Message(msg_p, self) or None
 
@@ -411,9 +436,7 @@ class Database(object):
         :returns: :class:`Tags`
         :execption: :exc:`NotmuchError` with STATUS.NULL_POINTER on error
         """
-        # Raise a NotmuchError if not initialized
-        self._verify_initialized_db()
-
+        self._assert_db_is_initialized()
         tags_p = Database._get_all_tags(self._db)
         if tags_p == None:
             raise NotmuchError(STATUS.NULL_POINTER)
@@ -437,9 +460,7 @@ class Database(object):
 
         This function is a python extension and not in the underlying C API.
         """
-        # Raise a NotmuchError if not initialized
-        self._verify_initialized_db()
-
+        self._assert_db_is_initialized()
         return Query(self, querystring)
 
     def __repr__(self):
@@ -676,7 +697,7 @@ class Directory(object):
     _get_child_directories = nmlib.notmuch_directory_get_child_directories
     _get_child_directories.restype = c_void_p
 
-    def _verify_dir_initialized(self):
+    def _assert_dir_is_initialized(self):
         """Raises a NotmuchError(STATUS.NOT_INITIALIZED) if dir_p is None"""
         if self._dir_p is None:
             raise NotmuchError(STATUS.NOT_INITIALIZED)
@@ -731,9 +752,7 @@ class Directory(object):
                         STATUS.NOT_INITIALIZED
                           The directory has not been initialized
         """
-        #Raise a NotmuchError(STATUS.NOT_INITIALIZED) if the dir_p is None
-        self._verify_dir_initialized()
-
+        self._assert_dir_is_initialized()
         #TODO: make sure, we convert the mtime parameter to a 'c_long'
         status = Directory._set_mtime(self._dir_p, mtime)
 
@@ -755,9 +774,7 @@ class Directory(object):
                         STATUS.NOT_INITIALIZED
                           The directory has not been initialized
         """
-        #Raise a NotmuchError(STATUS.NOT_INITIALIZED) if self.dir_p is None
-        self._verify_dir_initialized()
-
+        self._assert_dir_is_initialized()
         return Directory._get_mtime(self._dir_p)
 
     # Make mtime attribute a property of Directory()
@@ -774,9 +791,7 @@ class Directory(object):
         The returned filenames will be the basename-entries only (not
         complete paths.
         """
-        #Raise a NotmuchError(STATUS.NOT_INITIALIZED) if self._dir_p is None
-        self._verify_dir_initialized()
-
+        self._assert_dir_is_initialized()
         files_p = Directory._get_child_files(self._dir_p)
         return Filenames(files_p, self)
 
@@ -787,9 +802,7 @@ class Directory(object):
         The returned filenames will be the basename-entries only (not
         complete paths.
         """
-        #Raise a NotmuchError(STATUS.NOT_INITIALIZED) if self._dir_p is None
-        self._verify_dir_initialized()
-
+        self._assert_dir_is_initialized()
         files_p = Directory._get_child_directories(self._dir_p)
         return Filenames(files_p, self)