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>
This commit is contained in:
Sebastian Spaeth 2011-09-28 17:50:57 +02:00
parent 2c76279cda
commit 0241a68e9e
2 changed files with 45 additions and 0 deletions

View file

@ -221,6 +221,49 @@ class Database(object):
#TODO: catch exceptions, document return values and etc #TODO: catch exceptions, document return values and etc
return status 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): def get_directory(self, path):
"""Returns a :class:`Directory` of path, """Returns a :class:`Directory` of path,
(creating it if it does not exist(?)) (creating it if it does not exist(?))

View file

@ -65,6 +65,7 @@ STATUS = Status(['SUCCESS',
'NULL_POINTER', 'NULL_POINTER',
'TAG_TOO_LONG', 'TAG_TOO_LONG',
'UNBALANCED_FREEZE_THAW', 'UNBALANCED_FREEZE_THAW',
'UNBALANCED_ATOMIC',
'NOT_INITIALIZED']) 'NOT_INITIALIZED'])
"""STATUS is a class, whose attributes provide constants that serve as return """STATUS is a class, whose attributes provide constants that serve as return
indicators for notmuch functions. Currently the following ones are defined. For indicators for notmuch functions. Currently the following ones are defined. For
@ -81,6 +82,7 @@ description.
* NULL_POINTER * NULL_POINTER
* TAG_TOO_LONG * TAG_TOO_LONG
* UNBALANCED_FREEZE_THAW * UNBALANCED_FREEZE_THAW
* UNBALANCED_ATOMIC
* NOT_INITIALIZED * NOT_INITIALIZED
Invoke the class method `notmuch.STATUS.status2str` with a status value as Invoke the class method `notmuch.STATUS.status2str` with a status value as