X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=bindings%2Fpython%2Fnotmuch%2Ftag.py;h=65a9118a6ce94d38c825e2f35e62a1a5838a9bef;hp=cf1152a1e5747bc46ed0c3089fb6d60f1f973da4;hb=687366b920caa5de6ea0b66b70cf2a11e5399f7b;hpb=3b558de7811a765c3295a58bd53e2156eca0e32e diff --git a/bindings/python/notmuch/tag.py b/bindings/python/notmuch/tag.py index cf1152a1..65a9118a 100644 --- a/bindings/python/notmuch/tag.py +++ b/bindings/python/notmuch/tag.py @@ -23,10 +23,12 @@ 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. Do - note that the underlying library only provides a one-time iterator - (it cannot reset the iterator to the start). Thus iterating over - the function will "exhaust" the list of tags, and a subsequent + This object provides an iterator over a list of notmuch tags (which + 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 + over the function will "exhaust" the list of tags, and a subsequent iteration attempt will raise a :exc:`NotmuchError` STATUS.NOT_INITIALIZED. Also note, that any function that uses iteration (nearly all) will also exhaust the tags. So both:: @@ -81,15 +83,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).decode('utf-8') + 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