X-Git-Url: https://git.notmuchmail.org/git?a=blobdiff_plain;f=devel%2Fnmbug%2Fnmbug-status;h=f0809f193e108fb024982524a2a56ec1c3250173;hb=7f2bbe93a557c22277b46ad6048742222d80ed68;hp=018f1911988018fa278d81026f91584ff7414c56;hpb=0d563dae1d86f22b10981e99d69d0eb0b69a131d;p=notmuch diff --git a/devel/nmbug/nmbug-status b/devel/nmbug/nmbug-status index 018f1911..f0809f19 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) @@ -243,14 +262,25 @@ class HtmlPage (Page): def _slug(self, string): return self._slug_regexp.sub('-', string) +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', + metavar='PATH') +parser.add_argument('--list-views', help='list views', + action='store_true') +parser.add_argument('--get-query', help='get query for view', + metavar='VIEW') -_PAGES['text'] = Page() -_PAGES['html'] = HtmlPage( - header=''' +args = parser.parse_args() + +config = read_config(path=args.config) + +header_template = config['meta'].get('header', ''' - - Notmuch Patches + + {title} -

Notmuch Patches

-

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

{title}

+{blurb}

Views

-'''.format(date=datetime.datetime.utcnow().date(), - inter_message_padding='0.25em', - border_radius='0.5em'), - footer='\n\n', - ) +''') + +footer_template = config['meta'].get('footer', ''' +
+

Generated: {datetime} + + +''') + +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', + } - -parser = argparse.ArgumentParser() -parser.add_argument('--text', help='output plain text format', - action='store_true') -parser.add_argument('--config', help='load config from given file', - metavar='PATH') -parser.add_argument('--list-views', help='list views', - action='store_true') -parser.add_argument('--get-query', help='get query for view', - metavar='VIEW') - -args = parser.parse_args() - -config = read_config(path=args.config) +_PAGES['text'] = Page() +_PAGES['html'] = HtmlPage( + header=header_template.format(**context), + footer=footer_template.format(**context), + ) if args.list_views: for view in config['views']: