X-Git-Url: https://git.notmuchmail.org/git?a=blobdiff_plain;f=bindings%2Fpython-cffi%2Fnotmuch2%2F_message.py;h=d4b34e91e2f88ff367a73cfa5b311d11cbfa6b9a;hb=HEAD;hp=2f2320766ce9805ca88e0ea81c34c36050263a2c;hpb=6c84dee53193a78cf797b44d3febcc14488ea6b1;p=notmuch diff --git a/bindings/python-cffi/notmuch2/_message.py b/bindings/python-cffi/notmuch2/_message.py index 2f232076..79485238 100644 --- a/bindings/python-cffi/notmuch2/_message.py +++ b/bindings/python-cffi/notmuch2/_message.py @@ -26,7 +26,7 @@ class Message(base.NotmuchObject): package from Python's standard library. You could e.g. create this as such:: - notmuch_msg = db.get_message(msgid) # or from a query + notmuch_msg = db.find(msgid) # or from a query parser = email.parser.BytesParser(policy=email.policy.default) with notmuch_msg.path.open('rb) as fp: email_msg = parser.parse(fp) @@ -80,12 +80,6 @@ class Message(base.NotmuchObject): def messageid(self): """The message ID as a string. - The message ID is decoded with the ignore error handler. This - is fine as long as the message ID is well formed. If it is - not valid ASCII then this will be lossy. So if you need to be - able to write the exact same message ID back you should use - :attr:`messageidb`. - Note that notmuch will decode the message ID value and thus strip off the surrounding ``<`` and ``>`` characters. This is different from Python's :mod:`email` package behaviour which @@ -205,6 +199,20 @@ class Message(base.NotmuchObject): self._msg_p, capi.lib.NOTMUCH_MESSAGE_FLAG_EXCLUDED) return bool(ret) + @property + def matched(self): + """Indicates whether this message was matched by the query. + + When a thread is created from a search, some of the + messages may not match the original query. This property + is set to *True* for those that do match. + + :raises ObjectDestroyedError: if used after destroyed. + """ + ret = capi.lib.notmuch_message_get_flag( + self._msg_p, capi.lib.NOTMUCH_MESSAGE_FLAG_MATCH) + return bool(ret) + @property def date(self): """The message date as an integer. @@ -232,8 +240,7 @@ class Message(base.NotmuchObject): :param header: Case-insensitive header name to retrieve. :type header: str or bytes - :returns: The header value, an empty string if the header is - not present. + :returns: The header value. :rtype: str :raises LookupError: if the header is not present. @@ -335,9 +342,9 @@ class Message(base.NotmuchObject): and thus are only recommended if you know there to be only one value. - Instead the map has an additional :meth:`PropertiesMap.all` + Instead the map has an additional :meth:`PropertiesMap.getall` method which can be used to retrieve all properties of a given - key. This method also allows iterating of a a subset of the + key. This method also allows iterating of a subset of the keys starting with a given prefix. """ try: @@ -357,14 +364,14 @@ class Message(base.NotmuchObject): This method will only work if the message was created from a thread. Otherwise it will yield no results. - :returns: An iterator yielding :class:`Message` instances. + :returns: An iterator yielding :class:`OwnedMessage` instances. :rtype: MessageIter """ # The notmuch_messages_valid call accepts NULL and this will # become an empty iterator, raising StopIteration immediately. # Hence no return value checking here. msgs_p = capi.lib.notmuch_message_get_replies(self._msg_p) - return MessageIter(self, msgs_p, db=self._db) + return MessageIter(self, msgs_p, db=self._db, msg_cls=OwnedMessage) def __hash__(self): return hash(self.messageid) @@ -421,7 +428,7 @@ class PropertiesMap(base.NotmuchObject, collections.abc.MutableMapping): """A mutable mapping to manage properties. Both keys and values of properties are supposed to be UTF-8 - strings in libnotmuch. However since the uderlying API uses + strings in libnotmuch. However since the underlying API uses bytestrings you can use either str or bytes to represent keys and all returned keys and values use :class:`BinString`. @@ -479,7 +486,7 @@ class PropertiesMap(base.NotmuchObject, collections.abc.MutableMapping): return len(list(it)) def __getitem__(self, key): - """Return **the first** peroperty associated with a key.""" + """Return **the first** property associated with a key.""" if isinstance(key, str): key = key.encode('utf-8') value_pp = capi.ffi.new('char**') @@ -502,7 +509,7 @@ class PropertiesMap(base.NotmuchObject, collections.abc.MutableMapping): """Return a :class:`collections.abc.ItemsView` for this map. The ItemsView treats a ``(key, value)`` pair as unique, so - dupcliate ``(key, value)`` pairs will be merged together. + duplicate ``(key, value)`` pairs will be merged together. However duplicate keys with different values will be returned. """ items = set() @@ -517,7 +524,7 @@ class PropertiesMap(base.NotmuchObject, collections.abc.MutableMapping): return PropertiesItemsView(items) def values(self): - """Return a :class:`collecions.abc.ValuesView` for this map. + """Return a :class:`collections.abc.ValuesView` for this map. All unique property values are included in the view. """ @@ -596,7 +603,7 @@ class PropertiesMap(base.NotmuchObject, collections.abc.MutableMapping): def getall(self, prefix='', *, exact=False): """Return an iterator yielding all properties for a given key prefix. - The returned iterator yields all peroperties which start with + The returned iterator yields all properties which start with a given key prefix as ``(key, value)`` namedtuples. If called with ``exact=True`` then only properties which exactly match the prefix are returned, those a key longer than the prefix @@ -641,7 +648,6 @@ class PropertiesIter(base.NotmuchIter): def __next__(self): if not self._fn_valid(self._iter_p): - self._destroy() raise StopIteration key = capi.lib.notmuch_message_properties_key(self._iter_p) value = capi.lib.notmuch_message_properties_value(self._iter_p)