On Mon, May 20 2013, david@tethera.net wrote: > From: David Bremner <bremner@debian.org> > > I find this script pretty useful when figuring out who to blame for > MIME rendering problems. It currently isn't very widely known, so it > seems worth distributing with notmuch. > --- Good idea! +1 Tomi > > I did a small amount whitespace cleanup compared to version in dkg's git repo. > > devel/printmimestructure | 54 ++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 54 insertions(+) > create mode 100755 devel/printmimestructure > > diff --git a/devel/printmimestructure b/devel/printmimestructure > new file mode 100755 > index 0000000..b8084a9 > --- /dev/null > +++ b/devel/printmimestructure > @@ -0,0 +1,54 @@ > +#!/usr/bin/env python > +# -*- coding: utf-8 -*- > + > +# Author: Daniel Kahn Gillmor <dkg@fifthhorseman.net> > +# License: GPLv3+ > + > +# Updates: git://lair.fifthhorseman.net/~dkg/printmimestructure > + > +# This script reads a MIME message from stdin and produces a treelike > +# representation on it stdout. > + > +# Example: > +# > +# 0 dkg@alice:~$ printmimestructure < 'Maildir/cur/1269025522.M338697P12023.monkey,S=6459,W=6963:2,Sa' > +# └┬╴multipart/signed 6546 bytes > +# ├─╴text/plain inline 895 bytes > +# └─╴application/pgp-signature inline [signature.asc] 836 bytes > +# 0 dkg@alice:~$ > + > + > +# If you want to number the parts, i suggest piping the output through > +# something like "cat -n" > + > +import email > +import sys > + > +def test(z, prefix=''): > + fname = '' if z.get_filename() is None else ' [' + z.get_filename() + ']' > + cset = '' if z.get_charset() is None else ' (' + z.get_charset() + ')' > + disp = z.get_params(None, header='Content-Disposition') > + if (disp is None): > + disposition = '' > + else: > + disposition = '' > + for d in disp: > + if d[0] in [ 'attachment', 'inline' ]: > + disposition = ' ' + d[0] > + if (z.is_multipart()): > + print prefix + '┬╴' + z.get_content_type() + cset + disposition + fname, z.as_string().__len__().__str__() + ' bytes' > + if prefix.endswith('└'): > + prefix = prefix.rpartition('└')[0] + ' ' > + if prefix.endswith('├'): > + prefix = prefix.rpartition('├')[0] + '│' > + parts = z.get_payload() > + i = 0 > + while (i < parts.__len__()-1): > + test(parts[i], prefix + '├') > + i += 1 > + test(parts[i], prefix + '└') > + # FIXME: show epilogue? > + else: > + print prefix + '─╴'+ z.get_content_type() + cset + disposition + fname, z.get_payload().__len__().__str__(), 'bytes' > + > +test(email.message_from_file(sys.stdin), '└') > -- > 1.8.2.rc2 > > _______________________________________________ > notmuch mailing list > notmuch@notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch