From: l-m-h@web.de
To: notmuch@notmuchmail.org
Cc: Lucas Hoffmann <l-m-h@web.de>
Subject: [PATCH 1/2] python: add bindings for notmuch_database_get_config{, _list}
Date: Sun, 4 Jun 2017 19:20:52 +0200 [thread overview]
Message-ID: <7cb0da4d17891d1284b14dbdbe116c65dfaf0195.1496596853.git.l-m-h@web.de> (raw)
[-- Attachment #1: Type: text/plain, Size: 44 bytes --]
This is a multi-part message in MIME format.
[-- Attachment #2: Type: text/plain, Size: 220 bytes --]
---
bindings/python/docs/source/database.rst | 4 ++
bindings/python/notmuch/database.py | 85 ++++++++++++++++++++++++++++++++
bindings/python/notmuch/globals.py | 5 ++
3 files changed, 94 insertions(+)
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0001-python-add-bindings-for-notmuch_database_get_config-.patch --]
[-- Type: text/x-patch; name="0001-python-add-bindings-for-notmuch_database_get_config-.patch", Size: 5075 bytes --]
diff --git a/bindings/python/docs/source/database.rst b/bindings/python/docs/source/database.rst
index 5f1cdc14..376dfb02 100644
--- a/bindings/python/docs/source/database.rst
+++ b/bindings/python/docs/source/database.rst
@@ -37,6 +37,10 @@
.. automethod:: create_query
+ .. automethod:: get_config
+
+ .. automethod:: get_config_list
+
.. attribute:: Database.MODE
Defines constants that are used as the mode in which to open a database.
diff --git a/bindings/python/notmuch/database.py b/bindings/python/notmuch/database.py
index 8f918069..9d7737b2 100644
--- a/bindings/python/notmuch/database.py
+++ b/bindings/python/notmuch/database.py
@@ -25,6 +25,7 @@ from .globals import (
nmlib,
Enum,
_str,
+ NotmuchConfigListP,
NotmuchDatabaseP,
NotmuchDirectoryP,
NotmuchMessageP,
@@ -624,3 +625,87 @@ class Database(object):
raise NotmuchError(message="No DB path specified"
" and no user default found")
return config.get('database', 'path')
+
+ """notmuch_database_get_config"""
+ _get_config = nmlib.notmuch_database_get_config
+ _get_config.argtypes = [NotmuchDatabaseP, c_char_p, POINTER(c_char_p)]
+ _get_config.restype = c_uint
+
+ def get_config(self, key):
+ """Return the value of the given config key.
+
+ Note that only config values that are stored in the database are
+ searched and returned. The config file is not read.
+
+ :param key: the config key under which a value should be looked up, it
+ should probably be in the form "section.key"
+ :type key: str
+ :returns: the config value or the empty string if no value is present
+ for that key
+ :rtype: str
+ :raises: :exc:`NotmuchError` or derived exception in case of
+ failure.
+
+ """
+ self._assert_db_is_initialized()
+ return_string = c_char_p()
+ status = self._get_config(self._db, _str(key), byref(return_string))
+ if status != STATUS.SUCCESS:
+ raise NotmuchError(status)
+ return return_string.value.decode('utf-8')
+
+ """notmuch_database_get_config_list"""
+ _get_config_list = nmlib.notmuch_database_get_config_list
+ _get_config_list.argtypes = [NotmuchDatabaseP, c_char_p,
+ POINTER(NotmuchConfigListP)]
+ _get_config_list.restype = c_uint
+
+ _config_list_valid = nmlib.notmuch_config_list_valid
+ _config_list_valid.argtypes = [NotmuchConfigListP]
+ _config_list_valid.restype = bool
+
+ _config_list_key = nmlib.notmuch_config_list_key
+ _config_list_key.argtypes = [NotmuchConfigListP]
+ _config_list_key.restype = c_char_p
+
+ _config_list_value = nmlib.notmuch_config_list_value
+ _config_list_value.argtypes = [NotmuchConfigListP]
+ _config_list_value.restype = c_char_p
+
+ _config_list_move_to_next = nmlib.notmuch_config_list_move_to_next
+ _config_list_move_to_next.argtypes = [NotmuchConfigListP]
+ _config_list_move_to_next.restype = None
+
+ _config_list_destroy = nmlib.notmuch_config_list_destroy
+ _config_list_destroy.argtypes = [NotmuchConfigListP]
+ _config_list_destroy.restype = None
+
+ def get_config_list(self, prefix):
+ """Return a list of key, value pairs where the start of key matches the
+ given prefix
+
+ Note that only config values that are stored in the database are
+ searched and returned. The config file is not read.
+
+ :param prefix: a string by which the keys should be selected
+ :type prefix: str
+ :returns: all key-value pairs where `prefix` matches the beginning
+ of the key
+ :rtype: a list of pairs of str
+ :raises: :exc:`NotmuchError` or derived exception in case of
+ failure.
+
+ """
+ self._assert_db_is_initialized()
+ config_list_p = NotmuchConfigListP()
+ status = self._get_config_list(self._db, _str(prefix),
+ byref(config_list_p))
+ if status != STATUS.SUCCESS:
+ raise NotmuchError(status)
+ config_list = []
+ while self._config_list_valid(config_list_p):
+ key = self._config_list_key(config_list_p).decode('utf-8')
+ value = self._config_list_value(config_list_p).decode('utf-8')
+ config_list.append((key, value))
+ self._config_list_move_to_next(config_list_p)
+ return config_list
diff --git a/bindings/python/notmuch/globals.py b/bindings/python/notmuch/globals.py
index b1eec2cf..b33e10d3 100644
--- a/bindings/python/notmuch/globals.py
+++ b/bindings/python/notmuch/globals.py
@@ -88,3 +88,8 @@ NotmuchDirectoryP = POINTER(NotmuchDirectoryS)
class NotmuchFilenamesS(Structure):
pass
NotmuchFilenamesP = POINTER(NotmuchFilenamesS)
+
+
+class NotmuchConfigListS(Structure):
+ pass
+NotmuchConfigListP = POINTER(NotmuchConfigListS)
next reply other threads:[~2017-06-04 17:26 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-04 17:20 l-m-h [this message]
2017-06-04 17:20 ` [PATCH 2/2] python: add convenience function to get named queries l-m-h
2017-06-10 11:37 ` David Bremner
2017-06-10 11:10 ` [PATCH 1/2] python: add bindings for notmuch_database_get_config{, _list} David Bremner
2017-06-20 20:06 ` Lucas Hoffmann
2017-06-26 23:19 ` David Bremner
2017-12-07 11:40 ` [PATCH 0/6] " l-m-h
2017-12-19 11:13 ` David Bremner
2017-12-07 11:40 ` [PATCH 1/6] python: add bindings to access config l-m-h
2017-12-07 11:40 ` [PATCH 2/6] python: add default arg to get_config_list l-m-h
2017-12-07 11:40 ` [PATCH 3/6] python: turn get_config_list into a generator l-m-h
2017-12-07 11:40 ` [PATCH 4/6] test: Add tests for new python bindings l-m-h
2017-12-07 11:40 ` [PATCH 5/6] python: Rename get_config_list to get_configs l-m-h
2017-12-22 21:59 ` David Bremner
2017-12-22 22:26 ` [PATCH 0/1] " l-m-h
2017-12-22 22:26 ` [PATCH 1/1] python: Fix method name in docs l-m-h
2017-12-24 14:05 ` David Bremner
2017-12-07 11:40 ` [PATCH 6/6] test: Add test to unset config items with the python bindings l-m-h
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=7cb0da4d17891d1284b14dbdbe116c65dfaf0195.1496596853.git.l-m-h@web.de \
--to=l-m-h@web.de \
--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).