X-Git-Url: https://git.notmuchmail.org/git?a=blobdiff_plain;f=devel%2Fnmbug%2Fnmbug-status;h=94be6717c5f6fbbf012309f50b5a12771b8154ad;hb=88171f34ed140e0701c2101e978d993673b423d2;hp=e845c2a5c8f702cc5d988fa6ea16ba3b0e53e828;hpb=244f8739543dd2f6cde1188074fc4b32272e8446;p=notmuch diff --git a/devel/nmbug/nmbug-status b/devel/nmbug/nmbug-status index e845c2a5..94be6717 100755 --- a/devel/nmbug/nmbug-status +++ b/devel/nmbug/nmbug-status @@ -19,11 +19,11 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see http://www.gnu.org/licenses/ . -"""Generate HTML for one or more notmuch searches. +"""Generate text and/or HTML for one or more notmuch searches. Messages matching each search are grouped by thread. Each message that contains both a subject and message-id will have the displayed -subject link to the Gmane view of the message. +subject link to an archive view of the message (defaulting to Gmane). """ from __future__ import print_function @@ -109,9 +109,9 @@ def read_config(path=None, encoding=None): status = p.wait() if status != 0: raise ConfigError( - ("Missing status-config.json in branch '{branch}' of" - '{nmbgit}. Add the file or explicitly set --config.' - ).format(branch=branch, nmbgit=nmbhome)) + ("Missing {filename} in branch '{branch}' of {nmbgit}. " + 'Add the file or explicitly set --config.' + ).format(filename=filename, branch=branch, nmbgit=nmbhome)) config_json = config_bytes.decode(encoding) try: @@ -156,11 +156,21 @@ class Page (object): stream.write(self.footer) def _write_view(self, database, view, stream): + # sort order, default to oldest-first + sort_key = view.get('sort', 'oldest-first') + # dynamically accept all values in Query.SORT + sort_attribute = sort_key.upper().replace('-', '_') + try: + sort = getattr(notmuch.Query.SORT, sort_attribute) + except AttributeError: + raise ConfigError('Invalid sort setting for {}: {!r}'.format( + view['title'], sort_key)) if 'query-string' not in view: query = view['query'] - view['query-string'] = ' and '.join(query) + view['query-string'] = ' and '.join( + '( {} )'.format(q) for q in query) q = notmuch.Query(database, view['query-string']) - q.set_sort(notmuch.Query.SORT.OLDEST_FIRST) + q.set_sort(sort) threads = self._get_threads(messages=q.search_messages()) self._write_view_header(view=view, stream=stream) self._write_threads(threads=threads, stream=stream) @@ -223,6 +233,10 @@ class Page (object): class HtmlPage (Page): _slug_regexp = re.compile('\W+') + def __init__(self, message_url_template, **kwargs): + self.message_url_template = message_url_template + super(HtmlPage, self).__init__(**kwargs) + def _write_header(self, views, stream): super(HtmlPage, self)._write_header(views=views, stream=stream) stream.write('