]> git.cworth.org Git - notmuch/blob - bindings/python-cffi/notmuch2/_build.py
python-cffi: use config_pairs API in ConfigIterator
[notmuch] / bindings / python-cffi / notmuch2 / _build.py
1 import cffi
2 from _notmuch_config import *
3
4 ffibuilder = cffi.FFI()
5 ffibuilder.set_source(
6     'notmuch2._capi',
7     r"""
8     #include <stdlib.h>
9     #include <time.h>
10     #include <notmuch.h>
11
12     #if LIBNOTMUCH_MAJOR_VERSION < 5
13         #error libnotmuch version not supported by notmuch2 python bindings
14     #endif
15     #if LIBNOTMUCH_MINOR_VERSION < 1
16         #ERROR libnotmuch  version < 5.1 not supported
17     #endif
18     """,
19     include_dirs=[NOTMUCH_INCLUDE_DIR],
20     library_dirs=[NOTMUCH_LIB_DIR],
21     libraries=['notmuch'],
22 )
23 ffibuilder.cdef(
24     r"""
25     void free(void *ptr);
26     typedef int... time_t;
27
28     #define LIBNOTMUCH_MAJOR_VERSION ...
29     #define LIBNOTMUCH_MINOR_VERSION ...
30     #define LIBNOTMUCH_MICRO_VERSION ...
31
32     #define NOTMUCH_TAG_MAX ...
33
34     typedef enum _notmuch_status {
35         NOTMUCH_STATUS_SUCCESS = 0,
36         NOTMUCH_STATUS_OUT_OF_MEMORY,
37         NOTMUCH_STATUS_READ_ONLY_DATABASE,
38         NOTMUCH_STATUS_XAPIAN_EXCEPTION,
39         NOTMUCH_STATUS_FILE_ERROR,
40         NOTMUCH_STATUS_FILE_NOT_EMAIL,
41         NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID,
42         NOTMUCH_STATUS_NULL_POINTER,
43         NOTMUCH_STATUS_TAG_TOO_LONG,
44         NOTMUCH_STATUS_UNBALANCED_FREEZE_THAW,
45         NOTMUCH_STATUS_UNBALANCED_ATOMIC,
46         NOTMUCH_STATUS_UNSUPPORTED_OPERATION,
47         NOTMUCH_STATUS_UPGRADE_REQUIRED,
48         NOTMUCH_STATUS_PATH_ERROR,
49         NOTMUCH_STATUS_ILLEGAL_ARGUMENT,
50         NOTMUCH_STATUS_MALFORMED_CRYPTO_PROTOCOL,
51         NOTMUCH_STATUS_FAILED_CRYPTO_CONTEXT_CREATION,
52         NOTMUCH_STATUS_UNKNOWN_CRYPTO_PROTOCOL,
53         NOTMUCH_STATUS_NO_CONFIG,
54         NOTMUCH_STATUS_NO_DATABASE,
55         NOTMUCH_STATUS_DATABASE_EXISTS,
56         NOTMUCH_STATUS_BAD_QUERY_SYNTAX,
57         NOTMUCH_STATUS_NO_MAIL_ROOT,
58         NOTMUCH_STATUS_LAST_STATUS
59     } notmuch_status_t;
60     typedef enum {
61         NOTMUCH_DATABASE_MODE_READ_ONLY = 0,
62         NOTMUCH_DATABASE_MODE_READ_WRITE
63     } notmuch_database_mode_t;
64     typedef int notmuch_bool_t;
65     typedef enum _notmuch_message_flag {
66         NOTMUCH_MESSAGE_FLAG_MATCH,
67         NOTMUCH_MESSAGE_FLAG_EXCLUDED,
68         NOTMUCH_MESSAGE_FLAG_GHOST,
69     } notmuch_message_flag_t;
70     typedef enum {
71         NOTMUCH_SORT_OLDEST_FIRST,
72         NOTMUCH_SORT_NEWEST_FIRST,
73         NOTMUCH_SORT_MESSAGE_ID,
74         NOTMUCH_SORT_UNSORTED
75     } notmuch_sort_t;
76     typedef enum {
77         NOTMUCH_EXCLUDE_FLAG,
78         NOTMUCH_EXCLUDE_TRUE,
79         NOTMUCH_EXCLUDE_FALSE,
80         NOTMUCH_EXCLUDE_ALL
81     } notmuch_exclude_t;
82     typedef enum {
83         NOTMUCH_DECRYPT_FALSE,
84         NOTMUCH_DECRYPT_TRUE,
85         NOTMUCH_DECRYPT_AUTO,
86         NOTMUCH_DECRYPT_NOSTASH,
87     } notmuch_decryption_policy_t;
88
89     // These are fully opaque types for us, we only ever use pointers.
90     typedef struct _notmuch_database notmuch_database_t;
91     typedef struct _notmuch_query notmuch_query_t;
92     typedef struct _notmuch_threads notmuch_threads_t;
93     typedef struct _notmuch_thread notmuch_thread_t;
94     typedef struct _notmuch_messages notmuch_messages_t;
95     typedef struct _notmuch_message notmuch_message_t;
96     typedef struct _notmuch_tags notmuch_tags_t;
97     typedef struct _notmuch_string_map_iterator notmuch_message_properties_t;
98     typedef struct _notmuch_directory notmuch_directory_t;
99     typedef struct _notmuch_filenames notmuch_filenames_t;
100     typedef struct _notmuch_config_pairs notmuch_config_pairs_t;
101     typedef struct _notmuch_indexopts notmuch_indexopts_t;
102
103     const char *
104     notmuch_status_to_string (notmuch_status_t status);
105
106     notmuch_status_t
107     notmuch_database_create_with_config (const char *database_path,
108                                          const char *config_path,
109                                          const char *profile,
110                                          notmuch_database_t **database,
111                                          char **error_message);
112     notmuch_status_t
113     notmuch_database_open_with_config (const char *database_path,
114                                        notmuch_database_mode_t mode,
115                                        const char *config_path,
116                                        const char *profile,
117                                        notmuch_database_t **database,
118                                        char **error_message);
119     notmuch_status_t
120     notmuch_database_close (notmuch_database_t *database);
121     notmuch_status_t
122     notmuch_database_destroy (notmuch_database_t *database);
123     const char *
124     notmuch_database_get_path (notmuch_database_t *database);
125     unsigned int
126     notmuch_database_get_version (notmuch_database_t *database);
127     notmuch_bool_t
128     notmuch_database_needs_upgrade (notmuch_database_t *database);
129     notmuch_status_t
130     notmuch_database_begin_atomic (notmuch_database_t *notmuch);
131     notmuch_status_t
132     notmuch_database_end_atomic (notmuch_database_t *notmuch);
133     unsigned long
134     notmuch_database_get_revision (notmuch_database_t *notmuch,
135                                    const char **uuid);
136     notmuch_status_t
137     notmuch_database_index_file (notmuch_database_t *database,
138                                  const char *filename,
139                                  notmuch_indexopts_t *indexopts,
140                                  notmuch_message_t **message);
141     notmuch_status_t
142     notmuch_database_remove_message (notmuch_database_t *database,
143                                      const char *filename);
144     notmuch_status_t
145     notmuch_database_find_message (notmuch_database_t *database,
146                                    const char *message_id,
147                                    notmuch_message_t **message);
148     notmuch_status_t
149     notmuch_database_find_message_by_filename (notmuch_database_t *notmuch,
150                                                const char *filename,
151                                                notmuch_message_t **message);
152     notmuch_tags_t *
153     notmuch_database_get_all_tags (notmuch_database_t *db);
154
155     notmuch_query_t *
156     notmuch_query_create (notmuch_database_t *database,
157                           const char *query_string);
158     const char *
159     notmuch_query_get_query_string (const notmuch_query_t *query);
160     notmuch_database_t *
161     notmuch_query_get_database (const notmuch_query_t *query);
162     void
163     notmuch_query_set_omit_excluded (notmuch_query_t *query,
164                                      notmuch_exclude_t omit_excluded);
165     void
166     notmuch_query_set_sort (notmuch_query_t *query, notmuch_sort_t sort);
167     notmuch_sort_t
168     notmuch_query_get_sort (const notmuch_query_t *query);
169     notmuch_status_t
170     notmuch_query_add_tag_exclude (notmuch_query_t *query, const char *tag);
171     notmuch_status_t
172     notmuch_query_search_threads (notmuch_query_t *query,
173                                   notmuch_threads_t **out);
174     notmuch_status_t
175     notmuch_query_search_messages (notmuch_query_t *query,
176                                    notmuch_messages_t **out);
177     notmuch_status_t
178     notmuch_query_count_messages (notmuch_query_t *query, unsigned int *count);
179     notmuch_status_t
180     notmuch_query_count_threads (notmuch_query_t *query, unsigned *count);
181     void
182     notmuch_query_destroy (notmuch_query_t *query);
183
184     notmuch_bool_t
185     notmuch_threads_valid (notmuch_threads_t *threads);
186     notmuch_thread_t *
187     notmuch_threads_get (notmuch_threads_t *threads);
188     void
189     notmuch_threads_move_to_next (notmuch_threads_t *threads);
190     void
191     notmuch_threads_destroy (notmuch_threads_t *threads);
192
193     const char *
194     notmuch_thread_get_thread_id (notmuch_thread_t *thread);
195     notmuch_messages_t *
196     notmuch_message_get_replies (notmuch_message_t *message);
197     int
198     notmuch_thread_get_total_messages (notmuch_thread_t *thread);
199     notmuch_messages_t *
200     notmuch_thread_get_toplevel_messages (notmuch_thread_t *thread);
201     notmuch_messages_t *
202     notmuch_thread_get_messages (notmuch_thread_t *thread);
203     int
204     notmuch_thread_get_matched_messages (notmuch_thread_t *thread);
205     const char *
206     notmuch_thread_get_authors (notmuch_thread_t *thread);
207     const char *
208     notmuch_thread_get_subject (notmuch_thread_t *thread);
209     time_t
210     notmuch_thread_get_oldest_date (notmuch_thread_t *thread);
211     time_t
212     notmuch_thread_get_newest_date (notmuch_thread_t *thread);
213     notmuch_tags_t *
214     notmuch_thread_get_tags (notmuch_thread_t *thread);
215     void
216     notmuch_thread_destroy (notmuch_thread_t *thread);
217
218     notmuch_bool_t
219     notmuch_messages_valid (notmuch_messages_t *messages);
220     notmuch_message_t *
221     notmuch_messages_get (notmuch_messages_t *messages);
222     void
223     notmuch_messages_move_to_next (notmuch_messages_t *messages);
224     void
225     notmuch_messages_destroy (notmuch_messages_t *messages);
226     notmuch_tags_t *
227     notmuch_messages_collect_tags (notmuch_messages_t *messages);
228
229     const char *
230     notmuch_message_get_message_id (notmuch_message_t *message);
231     const char *
232     notmuch_message_get_thread_id (notmuch_message_t *message);
233     const char *
234     notmuch_message_get_filename (notmuch_message_t *message);
235     notmuch_filenames_t *
236     notmuch_message_get_filenames (notmuch_message_t *message);
237     notmuch_bool_t
238     notmuch_message_get_flag (notmuch_message_t *message,
239                               notmuch_message_flag_t flag);
240     void
241     notmuch_message_set_flag (notmuch_message_t *message,
242                               notmuch_message_flag_t flag,
243                               notmuch_bool_t value);
244     time_t
245     notmuch_message_get_date  (notmuch_message_t *message);
246     const char *
247     notmuch_message_get_header (notmuch_message_t *message,
248                                 const char *header);
249     notmuch_tags_t *
250     notmuch_message_get_tags (notmuch_message_t *message);
251     notmuch_status_t
252     notmuch_message_add_tag (notmuch_message_t *message, const char *tag);
253     notmuch_status_t
254     notmuch_message_remove_tag (notmuch_message_t *message, const char *tag);
255     notmuch_status_t
256     notmuch_message_remove_all_tags (notmuch_message_t *message);
257     notmuch_status_t
258     notmuch_message_maildir_flags_to_tags (notmuch_message_t *message);
259     notmuch_status_t
260     notmuch_message_tags_to_maildir_flags (notmuch_message_t *message);
261     notmuch_status_t
262     notmuch_message_freeze (notmuch_message_t *message);
263     notmuch_status_t
264     notmuch_message_thaw (notmuch_message_t *message);
265     notmuch_status_t
266     notmuch_message_get_property (notmuch_message_t *message,
267                                   const char *key, const char **value);
268     notmuch_status_t
269     notmuch_message_add_property (notmuch_message_t *message,
270                                   const char *key, const char *value);
271     notmuch_status_t
272     notmuch_message_remove_property (notmuch_message_t *message,
273                                      const char *key, const char *value);
274     notmuch_status_t
275     notmuch_message_remove_all_properties (notmuch_message_t *message,
276                                            const char *key);
277     notmuch_message_properties_t *
278     notmuch_message_get_properties (notmuch_message_t *message,
279                                     const char *key, notmuch_bool_t exact);
280     notmuch_bool_t
281     notmuch_message_properties_valid (notmuch_message_properties_t
282                                           *properties);
283     void
284     notmuch_message_properties_move_to_next (notmuch_message_properties_t
285                                                  *properties);
286     const char *
287     notmuch_message_properties_key (notmuch_message_properties_t *properties);
288     const char *
289     notmuch_message_properties_value (notmuch_message_properties_t
290                                           *properties);
291     void
292     notmuch_message_properties_destroy (notmuch_message_properties_t
293                                             *properties);
294     void
295     notmuch_message_destroy (notmuch_message_t *message);
296
297     notmuch_bool_t
298     notmuch_tags_valid (notmuch_tags_t *tags);
299     const char *
300     notmuch_tags_get (notmuch_tags_t *tags);
301     void
302     notmuch_tags_move_to_next (notmuch_tags_t *tags);
303     void
304     notmuch_tags_destroy (notmuch_tags_t *tags);
305
306     notmuch_bool_t
307     notmuch_filenames_valid (notmuch_filenames_t *filenames);
308     const char *
309     notmuch_filenames_get (notmuch_filenames_t *filenames);
310     void
311     notmuch_filenames_move_to_next (notmuch_filenames_t *filenames);
312     void
313     notmuch_filenames_destroy (notmuch_filenames_t *filenames);
314     notmuch_indexopts_t *
315     notmuch_database_get_default_indexopts (notmuch_database_t *db);
316     notmuch_status_t
317     notmuch_indexopts_set_decrypt_policy (notmuch_indexopts_t *indexopts,
318                                           notmuch_decryption_policy_t decrypt_policy);
319     notmuch_decryption_policy_t
320     notmuch_indexopts_get_decrypt_policy (const notmuch_indexopts_t *indexopts);
321     void
322     notmuch_indexopts_destroy (notmuch_indexopts_t *options);
323
324     notmuch_status_t
325     notmuch_database_set_config (notmuch_database_t *db, const char *key, const char *value);
326     notmuch_status_t
327     notmuch_database_get_config (notmuch_database_t *db, const char *key, char **value);
328     notmuch_config_pairs_t *
329     notmuch_config_get_pairs (notmuch_database_t *db, const char *prefix);
330     notmuch_bool_t
331     notmuch_config_pairs_valid (notmuch_config_pairs_t *config_list);
332     const char *
333     notmuch_config_pairs_key (notmuch_config_pairs_t *config_list);
334     const char *
335     notmuch_config_pairs_value (notmuch_config_pairs_t *config_list);
336     void
337     notmuch_config_pairs_move_to_next (notmuch_config_pairs_t *config_list);
338     void
339     notmuch_config_pairs_destroy (notmuch_config_pairs_t *config_list);
340     """
341 )
342
343
344 if __name__ == '__main__':
345     ffibuilder.compile(verbose=True)