Re: [PATCH] python: add bindings for notmuch_message_get_property
On Wed 2017-11-15 23:29:54 +0100, Ruben Pollan wrote: > Message.get_property (prop) returns a string with the value of the property. Upon review, this is actually insufficient for making robust use of the session-key series :( In particular, it only returns the first value for the session key returned. There are (at least) two situations where a message may have more than one session key: * if two copies of the message are received by different channels, and each channel somehow obtains a different session key. For example: i send the message to an encrypted mailing list like schleuder that unwraps and then rewraps the encrypted message -- in this case, the version saved to sent-mail during sending has session key A, and the version received back from schleuder has session key B * if one encrypted message contains another encrypted message. then the outer message has session key A, and the inner attachment has session key B. of course there are more ways this can happen, as well as combinations of these ways :/ it mostly won't happen! so things will look like they're looking fine, but then you'll get a message (or two copies of a single message) and at some point you'll try to render one part or one version, but you'll only have the other session key available. In the session-key series, i work around this by simply trying each session key against an encrypted part until i find one that works. It would be "cleaner" (more principled) to somehow associate each session key with the part(s) of the message file(s) that it is capable of decrypting, but that's a lot of bookkeeping -- i think it's actually "cleaner" (less code, less computation in the standard case) to just take the current approach. --dkg ___ notmuch mailing list notmuch@notmuchmail.org https://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH] python: add bindings for notmuch_message_get_property
Quoting Ruben Pollan (2017-11-15 23:29:54) > Message.get_property (prop) returns a string with the value of the property. I only implemented get_property as is the only one I need to add support for session keys in alot (https://github.com/meskio/alot/tree/session-key). From the point of view of the MUAs I don't see much interest in exporting all the other functions to modify properties. But I was not sure if adding them to have the whole set of message property functions in python. -- meskio | http://meskio.net/ -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- My contact info: http://meskio.net/crypto.txt -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Nos vamos a Croatan. signature.asc Description: signature ___ notmuch mailing list notmuch@notmuchmail.org https://notmuchmail.org/mailman/listinfo/notmuch
[PATCH] python: add bindings for notmuch_message_get_property
Message.get_property (prop) returns a string with the value of the property. --- bindings/python/notmuch/message.py | 27 ++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/bindings/python/notmuch/message.py b/bindings/python/notmuch/message.py index d5b98e4f..11263736 100644 --- a/bindings/python/notmuch/message.py +++ b/bindings/python/notmuch/message.py @@ -19,7 +19,7 @@ Copyright 2010 Sebastian Spaeth""" -from ctypes import c_char_p, c_long, c_uint, c_int +from ctypes import c_char_p, c_long, c_uint, c_int, POINTER, byref from datetime import date from .globals import ( nmlib, @@ -113,6 +113,11 @@ class Message(Python3StringMixIn): _maildir_flags_to_tags.argtypes = [NotmuchMessageP] _maildir_flags_to_tags.restype = c_int +"""notmuch_message_get_property""" +_get_property = nmlib.notmuch_message_get_property +_get_property.argtypes = [NotmuchMessageP, c_char_p, POINTER(c_char_p)] +_get_property.restype = c_int + #Constants: Flags that can be set/get with set_flag FLAG = Enum(['MATCH']) @@ -433,6 +438,26 @@ class Message(Python3StringMixIn): _freeze.argtypes = [NotmuchMessageP] _freeze.restype = c_uint +def get_property(self, prop): +""" Retrieve the value for a single property key + +:param prop: The name of the property to get. +:returns: String with the property value or None if there is no such + key. In the case of multiple values for the given key, the + first one is retrieved. +:raises: :exc:`NotInitializedError` if message has not been + initialized +""" +if not self._msg: +raise NotInitializedError() + +value = c_char_p("") +status = Message._get_property(self._msg, prop, byref(value)) +if status != 0: +raise NotmuchError(status) + +return value.value + def freeze(self): """Freezes the current state of 'message' within the database -- 2.15.0 ___ notmuch mailing list notmuch@notmuchmail.org https://notmuchmail.org/mailman/listinfo/notmuch