Do not re-encode / to # if / is a platform separator, and correctly handle permission errors (Fixes #831)
This commit is contained in:
		@@ -1,6 +1,7 @@
 | 
			
		||||
#!/usr/bin/env python
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
import errno
 | 
			
		||||
import gzip
 | 
			
		||||
import io
 | 
			
		||||
import json
 | 
			
		||||
@@ -334,12 +335,20 @@ def sanitize_open(filename, open_mode):
 | 
			
		||||
        stream = open(encodeFilename(filename), open_mode)
 | 
			
		||||
        return (stream, filename)
 | 
			
		||||
    except (IOError, OSError) as err:
 | 
			
		||||
        # In case of error, try to remove win32 forbidden chars
 | 
			
		||||
        filename = re.sub(u'[/<>:"\\|\\\\?\\*]', u'#', filename)
 | 
			
		||||
        if err.errno in (errno.EACCES,):
 | 
			
		||||
            raise
 | 
			
		||||
 | 
			
		||||
        # In case of error, try to remove win32 forbidden chars
 | 
			
		||||
        alt_filename = os.path.join(
 | 
			
		||||
                        re.sub(u'[/<>:"\\|\\\\?\\*]', u'#', path_part)
 | 
			
		||||
                        for path_part in os.path.split(filename)
 | 
			
		||||
                       )
 | 
			
		||||
        if alt_filename == filename:
 | 
			
		||||
            raise
 | 
			
		||||
        else:
 | 
			
		||||
            # An exception here should be caught in the caller
 | 
			
		||||
            stream = open(encodeFilename(filename), open_mode)
 | 
			
		||||
        return (stream, filename)
 | 
			
		||||
            return (stream, alt_filename)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def timeconvert(timestr):
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user