diff options
author | Lars Wirzenius <liw@liw.fi> | 2016-02-22 20:54:07 +0200 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2016-02-22 20:55:10 +0200 |
commit | 48681e1ff77d1d42baf76dac0be1e52dc1d0c671 (patch) | |
tree | 4d327a1977541bf8f255438e7785ca1e02eaa232 | |
parent | 1478c2bae0fac4069b94fb8c9daf6145e629e8b6 (diff) | |
download | distix-48681e1ff77d1d42baf76dac0be1e52dc1d0c671.tar.gz |
Change show plugin to use TextRenderer
-rw-r--r-- | distixlib/message_renderer.py | 17 | ||||
-rw-r--r-- | distixlib/plugins/show_plugin.py | 50 | ||||
-rw-r--r-- | distixlib/templates/show.j2 | 11 |
3 files changed, 40 insertions, 38 deletions
diff --git a/distixlib/message_renderer.py b/distixlib/message_renderer.py index 6d654b0..340e40b 100644 --- a/distixlib/message_renderer.py +++ b/distixlib/message_renderer.py @@ -21,30 +21,31 @@ import email class MessageRenderer(object): - def summary(self, msg, encoding): + def summary(self, msg): sender = self._get_header(msg, 'From') date = self._get_header(msg, 'Date') body = self._plain_text_body(msg) indented_body = self._indent(body.strip()) - return 'From: {}\nDate: {}\n\n{}\n'.format(sender, date, indented_body) + return u'From: {}\nDate: {}\n\n{}'.format( + sender, date, indented_body) def _indent(self, text): - fmt = ' {}\n' - return ''.join(fmt.format(line) for line in text.splitlines()) + fmt = u' {}\n' + return u''.join(fmt.format(line) for line in text.splitlines()) def _get_header(self, msg, name): decoded = email.header.decode_header(msg[name]) combined = u' '.join( value.decode(encoding or 'us-ascii') for value, encoding in decoded) - return combined.encode('utf8') + return combined def _plain_text_body(self, msg): body = self._find_first_plain_text_part(msg) if body is None: - return '' + return u'' text = self._get_payload_as_unicode(body) - return self._strip_signature(text).encode('utf8') + return self._strip_signature(text) def _find_first_plain_text_part(self, msg): for part in msg.walk(): @@ -58,6 +59,6 @@ class MessageRenderer(object): return text.decode(charset) def _strip_signature(self, text): - sigsep = '\n-- \n' + sigsep = u'\n-- \n' parts = text.split(sigsep) return parts[0] diff --git a/distixlib/plugins/show_plugin.py b/distixlib/plugins/show_plugin.py index 4cf1772..9dc2b23 100644 --- a/distixlib/plugins/show_plugin.py +++ b/distixlib/plugins/show_plugin.py @@ -28,21 +28,6 @@ import distixlib class ShowTicketPlugin(cliapp.Plugin): - _template = u'''\ -% title = metadata.get_first_value('title') -{{ticket_id}}: {{title}} - -% for key in sorted(metadata.keys()): -% for value in sorted(metadata.get_all_values(key)): -* {{key}}: {{value}} -% end -% end - -% for msg in msgs: -{{renderer.summary(msg, encoding)}} -% end -''' - def enable(self): self.app.add_subcommand( 'show', self.show_ticket, arg_synopsis='TICKETID...') @@ -50,23 +35,17 @@ class ShowTicketPlugin(cliapp.Plugin): def show_ticket(self, args): '''Show existing tickets.''' - template = self._load_template() ticket_ids = distixlib.get_ticket_ids(self.app.settings, args) for ticket_id in ticket_ids: ticket = self._load_ticket(ticket_id) - self._show_ticket(template, ticket) - - def _load_template(self): - return bottle.SimpleTemplate(self._template) + self._show_ticket(ticket) def _load_ticket(self, ticket_id): repo = distixlib.Repository('.') ticket_store = repo.open_ticket_store(distixlib.tickets_dir_name) return ticket_store.get_ticket(ticket_id) - def _show_ticket(self, template, ticket): - ticket_id = ticket.get_ticket_id() - + def _show_ticket(self, ticket): _, encoding = locale.getdefaultlocale() if encoding is None: encoding = 'UTF8' @@ -75,11 +54,22 @@ class ShowTicketPlugin(cliapp.Plugin): for msg in ticket.get_messages(): thread.add_message(msg) - rendered = template.render( - encoding=encoding, - renderer=distixlib.MessageRenderer(), - ticket_id=ticket_id, - metadata=ticket.get_ticket_metadata(), - msgs=thread.get_messages_in_date_order()) + msg_renderer = distixlib.MessageRenderer() + + metadata = ticket.get_ticket_metadata() + + variables = { + 'ticket_id': ticket.get_ticket_id(), + 'metadata': metadata, + 'metadata_keys': sorted(metadata.keys()), + 'msgs': [ + msg_renderer.summary(msg) + for msg in thread.get_messages_in_date_order() + ], + } + + renderer = distixlib.TextRenderer() + renderer.set_output_encoding(encoding) - self.app.output.write(rendered.encode(encoding)) + text = renderer.render('show.j2', variables) + self.app.output.write(text) diff --git a/distixlib/templates/show.j2 b/distixlib/templates/show.j2 new file mode 100644 index 0000000..3ba178f --- /dev/null +++ b/distixlib/templates/show.j2 @@ -0,0 +1,11 @@ +{{ ticket_id }}: {{ metadata.get_first_value('title') }} + +{% for key in metadata_keys %} +{% for value in metadata.get_all_values(key) %} +* {{key}}: {{value}} +{% endfor %} +{% endfor %} + +{% for msg in msgs %} +{{ msg }} +{% endfor %} |