MimeDel.py: after filtering, munge text/plain's back together
I've been playing with MimeDel (Content filtering), and have come to the conclusion that two things need to happen: 1) there needs to be a way to set "only allow text" or "only allow text/plain" without enumerating each type you *don't* want, and 2) at the end of filtering, there needs to be a check to see if all the remaining parts can profitably be recombined into one part, at least for text/plain. Here's a hack at doing #2 (so that, for instance, messages with HTML alternatives end up being one big text/plain message, even with headers and footers turned on). #1 takes a new attribute and some GUI stuff, so I'll try to sell that back to Barry directly. Note: this diff is hand-hacked (as I have my partial #1 solution in there too) so you may have to hand-apply this if you want to play with it. Comments welcome. Index: MimeDel.py =================================================================== RCS file: /cvsroot/mailman/mailman/Mailman/Handlers/MimeDel.py,v retrieving revision 2.1 diff -u -r2.1 MimeDel.py --- MimeDel.py 18 Apr 2002 20:46:53 -0000 2.1 +++ MimeDel.py 16 May 2002 04:13:32 -0000 @@ -91,12 +92,16 @@ # Now perhaps convert all text/html to text/plain if mlist.convert_html_to_plaintext and mm_cfg.HTML_TO_PLAIN_TEXT_COMMAND: changedp += to_plaintext(msg) + # Now, scan through all parts, and if only text/plain left, fuse + # them all back together into one payload + collapse_textplain(msg) + if changedp: msg['X-Content-Filtered-By'] = 'Mailman/MimeDel %s' % VERSION @@ -138,6 +146,23 @@ newpayload.append(subpart) msg.set_payload(newpayload) +def collapse_textplain(msg): + if not msg.is_multipart(): + return + for subpart in msg.get_payload(): + if subpart.get_type() != 'text/plain': + return + # ok, all parts are text/plain; munge 'em together + newpayload = "" + for subpart in msg.get_payload(): + if len(newpayload): + newpayload += '\n' + newpayload += subpart.get_payload() + if newpayload[-1] != '\n': + newpayload += '\n' + msg.set_payload(newpayload) + msg.set_type("text/plain")
Thanks Dan. I've been totally stuffed with customer work so I've sadly been ignoring mm-dev traffic. Sorry folks. I do hope to do some catchup work this weekend.
BTW, if anybody's in NYC this Saturday, let me know. My band's going to be at Acme in Manhattan for a one set hit-and-run and it'd be cool if you stopped by and said hi!
Cheers, -Barry
On Wed, 15 May 2002 21:15:36 -0700 (PDT) Dan Mick <dmick@utopia.West.Sun.COM> wrote:
I've been playing with MimeDel (Content filtering), and have come to the conclusion that two things need to happen:
- there needs to be a way to set "only allow text" or "only allow text/plain" without enumerating each type you *don't* want, and ... Comments welcome.
Not-text: "[^t]|t[^e]|te[^x]|tex[^t]|text[^/]" or something like that.
-les
participants (3)
-
barry@zope.com -
Dan Mick -
Les Niles