34 lines
		
	
	
		
			866 B
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			866 B
		
	
	
	
		
			Python
		
	
	
	
import os
 | 
						|
import shutil
 | 
						|
import slugify
 | 
						|
 | 
						|
from django.core.files.storage import FileSystemStorage
 | 
						|
from storages.backends.s3boto3 import S3Boto3Storage
 | 
						|
 | 
						|
 | 
						|
def asciionly(name):
 | 
						|
    """
 | 
						|
    Convert unicode characters in name to ASCII characters.
 | 
						|
    """
 | 
						|
    return slugify.slugify(name, ok=slugify.SLUG_OK + ".", only_ascii=True)
 | 
						|
 | 
						|
 | 
						|
class ASCIIFileSystemStorage(FileSystemStorage):
 | 
						|
    def get_valid_name(self, name):
 | 
						|
        return super().get_valid_name(asciionly(name))
 | 
						|
 | 
						|
    def force_delete(self, name):
 | 
						|
        path = self.path(name)
 | 
						|
        try:
 | 
						|
            if os.path.isdir(path):
 | 
						|
                shutil.rmtree(path)
 | 
						|
            else:
 | 
						|
                return super().delete(name)
 | 
						|
        except FileNotFoundError:
 | 
						|
            pass
 | 
						|
 | 
						|
 | 
						|
class ASCIIS3Boto3Storage(S3Boto3Storage):
 | 
						|
    def get_valid_name(self, name):
 | 
						|
        return super().get_valid_name(asciionly(name))
 |