]> git.notmuchmail.org Git - notmuch/blobdiff - bindings/python/notmuch/thread.py
emacs: Add new option notmuch-search-hide-excluded
[notmuch] / bindings / python / notmuch / thread.py
index a759c90974d267d44277e789d99e1f5bc5f2f68f..9aa0e08cec90ba212fa481bfc0aac1e26c293509 100644 (file)
@@ -12,13 +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
 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>'
+Copyright 2010 Sebastian Spaeth <Sebastian@SSpaeth.de>
 """
 
 from ctypes import c_char_p, c_long, c_int
 """
 
 from ctypes import c_char_p, c_long, c_int
-from notmuch.globals import (
+from .globals import (
     nmlib,
     NotmuchThreadP,
     NotmuchMessagesP,
     nmlib,
     NotmuchThreadP,
     NotmuchMessagesP,
@@ -29,7 +29,7 @@ from .errors import (
     NotInitializedError,
 )
 from .messages import Messages
     NotInitializedError,
 )
 from .messages import Messages
-from notmuch.tag import Tags
+from .tag import Tags
 from datetime import date
 
 class Thread(object):
 from datetime import date
 
 class Thread(object):
@@ -71,7 +71,7 @@ class Thread(object):
     def __init__(self, thread_p, parent=None):
         """
         :param thread_p: A pointer to an internal notmuch_thread_t
     def __init__(self, thread_p, parent=None):
         """
         :param thread_p: A pointer to an internal notmuch_thread_t
-            Structure.  These are not publically exposed, so a user
+            Structure.  These are not publicly exposed, so a user
             will almost never instantiate a :class:`Thread` object
             herself. They are usually handed back as a result,
             e.g. when iterating through :class:`Threads`. *thread_p*
             will almost never instantiate a :class:`Thread` object
             herself. They are usually handed back as a result,
             e.g. when iterating through :class:`Threads`. *thread_p*
@@ -128,11 +128,6 @@ class Thread(object):
            in the thread. It will only iterate over the messages in the thread
            which are not replies to other messages in the thread.
 
            in the thread. It will only iterate over the messages in the thread
            which are not replies to other messages in the thread.
 
-           To iterate over all messages in the thread, the caller will need to
-           iterate over the result of :meth:`Message.get_replies` for each
-           top-level message (and do that recursively for the resulting
-           messages, etc.).
-
         :returns: :class:`Messages`
         :raises: :exc:`NotInitializedError` if query is not initialized
         :raises: :exc:`NullPointerError` if search_messages failed
         :returns: :class:`Messages`
         :raises: :exc:`NotInitializedError` if query is not initialized
         :raises: :exc:`NullPointerError` if search_messages failed
@@ -147,6 +142,28 @@ class Thread(object):
 
         return Messages(msgs_p, self)
 
 
         return Messages(msgs_p, self)
 
+    """notmuch_thread_get_messages"""
+    _get_messages = nmlib.notmuch_thread_get_messages
+    _get_messages.argtypes = [NotmuchThreadP]
+    _get_messages.restype = NotmuchMessagesP
+
+    def get_messages(self):
+        """Returns a :class:`Messages` iterator for all messages in 'thread'
+
+        :returns: :class:`Messages`
+        :raises: :exc:`NotInitializedError` if query is not initialized
+        :raises: :exc:`NullPointerError` if get_messages failed
+        """
+        if not self._thread:
+            raise NotInitializedError()
+
+        msgs_p = Thread._get_messages(self._thread)
+
+        if not msgs_p:
+            raise NullPointerError()
+
+        return Messages(msgs_p, self)
+
     _get_matched_messages = nmlib.notmuch_thread_get_matched_messages
     _get_matched_messages.argtypes = [NotmuchThreadP]
     _get_matched_messages.restype = c_int
     _get_matched_messages = nmlib.notmuch_thread_get_matched_messages
     _get_matched_messages.argtypes = [NotmuchThreadP]
     _get_matched_messages.restype = c_int
@@ -228,7 +245,7 @@ class Thread(object):
 
         The :class:`Tags` object is owned by the thread and as such, will only
         be valid for as long as this :class:`Thread` is valid (e.g. until the
 
         The :class:`Tags` object is owned by the thread and as such, will only
         be valid for as long as this :class:`Thread` is valid (e.g. until the
-        query from which it derived is explicitely deleted).
+        query from which it derived is explicitly deleted).
 
         :returns: A :class:`Tags` iterator.
         :raises: :exc:`NotInitializedError` if query is not initialized
 
         :returns: A :class:`Tags` iterator.
         :raises: :exc:`NotInitializedError` if query is not initialized
@@ -238,7 +255,7 @@ class Thread(object):
             raise NotInitializedError()
 
         tags_p = Thread._get_tags(self._thread)
             raise NotInitializedError()
 
         tags_p = Thread._get_tags(self._thread)
-        if tags_p == None:
+        if not tags_p:
             raise NullPointerError()
         return Tags(tags_p, self)
 
             raise NullPointerError()
         return Tags(tags_p, self)
 
@@ -260,5 +277,5 @@ class Thread(object):
 
     def __del__(self):
         """Close and free the notmuch Thread"""
 
     def __del__(self):
         """Close and free the notmuch Thread"""
-        if self._thread is not None:
+        if self._thread:
             self._destroy(self._thread)
             self._destroy(self._thread)