python: fix error handling

Before 3434d1940 the return values of libnotmuch functions were
declared as c_void_p and the code checking for errors compared the
returned value to None, which is the ctypes equivalent of a NULL
pointer.

But said commit wrapped all the data types in python classes and the
semantic changed in a subtle way. If a function returns NULL, the
wrapped python value is falsish, but no longer equal to None.

Backported from master to 0.11.
This commit is contained in:
Justus Winter 2012-01-22 14:09:35 +01:00 committed by David Bremner
parent ffce9b7c25
commit 221c7e0b38
5 changed files with 16 additions and 16 deletions

View file

@ -168,7 +168,7 @@ class Database(object):
res = Database._create(_str(path), Database.MODE.READ_WRITE) res = Database._create(_str(path), Database.MODE.READ_WRITE)
if res is None: if not res:
raise NotmuchError( raise NotmuchError(
message="Could not create the specified database") message="Could not create the specified database")
self._db = res self._db = res
@ -188,7 +188,7 @@ class Database(object):
""" """
res = Database._open(_str(path), mode) res = Database._open(_str(path), mode)
if res is None: if not res:
raise NotmuchError(message="Could not open the specified database") raise NotmuchError(message="Could not open the specified database")
self._db = res self._db = res
@ -645,7 +645,7 @@ class Query(object):
self._db = db self._db = db
# create query, return None if too little mem available # create query, return None if too little mem available
query_p = Query._create(db.db_p, _str(querystr)) query_p = Query._create(db.db_p, _str(querystr))
if query_p is None: if not query_p:
raise NullPointerError raise NullPointerError
self._query = query_p self._query = query_p
@ -679,7 +679,7 @@ class Query(object):
self._assert_query_is_initialized() self._assert_query_is_initialized()
threads_p = Query._search_threads(self._query) threads_p = Query._search_threads(self._query)
if threads_p is None: if not threads_p:
raise NullPointerError raise NullPointerError
return Threads(threads_p, self) return Threads(threads_p, self)
@ -693,7 +693,7 @@ class Query(object):
self._assert_query_is_initialized() self._assert_query_is_initialized()
msgs_p = Query._search_messages(self._query) msgs_p = Query._search_messages(self._query)
if msgs_p is None: if not msgs_p:
raise NullPointerError raise NullPointerError
return Messages(msgs_p, self) return Messages(msgs_p, self)
@ -759,7 +759,7 @@ class Directory(object):
def _assert_dir_is_initialized(self): def _assert_dir_is_initialized(self):
"""Raises a NotmuchError(:attr:`STATUS`.NOT_INITIALIZED) """Raises a NotmuchError(:attr:`STATUS`.NOT_INITIALIZED)
if dir_p is None""" if dir_p is None"""
if self._dir_p is None: if not self._dir_p:
raise NotmuchError(STATUS.NOT_INITIALIZED) raise NotmuchError(STATUS.NOT_INITIALIZED)
def __init__(self, path, dir_p, parent): def __init__(self, path, dir_p, parent):
@ -920,7 +920,7 @@ class Filenames(object):
_move_to_next.restype = None _move_to_next.restype = None
def next(self): def next(self):
if self._files_p is None: if not self._files_p:
raise NotmuchError(STATUS.NOT_INITIALIZED) raise NotmuchError(STATUS.NOT_INITIALIZED)
if not self._valid(self._files_p): if not self._valid(self._files_p):
@ -946,7 +946,7 @@ class Filenames(object):
# NotmuchError(:attr:`STATUS`.NOT_INITIALIZED) # NotmuchError(:attr:`STATUS`.NOT_INITIALIZED)
for file in files: print file for file in files: print file
""" """
if self._files_p is None: if not self._files_p:
raise NotmuchError(STATUS.NOT_INITIALIZED) raise NotmuchError(STATUS.NOT_INITIALIZED)
i = 0 i = 0

View file

@ -69,7 +69,7 @@ class Filenames(object):
reference to it, so we can automatically delete the db object reference to it, so we can automatically delete the db object
once all derived objects are dead. once all derived objects are dead.
""" """
if files_p is None: if not files_p:
raise NotmuchError(STATUS.NULL_POINTER) raise NotmuchError(STATUS.NULL_POINTER)
self._files = files_p self._files = files_p

View file

@ -116,7 +116,7 @@ class Messages(object):
:TODO: Make the iterator work more than once and cache the tags in :TODO: Make the iterator work more than once and cache the tags in
the Python object.(?) the Python object.(?)
""" """
if msgs_p is None: if not msgs_p:
raise NotmuchError(STATUS.NULL_POINTER) raise NotmuchError(STATUS.NULL_POINTER)
self._msgs = msgs_p self._msgs = msgs_p
@ -321,7 +321,7 @@ class Message(object):
automatically delete the parent object once all derived automatically delete the parent object once all derived
objects are dead. objects are dead.
""" """
if msg_p is None: if not msg_p:
raise NotmuchError(STATUS.NULL_POINTER) raise NotmuchError(STATUS.NULL_POINTER)
self._msg = msg_p self._msg = msg_p
#keep reference to parent, so we keep it alive #keep reference to parent, so we keep it alive
@ -380,7 +380,7 @@ class Message(object):
msgs_p = Message._get_replies(self._msg) msgs_p = Message._get_replies(self._msg)
if msgs_p is None: if not msgs_p:
return None return None
return Messages(msgs_p, self) return Messages(msgs_p, self)

View file

@ -70,7 +70,7 @@ class Tags(object):
:TODO: Make the iterator optionally work more than once by :TODO: Make the iterator optionally work more than once by
cache the tags in the Python object(?) cache the tags in the Python object(?)
""" """
if tags_p is None: if not tags_p:
raise NotmuchError(STATUS.NULL_POINTER) raise NotmuchError(STATUS.NULL_POINTER)
self._tags = tags_p self._tags = tags_p

View file

@ -97,7 +97,7 @@ class Threads(object):
:TODO: Make the iterator work more than once and cache the tags in :TODO: Make the iterator work more than once and cache the tags in
the Python object.(?) the Python object.(?)
""" """
if threads_p is None: if not threads_p:
raise NotmuchError(STATUS.NULL_POINTER) raise NotmuchError(STATUS.NULL_POINTER)
self._threads = threads_p self._threads = threads_p
@ -227,7 +227,7 @@ class Thread(object):
automatically delete the parent object once all derived automatically delete the parent object once all derived
objects are dead. objects are dead.
""" """
if thread_p is None: if not thread_p:
raise NotmuchError(STATUS.NULL_POINTER) raise NotmuchError(STATUS.NULL_POINTER)
self._thread = thread_p self._thread = thread_p
#keep reference to parent, so we keep it alive #keep reference to parent, so we keep it alive
@ -288,7 +288,7 @@ class Thread(object):
msgs_p = Thread._get_toplevel_messages(self._thread) msgs_p = Thread._get_toplevel_messages(self._thread)
if msgs_p is None: if not msgs_p:
raise NotmuchError(STATUS.NULL_POINTER) raise NotmuchError(STATUS.NULL_POINTER)
return Messages(msgs_p, self) return Messages(msgs_p, self)