]> git.notmuchmail.org Git - notmuch/blobdiff - bindings/python/notmuch/filenames.py
python: bump SOVERSION to 5
[notmuch] / bindings / python / notmuch / filenames.py
index 2079530f656ff3cd78c50a67e7d94e3d2b46843d..29f4fdf60d4b63650f00e16d22c0349c508618de 100644 (file)
@@ -12,14 +12,13 @@ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 for more details.
 
 You should have received a copy of the GNU General Public License
-along with notmuch.  If not, see <http://www.gnu.org/licenses/>.
+along with notmuch.  If not, see <https://www.gnu.org/licenses/>.
 
 Copyright 2010 Sebastian Spaeth <Sebastian@SSpaeth.de>
 """
 from ctypes import c_char_p
-from notmuch.globals import (
+from .globals import (
     nmlib,
-    NotmuchMessageP,
     NotmuchFilenamesP,
     Python3StringMixIn,
 )
@@ -32,29 +31,32 @@ from .errors import (
 class Filenames(Python3StringMixIn):
     """Represents a list of filenames as returned by notmuch
 
-    This object contains the Filenames iterator. The main function is
-    as_generator() which will return a generator so we can do a Filenamesth an
-    iterator over a list of notmuch filenames. 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:`NotInitializedError`. Also note, that any function that uses
-    iteration (nearly all) will also exhaust the tags. So both::
+    Objects of this class implement the iterator protocol.
 
-      for name in filenames: print name
+    .. note::
 
-    as well as::
+        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:`NotInitializedError`. Also note, that any function that
+        uses iteration (nearly all) will also exhaust the tags. So
+        both::
 
-       number_of_names = len(names)
+           for name in filenames: print name
 
-    and even a simple::
+        as well as::
 
-       #str() iterates over all tags to construct a space separated list
-       print(str(filenames))
+           list_of_names = list(names)
 
-    will "exhaust" the Filenames. However, you can use
-    :meth:`Message.get_filenames` repeatedly to get fresh Filenames
-    objects to perform various actions on filenames.
+        and even a simple::
+
+           #str() iterates over all tags to construct a space separated list
+           print(str(filenames))
+
+        will "exhaust" the Filenames. However, you can use
+        :meth:`Message.get_filenames` repeatedly to get fresh
+        Filenames objects to perform various actions on filenames.
     """
 
     #notmuch_filenames_get
@@ -112,46 +114,18 @@ class Filenames(Python3StringMixIn):
     def __unicode__(self):
         """Represent Filenames() as newline-separated list of full paths
 
-        .. note:: As this iterates over the filenames, 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:`NotInitializedError` on subsequent
-               attempts. However, you can use
-               :meth:`Message.get_filenames` repeatedly to perform
-               various actions on filenames.
+        .. note::
+
+            This method exhausts the iterator object, so you will not be able to
+            iterate over them again.
         """
         return "\n".join(self)
 
     _destroy = nmlib.notmuch_filenames_destroy
-    _destroy.argtypes = [NotmuchMessageP]
+    _destroy.argtypes = [NotmuchFilenamesP]
     _destroy.restype = None
 
     def __del__(self):
         """Close and free the notmuch filenames"""
-        if self._files_p is not None:
+        if self._files_p:
             self._destroy(self._files_p)
-
-    def __len__(self):
-        """len(:class:`Filenames`) returns the number of contained files
-
-        .. note::
-
-            As this iterates over the files, we will not be able to
-            iterate over them again! So this will fail::
-
-                 #THIS FAILS
-                 files = Database().get_directory('').get_child_files()
-                 if len(files) > 0:  # this 'exhausts' msgs
-                     # next line raises
-                     # NotmuchError(:attr:`STATUS`.NOT_INITIALIZED)
-                     for file in files: print file
-        """
-        if not self._files_p:
-            raise NotInitializedError()
-
-        i = 0
-        while self._valid(self._files_p):
-            self._move_to_next(self._files_p)
-            i += 1
-        self._files_p = None
-        return i