X-Git-Url: https://git.notmuchmail.org/git?a=blobdiff_plain;f=devel%2Fnmbug%2Fnmbug-status;h=c0bdd1b6e7722936cf02df7b7a1985f064c03051;hb=f10024f30dc907d4396fb7ef3cc8541c89e31715;hp=1c390e6d391de3a71c510a759d9e11e8e90be9dc;hpb=aaa7f0d92ee9c876c38da43be5c49e8d5c73a99b;p=notmuch diff --git a/devel/nmbug/nmbug-status b/devel/nmbug/nmbug-status index 1c390e6d..c0bdd1b6 100755 --- a/devel/nmbug/nmbug-status +++ b/devel/nmbug/nmbug-status @@ -1,10 +1,30 @@ #!/usr/bin/python # # Copyright (c) 2011-2012 David Bremner -# License: Same as notmuch +# # dependencies # - python 2.6 for json # - argparse; either python 2.7, or install separately +# +# 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 http://www.gnu.org/licenses/ . + +"""Generate 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. +""" from __future__ import print_function from __future__ import unicode_literals @@ -13,7 +33,6 @@ import codecs import collections import datetime import email.utils -import locale try: # Python 3 from urllib.parse import quote except ImportError: # Python 2 @@ -27,7 +46,7 @@ import subprocess import xml.sax.saxutils -_ENCODING = locale.getpreferredencoding() or sys.getdefaultencoding() +_ENCODING = 'UTF-8' _PAGES = {} @@ -42,7 +61,7 @@ if not hasattr(collections, 'OrderedDict'): # Python 2.6 or earlier super(_OrderedDict, self).__setitem__(key, value) self._keys.append(key) - def __values__(self): + def values(self): for key in self._keys: yield self[key] @@ -90,7 +109,7 @@ class Page (object): byte_stream = sys.stdout.buffer except AttributeError: # Python 2 byte_stream = sys.stdout - stream = codecs.getwriter(encoding='UTF-8')(stream=byte_stream) + stream = codecs.getwriter(encoding=_ENCODING)(stream=byte_stream) self._write_header(views=views, stream=stream) for view in views: self._write_view(database=database, view=view, stream=stream) @@ -205,19 +224,22 @@ class HtmlPage (Page): return stream.write('\n') for thread in threads: + stream.write(' \n') for message_display_data in thread: stream.write(( - '\n' - ' \n' - ' \n' - '\n' - '\n' - ' \n' - ' \n' - '\n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' ).format(**message_display_data)) + stream.write(' \n') if thread != threads[-1]: - stream.write('\n') + stream.write( + ' \n') stream.write('
{date}{message-id-term}
{from}{subject}
{date}{message-id-term}
{from}{subject}


\n') def _message_display_data(self, *args, **kwargs): @@ -240,28 +262,7 @@ class HtmlPage (Page): def _slug(self, string): return self._slug_regexp.sub('-', string) - -_PAGES['text'] = Page() -_PAGES['html'] = HtmlPage( - header=''' - - - -Notmuch Patches - - -

Notmuch Patches

-

-Generated: {date}
-For more infomation see nmbug -

-

Views

-'''.format(date=datetime.datetime.utcnow().date()), - footer='\n\n', - ) - - -parser = argparse.ArgumentParser() +parser = argparse.ArgumentParser(description=__doc__) parser.add_argument('--text', help='output plain text format', action='store_true') parser.add_argument('--config', help='load config from given file', @@ -274,6 +275,77 @@ parser.add_argument('--get-query', help='get query for view', args = parser.parse_args() config = read_config(path=args.config) +now = datetime.datetime.utcnow() +context = { + 'date': now, + 'datetime': now.strftime('%Y-%m-%d %H:%M:%SZ'), + 'title': config['meta']['title'], + 'blurb': config['meta']['blurb'], + 'encoding': _ENCODING, + 'inter_message_padding': '0.25em', + 'border_radius': '0.5em', + } + +_PAGES['text'] = Page() +_PAGES['html'] = HtmlPage( + header=''' + + + + {title} + + + +

{title}

+{blurb} +

+

Views

+'''.format(**context), + footer=''' +
+

Generated: {datetime} + + +'''.format(**context), + ) if args.list_views: for view in config['views']: