aboutsummaryrefslogtreecommitdiff
path: root/bindings
diff options
context:
space:
mode:
authorDavid Bremner <david@tethera.net>2023-09-18 06:16:47 -0300
committerDavid Bremner <david@tethera.net>2023-09-18 06:16:47 -0300
commit1129cf890ef812321ac8296a4ca964a796df0b87 (patch)
treeffe0b3a98a7210c292d94d3ae6c9ebbed70fd4a5 /bindings
parent12aa05f07cb8aae736895c46fb25e0106daf207c (diff)
parentd4e0aaa76bd9e7a9e36abf47dc9ad3ea8bc10334 (diff)
Merge remote-tracking branch 'origin/master' into nmwebnmweb
Diffstat (limited to 'bindings')
-rw-r--r--bindings/Makefile.local4
-rw-r--r--bindings/python/notmuch/compat.py5
-rw-r--r--bindings/python/notmuch/version.py2
-rw-r--r--bindings/ruby/database.c62
-rw-r--r--bindings/ruby/defs.h17
-rw-r--r--bindings/ruby/directory.c4
-rw-r--r--bindings/ruby/filenames.c50
-rw-r--r--bindings/ruby/init.c32
-rw-r--r--bindings/ruby/message.c4
-rw-r--r--bindings/ruby/messages.c2
-rw-r--r--bindings/ruby/query.c2
-rw-r--r--bindings/ruby/tags.c53
-rw-r--r--bindings/ruby/thread.c2
13 files changed, 66 insertions, 173 deletions
diff --git a/bindings/Makefile.local b/bindings/Makefile.local
index 7b10af08..9875123a 100644
--- a/bindings/Makefile.local
+++ b/bindings/Makefile.local
@@ -34,3 +34,7 @@ CLEAN += $(patsubst %,$(dir)/ruby/%, \
CLEAN += bindings/ruby/.vendorarchdir.time $(dir)/ruby.stamp
CLEAN += bindings/python-cffi/build $(dir)/python-cffi.stamp
+CLEAN += bindings/python-cffi/__pycache__
+
+DISTCLEAN += bindings/python-cffi/_notmuch_config.py \
+ bindings/python-cffi/notmuch2.egg-info
diff --git a/bindings/python/notmuch/compat.py b/bindings/python/notmuch/compat.py
index c931329e..4a94e05c 100644
--- a/bindings/python/notmuch/compat.py
+++ b/bindings/python/notmuch/compat.py
@@ -47,7 +47,10 @@ if sys.version_info[0] == 2:
return value
else:
- from configparser import SafeConfigParser
+ from configparser import ConfigParser as SafeConfigParser
+
+ if not hasattr(SafeConfigParser, 'readfp'): # py >= 3.12
+ SafeConfigParser.readfp = SafeConfigParser.read_file
class Python3StringMixIn(object):
def __str__(self):
diff --git a/bindings/python/notmuch/version.py b/bindings/python/notmuch/version.py
index 943f335c..c847a1a3 100644
--- a/bindings/python/notmuch/version.py
+++ b/bindings/python/notmuch/version.py
@@ -1,3 +1,3 @@
# this file should be kept in sync with ../../../version
-__VERSION__ = '0.37'
+__VERSION__ = '0.38'
SOVERSION = '5'
diff --git a/bindings/ruby/database.c b/bindings/ruby/database.c
index 9c3dbd96..ed224ef7 100644
--- a/bindings/ruby/database.c
+++ b/bindings/ruby/database.c
@@ -58,40 +58,56 @@ notmuch_rb_database_initialize (int argc, VALUE *argv, VALUE self)
notmuch_database_t *database;
notmuch_status_t ret;
+ path = NULL;
+ create = 0;
+ mode = NOTMUCH_DATABASE_MODE_READ_ONLY;
+
/* Check arguments */
- rb_scan_args (argc, argv, "11", &pathv, &hashv);
+ rb_scan_args (argc, argv, "02", &pathv, &hashv);
- SafeStringValue (pathv);
- path = RSTRING_PTR (pathv);
+ if (!NIL_P (pathv)) {
+ SafeStringValue (pathv);
+ path = RSTRING_PTR (pathv);
+ }
if (!NIL_P (hashv)) {
- Check_Type (hashv, T_HASH);
- create = RTEST (rb_hash_aref (hashv, ID2SYM (ID_db_create)));
- modev = rb_hash_aref (hashv, ID2SYM (ID_db_mode));
- if (NIL_P (modev))
- mode = NOTMUCH_DATABASE_MODE_READ_ONLY;
- else if (!FIXNUM_P (modev))
- rb_raise (rb_eTypeError, ":mode isn't a Fixnum");
- else {
- mode = FIX2INT (modev);
- switch (mode) {
- case NOTMUCH_DATABASE_MODE_READ_ONLY:
- case NOTMUCH_DATABASE_MODE_READ_WRITE:
- break;
- default:
- rb_raise ( rb_eTypeError, "Invalid mode");
+ VALUE rmode, rcreate;
+ VALUE kwargs[2];
+ static ID keyword_ids[2];
+
+ if (!keyword_ids[0]) {
+ keyword_ids[0] = rb_intern_const ("mode");
+ keyword_ids[1] = rb_intern_const ("create");
+ }
+
+ rb_get_kwargs (hashv, keyword_ids, 0, 2, kwargs);
+
+ rmode = kwargs[0];
+ rcreate = kwargs[1];
+
+ if (rmode != Qundef) {
+ if (!FIXNUM_P (rmode))
+ rb_raise (rb_eTypeError, ":mode isn't a Fixnum");
+ else {
+ mode = FIX2INT (rmode);
+ switch (mode) {
+ case NOTMUCH_DATABASE_MODE_READ_ONLY:
+ case NOTMUCH_DATABASE_MODE_READ_WRITE:
+ break;
+ default:
+ rb_raise ( rb_eTypeError, "Invalid mode");
+ }
}
}
- } else {
- create = 0;
- mode = NOTMUCH_DATABASE_MODE_READ_ONLY;
+ if (rcreate != Qundef)
+ create = RTEST (rcreate);
}
rb_check_typeddata (self, &notmuch_rb_database_type);
if (create)
ret = notmuch_database_create (path, &database);
else
- ret = notmuch_database_open (path, mode, &database);
+ ret = notmuch_database_open_with_config (path, mode, NULL, NULL, &database, NULL);
notmuch_rb_status_raise (ret);
DATA_PTR (self) = notmuch_rb_object_create (database, "notmuch_rb_database");
@@ -408,7 +424,7 @@ notmuch_rb_database_get_all_tags (VALUE self)
rb_raise (notmuch_rb_eBaseError, "%s", msg);
}
- return Data_Wrap_Notmuch_Object (notmuch_rb_cTags, &notmuch_rb_tags_type, tags);
+ return notmuch_rb_tags_get (tags);
}
/*
diff --git a/bindings/ruby/defs.h b/bindings/ruby/defs.h
index e2541e8f..a2cb38c8 100644
--- a/bindings/ruby/defs.h
+++ b/bindings/ruby/defs.h
@@ -33,7 +33,6 @@ extern VALUE notmuch_rb_cThreads;
extern VALUE notmuch_rb_cThread;
extern VALUE notmuch_rb_cMessages;
extern VALUE notmuch_rb_cMessage;
-extern VALUE notmuch_rb_cTags;
extern VALUE notmuch_rb_eBaseError;
extern VALUE notmuch_rb_eDatabaseError;
@@ -48,8 +47,6 @@ extern VALUE notmuch_rb_eUnbalancedFreezeThawError;
extern VALUE notmuch_rb_eUnbalancedAtomicError;
extern ID ID_call;
-extern ID ID_db_create;
-extern ID ID_db_mode;
/* RSTRING_PTR() is new in ruby-1.9 */
#if !defined(RSTRING_PTR)
@@ -59,7 +56,6 @@ extern ID ID_db_mode;
extern const rb_data_type_t notmuch_rb_object_type;
extern const rb_data_type_t notmuch_rb_database_type;
extern const rb_data_type_t notmuch_rb_directory_type;
-extern const rb_data_type_t notmuch_rb_filenames_type;
extern const rb_data_type_t notmuch_rb_query_type;
extern const rb_data_type_t notmuch_rb_threads_type;
extern const rb_data_type_t notmuch_rb_thread_type;
@@ -92,9 +88,6 @@ extern const rb_data_type_t notmuch_rb_tags_type;
#define Data_Get_Notmuch_Directory(obj, ptr) \
Data_Get_Notmuch_Object ((obj), &notmuch_rb_directory_type, (ptr))
-#define Data_Get_Notmuch_FileNames(obj, ptr) \
- Data_Get_Notmuch_Object ((obj), &notmuch_rb_filenames_type, (ptr))
-
#define Data_Get_Notmuch_Query(obj, ptr) \
Data_Get_Notmuch_Object ((obj), &notmuch_rb_query_type, (ptr))
@@ -226,10 +219,7 @@ notmuch_rb_directory_get_child_directories (VALUE self);
/* filenames.c */
VALUE
-notmuch_rb_filenames_destroy (VALUE self);
-
-VALUE
-notmuch_rb_filenames_each (VALUE self);
+notmuch_rb_filenames_get (notmuch_filenames_t *fnames);
/* query.c */
VALUE
@@ -370,10 +360,7 @@ notmuch_rb_message_thaw (VALUE self);
/* tags.c */
VALUE
-notmuch_rb_tags_destroy (VALUE self);
-
-VALUE
-notmuch_rb_tags_each (VALUE self);
+notmuch_rb_tags_get (notmuch_tags_t *tags);
/* init.c */
void
diff --git a/bindings/ruby/directory.c b/bindings/ruby/directory.c
index 910f0a99..f267d82f 100644
--- a/bindings/ruby/directory.c
+++ b/bindings/ruby/directory.c
@@ -87,7 +87,7 @@ notmuch_rb_directory_get_child_files (VALUE self)
fnames = notmuch_directory_get_child_files (dir);
- return Data_Wrap_Notmuch_Object (notmuch_rb_cFileNames, &notmuch_rb_filenames_type, fnames);
+ return notmuch_rb_filenames_get (fnames);
}
/*
@@ -106,5 +106,5 @@ notmuch_rb_directory_get_child_directories (VALUE self)
fnames = notmuch_directory_get_child_directories (dir);
- return Data_Wrap_Notmuch_Object (notmuch_rb_cFileNames, &notmuch_rb_filenames_type, fnames);
+ return notmuch_rb_filenames_get (fnames);
}
diff --git a/bindings/ruby/filenames.c b/bindings/ruby/filenames.c
index 0dec1952..60c3fb8b 100644
--- a/bindings/ruby/filenames.c
+++ b/bindings/ruby/filenames.c
@@ -1,53 +1,11 @@
-/* The Ruby interface to the notmuch mail library
- *
- * Copyright © 2010 Ali Polatel
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or 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
- * along with this program. If not, see https://www.gnu.org/licenses/ .
- *
- * Author: Ali Polatel <alip@exherbo.org>
- */
-
#include "defs.h"
-/*
- * call-seq: FILENAMES.destroy! => nil
- *
- * Destroys the filenames, freeing all resources allocated for it.
- */
-VALUE
-notmuch_rb_filenames_destroy (VALUE self)
-{
- notmuch_rb_object_destroy (self, &notmuch_rb_filenames_type);
-
- return Qnil;
-}
-
-/*
- * call-seq: FILENAMES.each {|item| block } => FILENAMES
- *
- * Calls +block+ once for each element in +self+, passing that element as a
- * parameter.
- */
VALUE
-notmuch_rb_filenames_each (VALUE self)
+notmuch_rb_filenames_get (notmuch_filenames_t *fnames)
{
- notmuch_filenames_t *fnames;
-
- Data_Get_Notmuch_FileNames (self, fnames);
+ VALUE rb_array = rb_ary_new ();
for (; notmuch_filenames_valid (fnames); notmuch_filenames_move_to_next (fnames))
- rb_yield (rb_str_new2 (notmuch_filenames_get (fnames)));
-
- return self;
+ rb_ary_push (rb_array, rb_str_new2 (notmuch_filenames_get (fnames)));
+ return rb_array;
}
diff --git a/bindings/ruby/init.c b/bindings/ruby/init.c
index cd9f04cd..2d1994af 100644
--- a/bindings/ruby/init.c
+++ b/bindings/ruby/init.c
@@ -22,13 +22,11 @@
VALUE notmuch_rb_cDatabase;
VALUE notmuch_rb_cDirectory;
-VALUE notmuch_rb_cFileNames;
VALUE notmuch_rb_cQuery;
VALUE notmuch_rb_cThreads;
VALUE notmuch_rb_cThread;
VALUE notmuch_rb_cMessages;
VALUE notmuch_rb_cMessage;
-VALUE notmuch_rb_cTags;
VALUE notmuch_rb_eBaseError;
VALUE notmuch_rb_eDatabaseError;
@@ -43,8 +41,6 @@ VALUE notmuch_rb_eUnbalancedFreezeThawError;
VALUE notmuch_rb_eUnbalancedAtomicError;
ID ID_call;
-ID ID_db_create;
-ID ID_db_mode;
const rb_data_type_t notmuch_rb_object_type = {
.wrap_struct_name = "notmuch_object",
@@ -65,13 +61,11 @@ const rb_data_type_t notmuch_rb_object_type = {
define_type (database);
define_type (directory);
-define_type (filenames);
define_type (query);
define_type (threads);
define_type (thread);
define_type (messages);
define_type (message);
-define_type (tags);
/*
* Document-module: Notmuch
@@ -86,13 +80,11 @@ define_type (tags);
* the user:
*
* - Notmuch::Database
- * - Notmuch::FileNames
* - Notmuch::Query
* - Notmuch::Threads
* - Notmuch::Messages
* - Notmuch::Thread
* - Notmuch::Message
- * - Notmuch::Tags
*/
void
@@ -101,8 +93,6 @@ Init_notmuch (void)
VALUE mod;
ID_call = rb_intern ("call");
- ID_db_create = rb_intern ("create");
- ID_db_mode = rb_intern ("mode");
mod = rb_define_module ("Notmuch");
@@ -298,17 +288,6 @@ Init_notmuch (void)
rb_define_method (notmuch_rb_cDirectory, "child_directories", notmuch_rb_directory_get_child_directories, 0); /* in directory.c */
/*
- * Document-class: Notmuch::FileNames
- *
- * Notmuch file names
- */
- notmuch_rb_cFileNames = rb_define_class_under (mod, "FileNames", rb_cObject);
- rb_undef_method (notmuch_rb_cFileNames, "initialize");
- rb_define_method (notmuch_rb_cFileNames, "destroy!", notmuch_rb_filenames_destroy, 0); /* in filenames.c */
- rb_define_method (notmuch_rb_cFileNames, "each", notmuch_rb_filenames_each, 0); /* in filenames.c */
- rb_include_module (notmuch_rb_cFileNames, rb_mEnumerable);
-
- /*
* Document-class: Notmuch::Query
*
* Notmuch query
@@ -395,15 +374,4 @@ Init_notmuch (void)
rb_define_method (notmuch_rb_cMessage, "tags_to_maildir_flags", notmuch_rb_message_tags_to_maildir_flags, 0); /* in message.c */
rb_define_method (notmuch_rb_cMessage, "freeze", notmuch_rb_message_freeze, 0); /* in message.c */
rb_define_method (notmuch_rb_cMessage, "thaw", notmuch_rb_message_thaw, 0); /* in message.c */
-
- /*
- * Document-class: Notmuch::Tags
- *
- * Notmuch tags
- */
- notmuch_rb_cTags = rb_define_class_under (mod, "Tags", rb_cObject);
- rb_undef_method (notmuch_rb_cTags, "initialize");
- rb_define_method (notmuch_rb_cTags, "destroy!", notmuch_rb_tags_destroy, 0); /* in tags.c */
- rb_define_method (notmuch_rb_cTags, "each", notmuch_rb_tags_each, 0); /* in tags.c */
- rb_include_module (notmuch_rb_cTags, rb_mEnumerable);
}
diff --git a/bindings/ruby/message.c b/bindings/ruby/message.c
index f45c95cc..13c182f6 100644
--- a/bindings/ruby/message.c
+++ b/bindings/ruby/message.c
@@ -120,7 +120,7 @@ notmuch_rb_message_get_filenames (VALUE self)
fnames = notmuch_message_get_filenames (message);
- return Data_Wrap_Notmuch_Object (notmuch_rb_cFileNames, &notmuch_rb_filenames_type, fnames);
+ return notmuch_rb_filenames_get (fnames);
}
/*
@@ -221,7 +221,7 @@ notmuch_rb_message_get_tags (VALUE self)
if (!tags)
rb_raise (notmuch_rb_eMemoryError, "Out of memory");
- return Data_Wrap_Notmuch_Object (notmuch_rb_cTags, &notmuch_rb_tags_type, tags);
+ return notmuch_rb_tags_get (tags);
}
/*
diff --git a/bindings/ruby/messages.c b/bindings/ruby/messages.c
index ca5b10d0..6369d052 100644
--- a/bindings/ruby/messages.c
+++ b/bindings/ruby/messages.c
@@ -71,5 +71,5 @@ notmuch_rb_messages_collect_tags (VALUE self)
if (!tags)
rb_raise (notmuch_rb_eMemoryError, "Out of memory");
- return Data_Wrap_Notmuch_Object (notmuch_rb_cTags, &notmuch_rb_tags_type, tags);
+ return notmuch_rb_tags_get (tags);
}
diff --git a/bindings/ruby/query.c b/bindings/ruby/query.c
index 8a2b4d3d..077def02 100644
--- a/bindings/ruby/query.c
+++ b/bindings/ruby/query.c
@@ -45,7 +45,7 @@ notmuch_rb_query_get_sort (VALUE self)
Data_Get_Notmuch_Query (self, query);
- return FIX2INT (notmuch_query_get_sort (query));
+ return INT2FIX (notmuch_query_get_sort (query));
}
/*
diff --git a/bindings/ruby/tags.c b/bindings/ruby/tags.c
index 2af85e36..b64874d1 100644
--- a/bindings/ruby/tags.c
+++ b/bindings/ruby/tags.c
@@ -1,56 +1,13 @@
-/* The Ruby interface to the notmuch mail library
- *
- * Copyright © 2010, 2011 Ali Polatel
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or 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
- * along with this program. If not, see https://www.gnu.org/licenses/ .
- *
- * Author: Ali Polatel <alip@exherbo.org>
- */
-
#include "defs.h"
-/*
- * call-seq: TAGS.destroy! => nil
- *
- * Destroys the tags, freeing all resources allocated for it.
- */
-VALUE
-notmuch_rb_tags_destroy (VALUE self)
-{
- notmuch_rb_object_destroy (self, &notmuch_rb_tags_type);
-
- return Qnil;
-}
-
-/*
- * call-seq: TAGS.each {|item| block } => TAGS
- *
- * Calls +block+ once for each element in +self+, passing that element as a
- * parameter.
- */
VALUE
-notmuch_rb_tags_each (VALUE self)
+notmuch_rb_tags_get (notmuch_tags_t *tags)
{
- const char *tag;
- notmuch_tags_t *tags;
-
- Data_Get_Notmuch_Tags (self, tags);
+ VALUE rb_array = rb_ary_new ();
for (; notmuch_tags_valid (tags); notmuch_tags_move_to_next (tags)) {
- tag = notmuch_tags_get (tags);
- rb_yield (rb_str_new2 (tag));
+ const char *tag = notmuch_tags_get (tags);
+ rb_ary_push (rb_array, rb_str_new2 (tag));
}
-
- return self;
+ return rb_array;
}
diff --git a/bindings/ruby/thread.c b/bindings/ruby/thread.c
index 7cb2a3dc..b20ed893 100644
--- a/bindings/ruby/thread.c
+++ b/bindings/ruby/thread.c
@@ -204,5 +204,5 @@ notmuch_rb_thread_get_tags (VALUE self)
if (!tags)
rb_raise (notmuch_rb_eMemoryError, "Out of memory");
- return Data_Wrap_Notmuch_Object (notmuch_rb_cTags, &notmuch_rb_tags_type, tags);
+ return notmuch_rb_tags_get (tags);
}