diff options
author | Sebastian Spaeth <Sebastian@SSpaeth.de> | 2011-09-28 17:50:57 +0200 |
---|---|---|
committer | Sebastian Spaeth <Sebastian@SSpaeth.de> | 2011-09-28 18:31:49 +0200 |
commit | 0241a68e9eb67904ac1805ccc82910c555711ac6 (patch) | |
tree | b23105856ff2e19bc9d889ba7660b8cb246667e9 | |
parent | 2c76279cdac96249ffcaa88456675c1cf4a2163d (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.py | 43 | ||||
-rw-r--r-- | bindings/python/notmuch/globals.py | 2 |
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 |