mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 18:38:08 +01:00
python: Remove {Filenames,Threads}.__len__
Remove the __len__ functions, as they exhaust the iterator, breaking
'list(x)'.
This is a follow-up to 8866a89e
.
Signed-off-by: Justus Winter <4winter@informatik.uni-hamburg.de>
This commit is contained in:
parent
e2ecf2b0eb
commit
096c600b96
4 changed files with 14 additions and 49 deletions
|
@ -8,7 +8,11 @@ Files and directories
|
|||
|
||||
.. autoclass:: Filenames
|
||||
|
||||
.. automethod:: Filenames.__len__
|
||||
.. method:: Filenames.__len__
|
||||
.. warning::
|
||||
:meth:`__len__` was removed in version 0.22 as it exhausted the
|
||||
iterator and broke list(Filenames()). Use `len(list(names))`
|
||||
instead.
|
||||
|
||||
:class:`Directoy` -- A directory entry in the database
|
||||
------------------------------------------------------
|
||||
|
|
|
@ -5,6 +5,10 @@
|
|||
|
||||
.. autoclass:: Threads
|
||||
|
||||
.. automethod:: __len__
|
||||
.. method:: __len__
|
||||
.. warning::
|
||||
:meth:`__len__` was removed in version 0.22 as it exhausted the
|
||||
iterator and broke list(Threads()). Use `len(list(msgs))`
|
||||
instead.
|
||||
|
||||
.. automethod:: __str__
|
||||
|
|
|
@ -48,7 +48,7 @@ class Filenames(Python3StringMixIn):
|
|||
|
||||
as well as::
|
||||
|
||||
number_of_names = len(names)
|
||||
list_of_names = list(names)
|
||||
|
||||
and even a simple::
|
||||
|
||||
|
@ -130,21 +130,3 @@ class Filenames(Python3StringMixIn):
|
|||
"""Close and free the notmuch filenames"""
|
||||
if self._files_p:
|
||||
self._destroy(self._files_p)
|
||||
|
||||
def __len__(self):
|
||||
"""len(:class:`Filenames`) returns the number of contained files
|
||||
|
||||
.. note::
|
||||
|
||||
This method exhausts the iterator object, so you will not be able to
|
||||
iterate over them again.
|
||||
"""
|
||||
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
|
||||
|
|
|
@ -46,7 +46,7 @@ class Threads(Python3StringMixIn):
|
|||
|
||||
as well as::
|
||||
|
||||
number_of_msgs = len(threads)
|
||||
list_of_threads = list(threads)
|
||||
|
||||
will "exhaust" the threads. If you need to re-iterate over a list of
|
||||
messages you will need to retrieve a new :class:`Threads` object.
|
||||
|
@ -64,8 +64,7 @@ class Threads(Python3StringMixIn):
|
|||
for thread in threads:
|
||||
threadlist.append(thread)
|
||||
|
||||
# threads is "exhausted" now and even len(threads) will raise an
|
||||
# exception.
|
||||
# threads is "exhausted" now.
|
||||
# However it will be kept around until all retrieved Thread() objects are
|
||||
# also deleted. If you did e.g. an explicit del(threads) here, the
|
||||
# following lines would fail.
|
||||
|
@ -132,30 +131,6 @@ class Threads(Python3StringMixIn):
|
|||
return thread
|
||||
next = __next__ # python2.x iterator protocol compatibility
|
||||
|
||||
def __len__(self):
|
||||
"""len(:class:`Threads`) returns the number of contained Threads
|
||||
|
||||
.. note:: As this iterates over the threads, we will not be able to
|
||||
iterate over them again! So this will fail::
|
||||
|
||||
#THIS FAILS
|
||||
threads = Database().create_query('').search_threads()
|
||||
if len(threads) > 0: #this 'exhausts' threads
|
||||
# next line raises :exc:`NotInitializedError`!!!
|
||||
for thread in threads: print thread
|
||||
"""
|
||||
if not self._threads:
|
||||
raise NotInitializedError()
|
||||
|
||||
i = 0
|
||||
# returns 'bool'. On out-of-memory it returns None
|
||||
while self._valid(self._threads):
|
||||
self._move_to_next(self._threads)
|
||||
i += 1
|
||||
# reset self._threads to mark as "exhausted"
|
||||
self._threads = None
|
||||
return i
|
||||
|
||||
def __nonzero__(self):
|
||||
'''
|
||||
Implement truth value testing. If __nonzero__ is not
|
||||
|
|
Loading…
Reference in a new issue