def next(self): if self._tags is None: raise NotmuchError(STATUS.NOT_INITIALIZED) 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
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 .. note:: As this iterates over the tags, we will not be able to iterate over them again (as in retrieve them)! If the tags have been exhausted already, this will raise a :exc:`NotmuchError` STATUS.NOT_INITIALIZED on subsequent attempts. """ 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 += 1 self._tags = None return i