unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
From: Floris Bruynooghe <flub@devork.be>
To: "Jorge P. de Morais Neto" <jorge+list@disroot.org>,
	notmuch@notmuchmail.org
Subject: Re: New Python bindings (notmuch2 module) fail to exclude tags
Date: Tue, 24 Nov 2020 23:33:33 +0100	[thread overview]
Message-ID: <87y2iqpepu.fsf@powell.devork.be> (raw)
In-Reply-To: <87h7pitm48.fsf@disroot.org>

Hi All,

On Sat 21 Nov 2020 at 18:51 -0300, Jorge P. de Morais Neto wrote:

> Hi Floris.
>
> Em [2020-11-20 sex 19:17:56+0100], Floris Bruynooghe escreveu:
>
>> Looking at the implementation I don't seem much that could have gone
>> wrong.  However I did notice the bindings fail to check the return code
>> in one call where it probably should, you could try with this patch?
>>
>> diff --git a/bindings/python-cffi/notmuch2/_database.py b/bindings/python-cffi/notmuch2/_database.py
>> index 5ab0f20a..5dbfe68e 100644
>> --- a/bindings/python-cffi/notmuch2/_database.py
>> +++ b/bindings/python-cffi/notmuch2/_database.py
>> @@ -579,7 +579,10 @@ class Database(base.NotmuchObject):
>>              for tag in exclude_tags:
>>                  if isinstance(tag, str):
>>                      tag = str.encode('utf-8')
>> -                capi.lib.notmuch_query_add_tag_exclude(query_p, tag)
>> +                ret = capi.lib.notmuch_query_add_tag_exclude(query_p, tag)
>> +                if ret not in [capi.lib.NOTMUCH_STATUS_SUCCESS,
>> +                               capi.lib.NOTMUCH_STATUS_IGNORED]:
>> +                    raise errors.NotmuchError(ret)
>>          return querymod.Query(self, query_p)
>>  
>>      def messages(self, query, *,
>>
> After applying your patch, the call to nm_db.count_messages() fails:
>     AttributeError: cffi library 'notmuch2._capi' has no function, constant or global variable named 'NOTMUCH_STATUS_IGNORED'
>
> However, I then found the bug.  The patch below fixes it.
>
> $ diff -u notmuch2-orig/_database.py notmuch2/_database.py
> --- notmuch2-orig/_database.py	2020-11-21 18:02:17.560240619 -0300
> +++ notmuch2/_database.py	2020-11-21 18:43:44.827879141 -0300
> @@ -578,7 +578,7 @@
>          if exclude_tags is not None:
>              for tag in exclude_tags:
>                  if isinstance(tag, str):
> -                    tag = str.encode('utf-8')
> +                    tag = tag.encode('utf-8')
>                  capi.lib.notmuch_query_add_tag_exclude(query_p, tag)
>          return querymod.Query(self, query_p)
>
>
> However, I think you should *also* add the error checking.  The only
> reason my patch omits error checking is that I don't know how to define
> capi.lib.NOTMUCH_STATUS_IGNORED.

Yup, that was missing from _build.py so wouldn't have been available.

Before fixing this I tried to write a test, but I don't know if this
behaves correctly:

I have a database with 3 messages organised in 2 threads and the
following tags:

msg1: all
  +- msg3: all, spam
msg2: all

I query '*', so all messages with exclude_tags=['spam'].  Querying this
with various flags gives me:

NOTMUCH_EXCLUDE_TRUE: 2 messages, what I expect
NOTMUCH_EXCLUDE_ALL: 2 messages, what I expect
NOTMUCH_EXCLUDE_FLAG: 2 messages, I expected 3
NOTMUCH_EXCLUDE_FLASE: 2 messages, I expected 3

Did I misunderstand the docs?  Are these results correct?


Cheers,
Floris

  reply	other threads:[~2020-11-24 22:33 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-20 15:54 New Python bindings (notmuch2 module) fail to exclude tags Jorge P. de Morais Neto
2020-11-20 18:02 ` David Bremner
2020-11-20 18:17 ` Floris Bruynooghe
2020-11-21 21:51   ` Jorge P. de Morais Neto
2020-11-24 22:33     ` Floris Bruynooghe [this message]
2020-11-25 11:07       ` David Bremner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://notmuchmail.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87y2iqpepu.fsf@powell.devork.be \
    --to=flub@devork.be \
    --cc=jorge+list@disroot.org \
    --cc=notmuch@notmuchmail.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).