diff options
| author | Justus Winter <4winter@informatik.uni-hamburg.de> | 2016-01-08 12:27:20 +0100 |
|---|---|---|
| committer | Justus Winter <4winter@informatik.uni-hamburg.de> | 2016-01-08 13:58:33 +0100 |
| commit | 096c600b96e5d556b67ac01263a1364d0b8e9115 (patch) | |
| tree | 10a03cbc0fa6e4447d550c2ab388e81e97230446 /bindings/python | |
| parent | e2ecf2b0ebd41257eb82dc1c1ff6d0d970209356 (diff) | |
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>
Diffstat (limited to 'bindings/python')
| -rw-r--r-- | bindings/python/docs/source/filesystem.rst | 6 | ||||
| -rw-r--r-- | bindings/python/docs/source/threads.rst | 8 | ||||
| -rw-r--r-- | bindings/python/notmuch/filenames.py | 20 | ||||
| -rw-r--r-- | bindings/python/notmuch/threads.py | 29 |
4 files changed, 14 insertions, 49 deletions
diff --git a/bindings/python/docs/source/filesystem.rst b/bindings/python/docs/source/filesystem.rst index 4eb78107..a23ae41a 100644 --- a/bindings/python/docs/source/filesystem.rst +++ b/bindings/python/docs/source/filesystem.rst @@ -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 ------------------------------------------------------ diff --git a/bindings/python/docs/source/threads.rst b/bindings/python/docs/source/threads.rst index e5a8c8a9..4324ac82 100644 --- a/bindings/python/docs/source/threads.rst +++ b/bindings/python/docs/source/threads.rst @@ -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__ +.. automethod:: __str__ diff --git a/bindings/python/notmuch/filenames.py b/bindings/python/notmuch/filenames.py index 96b22c65..9e5d1a30 100644 --- a/bindings/python/notmuch/filenames.py +++ b/bindings/python/notmuch/filenames.py @@ -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 diff --git a/bindings/python/notmuch/threads.py b/bindings/python/notmuch/threads.py index f8ca34a9..a550523f 100644 --- a/bindings/python/notmuch/threads.py +++ b/bindings/python/notmuch/threads.py @@ -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 |
