X-Git-Url: https://git.notmuchmail.org/git?a=blobdiff_plain;f=devel%2Fnmbug%2Fnmbug-status;h=03621bd534491b185db4dbbc63e4ad38b52b6d14;hb=55354534953fd631ae1f51cf0f46732f00fde9c2;hp=9fde20ec786cb549c13cc349fa889e5453d31a9a;hpb=711d04c8214f487e57c4bbc26b4433c5e6f099ce;p=notmuch diff --git a/devel/nmbug/nmbug-status b/devel/nmbug/nmbug-status index 9fde20ec..03621bd5 100755 --- a/devel/nmbug/nmbug-status +++ b/devel/nmbug/nmbug-status @@ -13,7 +13,6 @@ import codecs import collections import datetime import email.utils -import locale try: # Python 3 from urllib.parse import quote except ImportError: # Python 2 @@ -24,9 +23,10 @@ import os import re import sys import subprocess +import xml.sax.saxutils -_ENCODING = locale.getpreferredencoding() or sys.getdefaultencoding() +_ENCODING = 'UTF-8' _PAGES = {} @@ -41,7 +41,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] @@ -89,7 +89,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) @@ -183,14 +183,18 @@ class HtmlPage (Page): def _write_view_header(self, view, stream): stream.write('

{title}

\n'.format(**view)) + stream.write('

\n') if 'comment' in view: stream.write(view['comment']) stream.write('\n') for line in [ 'The view is generated from the following query:', - '

', + '

', + '

', + ' ', view['query-string'], - '

', + ' ', + '

', ]: stream.write(line) stream.write('\n') @@ -200,19 +204,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): @@ -222,35 +229,19 @@ class HtmlPage (Page): if 'subject' in display_data and 'message-id' in display_data: d = { 'message-id': quote(display_data['message-id']), - 'subject': display_data['subject'], + 'subject': xml.sax.saxutils.escape(display_data['subject']), } display_data['subject'] = ( '{subject}' ).format(**d) + for key in ['message-id', 'from']: + if key in display_data: + display_data[key] = xml.sax.saxutils.escape(display_data[key]) return (running_data, display_data) 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.add_argument('--text', help='output plain text format', action='store_true') @@ -265,6 +256,63 @@ args = parser.parse_args() config = read_config(path=args.config) +_PAGES['text'] = Page() +_PAGES['html'] = HtmlPage( + header=''' + + + + {title} + + + +

{title}

+

+Generated: {date}
+{blurb} +

+

Views

+'''.format(date=datetime.datetime.utcnow().date(), + title=config['meta']['title'], + blurb=config['meta']['blurb'], + encoding=_ENCODING, + inter_message_padding='0.25em', + border_radius='0.5em'), + footer='\n\n', + ) + if args.list_views: for view in config['views']: print(view['title'])