summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2016-02-22 20:54:07 +0200
committerLars Wirzenius <liw@liw.fi>2016-02-22 20:55:10 +0200
commit48681e1ff77d1d42baf76dac0be1e52dc1d0c671 (patch)
tree4d327a1977541bf8f255438e7785ca1e02eaa232
parent1478c2bae0fac4069b94fb8c9daf6145e629e8b6 (diff)
downloaddistix-48681e1ff77d1d42baf76dac0be1e52dc1d0c671.tar.gz
Change show plugin to use TextRenderer
-rw-r--r--distixlib/message_renderer.py17
-rw-r--r--distixlib/plugins/show_plugin.py50
-rw-r--r--distixlib/templates/show.j211
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 %}