Database(): honor NOTMUCH_CONFIG env variable for reading the standard database location.

Also replaces all Database.MODE.* defaults in the keyword arguments with their numeric replacement, they do not seem to be available yet at that time, so the python parser complained about them as being unknown.
This commit is contained in:
Sebastian Spaeth 2010-03-18 18:48:36 +01:00
parent 4ed01d055a
commit d566ae643c

View file

@ -1,4 +1,4 @@
import ctypes import ctypes, os
from ctypes import c_int, c_char_p, c_void_p, c_uint, c_uint64, c_bool 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 from cnotmuch.globals import nmlib, STATUS, NotmuchError, Enum
import logging import logging
@ -13,12 +13,12 @@ class Database(object):
as well. Accessing these objects will lead to segfaults and as well. Accessing these objects will lead to segfaults and
other unexpected behavior. See above for more details. other unexpected behavior. See above for more details.
""" """
MODE = Enum(['READ_ONLY','READ_WRITE'])
"""Constants: Mode in which to open the database"""
_std_db_path = None _std_db_path = None
"""Class attribute to cache user's default database""" """Class attribute to cache user's default database"""
MODE = Enum(['READ_ONLY','READ_WRITE'])
"""Constants: Mode in which to open the database"""
"""notmuch_database_get_path (notmuch_database_t *database)""" """notmuch_database_get_path (notmuch_database_t *database)"""
_get_path = nmlib.notmuch_database_get_path _get_path = nmlib.notmuch_database_get_path
_get_path.restype = c_char_p _get_path.restype = c_char_p
@ -43,11 +43,14 @@ class Database(object):
_create = nmlib.notmuch_database_create _create = nmlib.notmuch_database_create
_create.restype = c_void_p _create.restype = c_void_p
def __init__(self, path=None, create=False, mode= MODE.READ_ONLY): def __init__(self, path=None, create=False, mode= 0):
"""If *path* is *None*, we will try to read a users notmuch """If *path* is *None*, we will try to read a users notmuch
configuration and use his default database. If *create* is `True`, configuration and use his configured database. The location of the
the database will always be created in configuration file can be specified through the environment variable
:attr:`MODE`.READ_WRITE mode. *NOTMUCH_CONFIG*, falling back to the default `~/.notmuch-config`.
If *create* is `True`, the database will always be created in
:attr:`MODE`.READ_WRITE mode. Default mode for opening is READ_ONLY.
:param path: Directory to open/create the database in (see :param path: Directory to open/create the database in (see
above for behavior if `None`) above for behavior if `None`)
@ -94,14 +97,14 @@ class Database(object):
raise NotmuchError( raise NotmuchError(
message="Cannot create db, this Database() already has an open one.") message="Cannot create db, this Database() already has an open one.")
res = Database._create(path, MODE.READ_WRITE) res = Database._create(path, Database.MODE.READ_WRITE)
if res is None: if res is None:
raise NotmuchError( raise NotmuchError(
message="Could not create the specified database") message="Could not create the specified database")
self._db = res self._db = res
def open(self, path, mode= MODE.READ_ONLY): def open(self, path, mode= 0):
"""Opens an existing database """Opens an existing database
This function is used by __init__() and usually does not need This function is used by __init__() and usually does not need
@ -204,9 +207,10 @@ class Database(object):
Throws a NotmuchError if it cannot find it""" Throws a NotmuchError if it cannot find it"""
from ConfigParser import SafeConfigParser from ConfigParser import SafeConfigParser
import os.path
config = SafeConfigParser() config = SafeConfigParser()
config.read(os.path.expanduser('~/.notmuch-config')) conf_f = os.getenv('NOTMUCH_CONFIG',
os.path.expanduser('~/.notmuch-config'))
config.read(conf_f)
if not config.has_option('database','path'): if not config.has_option('database','path'):
raise NotmuchError(message= raise NotmuchError(message=
"No DB path specified and no user default found") "No DB path specified and no user default found")