mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-25 10:54:52 +01:00
bindings/python: Implement Tags().__nonzero__()
Analog to Threads.__nonzero__ this allows us to perform list() on a Threads() object and to repeatedly call "if Tags():" or "bool(Tags())" without implicitly invoking len(), thus exhausting our iterator. While touching this code, I added a small micro-optimization to the Tag next() function. There is no need to explicitly check _is_valid, as _get implicitly does check for validness and returns None, if there is no more Tag to fetch. This avoids some roundtrips into the library when iterating through Tags. Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
This commit is contained in:
parent
01cc4a3115
commit
aeecafa694
1 changed files with 15 additions and 4 deletions
|
@ -81,15 +81,26 @@ class Tags(object):
|
|||
def next(self):
|
||||
if self._tags is None:
|
||||
raise NotmuchError(STATUS.NOT_INITIALIZED)
|
||||
|
||||
if not nmlib.notmuch_tags_valid(self._tags):
|
||||
# No need to call nmlib.notmuch_tags_valid(self._tags);
|
||||
# Tags._get safely returns None, if there is no more valid tag.
|
||||
tag = Tags._get (self._tags)
|
||||
if tag is None:
|
||||
self._tags = None
|
||||
raise StopIteration
|
||||
|
||||
tag = Tags._get (self._tags)
|
||||
nmlib.notmuch_tags_move_to_next(self._tags)
|
||||
return tag
|
||||
|
||||
def __nonzero__(self):
|
||||
"""Implement bool(Tags) check that can be repeatedly used
|
||||
|
||||
If __nonzero__ is not implemented, "if Tags()"
|
||||
will implicitly call __len__, using up our iterator, so it is
|
||||
important that this function is defined.
|
||||
|
||||
:returns: True if the Tags() iterator has at least one more Tag
|
||||
left."""
|
||||
return nmlib.notmuch_tags_valid(self._tags) > 0
|
||||
|
||||
def __len__(self):
|
||||
"""len(:class:`Tags`) returns the number of contained tags
|
||||
|
||||
|
|
Loading…
Reference in a new issue