mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	 49fd7fa443
			
		
	
	
		49fd7fa443
		
	
	
	
	
		
			
			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()
 |