aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Sebastian Spaeth <Sebastian@SSpaeth.de>2011-09-28 17:50:57 +0200
committerGravatar Sebastian Spaeth <Sebastian@SSpaeth.de>2011-09-28 18:31:49 +0200
commit0241a68e9eb67904ac1805ccc82910c555711ac6 (patch)
treeb23105856ff2e19bc9d889ba7660b8cb246667e9
parent2c76279cdac96249ffcaa88456675c1cf4a2163d (diff)
python: add begin|end_atomic bindings
* Add UNBALANCED_ATOMIC status code Catch up with the notmuch status codes, and add the UNBALANCED_ATOMIC one. * Add the begin_atomic and end_atomic calls to libnotmuch Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
-rw-r--r--bindings/python/notmuch/database.py43
-rw-r--r--bindings/python/notmuch/globals.py2
2 files changed, 45 insertions, 0 deletions
diff --git a/bindings/python/notmuch/database.py b/bindings/python/notmuch/database.py
index da1ed047..bafe497e 100644
--- a/bindings/python/notmuch/database.py
+++ b/bindings/python/notmuch/database.py
@@ -221,6 +221,49 @@ class Database(object):
#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."""
+ # Raise a NotmuchError if not initialized
+ self._verify_initialized_db()
+ 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."""
+ # Raise a NotmuchError if not initialized
+ self._verify_initialized_db()
+ 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(?))
diff --git a/bindings/python/notmuch/globals.py b/bindings/python/notmuch/globals.py
index 05b9962a..e5399bed 100644
--- a/bindings/python/notmuch/globals.py
+++ b/bindings/python/notmuch/globals.py
@@ -65,6 +65,7 @@ STATUS = Status(['SUCCESS',
'NULL_POINTER',
'TAG_TOO_LONG',
'UNBALANCED_FREEZE_THAW',
+ 'UNBALANCED_ATOMIC',
'NOT_INITIALIZED'])
"""STATUS is a class, whose attributes provide constants that serve as return
indicators for notmuch functions. Currently the following ones are defined. For
@@ -81,6 +82,7 @@ description.
* NULL_POINTER
* TAG_TOO_LONG
* UNBALANCED_FREEZE_THAW
+ * UNBALANCED_ATOMIC
* NOT_INITIALIZED
Invoke the class method `notmuch.STATUS.status2str` with a status value as