]> git.notmuchmail.org Git - notmuch/blobdiff - bindings/python/notmuch/tag.py
python: Do explicitly check if the next tag exists
[notmuch] / bindings / python / notmuch / tag.py
index 65a9118a6ce94d38c825e2f35e62a1a5838a9bef..f79a17867640700529d930c9f0d59cd61c7a68fb 100644 (file)
@@ -19,12 +19,12 @@ Copyright 2010 Sebastian Spaeth <Sebastian@SSpaeth.de>'
 from ctypes import c_char_p
 from notmuch.globals import nmlib, STATUS, NotmuchError
 
-#------------------------------------------------------------------------------
+
 class Tags(object):
     """Represents a list of notmuch tags
 
     This object provides an iterator over a list of notmuch tags (which
-    are unicode instances). 
+    are unicode instances).
 
     Do note that the underlying library only provides a one-time
     iterator (it cannot reset the iterator to the start). Thus iterating
@@ -33,7 +33,7 @@ class Tags(object):
     STATUS.NOT_INITIALIZED. Also note, that any function that uses
     iteration (nearly all) will also exhaust the tags. So both::
 
-      for tag in tags: print tag 
+      for tag in tags: print tag
 
     as well as::
 
@@ -62,7 +62,7 @@ class Tags(object):
              valid, we will raise an :exc:`NotmuchError`
              (STATUS.NULL_POINTER) if it is `None`.
         :type tags_p: :class:`ctypes.c_void_p`
-        :param parent: The parent object (ie :class:`Database` or 
+        :param parent: The parent object (ie :class:`Database` or
              :class:`Message` these tags are derived from, and saves a
              reference to it, so we can automatically delete the db object
              once all derived objects are dead.
@@ -75,7 +75,7 @@ class Tags(object):
         self._tags = tags_p
         #save reference to parent object so we keep it alive
         self._parent = parent
-    
+
     def __iter__(self):
         """ Make Tags an iterator """
         return self
@@ -83,12 +83,10 @@ class Tags(object):
     def next(self):
         if self._tags is None:
             raise NotmuchError(STATUS.NOT_INITIALIZED)
-        # 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).decode('utf-8')
-        if tag is None:
+        if not nmlib.notmuch_tags_valid(self._tags):
             self._tags = None
             raise StopIteration
+        tag = Tags._get(self._tags).decode('utf-8')
         nmlib.notmuch_tags_move_to_next(self._tags)
         return tag
 
@@ -115,9 +113,9 @@ class Tags(object):
         if self._tags is None:
             raise NotmuchError(STATUS.NOT_INITIALIZED)
 
-        i=0
-        while nmlib.notmuch_tags_valid(self._msgs):
-            nmlib.notmuch_tags_move_to_next(self._msgs)
+        i = 0
+        while nmlib.notmuch_tags_valid(self._tags):
+            nmlib.notmuch_tags_move_to_next(self._tags)
             i += 1
         self._tags = None
         return i
@@ -136,4 +134,4 @@ class Tags(object):
     def __del__(self):
         """Close and free the notmuch tags"""
         if self._tags is not None:
-            nmlib.notmuch_tags_destroy (self._tags)
+            nmlib.notmuch_tags_destroy(self._tags)