From 8345aab10c56dc4fe3ae7619042111524a062549 Mon Sep 17 00:00:00 2001 From: Sebastian Spaeth Date: Thu, 18 Mar 2010 08:50:48 +0100 Subject: [PATCH] implement Database.get_version() and Database.needs_upgrade() --- cnotmuch/database.py | 35 ++++++++++++++++++++++++++++++++++- docs/source/index.rst | 12 ++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/cnotmuch/database.py b/cnotmuch/database.py index 9c78b461..ad84f5eb 100644 --- a/cnotmuch/database.py +++ b/cnotmuch/database.py @@ -1,5 +1,5 @@ import ctypes -from ctypes import c_int, c_char_p, c_void_p, c_uint64 +from ctypes import c_int, c_char_p, c_void_p, c_uint, c_uint64, c_bool from cnotmuch.globals import nmlib, STATUS, NotmuchError, Enum import logging from datetime import date @@ -23,6 +23,10 @@ class Database(object): _get_path = nmlib.notmuch_database_get_path _get_path.restype = c_char_p + """notmuch_database_get_version""" + _get_version = nmlib.notmuch_database_get_version + _get_version.restype = c_uint + """notmuch_database_open (const char *path, notmuch_database_mode_t mode)""" _open = nmlib.notmuch_database_open _open.restype = c_void_p @@ -124,6 +128,35 @@ class Database(object): Wraps notmuch_database_get_path""" return Database._get_path(self._db) + def get_version(self): + """Returns the database format version + + :returns: The database version as positive integer + :exception: :exc:`NotmuchError` with STATUS.NOT_INITIALIZED if + the database was not intitialized. + """ + if self._db is None: + raise NotmuchError(STATUS.NOT_INITIALIZED) + + return Database._get_version (self._db) + + def needs_upgrade(self): + """Does this database need to be upgraded before writing to it? + + If this function returns TRUE then no functions that modify the + database (:meth:`Database.add_message`, :meth:`Database.add_tag`, + :meth:`Directory.set_mtime`, etc.) will work unless :meth:`upgrade` + is called successfully first. + + :returns: `True` or `False` + :exception: :exc:`NotmuchError` with STATUS.NOT_INITIALIZED if + the database was not intitialized. + """ + if self._db is None: + raise NotmuchError(STATUS.NOT_INITIALIZED) + + return notmuch_database_needs_upgrade(self.db) + def find_message(self, msgid): """Returns a :class:`Message` as identified by its message ID diff --git a/docs/source/index.rst b/docs/source/index.rst index 5b262bba..fc1d307e 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -45,6 +45,18 @@ or:: .. automethod:: get_path + .. automethod:: get_version + + .. automethod:: needs_upgrade + + .. automethod:: upgrade + + .. automethod:: get_directory + + .. automethod:: add_message + + .. automethod:: remove_message + .. automethod:: find_message .. automethod:: get_all_tags