aboutsummaryrefslogtreecommitdiff
path: root/bindings/python/notmuch/tag.py
diff options
context:
space:
mode:
authorSebastian Spaeth <Sebastian@SSpaeth.de>2011-06-02 17:28:50 +0200
committerSebastian Spaeth <Sebastian@SSpaeth.de>2011-06-02 17:28:50 +0200
commitaeecafa694e8296411ad21cee1b7de094600babf (patch)
tree37cc6a6f95cc3fd4adb1adfc4e1949527dbbc2cb /bindings/python/notmuch/tag.py
parent01cc4a31155dc71643fce1b619778493c1ff0dd7 (diff)
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>
Diffstat (limited to 'bindings/python/notmuch/tag.py')
-rw-r--r--bindings/python/notmuch/tag.py19
1 files changed, 15 insertions, 4 deletions
diff --git a/bindings/python/notmuch/tag.py b/bindings/python/notmuch/tag.py
index cf1152a..e123b0f 100644
--- a/bindings/python/notmuch/tag.py
+++ b/bindings/python/notmuch/tag.py
@@ -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