mirror of
https://github.com/python/cpython.git
synced 2025-07-08 03:45:36 +00:00

number of tests, all because of the codecs/_multibytecodecs issue described here (it's not a Py3K issue, just something Py3K discovers): http://mail.python.org/pipermail/python-dev/2006-April/064051.html Hye-Shik Chang promised to look for a fix, so no need to fix it here. The tests that are expected to break are: test_codecencodings_cn test_codecencodings_hk test_codecencodings_jp test_codecencodings_kr test_codecencodings_tw test_codecs test_multibytecodec This merge fixes an actual test failure (test_weakref) in this branch, though, so I believe merging is the right thing to do anyway.
68 lines
1.8 KiB
Python
68 lines
1.8 KiB
Python
#!/usr/bin/env python
|
|
|
|
"""Unpack a MIME message into a directory of files."""
|
|
|
|
import os
|
|
import sys
|
|
import email
|
|
import errno
|
|
import mimetypes
|
|
|
|
from optparse import OptionParser
|
|
|
|
|
|
def main():
|
|
parser = OptionParser(usage="""\
|
|
Unpack a MIME message into a directory of files.
|
|
|
|
Usage: %prog [options] msgfile
|
|
""")
|
|
parser.add_option('-d', '--directory',
|
|
type='string', action='store',
|
|
help="""Unpack the MIME message into the named
|
|
directory, which will be created if it doesn't already
|
|
exist.""")
|
|
opts, args = parser.parse_args()
|
|
if not opts.directory:
|
|
parser.print_help()
|
|
sys.exit(1)
|
|
|
|
try:
|
|
msgfile = args[0]
|
|
except IndexError:
|
|
parser.print_help()
|
|
sys.exit(1)
|
|
|
|
try:
|
|
os.mkdir(opts.directory)
|
|
except OSError, e:
|
|
# Ignore directory exists error
|
|
if e.errno <> errno.EEXIST:
|
|
raise
|
|
|
|
fp = open(msgfile)
|
|
msg = email.message_from_file(fp)
|
|
fp.close()
|
|
|
|
counter = 1
|
|
for part in msg.walk():
|
|
# multipart/* are just containers
|
|
if part.get_content_maintype() == 'multipart':
|
|
continue
|
|
# Applications should really sanitize the given filename so that an
|
|
# email message can't be used to overwrite important files
|
|
filename = part.get_filename()
|
|
if not filename:
|
|
ext = mimetypes.guess_extension(part.get_type())
|
|
if not ext:
|
|
# Use a generic bag-of-bits extension
|
|
ext = '.bin'
|
|
filename = 'part-%03d%s' % (counter, ext)
|
|
counter += 1
|
|
fp = open(os.path.join(opts.directory, filename), 'wb')
|
|
fp.write(part.get_payload(decode=True))
|
|
fp.close()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|